diff --git a/Config.in b/Config.in
index 3601ea8cc1e0588513166a502dd2c8ee95feb0be..14dacb038fecc2a6a3eeac93c0a929d0cef12264 100644
--- a/Config.in
+++ b/Config.in
@@ -1,4 +1,17 @@
menu "Recalbox"
+ menu "Audio"
+ comment "Audio specific options"
+ menu "Audio features"
+ source "$BR2_EXTERNAL_RECALBOX_PATH/package/audio/alsa-ucm-conf/Config.in"
+ endmenu
+ endmenu
+ menu "Firmware"
+ comment "Installable linux firmwares"
+ menu "Audio firmwares"
+ source "$BR2_EXTERNAL_RECALBOX_PATH/package/firmware/sound-open-firmware/Config.in"
+ source "$BR2_EXTERNAL_RECALBOX_PATH/package/firmware/valve-hardware-audio-processing/Config.in"
+ endmenu
+ endmenu
menu "Hardware"
comment "Board specific options"
menu "Rockchip"
@@ -61,6 +74,10 @@ menu "Recalbox"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/qt6tools/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/qt6wayland/Config.in"
endmenu
+ menu "Utilities"
+ comment "Utilities"
+ source "$BR2_EXTERNAL_RECALBOX_PATH/package/utilities/recalbox-fbv/Config.in"
+ endmenu
endmenu
source "$BR2_EXTERNAL_RECALBOX_PATH/package/evwait/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/guichan/Config.in"
@@ -365,7 +382,6 @@ menu "Skins"
endmenu
endmenu
menu "Utils"
- source "$BR2_EXTERNAL_RECALBOX_PATH/package/fbv-recalbox/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/hhpc/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/hyperion/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/jstest2/Config.in"
@@ -393,6 +409,7 @@ menu "Utils"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/rpi-eeprom/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/rpi-utils/Config.in"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/nodejs-quasar/Config.in.host"
+ source "$BR2_EXTERNAL_RECALBOX_PATH/package/recalbox-drm-info/Config.in"
endmenu
menu "Small TFT Screen"
source "$BR2_EXTERNAL_RECALBOX_PATH/package/rpi-fbcp/Config.in"
diff --git a/board/recalbox/fsoverlay/etc/init.d/S06splash b/board/recalbox/fsoverlay/etc/init.d/S06splash
index 5078b5be6842a5383199b96b279f977cb0587622..a7907a2fcfc59fc2a857036c1b0c93f4817946ab 100755
--- a/board/recalbox/fsoverlay/etc/init.d/S06splash
+++ b/board/recalbox/fsoverlay/etc/init.d/S06splash
@@ -125,7 +125,7 @@ runInBackground() {
# playVideoOnOneScreen
# play a video on a specific display
-# intput:
+# input:
# * filename to play
# * optins regarding output screen (--ao=alsa --vo=drm --drm-connector=1.DVI-I-1)
playVideoOnOneScreen() {
@@ -149,14 +149,16 @@ playVideo() {
local conn
local resolution
local drmmode=""
+ local rotate_option
if [[ "$machineArch" =~ x86 ]]; then
resolution="$($systemsetting -command load -key system.splash.resolution -source /boot/recalbox-backup.conf)"
if [ "$resolution" != "" ] ; then drmmode="--drm-mode=$resolution" ; fi
- # on x86 and x86_64, find connected monitors and play video on all of them
- findConnectedConnectors |while read -r conn; do
- playVideoOnOneScreen "$1" "--vo=drm $drmmode --drm-connector=$conn"
- done
+ # on x86 and x86_64, find connected monitors and play video on all of them
+ findConnectedConnectors |while read -r conn; do
+ rotate_option=$(getRotation "$conn")
+ playVideoOnOneScreen "$1" "--vo=drm $drmmode --drm-connector=$conn --video-rotate=$rotate_option"
+ done
elif [[ "$ARCH" == "rpi1" ]]; then
# on rpi1 we need to force output
playVideoOnOneScreen "$1" "--hwdec=auto -vo=rpi"
diff --git a/board/recalbox/fsoverlay/etc/init.d/S11upgrade b/board/recalbox/fsoverlay/etc/init.d/S11upgrade
index a862797dfcc018f47a3187fe2f7901e356161bee..65339a7d1a698a481741ddd92fedde246154c198 100755
--- a/board/recalbox/fsoverlay/etc/init.d/S11upgrade
+++ b/board/recalbox/fsoverlay/etc/init.d/S11upgrade
@@ -23,7 +23,11 @@ clean_boot_update() {
displayImage() {
#fbv2 -k -i "$IMAGE_PATH/offline-install-0.jpg"
- killall mpv; mpv $(getCrtMpvOptions) --image-display-duration="${2}" "${1}" &
+ killall mpv
+ findConnectedConnectors |while read -r conn; do
+ rotate_option=$(getRotation "$conn")
+ mpv $(getCrtMpvOptions) --image-display-duration="${2}" --video-rotate="${rotate_option}" "${1}" &
+ done
}
failed_clean_exit() {
diff --git a/board/recalbox/fsoverlay/etc/init.d/S12populateshare b/board/recalbox/fsoverlay/etc/init.d/S12populateshare
index d9e7330e7eca37c4734575d6ad29646c03824ad4..498851375fba8ebf47768184ca9bf93ff368c7e1 100755
--- a/board/recalbox/fsoverlay/etc/init.d/S12populateshare
+++ b/board/recalbox/fsoverlay/etc/init.d/S12populateshare
@@ -144,7 +144,14 @@ function startMpvQueue {
video=$(head -n1 /tmp/.mpvqueuevideos)
cp /tmp/.mpvqueuevideos /tmp/.mpvqueuevideos.save
tail -n+2 /tmp/.mpvqueuevideos.save > /tmp/.mpvqueuevideos
- mpv $video
+ (
+
+ findConnectedConnectors |while read -r conn; do
+ rotate_option=$(getRotation "$conn")
+ mpv --video-rotate="${rotate_option}" $video &
+ done
+ wait
+ )
fi
fi
sleep 1
diff --git a/board/recalbox/fsoverlay/recalbox/scripts/recalbox-utils.sh b/board/recalbox/fsoverlay/recalbox/scripts/recalbox-utils.sh
index 86b3958325e716d5384cc1baba59b6f0d2915782..3a6a8fbbcb4bde3af75a5da89afc2280e212f8b3 100644
--- a/board/recalbox/fsoverlay/recalbox/scripts/recalbox-utils.sh
+++ b/board/recalbox/fsoverlay/recalbox/scripts/recalbox-utils.sh
@@ -41,22 +41,9 @@ doesBoardSupportExternalShare() {
return 0
}
-# Returns path to directory containing best resolution images
-# for current screen resolution
+# Returns path to directory containing images resources
getInstallUpgradeImagePath() {
- local MODEL
- if [ "$(getArchName)" = "odroidgo2" ]; then
- MODEL=$(tr '\0' '\n'
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/board/recalbox/kernel_patches/5.10/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/5.10/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 77191cff26c8525c02c32d01dfe6c23925032076..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.10/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/5.12/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/5.12/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.12/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/5.15/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/5.15/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 77191cff26c8525c02c32d01dfe6c23925032076..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.15/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/5.15/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/5.15/usbhid-max-quirks.patch
deleted file mode 100644
index d27cd26d8b444ebe2945729fb55e0c9907e9dc15..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.15/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 26742ca14609..cb40a9aa8a94 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -335,7 +335,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT BIT(0)
- #define HID_QUIRK_NOTOUCH BIT(1)
diff --git a/board/recalbox/kernel_patches/5.17/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/5.17/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.17/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/5.4/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/5.4/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 1a7f8bd0d2fe3b9e3756a1cff407a671f987c83c..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.4/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1113,12 +1113,12 @@ static void wiimod_classic_in_ext(struct wiimote_data *wdata, const __u8 *ext)
- rt <<= 1;
- lt <<= 1;
-
-- input_report_abs(wdata->extension.input, ABS_HAT1X, lx - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT1Y, ly - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT2X, rx - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT2Y, ry - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT3X, rt);
-- input_report_abs(wdata->extension.input, ABS_HAT3Y, lt);
-+ input_report_abs(wdata->extension.input, ABS_HAT0X, lx - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT0Y, ly - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT1X, rx - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT1Y, ry - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT2X, rt);
-+ input_report_abs(wdata->extension.input, ABS_HAT2Y, lt);
-
- input_report_key(wdata->extension.input,
- wiimod_classic_map[WIIMOD_CLASSIC_KEY_RIGHT],
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/5.4/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/5.4/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.4/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/5.9/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/5.9/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 77191cff26c8525c02c32d01dfe6c23925032076..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.9/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/5.9/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/5.9/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/5.9/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/6.1/i2c-read-timeout-set-to-50ms.patch b/board/recalbox/kernel_patches/6.1/i2c-read-timeout-set-to-50ms.patch
deleted file mode 100644
index 5eea1311ca8080851fdf44c74e6ac784cbe5164c..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.1/i2c-read-timeout-set-to-50ms.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c
-index 7408e2c136b0..aa46ddfcfaa7 100644
---- a/drivers/i2c/busses/i2c-bcm2835.c
-+++ b/drivers/i2c/busses/i2c-bcm2835.c
-@@ -525,6 +525,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
- struct i2c_adapter *adap;
- struct clk *mclk;
- u32 bus_clk_rate;
-+ u32 read_timeout;
-
- i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
- if (!i2c_dev)
-@@ -594,6 +595,14 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
- adap->dev.of_node = pdev->dev.of_node;
- adap->quirks = of_device_get_match_data(&pdev->dev);
-
-+
-+ ret = of_property_read_u32(pdev->dev.of_node, "read-timeout-ms",
-+ &read_timeout);
-+ if (ret >= 0) {
-+ dev_info(&pdev->dev,
-+ "Setting i2c read timeout to %u ms\n", read_timeout);
-+ adap->timeout = msecs_to_jiffies(read_timeout);
-+ }
- /*
- * Disable the hardware clock stretching timeout. SMBUS
- * specifies a limit for how long the device can stretch the
diff --git a/board/recalbox/kernel_patches/6.1/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/6.1/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 587f2a1d0646a523905b9a94c392eba9e1fecc86..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.1/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1126,12 +1126,12 @@
- rt <<= 1;
- lt <<= 1;
-
-- input_report_abs(wdata->extension.input, ABS_HAT1X, lx);
-- input_report_abs(wdata->extension.input, ABS_HAT1Y, ly);
-- input_report_abs(wdata->extension.input, ABS_HAT2X, rx - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT2Y, ry - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT3X, rt);
-- input_report_abs(wdata->extension.input, ABS_HAT3Y, lt);
-+ input_report_abs(wdata->extension.input, ABS_HAT0X, lx);
-+ input_report_abs(wdata->extension.input, ABS_HAT0Y, ly);
-+ input_report_abs(wdata->extension.input, ABS_HAT1X, rx - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT1Y, ry - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT2X, rt);
-+ input_report_abs(wdata->extension.input, ABS_HAT2Y, lt);
-
- input_report_key(wdata->extension.input,
- wiimod_classic_map[WIIMOD_CLASSIC_KEY_LT],
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/6.1/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/6.1/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.1/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/6.12/i2c-read-timeout-set-to-50ms.patch b/board/recalbox/kernel_patches/6.12/i2c-read-timeout-set-to-50ms.patch
deleted file mode 100644
index 5eea1311ca8080851fdf44c74e6ac784cbe5164c..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.12/i2c-read-timeout-set-to-50ms.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c
-index 7408e2c136b0..aa46ddfcfaa7 100644
---- a/drivers/i2c/busses/i2c-bcm2835.c
-+++ b/drivers/i2c/busses/i2c-bcm2835.c
-@@ -525,6 +525,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
- struct i2c_adapter *adap;
- struct clk *mclk;
- u32 bus_clk_rate;
-+ u32 read_timeout;
-
- i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
- if (!i2c_dev)
-@@ -594,6 +595,14 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
- adap->dev.of_node = pdev->dev.of_node;
- adap->quirks = of_device_get_match_data(&pdev->dev);
-
-+
-+ ret = of_property_read_u32(pdev->dev.of_node, "read-timeout-ms",
-+ &read_timeout);
-+ if (ret >= 0) {
-+ dev_info(&pdev->dev,
-+ "Setting i2c read timeout to %u ms\n", read_timeout);
-+ adap->timeout = msecs_to_jiffies(read_timeout);
-+ }
- /*
- * Disable the hardware clock stretching timeout. SMBUS
- * specifies a limit for how long the device can stretch the
diff --git a/board/recalbox/kernel_patches/6.12/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/6.12/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 587f2a1d0646a523905b9a94c392eba9e1fecc86..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.12/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1126,12 +1126,12 @@
- rt <<= 1;
- lt <<= 1;
-
-- input_report_abs(wdata->extension.input, ABS_HAT1X, lx);
-- input_report_abs(wdata->extension.input, ABS_HAT1Y, ly);
-- input_report_abs(wdata->extension.input, ABS_HAT2X, rx - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT2Y, ry - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT3X, rt);
-- input_report_abs(wdata->extension.input, ABS_HAT3Y, lt);
-+ input_report_abs(wdata->extension.input, ABS_HAT0X, lx);
-+ input_report_abs(wdata->extension.input, ABS_HAT0Y, ly);
-+ input_report_abs(wdata->extension.input, ABS_HAT1X, rx - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT1Y, ry - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT2X, rt);
-+ input_report_abs(wdata->extension.input, ABS_HAT2Y, lt);
-
- input_report_key(wdata->extension.input,
- wiimod_classic_map[WIIMOD_CLASSIC_KEY_LT],
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/6.12/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/6.12/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.12/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/6.6/i2c-read-timeout-set-to-50ms.patch b/board/recalbox/kernel_patches/6.6/i2c-read-timeout-set-to-50ms.patch
deleted file mode 100644
index 5eea1311ca8080851fdf44c74e6ac784cbe5164c..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.6/i2c-read-timeout-set-to-50ms.patch
+++ /dev/null
@@ -1,27 +0,0 @@
-diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c
-index 7408e2c136b0..aa46ddfcfaa7 100644
---- a/drivers/i2c/busses/i2c-bcm2835.c
-+++ b/drivers/i2c/busses/i2c-bcm2835.c
-@@ -525,6 +525,7 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
- struct i2c_adapter *adap;
- struct clk *mclk;
- u32 bus_clk_rate;
-+ u32 read_timeout;
-
- i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*i2c_dev), GFP_KERNEL);
- if (!i2c_dev)
-@@ -594,6 +595,14 @@ static int bcm2835_i2c_probe(struct platform_device *pdev)
- adap->dev.of_node = pdev->dev.of_node;
- adap->quirks = of_device_get_match_data(&pdev->dev);
-
-+
-+ ret = of_property_read_u32(pdev->dev.of_node, "read-timeout-ms",
-+ &read_timeout);
-+ if (ret >= 0) {
-+ dev_info(&pdev->dev,
-+ "Setting i2c read timeout to %u ms\n", read_timeout);
-+ adap->timeout = msecs_to_jiffies(read_timeout);
-+ }
- /*
- * Disable the hardware clock stretching timeout. SMBUS
- * specifies a limit for how long the device can stretch the
diff --git a/board/recalbox/kernel_patches/6.6/linux-wiimote-abs-not-hat.patch b/board/recalbox/kernel_patches/6.6/linux-wiimote-abs-not-hat.patch
deleted file mode 100644
index 587f2a1d0646a523905b9a94c392eba9e1fecc86..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.6/linux-wiimote-abs-not-hat.patch
+++ /dev/null
@@ -1,53 +0,0 @@
-diff --git a/drivers/hid/hid-wiimote-modules.c b/drivers/hid/hid-wiimote-modules.c
-index 4390eee..76ed60b 100644
---- a/drivers/hid/hid-wiimote-modules.c
-+++ b/drivers/hid/hid-wiimote-modules.c
-@@ -1126,12 +1126,12 @@
- rt <<= 1;
- lt <<= 1;
-
-- input_report_abs(wdata->extension.input, ABS_HAT1X, lx);
-- input_report_abs(wdata->extension.input, ABS_HAT1Y, ly);
-- input_report_abs(wdata->extension.input, ABS_HAT2X, rx - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT2Y, ry - 0x20);
-- input_report_abs(wdata->extension.input, ABS_HAT3X, rt);
-- input_report_abs(wdata->extension.input, ABS_HAT3Y, lt);
-+ input_report_abs(wdata->extension.input, ABS_HAT0X, lx);
-+ input_report_abs(wdata->extension.input, ABS_HAT0Y, ly);
-+ input_report_abs(wdata->extension.input, ABS_HAT1X, rx - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT1Y, ry - 0x20);
-+ input_report_abs(wdata->extension.input, ABS_HAT2X, rt);
-+ input_report_abs(wdata->extension.input, ABS_HAT2Y, lt);
-
- input_report_key(wdata->extension.input,
- wiimod_classic_map[WIIMOD_CLASSIC_KEY_LT],
-@@ -1228,12 +1228,16 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- wdata->extension.input->keybit);
-
- set_bit(EV_ABS, wdata->extension.input->evbit);
-+ set_bit(ABS_HAT0X, wdata->extension.input->absbit);
-+ set_bit(ABS_HAT0Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT1X, wdata->extension.input->absbit);
- set_bit(ABS_HAT1Y, wdata->extension.input->absbit);
- set_bit(ABS_HAT2X, wdata->extension.input->absbit);
- set_bit(ABS_HAT2Y, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3X, wdata->extension.input->absbit);
-- set_bit(ABS_HAT3Y, wdata->extension.input->absbit);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0X, -30, 30, 1, 1);
-+ input_set_abs_params(wdata->extension.input,
-+ ABS_HAT0Y, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT1X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
-@@ -1242,10 +1246,6 @@ static int wiimod_classic_probe(const struct wiimod_ops *ops,
- ABS_HAT2X, -30, 30, 1, 1);
- input_set_abs_params(wdata->extension.input,
- ABS_HAT2Y, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3X, -30, 30, 1, 1);
-- input_set_abs_params(wdata->extension.input,
-- ABS_HAT3Y, -30, 30, 1, 1);
-
- ret = input_register_device(wdata->extension.input);
- if (ret)
diff --git a/board/recalbox/kernel_patches/6.6/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/6.6/usbhid-max-quirks.patch
deleted file mode 100644
index 6ea08d3ffe1a840a727fd9098977ca290121d129..0000000000000000000000000000000000000000
--- a/board/recalbox/kernel_patches/6.6/usbhid-max-quirks.patch
+++ /dev/null
@@ -1,13 +0,0 @@
-diff --git a/include/linux/hid.h b/include/linux/hid.h
-index 251a1d3..e15f38f 100644
---- a/include/linux/hid.h
-+++ b/include/linux/hid.h
-@@ -305,7 +305,7 @@ struct hid_item {
- /*
- * Increase this if you need to configure more HID quirks at module load time
- */
--#define MAX_USBHID_BOOT_QUIRKS 4
-+#define MAX_USBHID_BOOT_QUIRKS 40
-
- #define HID_QUIRK_INVERT 0x00000001
- #define HID_QUIRK_NOTOUCH 0x00000002
diff --git a/board/recalbox/kernel_patches/5.10/usbhid-max-quirks.patch b/board/recalbox/kernel_patches/usbhid-max-quirks.patch
similarity index 100%
rename from board/recalbox/kernel_patches/5.10/usbhid-max-quirks.patch
rename to board/recalbox/kernel_patches/usbhid-max-quirks.patch
diff --git a/board/recalbox/odroidgo2/fsoverlay/etc/init.d/S10odroidgoa b/board/recalbox/odroidgo2/fsoverlay/etc/init.d/S10odroidgoa
index 61e1930355ec02235098aa1ba79e7e0cc33ab083..30976e73b1d2302d2d83b593011f995b9d72a189 100755
--- a/board/recalbox/odroidgo2/fsoverlay/etc/init.d/S10odroidgoa
+++ b/board/recalbox/odroidgo2/fsoverlay/etc/init.d/S10odroidgoa
@@ -30,6 +30,12 @@ install_if_different() {
fi
}
-install_if_different "$IMAGE_PATH/logo.bmp" "/boot/logo.bmp"
-install_if_different "$IMAGE_PATH/boot.ppm" "/boot/boot.ppm"
-install_if_different "$IMAGE_PATH/logo-version.png" "/recalbox/system/resources/splash/logo-version.png"
+get_fb_mode() {
+ head -n 1 /sys/class/graphics/fb0/modes | sed -E 's/^.*:([0-9]+x[0-9]+).*$/\1/'
+}
+
+fb_mode=$(get_fb_mode)
+
+install_if_different "${IMAGE_PATH}/${fb_mode}/logo.bmp" "/boot/logo.bmp"
+install_if_different "${IMAGE_PATH}/${fb_mode}/boot.ppm" "/boot/boot.ppm"
+install_if_different "${IMAGE_PATH}/${fb_mode}/logo-version.png" "/recalbox/system/resources/splash/logo-version.png"
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-1.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-1.png
deleted file mode 100755
index 6a5a45276a7c15a5c6323d9576b9c387740b3c52..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-1.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-2.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-2.png
deleted file mode 100755
index 9a10c8c394e4d2c7e7e950530fa8a0be6782a850..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-2.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-3.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-3.png
deleted file mode 100755
index bb922985c244fac1036efacb74ca10f3113d1687..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-3.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-4.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-4.png
deleted file mode 100755
index 13fefd81c93db4f40c16a775bb03ca0c0f20bf3d..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-4.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-5.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-5.png
deleted file mode 100755
index fc1150c8ba87a8e75e900e82210c461d14775a8e..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-5.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-6.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-6.png
deleted file mode 100755
index 37a97c046c9c969106d5424494a8f1fcf87b0106..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-6.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-7.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-7.png
deleted file mode 100755
index 99df8cbf00fae73b4211de494b69fb0250221266..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-7.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-8.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-8.png
deleted file mode 100755
index f6131695880ec5124cfb526d2c4ad4f2f73657ec..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/install-8.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo-version.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo-version.png
index 631cc3d59e2d088edba26ecf499701f4bdedb3f9..67f1229a31d6ccf77f5933ce47adace6f2b8031d 100644
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo-version.png and b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo-version.png differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo.png
index 631cc3d59e2d088edba26ecf499701f4bdedb3f9..67f1229a31d6ccf77f5933ce47adace6f2b8031d 100755
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo.png and b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/logo.png differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-0.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-0.jpg
deleted file mode 100755
index ee4a22819355a62118c049f0868942420734fabf..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-0.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-1.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-1.jpg
deleted file mode 100755
index 09a5b435eb317370d3c87add1b6418b8aa631b04..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-1.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-2.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-2.jpg
deleted file mode 100755
index e7e37516815bb7ce04de517e0a453af7e5ff0239..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-2.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-3.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-3.jpg
deleted file mode 100755
index 5b02b0fbfe0285d23e4539fe6798a4f61d5cc8fc..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-3.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-4.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-4.jpg
deleted file mode 100755
index 715711ee20b404e8db27b4f48e5e852363c09b5a..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-4.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-5.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-5.jpg
deleted file mode 100755
index 44c96d1a273710cbdbe6afeb8cf79d313e96e2c5..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-5.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-6.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-6.jpg
deleted file mode 100755
index ac97ec158287b855598640f5c314dd346c6b1103..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-6.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-7.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-7.jpg
deleted file mode 100755
index 08baff2eb259df6e1a710272150a456c4bc04e29..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-7.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-error.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-error.jpg
deleted file mode 100755
index 963e38f6a5ed2fd380124570f47d3dd399ace877..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/320x480/offline-install-error.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-1.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-1.png
deleted file mode 100644
index a866940204527e35bb7ad6555c46199335fd32ec..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-1.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-2.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-2.png
deleted file mode 100644
index f30d55dc92628893c506f6bd3e99aa4461dac1b9..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-2.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-3.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-3.png
deleted file mode 100644
index 1004b486b413dd83b1c5a0ad013459ee931d973e..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-3.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-4.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-4.png
deleted file mode 100644
index c3279ca373208bf2a42c6860f77d561b30a3e594..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-4.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-5.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-5.png
deleted file mode 100644
index f83809c49427efdba68310e68dd50b06a77b9d33..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-5.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-6.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-6.png
deleted file mode 100644
index 5b9ae567592a9a7f0a25b98fce1df319dd6d689c..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-6.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-7.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-7.png
deleted file mode 100644
index 9fa0b9c2a8e322661d0bcfa37817ff5086c391ac..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-7.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-8.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-8.png
deleted file mode 100644
index 41851c4ff4653edef79d522a94e900a496d1a23a..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/install-8.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo-version.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo-version.png
index 585167aca0a55a22ad592054352a0348d4081853..0180948a6ffe44ec8a3bff663320e1ef80e530f3 100644
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo-version.png and b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo-version.png differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo.png
index 585167aca0a55a22ad592054352a0348d4081853..0180948a6ffe44ec8a3bff663320e1ef80e530f3 100755
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo.png and b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/logo.png differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-0.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-0.jpg
deleted file mode 100644
index 22a1f3c8be90424d02565977f6b9fa49db48687c..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-0.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-1.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-1.jpg
deleted file mode 100644
index b0f6b9ba144fda0a87fe75db0e31ed3f5d76662d..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-1.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-2.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-2.jpg
deleted file mode 100644
index 17faa6869258d488760d87bbd5c340414136d878..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-2.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-3.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-3.jpg
deleted file mode 100644
index aaa558497693f3128e0cec2226de7f285c36a40d..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-3.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-4.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-4.jpg
deleted file mode 100644
index 08e43e8a9b431ec8c2bcc8252711d214a67c27d1..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-4.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-5.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-5.jpg
deleted file mode 100644
index 00151a3e7258b7a6c2bcd482a8633841f45402c6..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-5.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-6.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-6.jpg
deleted file mode 100644
index 7e085ef0cbcb90bcb66f6f26665de5ef85a6d660..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-6.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-7.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-7.jpg
deleted file mode 100644
index aa91602e2a1a7c867e419903c376e0c8f2669e19..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-7.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-error.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-error.jpg
deleted file mode 100644
index 1ed0f1cb586417ee7df62df6ae20262268323a41..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/480x854/offline-install-error.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-1.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-1.png
deleted file mode 100644
index ff0eb6767194aeb5683eebf8ae26dfc22bdc610d..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-1.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-2.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-2.png
deleted file mode 100644
index bc35b0c4f6c42d0650b820c92f7300b851432b4b..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-2.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-3.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-3.png
deleted file mode 100644
index 8524a0fd621f31956d716a17596465b70a951e7d..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-3.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-4.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-4.png
deleted file mode 100644
index 9025cb3945fa95bd19f55a9990a980a62bcce714..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-4.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-5.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-5.png
deleted file mode 100644
index ace15f65e201747081a706db69a37ce73f1690ac..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-5.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-6.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-6.png
deleted file mode 100644
index 66e5223faa97e94e7feb6f8fc500b6503a43472b..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-6.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-7.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-7.png
deleted file mode 100644
index ab00e58df32a039afdb5e28f53668fbc90c3a4d4..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-7.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-8.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-8.png
deleted file mode 100644
index aea027e3af924f2cd642474a75cf65a87d54aae3..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/install-8.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-0.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-0.jpg
deleted file mode 100644
index 95bedaacd3e149d7460092dd1d93f6f304d8e52e..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-0.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-1.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-1.jpg
deleted file mode 100644
index 6cce51b36d739f57c85608da49c7c57d5618e8e7..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-1.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-2.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-2.jpg
deleted file mode 100644
index ed8bcd852cded1b174347463b602cefc09e130ce..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-2.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-3.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-3.jpg
deleted file mode 100644
index fdb61c379b1c9a5d4b12117ee6a46024d737efaa..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-3.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-4.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-4.jpg
deleted file mode 100644
index 543e99da6f82512e87e4bfdfcf9b3c6e1e1dd150..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-4.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-5.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-5.jpg
deleted file mode 100644
index 1b1f603d1cea1fb0f1a0781c1cf5f53191c2ce59..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-5.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-6.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-6.jpg
deleted file mode 100644
index 7c46b614c35e6a9752652925c4df6cc8af4bdf4b..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-6.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-7.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-7.jpg
deleted file mode 100644
index ba54f1500675646af11604509a61e1903eba009c..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-7.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-error.jpg b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-error.jpg
deleted file mode 100644
index 1156bf36216f4179ffad894d07d2a521c33aca1b..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/offline-install-error.jpg and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-1.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-1.png
deleted file mode 100644
index fe5f04a9c0af5452d0d19add3381aa3510084a17..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-1.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-2.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-2.png
deleted file mode 100644
index a585fb3999817b35a759ed82d8ef5c53a478435a..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-2.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-3.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-3.png
deleted file mode 100644
index 2631f75400114fcc053e8073599e03a6709f6414..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-3.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-4.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-4.png
deleted file mode 100644
index e02e11478ef12fee1afd2991f91546860dae00df..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-4.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-5.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-5.png
deleted file mode 100644
index d86eb914237d52684a5eaa4099c6b6bfc368f10b..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-5.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-6.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-6.png
deleted file mode 100644
index 51f6be6dec0ca3fd6d3629fd3e4ea5fc366bc4c7..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-6.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-7.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-7.png
deleted file mode 100644
index ca463a74e688ce62c27e989eacb14dc7483d3c85..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-7.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-8.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-8.png
deleted file mode 100644
index 0109a42a3e0a52472552206172bc29205f6096d0..0000000000000000000000000000000000000000
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/640x480/old/install-8.png and /dev/null differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/demo.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/demo.png
index 53e13f0a68efe7247db8b3defe3c88e3a1db0fbc..d5d0a39092c4f58aa41b44aeacccc523a5d96aba 100755
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/demo.png and b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/demo.png differ
diff --git a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/logo.png b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/logo.png
index 66a03a79a2e24f5ba89253615827c808bee48e27..67f1229a31d6ccf77f5933ce47adace6f2b8031d 100755
Binary files a/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/logo.png and b/board/recalbox/odroidgo2/fsoverlay/recalbox/system/resources/splash/logo.png differ
diff --git a/board/recalbox/patches/alsa-lib/0001-asoundrc-path-fix.patch b/board/recalbox/patches/alsa-lib/0001-asoundrc-path-fix.patch
index 8094103c87de53b54ca25366c6bc3a4273966be5..e0e9032bb2bbabb07fee48e9a259017a65fd628b 100644
--- a/board/recalbox/patches/alsa-lib/0001-asoundrc-path-fix.patch
+++ b/board/recalbox/patches/alsa-lib/0001-asoundrc-path-fix.patch
@@ -1,6 +1,17 @@
---- alsa-lib-1.2.3.2/src/conf/alsa.conf.orig 2020-10-02 09:18:01.401326281 +0200
-+++ alsa-lib-1.2.3.2/src/conf/alsa.conf 2020-10-02 09:18:28.804958824 +0200
-@@ -11,7 +11,7 @@
+From 3fd14ebca2b0de296f2073d27425a48352da75c9 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Mon, 15 Sep 2025 10:49:33 +0200
+Subject: [PATCH 1/2] asoundrc path fix
+
+---
+ src/conf/alsa.conf | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/conf/alsa.conf b/src/conf/alsa.conf
+index e65bf2ca..415335ed 100644
+--- a/src/conf/alsa.conf
++++ b/src/conf/alsa.conf
+@@ -12,7 +12,7 @@
"/usr/etc/alsa/conf.d"
"/etc/alsa/conf.d"
"/etc/asound.conf|||/usr/etc/asound.conf"
@@ -9,3 +20,6 @@
{
@func concat
strings [
+--
+2.51.0
+
diff --git a/board/recalbox/patches/alsa-lib/0002-ucm-allow-execution-of-symlinked-binaries.patch b/board/recalbox/patches/alsa-lib/0002-ucm-allow-execution-of-symlinked-binaries.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ff126e7370bd867fa4baba1d7309e2955b393067
--- /dev/null
+++ b/board/recalbox/patches/alsa-lib/0002-ucm-allow-execution-of-symlinked-binaries.patch
@@ -0,0 +1,25 @@
+From df6ee1b15c2c345892b33d857932dbfd7a23caa4 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Mon, 15 Sep 2025 10:46:25 +0200
+Subject: [PATCH 2/2] ucm: allow execution of symlinked binaries
+
+---
+ src/ucm/ucm_exec.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/ucm/ucm_exec.c b/src/ucm/ucm_exec.c
+index 276cf592..6c8a4e7c 100644
+--- a/src/ucm/ucm_exec.c
++++ b/src/ucm/ucm_exec.c
+@@ -77,7 +77,7 @@ static int find_exec(const char *name, char *out, size_t len)
+ continue;
+ snprintf(bin, sizeof(bin), "%s/%s", tmp,
+ de->d_name);
+- if (lstat64(bin, &st))
++ if (stat64(bin, &st))
+ continue;
+ if (!S_ISREG(st.st_mode)
+ || !(st.st_mode & S_IEXEC))
+--
+2.51.0
+
diff --git a/board/recalbox/kernel_patches/5.15/i2c-read-timeout-set-to-50ms.patch b/board/recalbox/rpi/kernel_patches/i2c-read-timeout-set-to-50ms.patch
similarity index 100%
rename from board/recalbox/kernel_patches/5.15/i2c-read-timeout-set-to-50ms.patch
rename to board/recalbox/rpi/kernel_patches/i2c-read-timeout-set-to-50ms.patch
diff --git a/board/recalbox/kernel_patches/5.12/linux-wiimote-abs-not-hat.patch b/board/recalbox/rpi/kernel_patches/linux-wiimote-abs-not-hat.patch
similarity index 100%
rename from board/recalbox/kernel_patches/5.12/linux-wiimote-abs-not-hat.patch
rename to board/recalbox/rpi/kernel_patches/linux-wiimote-abs-not-hat.patch
diff --git a/board/recalbox/x86/fsoverlay/etc/X11/xinit/xinitrc b/board/recalbox/x86/fsoverlay/etc/X11/xinit/xinitrc
index 1588f85a3996a2aa1f3edbfff1eb128b9f39fb89..6cad7a30f7e8b93a0533ac69eb253e494c54f825 100644
--- a/board/recalbox/x86/fsoverlay/etc/X11/xinit/xinitrc
+++ b/board/recalbox/x86/fsoverlay/etc/X11/xinit/xinitrc
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
### matchbox doesn't seems to correctly handle qt5 apps, at least for doplhin-emu,
### replace it with openbox: http://openbox.org/wiki/Main_Page
@@ -16,7 +16,7 @@ setxkbmap "${map_name}"
xset -dpms
xset s off
-# to disable a video output (multi-screen setup) and prevent ES to be stretcht on all screens,
+# to disable a video output (multi-screen setup) and prevent ES to be stretcht on all screens,
# uncomment the line below, and replace output_name by the output that you want disable on ES startup (ex: HDMI-0)
# xrandr --output output_name --off
@@ -30,6 +30,30 @@ hhpc -i 5 &
export HOME=/recalbox/share/system
export LC_ALL="${settings_lang}.UTF-8"
+# get global resolution
+declare -a xrandr_videomode
+declare -a global_videomode
+global_resolution=$($systemsetting -command load -key global.videomode)
+[ -z "$global_resolution" ] && global_resolution="default"
+[ "$global_resolution" = "default" ] && global_videomode="--preferred" || global_videomode="--mode $global_resolution"
+
+# rotate & resize screens if needed
+while IFS=: read -r -a output; do
+ if xrandr | grep "${output[1]} disconnected"; then
+ continue
+ fi
+ output_resolution=$($systemsetting -command load -key ${output[1]}.videomode)
+ [ -n "$output_resolution" ] && xrandr_videomode=("--mode" "$output_resolution") || xrandr_videomode=( "${global_videomode[@]}" )
+ case "${output[3]}" in
+ "Upside Down") orientation="inverted";;
+ "Right Side Up") orientation="right";;
+ "Left Side Up") orientation="left";;
+ *) orientation="normal";;
+ esac
+ echo "setting: xrandr --output "${output[1]}" --rotate "$orientation" ${xrandr_videomode[*]}" >&2
+ xrandr --output "${output[1]}" --rotate "$orientation" ${xrandr_videomode[*]}
+done < <(recalbox-drm-info -x)
+
## without windowed, time must be sleeped to wait that matchbox ended to initialize :-(
#exec emulationstation --windowed
## Emulationstation must be started at the same time
diff --git a/board/recalbox/x86/fsoverlay/etc/udev/rules.d/99-steamdeck.rules b/board/recalbox/x86/fsoverlay/etc/udev/rules.d/99-steamdeck.rules
new file mode 100644
index 0000000000000000000000000000000000000000..7cebd7caf4d2bfa17b2a52936b5a45f5a1bc3529
--- /dev/null
+++ b/board/recalbox/x86/fsoverlay/etc/udev/rules.d/99-steamdeck.rules
@@ -0,0 +1,2 @@
+# rorate TS
+ACTION=="add|change", SUBSYSTEM=="input", ATTRS{name}=="FTS3528:00 2808:1015", ENV{LIBINPUT_CALIBRATION_MATRIX}="0 1 0 -1 0 1 0 0 1"
diff --git a/board/recalbox/x86/kernel-defconfig.config b/board/recalbox/x86/kernel-defconfig.config
new file mode 100644
index 0000000000000000000000000000000000000000..f22ca60ec345a48be4d0b509ebf79d1fd2637425
--- /dev/null
+++ b/board/recalbox/x86/kernel-defconfig.config
@@ -0,0 +1,10549 @@
+#
+# Automatically generated file; DO NOT EDIT.
+# Linux/x86_64 6.14.4 Kernel Configuration
+#
+CONFIG_CC_VERSION_TEXT="x86_64-buildroot-linux-gnu-gcc.br_real (Buildroot 2024.05.3-dirty) 14.2.0"
+CONFIG_CC_IS_GCC=y
+CONFIG_GCC_VERSION=140200
+CONFIG_CLANG_VERSION=0
+CONFIG_AS_IS_GNU=y
+CONFIG_AS_VERSION=24100
+CONFIG_LD_IS_BFD=y
+CONFIG_LD_VERSION=24100
+CONFIG_LLD_VERSION=0
+CONFIG_RUSTC_VERSION=107401
+CONFIG_RUSTC_LLVM_VERSION=170004
+CONFIG_CC_CAN_LINK=y
+CONFIG_CC_CAN_LINK_STATIC=y
+CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
+CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
+CONFIG_TOOLS_SUPPORT_RELR=y
+CONFIG_CC_HAS_ASM_INLINE=y
+CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
+CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y
+CONFIG_PAHOLE_VERSION=0
+CONFIG_IRQ_WORK=y
+CONFIG_BUILDTIME_TABLE_SORT=y
+CONFIG_THREAD_INFO_IN_TASK=y
+
+#
+# General setup
+#
+CONFIG_INIT_ENV_ARG_LIMIT=32
+# CONFIG_COMPILE_TEST is not set
+# CONFIG_WERROR is not set
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_BUILD_SALT=""
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_BZIP2=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_XZ=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_HAVE_KERNEL_LZ4=y
+CONFIG_HAVE_KERNEL_ZSTD=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_XZ is not set
+# CONFIG_KERNEL_LZO is not set
+# CONFIG_KERNEL_LZ4 is not set
+# CONFIG_KERNEL_ZSTD is not set
+CONFIG_DEFAULT_INIT=""
+CONFIG_DEFAULT_HOSTNAME="(none)"
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_SYSVIPC_COMPAT=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
+# CONFIG_WATCH_QUEUE is not set
+CONFIG_CROSS_MEMORY_ATTACH=y
+# CONFIG_USELIB is not set
+CONFIG_AUDIT=y
+CONFIG_HAVE_ARCH_AUDITSYSCALL=y
+CONFIG_AUDITSYSCALL=y
+
+#
+# IRQ subsystem
+#
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_IRQ_SHOW=y
+CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
+CONFIG_GENERIC_PENDING_IRQ=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_IRQ_MSI_IOMMU=y
+CONFIG_GENERIC_IRQ_MATRIX_ALLOCATOR=y
+CONFIG_GENERIC_IRQ_RESERVATION_MODE=y
+CONFIG_IRQ_FORCED_THREADING=y
+CONFIG_SPARSE_IRQ=y
+# CONFIG_GENERIC_IRQ_DEBUGFS is not set
+# end of IRQ subsystem
+
+CONFIG_CLOCKSOURCE_WATCHDOG=y
+CONFIG_ARCH_CLOCKSOURCE_INIT=y
+CONFIG_GENERIC_TIME_VSYSCALL=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
+CONFIG_GENERIC_CLOCKEVENTS_BROADCAST_IDLE=y
+CONFIG_GENERIC_CLOCKEVENTS_MIN_ADJUST=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=y
+CONFIG_POSIX_CPU_TIMERS_TASK_WORK=y
+CONFIG_CONTEXT_TRACKING=y
+CONFIG_CONTEXT_TRACKING_IDLE=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
+CONFIG_CLOCKSOURCE_WATCHDOG_MAX_SKEW_US=125
+# end of Timers subsystem
+
+CONFIG_BPF=y
+CONFIG_HAVE_EBPF_JIT=y
+CONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
+
+#
+# BPF subsystem
+#
+# CONFIG_BPF_SYSCALL is not set
+# CONFIG_BPF_JIT is not set
+# end of BPF subsystem
+
+CONFIG_PREEMPT_BUILD=y
+CONFIG_ARCH_HAS_PREEMPT_LAZY=y
+# CONFIG_PREEMPT_NONE is not set
+# CONFIG_PREEMPT_VOLUNTARY is not set
+CONFIG_PREEMPT=y
+# CONFIG_PREEMPT_LAZY is not set
+# CONFIG_PREEMPT_RT is not set
+CONFIG_PREEMPT_COUNT=y
+CONFIG_PREEMPTION=y
+CONFIG_PREEMPT_DYNAMIC=y
+CONFIG_SCHED_CORE=y
+
+#
+# CPU/Task time and stats accounting
+#
+CONFIG_TICK_CPU_ACCOUNTING=y
+# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
+# CONFIG_IRQ_TIME_ACCOUNTING is not set
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+# CONFIG_TASKSTATS is not set
+# CONFIG_PSI is not set
+# end of CPU/Task time and stats accounting
+
+CONFIG_CPU_ISOLATION=y
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+CONFIG_PREEMPT_RCU=y
+CONFIG_RCU_EXPERT=y
+CONFIG_TREE_SRCU=y
+CONFIG_TASKS_RCU_GENERIC=y
+# CONFIG_FORCE_TASKS_RCU is not set
+CONFIG_NEED_TASKS_RCU=y
+CONFIG_TASKS_RCU=y
+# CONFIG_FORCE_TASKS_RUDE_RCU is not set
+CONFIG_TASKS_RUDE_RCU=y
+# CONFIG_FORCE_TASKS_TRACE_RCU is not set
+CONFIG_TASKS_TRACE_RCU=y
+CONFIG_RCU_STALL_COMMON=y
+CONFIG_RCU_NEED_SEGCBLIST=y
+CONFIG_RCU_FANOUT=64
+CONFIG_RCU_FANOUT_LEAF=16
+# CONFIG_RCU_BOOST is not set
+# CONFIG_RCU_NOCB_CPU is not set
+# CONFIG_TASKS_TRACE_RCU_READ_MB is not set
+# CONFIG_RCU_DOUBLE_CHECK_CB_TIME is not set
+# end of RCU Subsystem
+
+# CONFIG_IKCONFIG is not set
+# CONFIG_IKHEADERS is not set
+CONFIG_LOG_BUF_SHIFT=17
+CONFIG_LOG_CPU_MAX_BUF_SHIFT=12
+# CONFIG_PRINTK_INDEX is not set
+CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
+
+#
+# Scheduler features
+#
+# CONFIG_UCLAMP_TASK is not set
+# end of Scheduler features
+
+CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y
+CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH=y
+CONFIG_CC_HAS_INT128=y
+CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5"
+CONFIG_GCC10_NO_ARRAY_BOUNDS=y
+CONFIG_CC_NO_ARRAY_BOUNDS=y
+CONFIG_GCC_NO_STRINGOP_OVERFLOW=y
+CONFIG_CC_NO_STRINGOP_OVERFLOW=y
+CONFIG_ARCH_SUPPORTS_INT128=y
+CONFIG_NUMA_BALANCING=y
+CONFIG_NUMA_BALANCING_DEFAULT_ENABLED=y
+CONFIG_SLAB_OBJ_EXT=y
+CONFIG_CGROUPS=y
+CONFIG_PAGE_COUNTER=y
+# CONFIG_CGROUP_FAVOR_DYNMODS is not set
+CONFIG_MEMCG=y
+# CONFIG_MEMCG_V1 is not set
+CONFIG_BLK_CGROUP=y
+CONFIG_CGROUP_WRITEBACK=y
+CONFIG_CGROUP_SCHED=y
+CONFIG_GROUP_SCHED_WEIGHT=y
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_CFS_BANDWIDTH=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_SCHED_MM_CID=y
+CONFIG_CGROUP_PIDS=y
+# CONFIG_CGROUP_RDMA is not set
+# CONFIG_CGROUP_DMEM is not set
+CONFIG_CGROUP_FREEZER=y
+CONFIG_CGROUP_HUGETLB=y
+CONFIG_CPUSETS=y
+# CONFIG_CPUSETS_V1 is not set
+CONFIG_PROC_PID_CPUSET=y
+CONFIG_CGROUP_DEVICE=y
+CONFIG_CGROUP_CPUACCT=y
+CONFIG_CGROUP_PERF=y
+# CONFIG_CGROUP_MISC is not set
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_NAMESPACES=y
+CONFIG_UTS_NS=y
+CONFIG_TIME_NS=y
+CONFIG_IPC_NS=y
+CONFIG_USER_NS=y
+CONFIG_PID_NS=y
+CONFIG_NET_NS=y
+CONFIG_CHECKPOINT_RESTORE=y
+CONFIG_SCHED_AUTOGROUP=y
+CONFIG_RELAY=y
+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_RD_ZSTD=y
+# CONFIG_BOOT_CONFIG is not set
+CONFIG_INITRAMFS_PRESERVE_MTIME=y
+CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_LD_ORPHAN_WARN=y
+CONFIG_LD_ORPHAN_WARN_LEVEL="warn"
+CONFIG_SYSCTL=y
+CONFIG_HAVE_UID16=y
+CONFIG_SYSCTL_EXCEPTION_TRACE=y
+CONFIG_HAVE_PCSPKR_PLATFORM=y
+CONFIG_EXPERT=y
+CONFIG_UID16=y
+CONFIG_MULTIUSER=y
+CONFIG_SGETMASK_SYSCALL=y
+CONFIG_SYSFS_SYSCALL=y
+CONFIG_FHANDLE=y
+CONFIG_POSIX_TIMERS=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_PCSPKR_PLATFORM=y
+# CONFIG_BASE_SMALL is not set
+CONFIG_FUTEX=y
+CONFIG_FUTEX_PI=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+CONFIG_IO_URING=y
+CONFIG_ADVISE_SYSCALLS=y
+CONFIG_MEMBARRIER=y
+CONFIG_KCMP=y
+CONFIG_RSEQ=y
+# CONFIG_DEBUG_RSEQ is not set
+CONFIG_CACHESTAT_SYSCALL=y
+# CONFIG_PC104 is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_SELFTEST is not set
+CONFIG_KALLSYMS_ALL=y
+CONFIG_KALLSYMS_ABSOLUTE_PERCPU=y
+CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
+CONFIG_HAVE_PERF_EVENTS=y
+CONFIG_GUEST_PERF_EVENTS=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_PERF_EVENTS=y
+# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
+# end of Kernel Performance Events And Counters
+
+CONFIG_SYSTEM_DATA_VERIFICATION=y
+CONFIG_PROFILING=y
+CONFIG_TRACEPOINTS=y
+
+#
+# Kexec and crash features
+#
+CONFIG_CRASH_RESERVE=y
+CONFIG_VMCORE_INFO=y
+CONFIG_KEXEC_CORE=y
+CONFIG_KEXEC=y
+CONFIG_KEXEC_FILE=y
+# CONFIG_KEXEC_SIG is not set
+CONFIG_CRASH_DUMP=y
+CONFIG_CRASH_HOTPLUG=y
+CONFIG_CRASH_MAX_MEMORY_RANGES=8192
+# end of Kexec and crash features
+# end of General setup
+
+CONFIG_64BIT=y
+CONFIG_X86_64=y
+CONFIG_X86=y
+CONFIG_INSTRUCTION_DECODER=y
+CONFIG_OUTPUT_FORMAT="elf64-x86-64"
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_MMU=y
+CONFIG_ARCH_MMAP_RND_BITS_MIN=28
+CONFIG_ARCH_MMAP_RND_BITS_MAX=32
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=8
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_BUG=y
+CONFIG_GENERIC_BUG_RELATIVE_POINTERS=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_HAS_CPU_RELAX=y
+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_AUDIT_ARCH=y
+CONFIG_HAVE_INTEL_TXT=y
+CONFIG_X86_64_SMP=y
+CONFIG_ARCH_SUPPORTS_UPROBES=y
+CONFIG_FIX_EARLYCON_MEM=y
+CONFIG_DYNAMIC_PHYSICAL_MASK=y
+CONFIG_PGTABLE_LEVELS=5
+CONFIG_CC_HAS_SANE_STACKPROTECTOR=y
+
+#
+# Processor type and features
+#
+CONFIG_SMP=y
+CONFIG_X86_X2APIC=y
+# CONFIG_X86_POSTED_MSI is not set
+CONFIG_X86_MPPARSE=y
+# CONFIG_X86_CPU_RESCTRL is not set
+# CONFIG_X86_FRED is not set
+CONFIG_X86_EXTENDED_PLATFORM=y
+CONFIG_X86_NUMACHIP=y
+# CONFIG_X86_VSMP is not set
+# CONFIG_X86_UV is not set
+# CONFIG_X86_GOLDFISH is not set
+# CONFIG_X86_INTEL_MID is not set
+CONFIG_X86_INTEL_LPSS=y
+CONFIG_X86_AMD_PLATFORM_DEVICE=y
+CONFIG_IOSF_MBI=y
+CONFIG_IOSF_MBI_DEBUG=y
+CONFIG_X86_SUPPORTS_MEMORY_FAILURE=y
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
+# CONFIG_HYPERVISOR_GUEST is not set
+# CONFIG_MK8 is not set
+# CONFIG_MPSC is not set
+# CONFIG_MCORE2 is not set
+# CONFIG_MATOM is not set
+CONFIG_GENERIC_CPU=y
+CONFIG_X86_INTERNODE_CACHE_SHIFT=6
+CONFIG_X86_L1_CACHE_SHIFT=6
+CONFIG_X86_TSC=y
+CONFIG_X86_HAVE_PAE=y
+CONFIG_X86_CMPXCHG64=y
+CONFIG_X86_CMOV=y
+CONFIG_X86_MINIMUM_CPU_FAMILY=64
+CONFIG_X86_DEBUGCTLMSR=y
+CONFIG_IA32_FEAT_CTL=y
+CONFIG_X86_VMX_FEATURE_NAMES=y
+CONFIG_PROCESSOR_SELECT=y
+CONFIG_CPU_SUP_INTEL=y
+CONFIG_CPU_SUP_AMD=y
+CONFIG_CPU_SUP_HYGON=y
+CONFIG_CPU_SUP_CENTAUR=y
+CONFIG_CPU_SUP_ZHAOXIN=y
+CONFIG_HPET_TIMER=y
+CONFIG_HPET_EMULATE_RTC=y
+CONFIG_DMI=y
+CONFIG_GART_IOMMU=y
+CONFIG_BOOT_VESA_SUPPORT=y
+# CONFIG_MAXSMP is not set
+CONFIG_NR_CPUS_RANGE_BEGIN=2
+CONFIG_NR_CPUS_RANGE_END=512
+CONFIG_NR_CPUS_DEFAULT=64
+CONFIG_NR_CPUS=256
+CONFIG_SCHED_CLUSTER=y
+CONFIG_SCHED_SMT=y
+CONFIG_SCHED_MC=y
+CONFIG_SCHED_MC_PRIO=y
+CONFIG_X86_LOCAL_APIC=y
+CONFIG_ACPI_MADT_WAKEUP=y
+CONFIG_X86_IO_APIC=y
+CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
+CONFIG_X86_MCE=y
+# CONFIG_X86_MCELOG_LEGACY is not set
+CONFIG_X86_MCE_INTEL=y
+CONFIG_X86_MCE_AMD=y
+CONFIG_X86_MCE_THRESHOLD=y
+CONFIG_X86_MCE_INJECT=m
+
+#
+# Performance monitoring
+#
+CONFIG_PERF_EVENTS_INTEL_UNCORE=y
+CONFIG_PERF_EVENTS_INTEL_RAPL=y
+CONFIG_PERF_EVENTS_INTEL_CSTATE=y
+CONFIG_PERF_EVENTS_AMD_POWER=y
+CONFIG_PERF_EVENTS_AMD_UNCORE=y
+CONFIG_PERF_EVENTS_AMD_BRS=y
+# end of Performance monitoring
+
+CONFIG_X86_16BIT=y
+CONFIG_X86_ESPFIX64=y
+CONFIG_X86_VSYSCALL_EMULATION=y
+CONFIG_X86_IOPL_IOPERM=y
+CONFIG_MICROCODE=y
+# CONFIG_MICROCODE_LATE_LOADING is not set
+CONFIG_X86_MSR=m
+CONFIG_X86_CPUID=m
+CONFIG_X86_5LEVEL=y
+CONFIG_X86_DIRECT_GBPAGES=y
+# CONFIG_X86_CPA_STATISTICS is not set
+CONFIG_X86_MEM_ENCRYPT=y
+CONFIG_AMD_MEM_ENCRYPT=y
+CONFIG_NUMA=y
+CONFIG_AMD_NUMA=y
+CONFIG_X86_64_ACPI_NUMA=y
+CONFIG_NODES_SHIFT=6
+CONFIG_ARCH_SPARSEMEM_ENABLE=y
+CONFIG_ARCH_SPARSEMEM_DEFAULT=y
+CONFIG_ARCH_PROC_KCORE_TEXT=y
+CONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000
+CONFIG_X86_PMEM_LEGACY_DEVICE=y
+CONFIG_X86_PMEM_LEGACY=y
+CONFIG_X86_CHECK_BIOS_CORRUPTION=y
+CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y
+CONFIG_MTRR=y
+CONFIG_MTRR_SANITIZER=y
+CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
+CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
+CONFIG_X86_PAT=y
+CONFIG_X86_UMIP=y
+CONFIG_CC_HAS_IBT=y
+CONFIG_X86_CET=y
+CONFIG_X86_KERNEL_IBT=y
+CONFIG_X86_INTEL_MEMORY_PROTECTION_KEYS=y
+CONFIG_ARCH_PKEY_BITS=4
+CONFIG_X86_INTEL_TSX_MODE_OFF=y
+# CONFIG_X86_INTEL_TSX_MODE_ON is not set
+# CONFIG_X86_INTEL_TSX_MODE_AUTO is not set
+# CONFIG_X86_SGX is not set
+# CONFIG_X86_USER_SHADOW_STACK is not set
+CONFIG_EFI=y
+CONFIG_EFI_STUB=y
+CONFIG_EFI_HANDOVER_PROTOCOL=y
+CONFIG_EFI_MIXED=y
+CONFIG_EFI_RUNTIME_MAP=y
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_250 is not set
+# CONFIG_HZ_300 is not set
+CONFIG_HZ_1000=y
+CONFIG_HZ=1000
+CONFIG_SCHED_HRTICK=y
+CONFIG_ARCH_SUPPORTS_KEXEC=y
+CONFIG_ARCH_SUPPORTS_KEXEC_FILE=y
+CONFIG_ARCH_SELECTS_KEXEC_FILE=y
+CONFIG_ARCH_SUPPORTS_KEXEC_PURGATORY=y
+CONFIG_ARCH_SUPPORTS_KEXEC_SIG=y
+CONFIG_ARCH_SUPPORTS_KEXEC_SIG_FORCE=y
+CONFIG_ARCH_SUPPORTS_KEXEC_BZIMAGE_VERIFY_SIG=y
+CONFIG_ARCH_SUPPORTS_KEXEC_JUMP=y
+CONFIG_ARCH_SUPPORTS_CRASH_DUMP=y
+CONFIG_ARCH_DEFAULT_CRASH_DUMP=y
+CONFIG_ARCH_SUPPORTS_CRASH_HOTPLUG=y
+CONFIG_ARCH_HAS_GENERIC_CRASHKERNEL_RESERVATION=y
+CONFIG_PHYSICAL_START=0x1000000
+CONFIG_RELOCATABLE=y
+CONFIG_RANDOMIZE_BASE=y
+CONFIG_X86_NEED_RELOCS=y
+CONFIG_PHYSICAL_ALIGN=0x200000
+CONFIG_DYNAMIC_MEMORY_LAYOUT=y
+CONFIG_RANDOMIZE_MEMORY=y
+CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa
+CONFIG_HOTPLUG_CPU=y
+# CONFIG_COMPAT_VDSO is not set
+CONFIG_LEGACY_VSYSCALL_XONLY=y
+# CONFIG_LEGACY_VSYSCALL_NONE is not set
+# CONFIG_CMDLINE_BOOL is not set
+CONFIG_MODIFY_LDT_SYSCALL=y
+# CONFIG_STRICT_SIGALTSTACK_SIZE is not set
+CONFIG_HAVE_LIVEPATCH=y
+CONFIG_LIVEPATCH=y
+CONFIG_X86_BUS_LOCK_DETECT=y
+# end of Processor type and features
+
+CONFIG_CC_HAS_NAMED_AS=y
+CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=y
+CONFIG_USE_X86_SEG_SUPPORT=y
+CONFIG_CC_HAS_SLS=y
+CONFIG_CC_HAS_RETURN_THUNK=y
+CONFIG_CC_HAS_ENTRY_PADDING=y
+CONFIG_FUNCTION_PADDING_CFI=11
+CONFIG_FUNCTION_PADDING_BYTES=16
+CONFIG_CALL_PADDING=y
+CONFIG_HAVE_CALL_THUNKS=y
+CONFIG_CALL_THUNKS=y
+CONFIG_PREFIX_SYMBOLS=y
+CONFIG_CPU_MITIGATIONS=y
+CONFIG_MITIGATION_PAGE_TABLE_ISOLATION=y
+CONFIG_MITIGATION_RETPOLINE=y
+CONFIG_MITIGATION_RETHUNK=y
+CONFIG_MITIGATION_UNRET_ENTRY=y
+CONFIG_MITIGATION_CALL_DEPTH_TRACKING=y
+# CONFIG_CALL_THUNKS_DEBUG is not set
+CONFIG_MITIGATION_IBPB_ENTRY=y
+CONFIG_MITIGATION_IBRS_ENTRY=y
+CONFIG_MITIGATION_SRSO=y
+# CONFIG_MITIGATION_SLS is not set
+CONFIG_MITIGATION_GDS=y
+CONFIG_MITIGATION_RFDS=y
+CONFIG_MITIGATION_SPECTRE_BHI=y
+CONFIG_MITIGATION_MDS=y
+CONFIG_MITIGATION_TAA=y
+CONFIG_MITIGATION_MMIO_STALE_DATA=y
+CONFIG_MITIGATION_L1TF=y
+CONFIG_MITIGATION_RETBLEED=y
+CONFIG_MITIGATION_SPECTRE_V1=y
+CONFIG_MITIGATION_SPECTRE_V2=y
+CONFIG_MITIGATION_SRBDS=y
+CONFIG_MITIGATION_SSB=y
+CONFIG_ARCH_HAS_ADD_PAGES=y
+
+#
+# Power management and ACPI options
+#
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_SUSPEND_SKIP_SYNC is not set
+# CONFIG_HIBERNATION is not set
+CONFIG_PM_SLEEP=y
+CONFIG_PM_SLEEP_SMP=y
+# CONFIG_PM_AUTOSLEEP is not set
+# CONFIG_PM_USERSPACE_AUTOSLEEP is not set
+CONFIG_PM_WAKELOCKS=y
+CONFIG_PM_WAKELOCKS_LIMIT=100
+CONFIG_PM_WAKELOCKS_GC=y
+CONFIG_PM=y
+CONFIG_PM_DEBUG=y
+CONFIG_PM_ADVANCED_DEBUG=y
+# CONFIG_PM_TEST_SUSPEND is not set
+CONFIG_PM_SLEEP_DEBUG=y
+# CONFIG_DPM_WATCHDOG is not set
+# CONFIG_PM_TRACE_RTC is not set
+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_ENERGY_MODEL=y
+CONFIG_ARCH_SUPPORTS_ACPI=y
+CONFIG_ACPI=y
+CONFIG_ACPI_LEGACY_TABLES_LOOKUP=y
+CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC=y
+CONFIG_ACPI_SYSTEM_POWER_STATES_SUPPORT=y
+CONFIG_ACPI_THERMAL_LIB=y
+# CONFIG_ACPI_DEBUGGER is not set
+CONFIG_ACPI_SPCR_TABLE=y
+# CONFIG_ACPI_FPDT is not set
+CONFIG_ACPI_LPIT=y
+CONFIG_ACPI_SLEEP=y
+CONFIG_ACPI_REV_OVERRIDE_POSSIBLE=y
+CONFIG_ACPI_EC=y
+CONFIG_ACPI_EC_DEBUGFS=m
+CONFIG_ACPI_AC=y
+CONFIG_ACPI_BATTERY=y
+CONFIG_ACPI_BUTTON=y
+CONFIG_ACPI_VIDEO=m
+CONFIG_ACPI_FAN=y
+# CONFIG_ACPI_TAD is not set
+CONFIG_ACPI_DOCK=y
+CONFIG_ACPI_CPU_FREQ_PSS=y
+CONFIG_ACPI_PROCESSOR_CSTATE=y
+CONFIG_ACPI_PROCESSOR_IDLE=y
+CONFIG_ACPI_CPPC_LIB=y
+CONFIG_ACPI_PROCESSOR=y
+CONFIG_ACPI_IPMI=m
+CONFIG_ACPI_HOTPLUG_CPU=y
+CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
+CONFIG_ACPI_THERMAL=y
+CONFIG_ACPI_PLATFORM_PROFILE=m
+CONFIG_ACPI_CUSTOM_DSDT_FILE=""
+CONFIG_ARCH_HAS_ACPI_TABLE_UPGRADE=y
+CONFIG_ACPI_TABLE_UPGRADE=y
+# CONFIG_ACPI_DEBUG is not set
+CONFIG_ACPI_PCI_SLOT=y
+CONFIG_ACPI_CONTAINER=y
+CONFIG_ACPI_HOTPLUG_IOAPIC=y
+CONFIG_ACPI_SBS=m
+CONFIG_ACPI_HED=y
+CONFIG_ACPI_BGRT=y
+# CONFIG_ACPI_REDUCED_HARDWARE_ONLY is not set
+CONFIG_ACPI_NHLT=y
+CONFIG_ACPI_NFIT=m
+# CONFIG_NFIT_SECURITY_DEBUG is not set
+CONFIG_ACPI_NUMA=y
+# CONFIG_ACPI_HMAT is not set
+CONFIG_HAVE_ACPI_APEI=y
+CONFIG_HAVE_ACPI_APEI_NMI=y
+CONFIG_ACPI_APEI=y
+CONFIG_ACPI_APEI_GHES=y
+# CONFIG_ACPI_APEI_PCIEAER is not set
+CONFIG_ACPI_APEI_MEMORY_FAILURE=y
+CONFIG_ACPI_APEI_EINJ=m
+# CONFIG_ACPI_APEI_ERST_DEBUG is not set
+# CONFIG_ACPI_DPTF is not set
+CONFIG_ACPI_EXTLOG=m
+# CONFIG_ACPI_CONFIGFS is not set
+# CONFIG_ACPI_PFRUT is not set
+CONFIG_ACPI_PCC=y
+# CONFIG_ACPI_FFH is not set
+# CONFIG_PMIC_OPREGION is not set
+CONFIG_ACPI_PRMT=y
+CONFIG_X86_PM_TIMER=y
+
+#
+# CPU Frequency scaling
+#
+CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_GOV_ATTR_SET=y
+CONFIG_CPU_FREQ_GOV_COMMON=y
+# CONFIG_CPU_FREQ_STAT is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
+CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL=y
+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
+CONFIG_CPU_FREQ_GOV_POWERSAVE=y
+CONFIG_CPU_FREQ_GOV_USERSPACE=y
+CONFIG_CPU_FREQ_GOV_ONDEMAND=y
+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
+CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
+
+#
+# CPU frequency scaling drivers
+#
+# CONFIG_CPUFREQ_DT is not set
+# CONFIG_CPUFREQ_DT_PLATDEV is not set
+CONFIG_X86_INTEL_PSTATE=y
+CONFIG_X86_PCC_CPUFREQ=y
+CONFIG_X86_AMD_PSTATE=y
+CONFIG_X86_AMD_PSTATE_DEFAULT_MODE=3
+# CONFIG_X86_AMD_PSTATE_UT is not set
+CONFIG_X86_ACPI_CPUFREQ=y
+CONFIG_X86_ACPI_CPUFREQ_CPB=y
+CONFIG_X86_POWERNOW_K8=y
+CONFIG_X86_AMD_FREQ_SENSITIVITY=m
+CONFIG_X86_SPEEDSTEP_CENTRINO=y
+CONFIG_X86_P4_CLOCKMOD=m
+
+#
+# shared options
+#
+CONFIG_X86_SPEEDSTEP_LIB=m
+# end of CPU Frequency scaling
+
+#
+# CPU Idle
+#
+CONFIG_CPU_IDLE=y
+CONFIG_CPU_IDLE_GOV_LADDER=y
+CONFIG_CPU_IDLE_GOV_MENU=y
+# CONFIG_CPU_IDLE_GOV_TEO is not set
+# end of CPU Idle
+
+CONFIG_INTEL_IDLE=y
+# end of Power management and ACPI options
+
+#
+# Bus options (PCI etc.)
+#
+CONFIG_PCI_DIRECT=y
+CONFIG_PCI_MMCONFIG=y
+CONFIG_MMCONF_FAM10H=y
+# CONFIG_PCI_CNB20LE_QUIRK is not set
+# CONFIG_ISA_BUS is not set
+CONFIG_ISA_DMA_API=y
+CONFIG_AMD_NB=y
+CONFIG_AMD_NODE=y
+# end of Bus options (PCI etc.)
+
+#
+# Binary Emulations
+#
+CONFIG_IA32_EMULATION=y
+# CONFIG_IA32_EMULATION_DEFAULT_DISABLED is not set
+# CONFIG_X86_X32_ABI is not set
+CONFIG_COMPAT_32=y
+CONFIG_COMPAT=y
+CONFIG_COMPAT_FOR_U64_ALIGNMENT=y
+# end of Binary Emulations
+
+CONFIG_KVM_COMMON=y
+CONFIG_HAVE_KVM_PFNCACHE=y
+CONFIG_HAVE_KVM_IRQCHIP=y
+CONFIG_HAVE_KVM_IRQ_ROUTING=y
+CONFIG_HAVE_KVM_DIRTY_RING=y
+CONFIG_HAVE_KVM_DIRTY_RING_TSO=y
+CONFIG_HAVE_KVM_DIRTY_RING_ACQ_REL=y
+CONFIG_KVM_MMIO=y
+CONFIG_KVM_ASYNC_PF=y
+CONFIG_HAVE_KVM_MSI=y
+CONFIG_HAVE_KVM_READONLY_MEM=y
+CONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=y
+CONFIG_KVM_VFIO=y
+CONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=y
+CONFIG_KVM_GENERIC_PRE_FAULT_MEMORY=y
+CONFIG_KVM_COMPAT=y
+CONFIG_HAVE_KVM_IRQ_BYPASS=m
+CONFIG_HAVE_KVM_NO_POLL=y
+CONFIG_KVM_XFER_TO_GUEST_WORK=y
+CONFIG_HAVE_KVM_PM_NOTIFIER=y
+CONFIG_KVM_GENERIC_HARDWARE_ENABLING=y
+CONFIG_KVM_GENERIC_MMU_NOTIFIER=y
+CONFIG_KVM_ELIDE_TLB_FLUSH_IF_YOUNG=y
+CONFIG_KVM_GENERIC_MEMORY_ATTRIBUTES=y
+CONFIG_KVM_PRIVATE_MEM=y
+CONFIG_KVM_GENERIC_PRIVATE_MEM=y
+CONFIG_HAVE_KVM_ARCH_GMEM_PREPARE=y
+CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE=y
+CONFIG_VIRTUALIZATION=y
+CONFIG_KVM_X86=m
+CONFIG_KVM=m
+# CONFIG_KVM_WERROR is not set
+# CONFIG_KVM_SW_PROTECTED_VM is not set
+CONFIG_KVM_INTEL=m
+# CONFIG_KVM_INTEL_PROVE_VE is not set
+CONFIG_KVM_AMD=m
+CONFIG_KVM_AMD_SEV=y
+CONFIG_KVM_SMM=y
+CONFIG_KVM_HYPERV=y
+# CONFIG_KVM_XEN is not set
+# CONFIG_KVM_PROVE_MMU is not set
+CONFIG_KVM_MAX_NR_VCPUS=1024
+CONFIG_AS_AVX512=y
+CONFIG_AS_SHA1_NI=y
+CONFIG_AS_SHA256_NI=y
+CONFIG_AS_TPAUSE=y
+CONFIG_AS_GFNI=y
+CONFIG_AS_VAES=y
+CONFIG_AS_VPCLMULQDQ=y
+CONFIG_AS_WRUSS=y
+CONFIG_ARCH_CONFIGURES_CPU_MITIGATIONS=y
+CONFIG_ARCH_HAS_DMA_OPS=y
+
+#
+# General architecture-dependent options
+#
+CONFIG_HOTPLUG_SMT=y
+CONFIG_HOTPLUG_CORE_SYNC=y
+CONFIG_HOTPLUG_CORE_SYNC_DEAD=y
+CONFIG_HOTPLUG_CORE_SYNC_FULL=y
+CONFIG_HOTPLUG_SPLIT_STARTUP=y
+CONFIG_HOTPLUG_PARALLEL=y
+CONFIG_GENERIC_ENTRY=y
+CONFIG_KPROBES=y
+CONFIG_JUMP_LABEL=y
+# CONFIG_STATIC_KEYS_SELFTEST is not set
+# CONFIG_STATIC_CALL_SELFTEST is not set
+CONFIG_OPTPROBES=y
+CONFIG_KPROBES_ON_FTRACE=y
+CONFIG_UPROBES=y
+CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
+CONFIG_ARCH_USE_BUILTIN_BSWAP=y
+CONFIG_KRETPROBES=y
+CONFIG_KRETPROBE_ON_RETHOOK=y
+CONFIG_USER_RETURN_NOTIFIER=y
+CONFIG_HAVE_IOREMAP_PROT=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_OPTPROBES=y
+CONFIG_HAVE_KPROBES_ON_FTRACE=y
+CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y
+CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y
+CONFIG_HAVE_NMI=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y
+CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_CONTIGUOUS=y
+CONFIG_GENERIC_SMP_IDLE_THREAD=y
+CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
+CONFIG_ARCH_HAS_SET_MEMORY=y
+CONFIG_ARCH_HAS_SET_DIRECT_MAP=y
+CONFIG_ARCH_HAS_CPU_FINALIZE_INIT=y
+CONFIG_ARCH_HAS_CPU_PASID=y
+CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y
+CONFIG_ARCH_WANTS_DYNAMIC_TASK_STRUCT=y
+CONFIG_ARCH_WANTS_NO_INSTR=y
+CONFIG_HAVE_ASM_MODVERSIONS=y
+CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
+CONFIG_HAVE_RSEQ=y
+CONFIG_HAVE_RUST=y
+CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y
+CONFIG_HAVE_HW_BREAKPOINT=y
+CONFIG_HAVE_MIXED_BREAKPOINTS_REGS=y
+CONFIG_HAVE_USER_RETURN_NOTIFIER=y
+CONFIG_HAVE_PERF_EVENTS_NMI=y
+CONFIG_HAVE_HARDLOCKUP_DETECTOR_PERF=y
+CONFIG_HAVE_PERF_REGS=y
+CONFIG_HAVE_PERF_USER_STACK_DUMP=y
+CONFIG_HAVE_ARCH_JUMP_LABEL=y
+CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y
+CONFIG_MMU_GATHER_TABLE_FREE=y
+CONFIG_MMU_GATHER_RCU_TABLE_FREE=y
+CONFIG_MMU_GATHER_MERGE_VMAS=y
+CONFIG_MMU_LAZY_TLB_REFCOUNT=y
+CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y
+CONFIG_ARCH_HAVE_EXTRA_ELF_NOTES=y
+CONFIG_ARCH_HAS_NMI_SAFE_THIS_CPU_OPS=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_ARCH_WANT_OLD_COMPAT_IPC=y
+CONFIG_HAVE_ARCH_SECCOMP=y
+CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
+CONFIG_SECCOMP=y
+CONFIG_SECCOMP_FILTER=y
+# CONFIG_SECCOMP_CACHE_DEBUG is not set
+CONFIG_HAVE_ARCH_STACKLEAK=y
+CONFIG_HAVE_STACKPROTECTOR=y
+CONFIG_STACKPROTECTOR=y
+CONFIG_STACKPROTECTOR_STRONG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG=y
+CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y
+CONFIG_LTO_NONE=y
+CONFIG_ARCH_SUPPORTS_AUTOFDO_CLANG=y
+CONFIG_ARCH_SUPPORTS_PROPELLER_CLANG=y
+CONFIG_ARCH_SUPPORTS_CFI_CLANG=y
+CONFIG_HAVE_ARCH_WITHIN_STACK_FRAMES=y
+CONFIG_HAVE_CONTEXT_TRACKING_USER=y
+CONFIG_HAVE_CONTEXT_TRACKING_USER_OFFSTACK=y
+CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y
+CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
+CONFIG_HAVE_MOVE_PUD=y
+CONFIG_HAVE_MOVE_PMD=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y
+CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD=y
+CONFIG_HAVE_ARCH_HUGE_VMAP=y
+CONFIG_HAVE_ARCH_HUGE_VMALLOC=y
+CONFIG_ARCH_WANT_HUGE_PMD_SHARE=y
+CONFIG_HAVE_ARCH_SOFT_DIRTY=y
+CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
+CONFIG_MODULES_USE_ELF_RELA=y
+CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y
+CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y
+CONFIG_SOFTIRQ_ON_OWN_STACK=y
+CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
+CONFIG_HAVE_ARCH_MMAP_RND_BITS=y
+CONFIG_HAVE_EXIT_THREAD=y
+CONFIG_ARCH_MMAP_RND_BITS=28
+CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS=y
+CONFIG_ARCH_MMAP_RND_COMPAT_BITS=8
+CONFIG_HAVE_ARCH_COMPAT_MMAP_BASES=y
+CONFIG_HAVE_PAGE_SIZE_4KB=y
+CONFIG_PAGE_SIZE_4KB=y
+CONFIG_PAGE_SIZE_LESS_THAN_64KB=y
+CONFIG_PAGE_SIZE_LESS_THAN_256KB=y
+CONFIG_PAGE_SHIFT=12
+CONFIG_HAVE_OBJTOOL=y
+CONFIG_HAVE_JUMP_LABEL_HACK=y
+CONFIG_HAVE_NOINSTR_HACK=y
+CONFIG_HAVE_NOINSTR_VALIDATION=y
+CONFIG_HAVE_UACCESS_VALIDATION=y
+CONFIG_HAVE_STACK_VALIDATION=y
+CONFIG_HAVE_RELIABLE_STACKTRACE=y
+CONFIG_OLD_SIGSUSPEND3=y
+CONFIG_COMPAT_OLD_SIGACTION=y
+CONFIG_COMPAT_32BIT_TIME=y
+CONFIG_ARCH_SUPPORTS_RT=y
+CONFIG_HAVE_ARCH_VMAP_STACK=y
+CONFIG_VMAP_STACK=y
+CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y
+CONFIG_RANDOMIZE_KSTACK_OFFSET=y
+# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set
+CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
+CONFIG_STRICT_KERNEL_RWX=y
+CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
+CONFIG_STRICT_MODULE_RWX=y
+CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
+CONFIG_ARCH_USE_MEMREMAP_PROT=y
+# CONFIG_LOCK_EVENT_COUNTS is not set
+CONFIG_ARCH_HAS_MEM_ENCRYPT=y
+CONFIG_ARCH_HAS_CC_PLATFORM=y
+CONFIG_HAVE_STATIC_CALL=y
+CONFIG_HAVE_STATIC_CALL_INLINE=y
+CONFIG_HAVE_PREEMPT_DYNAMIC=y
+CONFIG_HAVE_PREEMPT_DYNAMIC_CALL=y
+CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
+CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y
+CONFIG_ARCH_HAS_ELFCORE_COMPAT=y
+CONFIG_ARCH_HAS_PARANOID_L1D_FLUSH=y
+CONFIG_DYNAMIC_SIGFRAME=y
+CONFIG_ARCH_HAS_HW_PTE_YOUNG=y
+CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG=y
+CONFIG_ARCH_HAS_KERNEL_FPU_SUPPORT=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
+# end of GCOV-based kernel profiling
+
+CONFIG_HAVE_GCC_PLUGINS=y
+# CONFIG_GCC_PLUGINS is not set
+CONFIG_FUNCTION_ALIGNMENT_4B=y
+CONFIG_FUNCTION_ALIGNMENT_16B=y
+CONFIG_FUNCTION_ALIGNMENT=16
+CONFIG_CC_HAS_MIN_FUNCTION_ALIGNMENT=y
+CONFIG_CC_HAS_SANE_FUNCTION_ALIGNMENT=y
+# end of General architecture-dependent options
+
+CONFIG_RT_MUTEXES=y
+CONFIG_MODULE_SIG_FORMAT=y
+CONFIG_MODULES=y
+# CONFIG_MODULE_DEBUG is not set
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set
+CONFIG_MODVERSIONS=y
+CONFIG_GENKSYMS=y
+CONFIG_ASM_MODVERSIONS=y
+# CONFIG_EXTENDED_MODVERSIONS is not set
+CONFIG_BASIC_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_MODULE_SIG=y
+# CONFIG_MODULE_SIG_FORCE is not set
+CONFIG_MODULE_SIG_ALL=y
+# CONFIG_MODULE_SIG_SHA1 is not set
+# CONFIG_MODULE_SIG_SHA256 is not set
+# CONFIG_MODULE_SIG_SHA384 is not set
+CONFIG_MODULE_SIG_SHA512=y
+# CONFIG_MODULE_SIG_SHA3_256 is not set
+# CONFIG_MODULE_SIG_SHA3_384 is not set
+# CONFIG_MODULE_SIG_SHA3_512 is not set
+CONFIG_MODULE_SIG_HASH="sha512"
+# CONFIG_MODULE_COMPRESS is not set
+# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
+CONFIG_MODPROBE_PATH="/sbin/modprobe"
+# CONFIG_TRIM_UNUSED_KSYMS is not set
+CONFIG_MODULES_TREE_LOOKUP=y
+CONFIG_BLOCK=y
+CONFIG_BLOCK_LEGACY_AUTOLOAD=y
+CONFIG_BLK_CGROUP_RWSTAT=y
+CONFIG_BLK_DEV_BSG_COMMON=y
+CONFIG_BLK_ICQ=y
+CONFIG_BLK_DEV_BSGLIB=y
+CONFIG_BLK_DEV_INTEGRITY=y
+CONFIG_BLK_DEV_WRITE_MOUNTED=y
+# CONFIG_BLK_DEV_ZONED is not set
+CONFIG_BLK_DEV_THROTTLING=y
+# CONFIG_BLK_WBT is not set
+# CONFIG_BLK_CGROUP_IOLATENCY is not set
+# CONFIG_BLK_CGROUP_IOCOST is not set
+# CONFIG_BLK_CGROUP_IOPRIO is not set
+CONFIG_BLK_DEBUG_FS=y
+# CONFIG_BLK_SED_OPAL is not set
+# CONFIG_BLK_INLINE_ENCRYPTION 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=y
+# CONFIG_OF_PARTITION is not set
+# end of Partition Types
+
+CONFIG_BLK_MQ_PCI=y
+CONFIG_BLK_PM=y
+CONFIG_BLOCK_HOLDER_DEPRECATED=y
+CONFIG_BLK_MQ_STACKING=y
+
+#
+# IO Schedulers
+#
+CONFIG_MQ_IOSCHED_DEADLINE=y
+CONFIG_MQ_IOSCHED_KYBER=y
+CONFIG_IOSCHED_BFQ=y
+CONFIG_BFQ_GROUP_IOSCHED=y
+# CONFIG_BFQ_CGROUP_DEBUG is not set
+# end of IO Schedulers
+
+CONFIG_PREEMPT_NOTIFIERS=y
+CONFIG_PADATA=y
+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_ARCH_USE_QUEUED_SPINLOCKS=y
+CONFIG_QUEUED_SPINLOCKS=y
+CONFIG_ARCH_USE_QUEUED_RWLOCKS=y
+CONFIG_QUEUED_RWLOCKS=y
+CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y
+CONFIG_ARCH_HAS_SYNC_CORE_BEFORE_USERMODE=y
+CONFIG_ARCH_HAS_SYSCALL_WRAPPER=y
+CONFIG_FREEZER=y
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_COMPAT_BINFMT_ELF=y
+CONFIG_ELFCORE=y
+CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
+CONFIG_BINFMT_SCRIPT=y
+CONFIG_BINFMT_MISC=m
+CONFIG_COREDUMP=y
+# end of Executable file formats
+
+#
+# Memory Management options
+#
+CONFIG_ZPOOL=y
+CONFIG_SWAP=y
+CONFIG_ZSWAP=y
+# CONFIG_ZSWAP_DEFAULT_ON is not set
+# CONFIG_ZSWAP_SHRINKER_DEFAULT_ON is not set
+# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_DEFLATE is not set
+CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZO=y
+# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_842 is not set
+# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4 is not set
+# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_LZ4HC is not set
+# CONFIG_ZSWAP_COMPRESSOR_DEFAULT_ZSTD is not set
+CONFIG_ZSWAP_COMPRESSOR_DEFAULT="lzo"
+# CONFIG_ZSWAP_ZPOOL_DEFAULT_ZBUD is not set
+# CONFIG_ZSWAP_ZPOOL_DEFAULT_Z3FOLD_DEPRECATED is not set
+CONFIG_ZSWAP_ZPOOL_DEFAULT_ZSMALLOC=y
+CONFIG_ZSWAP_ZPOOL_DEFAULT="zsmalloc"
+# CONFIG_ZBUD is not set
+# CONFIG_Z3FOLD_DEPRECATED is not set
+CONFIG_ZSMALLOC=y
+# CONFIG_ZSMALLOC_STAT is not set
+CONFIG_ZSMALLOC_CHAIN_SIZE=8
+
+#
+# Slab allocator options
+#
+CONFIG_SLUB=y
+# CONFIG_SLUB_TINY is not set
+CONFIG_SLAB_MERGE_DEFAULT=y
+# CONFIG_SLAB_FREELIST_RANDOM is not set
+# CONFIG_SLAB_FREELIST_HARDENED is not set
+# CONFIG_SLAB_BUCKETS is not set
+# CONFIG_SLUB_STATS is not set
+CONFIG_SLUB_CPU_PARTIAL=y
+# CONFIG_RANDOM_KMALLOC_CACHES is not set
+# end of Slab allocator options
+
+# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set
+# CONFIG_COMPAT_BRK is not set
+CONFIG_SPARSEMEM=y
+CONFIG_SPARSEMEM_EXTREME=y
+CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y
+CONFIG_SPARSEMEM_VMEMMAP=y
+CONFIG_ARCH_WANT_OPTIMIZE_DAX_VMEMMAP=y
+CONFIG_ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP=y
+CONFIG_HAVE_GUP_FAST=y
+CONFIG_NUMA_KEEP_MEMINFO=y
+CONFIG_MEMORY_ISOLATION=y
+CONFIG_EXCLUSIVE_SYSTEM_RAM=y
+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
+# CONFIG_MEMORY_HOTPLUG is not set
+CONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=y
+CONFIG_SPLIT_PTE_PTLOCKS=y
+CONFIG_ARCH_ENABLE_SPLIT_PMD_PTLOCK=y
+CONFIG_SPLIT_PMD_PTLOCKS=y
+CONFIG_COMPACTION=y
+CONFIG_COMPACT_UNEVICTABLE_DEFAULT=1
+CONFIG_PAGE_REPORTING=y
+CONFIG_MIGRATION=y
+CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION=y
+CONFIG_CONTIG_ALLOC=y
+CONFIG_PCP_BATCH_SCALE_MAX=5
+CONFIG_PHYS_ADDR_T_64BIT=y
+CONFIG_MMU_NOTIFIER=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
+CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=y
+CONFIG_MEMORY_FAILURE=y
+CONFIG_HWPOISON_INJECT=m
+CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
+CONFIG_ARCH_WANTS_THP_SWAP=y
+# CONFIG_TRANSPARENT_HUGEPAGE is not set
+CONFIG_PGTABLE_HAS_HUGE_LEAVES=y
+CONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=y
+CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y
+CONFIG_USE_PERCPU_NUMA_NODE_ID=y
+CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+CONFIG_CMA=y
+# CONFIG_CMA_DEBUGFS is not set
+# CONFIG_CMA_SYSFS is not set
+CONFIG_CMA_AREAS=20
+CONFIG_MEM_SOFT_DIRTY=y
+CONFIG_GENERIC_EARLY_IOREMAP=y
+# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not set
+CONFIG_PAGE_IDLE_FLAG=y
+CONFIG_IDLE_PAGE_TRACKING=y
+CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
+CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y
+CONFIG_ARCH_HAS_PTE_DEVMAP=y
+CONFIG_ARCH_HAS_ZONE_DMA_SET=y
+CONFIG_ZONE_DMA=y
+CONFIG_ZONE_DMA32=y
+CONFIG_HMM_MIRROR=y
+CONFIG_VMAP_PFN=y
+CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y
+CONFIG_ARCH_HAS_PKEYS=y
+CONFIG_ARCH_USES_PG_ARCH_2=y
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_PERCPU_STATS is not set
+# CONFIG_GUP_TEST is not set
+# CONFIG_DMAPOOL_TEST is not set
+CONFIG_ARCH_HAS_PTE_SPECIAL=y
+CONFIG_MEMFD_CREATE=y
+CONFIG_SECRETMEM=y
+# CONFIG_ANON_VMA_NAME is not set
+CONFIG_HAVE_ARCH_USERFAULTFD_WP=y
+CONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y
+CONFIG_USERFAULTFD=y
+CONFIG_PTE_MARKER_UFFD_WP=y
+# CONFIG_LRU_GEN is not set
+CONFIG_ARCH_SUPPORTS_PER_VMA_LOCK=y
+CONFIG_PER_VMA_LOCK=y
+CONFIG_LOCK_MM_AND_FIND_VMA=y
+CONFIG_IOMMU_MM_DATA=y
+CONFIG_EXECMEM=y
+CONFIG_NUMA_MEMBLKS=y
+# CONFIG_NUMA_EMU is not set
+CONFIG_ARCH_SUPPORTS_PT_RECLAIM=y
+CONFIG_PT_RECLAIM=y
+
+#
+# Data Access Monitoring
+#
+# CONFIG_DAMON is not set
+# end of Data Access Monitoring
+# end of Memory Management options
+
+CONFIG_NET=y
+CONFIG_COMPAT_NETLINK_MESSAGES=y
+CONFIG_SKB_DECRYPTED=y
+CONFIG_SKB_EXTENSIONS=y
+CONFIG_NET_DEVMEM=y
+CONFIG_NET_SHAPER=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_DIAG=m
+CONFIG_UNIX=y
+CONFIG_AF_UNIX_OOB=y
+CONFIG_UNIX_DIAG=m
+CONFIG_TLS=m
+CONFIG_TLS_DEVICE=y
+# CONFIG_TLS_TOE is not set
+CONFIG_XFRM=y
+CONFIG_XFRM_OFFLOAD=y
+CONFIG_XFRM_ALGO=m
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_USER_COMPAT is not set
+# CONFIG_XFRM_INTERFACE is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+CONFIG_XFRM_STATISTICS=y
+CONFIG_XFRM_AH=m
+CONFIG_XFRM_ESP=m
+CONFIG_XFRM_IPCOMP=m
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+# CONFIG_XFRM_IPTFS is not set
+CONFIG_XFRM_ESPINTCP=y
+CONFIG_NET_HANDSHAKE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_IP_FIB_TRIE_STATS=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE_DEMUX is not set
+CONFIG_NET_IP_TUNNEL=y
+CONFIG_IP_MROUTE_COMMON=y
+CONFIG_IP_MROUTE=y
+# CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+CONFIG_SYN_COOKIES=y
+CONFIG_NET_IPVTI=m
+CONFIG_NET_UDP_TUNNEL=y
+CONFIG_NET_FOU=m
+# CONFIG_NET_FOU_IP_TUNNELS is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+CONFIG_INET_TABLE_PERTURB_ORDER=16
+CONFIG_INET_TUNNEL=m
+# CONFIG_INET_DIAG is not set
+CONFIG_TCP_CONG_ADVANCED=y
+# CONFIG_TCP_CONG_BIC is not set
+CONFIG_TCP_CONG_CUBIC=y
+# CONFIG_TCP_CONG_WESTWOOD is not set
+# CONFIG_TCP_CONG_HTCP is not set
+# 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_DEFAULT_CUBIC=y
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_SIGPOOL=y
+CONFIG_TCP_MD5SIG=y
+CONFIG_IPV6=m
+CONFIG_IPV6_ROUTER_PREF=y
+CONFIG_IPV6_ROUTE_INFO=y
+CONFIG_IPV6_OPTIMISTIC_DAD=y
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_ESP_OFFLOAD=m
+CONFIG_INET6_ESPINTCP=y
+CONFIG_INET6_IPCOMP=m
+CONFIG_IPV6_MIP6=m
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_IPV6_VTI=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_SIT_6RD=y
+CONFIG_IPV6_NDISC_NODETYPE=y
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_FOU=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_IPV6_MROUTE=y
+CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
+CONFIG_IPV6_PIMSM_V2=y
+# CONFIG_IPV6_SEG6_LWTUNNEL is not set
+# CONFIG_IPV6_SEG6_HMAC is not set
+# CONFIG_IPV6_RPL_LWTUNNEL is not set
+# CONFIG_IPV6_IOAM6_LWTUNNEL is not set
+CONFIG_NETLABEL=y
+CONFIG_MPTCP=y
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NET_PTP_CLASSIFY=y
+# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
+# CONFIG_NETFILTER is not set
+CONFIG_IP_DCCP=m
+
+#
+# DCCP CCIDs Configuration
+#
+# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+# CONFIG_IP_DCCP_CCID3 is not set
+# end of DCCP CCIDs Configuration
+
+#
+# DCCP Kernel Hacking
+#
+# CONFIG_IP_DCCP_DEBUG is not set
+# end of DCCP Kernel Hacking
+
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set
+CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
+# CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set
+CONFIG_SCTP_COOKIE_HMAC_MD5=y
+CONFIG_SCTP_COOKIE_HMAC_SHA1=y
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
+CONFIG_STP=m
+CONFIG_GARP=m
+CONFIG_MRP=m
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+CONFIG_VLAN_8021Q=m
+CONFIG_VLAN_8021Q_GVRP=y
+CONFIG_VLAN_8021Q_MVRP=y
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_PHONET is not set
+# CONFIG_6LOWPAN is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+CONFIG_DNS_RESOLVER=y
+# CONFIG_BATMAN_ADV is not set
+# CONFIG_OPENVSWITCH is not set
+# CONFIG_VSOCKETS is not set
+CONFIG_NETLINK_DIAG=m
+# CONFIG_MPLS is not set
+# CONFIG_NET_NSH is not set
+# CONFIG_HSR is not set
+# CONFIG_NET_SWITCHDEV is not set
+# CONFIG_NET_L3_MASTER_DEV is not set
+CONFIG_QRTR=m
+# CONFIG_QRTR_TUN is not set
+CONFIG_QRTR_MHI=m
+# CONFIG_NET_NCSI is not set
+CONFIG_PCPU_DEV_REFCNT=y
+CONFIG_MAX_SKB_FRAGS=17
+CONFIG_RPS=y
+CONFIG_RFS_ACCEL=y
+CONFIG_SOCK_RX_QUEUE_MAPPING=y
+CONFIG_XPS=y
+# CONFIG_CGROUP_NET_PRIO is not set
+# CONFIG_CGROUP_NET_CLASSID is not set
+CONFIG_NET_RX_BUSY_POLL=y
+CONFIG_BQL=y
+CONFIG_NET_FLOW_LIMIT=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_NET_DROP_MONITOR is not set
+# end of Network testing
+# end of Networking options
+
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_BT=m
+CONFIG_BT_BREDR=y
+CONFIG_BT_RFCOMM=m
+CONFIG_BT_RFCOMM_TTY=y
+CONFIG_BT_BNEP=m
+CONFIG_BT_BNEP_MC_FILTER=y
+CONFIG_BT_BNEP_PROTO_FILTER=y
+CONFIG_BT_HIDP=m
+CONFIG_BT_LE=y
+CONFIG_BT_LE_L2CAP_ECRED=y
+CONFIG_BT_LEDS=y
+CONFIG_BT_MSFTEXT=y
+CONFIG_BT_AOSPEXT=y
+CONFIG_BT_DEBUGFS=y
+# CONFIG_BT_SELFTEST is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_INTEL=m
+CONFIG_BT_BCM=m
+CONFIG_BT_RTL=m
+CONFIG_BT_QCA=m
+CONFIG_BT_MTK=m
+CONFIG_BT_HCIBTUSB=m
+CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
+CONFIG_BT_HCIBTUSB_POLL_SYNC=y
+CONFIG_BT_HCIBTUSB_AUTO_ISOC_ALT=y
+CONFIG_BT_HCIBTUSB_BCM=y
+CONFIG_BT_HCIBTUSB_MTK=y
+CONFIG_BT_HCIBTUSB_RTL=y
+CONFIG_BT_HCIBTSDIO=m
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_SERDEV=y
+CONFIG_BT_HCIUART_H4=y
+# CONFIG_BT_HCIUART_NOKIA is not set
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_ATH3K=y
+# CONFIG_BT_HCIUART_LL is not set
+# CONFIG_BT_HCIUART_3WIRE is not set
+CONFIG_BT_HCIUART_INTEL=y
+# CONFIG_BT_HCIUART_RTL is not set
+CONFIG_BT_HCIUART_QCA=y
+CONFIG_BT_HCIUART_AG6XX=y
+# CONFIG_BT_HCIUART_MRVL is not set
+# CONFIG_BT_HCIUART_AML is not set
+CONFIG_BT_HCIBCM203X=m
+# CONFIG_BT_HCIBCM4377 is not set
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_BT_MRVL=m
+CONFIG_BT_MRVL_SDIO=m
+CONFIG_BT_ATH3K=m
+CONFIG_BT_MTKSDIO=m
+# CONFIG_BT_MTKUART is not set
+CONFIG_BT_HCIRSI=m
+# CONFIG_BT_NXPUART is not set
+# CONFIG_BT_INTEL_PCIE is not set
+# end of Bluetooth device drivers
+
+CONFIG_AF_RXRPC=y
+# CONFIG_AF_RXRPC_INJECT_LOSS is not set
+# CONFIG_AF_RXRPC_INJECT_RX_DELAY is not set
+# CONFIG_AF_RXRPC_DEBUG is not set
+# CONFIG_RXKAD is not set
+# CONFIG_RXPERF is not set
+# CONFIG_AF_KCM is not set
+CONFIG_STREAM_PARSER=y
+# CONFIG_MCTP is not set
+CONFIG_FIB_RULES=y
+CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_PRIV=y
+CONFIG_CFG80211=y
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
+# CONFIG_CFG80211_CERTIFICATION_ONUS is not set
+CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y
+CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y
+CONFIG_CFG80211_DEFAULT_PS=y
+# CONFIG_CFG80211_DEBUGFS is not set
+CONFIG_CFG80211_CRDA_SUPPORT=y
+# CONFIG_CFG80211_WEXT is not set
+CONFIG_MAC80211=y
+CONFIG_MAC80211_HAS_RC=y
+CONFIG_MAC80211_RC_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel_ht"
+# CONFIG_MAC80211_MESH is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_MESSAGE_TRACING is not set
+# CONFIG_MAC80211_DEBUG_MENU is not set
+CONFIG_MAC80211_STA_HASH_MAX_SIZE=0
+CONFIG_RFKILL=y
+CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
+CONFIG_RFKILL_GPIO=m
+# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
+CONFIG_CEPH_LIB=m
+# CONFIG_CEPH_LIB_PRETTYDEBUG is not set
+# CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set
+# CONFIG_NFC is not set
+# CONFIG_PSAMPLE is not set
+# CONFIG_NET_IFE is not set
+# CONFIG_LWTUNNEL is not set
+CONFIG_DST_CACHE=y
+CONFIG_GRO_CELLS=y
+CONFIG_SOCK_VALIDATE_XMIT=y
+CONFIG_NET_SELFTESTS=y
+CONFIG_NET_SOCK_MSG=y
+CONFIG_NET_DEVLINK=y
+CONFIG_PAGE_POOL=y
+# CONFIG_PAGE_POOL_STATS is not set
+CONFIG_FAILOVER=y
+CONFIG_ETHTOOL_NETLINK=y
+
+#
+# Device Drivers
+#
+CONFIG_HAVE_PCI=y
+CONFIG_GENERIC_PCI_IOMAP=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+CONFIG_PCIEPORTBUS=y
+# CONFIG_HOTPLUG_PCI_PCIE is not set
+CONFIG_PCIEAER=y
+# CONFIG_PCIEAER_INJECT is not set
+# CONFIG_PCIE_ECRC is not set
+CONFIG_PCIEASPM=y
+CONFIG_PCIEASPM_DEFAULT=y
+# CONFIG_PCIEASPM_POWERSAVE is not set
+# CONFIG_PCIEASPM_POWER_SUPERSAVE is not set
+# CONFIG_PCIEASPM_PERFORMANCE is not set
+CONFIG_PCIE_PME=y
+CONFIG_PCIE_DPC=y
+CONFIG_PCIE_PTM=y
+CONFIG_PCIE_EDR=y
+CONFIG_PCI_MSI=y
+CONFIG_PCI_QUIRKS=y
+# CONFIG_PCI_DEBUG is not set
+CONFIG_PCI_REALLOC_ENABLE_AUTO=y
+CONFIG_PCI_STUB=m
+# CONFIG_PCI_PF_STUB is not set
+CONFIG_PCI_ATS=y
+CONFIG_PCI_LOCKLESS_CONFIG=y
+CONFIG_PCI_IOV=y
+# CONFIG_PCI_NPEM is not set
+CONFIG_PCI_PRI=y
+CONFIG_PCI_PASID=y
+# CONFIG_PCIE_TPH is not set
+CONFIG_PCI_LABEL=y
+# CONFIG_PCI_DYNAMIC_OF_NODES is not set
+# CONFIG_PCIE_BUS_TUNE_OFF is not set
+CONFIG_PCIE_BUS_DEFAULT=y
+# CONFIG_PCIE_BUS_SAFE is not set
+# CONFIG_PCIE_BUS_PERFORMANCE is not set
+# CONFIG_PCIE_BUS_PEER2PEER is not set
+CONFIG_VGA_ARB=y
+CONFIG_VGA_ARB_MAX_GPUS=16
+CONFIG_HOTPLUG_PCI=y
+CONFIG_HOTPLUG_PCI_ACPI=y
+CONFIG_HOTPLUG_PCI_ACPI_IBM=m
+CONFIG_HOTPLUG_PCI_CPCI=y
+CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
+CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
+# CONFIG_HOTPLUG_PCI_OCTEONEP is not set
+CONFIG_HOTPLUG_PCI_SHPC=y
+
+#
+# PCI controller drivers
+#
+# CONFIG_PCI_FTPCI100 is not set
+# CONFIG_PCI_HOST_GENERIC is not set
+# CONFIG_VMD is not set
+# CONFIG_PCIE_XILINX is not set
+
+#
+# Cadence-based PCIe controllers
+#
+# CONFIG_PCIE_CADENCE_PLAT_HOST is not set
+# end of Cadence-based PCIe controllers
+
+#
+# DesignWare-based PCIe controllers
+#
+# CONFIG_PCI_MESON is not set
+# CONFIG_PCIE_INTEL_GW is not set
+# CONFIG_PCIE_DW_PLAT_HOST is not set
+# end of DesignWare-based PCIe controllers
+
+#
+# Mobiveil-based PCIe controllers
+#
+# end of Mobiveil-based PCIe controllers
+
+#
+# PLDA-based PCIe controllers
+#
+# CONFIG_PCIE_MICROCHIP_HOST is not set
+# end of PLDA-based PCIe controllers
+# end of PCI controller drivers
+
+#
+# PCI Endpoint
+#
+# CONFIG_PCI_ENDPOINT is not set
+# end of PCI Endpoint
+
+#
+# PCI switch controller drivers
+#
+# CONFIG_PCI_SW_SWITCHTEC is not set
+# end of PCI switch controller drivers
+
+# CONFIG_CXL_BUS is not set
+CONFIG_PCCARD=m
+CONFIG_PCMCIA=m
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=m
+CONFIG_YENTA_O2=y
+CONFIG_YENTA_RICOH=y
+CONFIG_YENTA_TI=y
+CONFIG_YENTA_ENE_TUNE=y
+CONFIG_YENTA_TOSHIBA=y
+CONFIG_PD6729=m
+CONFIG_I82092=m
+CONFIG_PCCARD_NONSTATIC=y
+# CONFIG_RAPIDIO is not set
+
+#
+# Generic Driver Options
+#
+CONFIG_AUXILIARY_BUS=y
+CONFIG_UEVENT_HELPER=y
+CONFIG_UEVENT_HELPER_PATH=""
+CONFIG_DEVTMPFS=y
+CONFIG_DEVTMPFS_MOUNT=y
+# CONFIG_DEVTMPFS_SAFE is not set
+# CONFIG_STANDALONE is not set
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+
+#
+# Firmware loader
+#
+CONFIG_FW_LOADER=y
+CONFIG_FW_LOADER_DEBUG=y
+CONFIG_FW_LOADER_PAGED_BUF=y
+CONFIG_FW_LOADER_SYSFS=y
+CONFIG_EXTRA_FIRMWARE=""
+CONFIG_FW_LOADER_USER_HELPER=y
+# CONFIG_FW_LOADER_USER_HELPER_FALLBACK is not set
+# CONFIG_FW_LOADER_COMPRESS is not set
+CONFIG_FW_CACHE=y
+# CONFIG_FW_UPLOAD is not set
+# end of Firmware loader
+
+CONFIG_WANT_DEV_COREDUMP=y
+CONFIG_ALLOW_DEV_COREDUMP=y
+CONFIG_DEV_COREDUMP=y
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
+# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set
+CONFIG_GENERIC_CPU_DEVICES=y
+CONFIG_GENERIC_CPU_AUTOPROBE=y
+CONFIG_GENERIC_CPU_VULNERABILITIES=y
+CONFIG_REGMAP=y
+CONFIG_REGMAP_I2C=y
+CONFIG_REGMAP_SPI=y
+CONFIG_REGMAP_SPMI=m
+CONFIG_REGMAP_W1=m
+CONFIG_REGMAP_MMIO=y
+CONFIG_REGMAP_IRQ=y
+CONFIG_REGMAP_SOUNDWIRE=m
+CONFIG_REGMAP_SOUNDWIRE_MBQ=m
+CONFIG_DMA_SHARED_BUFFER=y
+# CONFIG_DMA_FENCE_TRACE is not set
+# CONFIG_FW_DEVLINK_SYNC_STATE_TIMEOUT is not set
+# end of Generic Driver Options
+
+#
+# Bus devices
+#
+# CONFIG_MOXTET is not set
+CONFIG_MHI_BUS=m
+# CONFIG_MHI_BUS_DEBUG is not set
+# CONFIG_MHI_BUS_PCI_GENERIC is not set
+# CONFIG_MHI_BUS_EP is not set
+# end of Bus devices
+
+#
+# Cache Drivers
+#
+# end of Cache Drivers
+
+CONFIG_CONNECTOR=y
+CONFIG_PROC_EVENTS=y
+
+#
+# Firmware Drivers
+#
+
+#
+# ARM System Control and Management Interface Protocol
+#
+# end of ARM System Control and Management Interface Protocol
+
+CONFIG_EDD=y
+CONFIG_EDD_OFF=y
+CONFIG_FIRMWARE_MEMMAP=y
+CONFIG_DMIID=y
+CONFIG_DMI_SYSFS=m
+CONFIG_DMI_SCAN_MACHINE_NON_EFI_FALLBACK=y
+CONFIG_ISCSI_IBFT_FIND=y
+CONFIG_ISCSI_IBFT=m
+# CONFIG_FW_CFG_SYSFS is not set
+CONFIG_SYSFB=y
+CONFIG_SYSFB_SIMPLEFB=y
+CONFIG_FW_CS_DSP=m
+# CONFIG_GOOGLE_FIRMWARE is not set
+
+#
+# EFI (Extensible Firmware Interface) Support
+#
+CONFIG_EFI_ESRT=y
+CONFIG_EFI_VARS_PSTORE=m
+# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set
+CONFIG_EFI_DXE_MEM_ATTRIBUTES=y
+CONFIG_EFI_RUNTIME_WRAPPERS=y
+CONFIG_EFI_BOOTLOADER_CONTROL=y
+# CONFIG_EFI_CAPSULE_LOADER is not set
+# CONFIG_EFI_TEST is not set
+CONFIG_EFI_DEV_PATH_PARSER=y
+CONFIG_APPLE_PROPERTIES=y
+# CONFIG_RESET_ATTACK_MITIGATION is not set
+# CONFIG_EFI_RCI2_TABLE is not set
+# CONFIG_EFI_DISABLE_PCI_DMA is not set
+CONFIG_EFI_EARLYCON=y
+CONFIG_EFI_CUSTOM_SSDT_OVERLAYS=y
+# CONFIG_EFI_DISABLE_RUNTIME is not set
+# CONFIG_EFI_COCO_SECRET is not set
+CONFIG_UNACCEPTED_MEMORY=y
+# end of EFI (Extensible Firmware Interface) Support
+
+CONFIG_UEFI_CPER=y
+CONFIG_UEFI_CPER_X86=y
+
+#
+# Qualcomm firmware drivers
+#
+# end of Qualcomm firmware drivers
+
+#
+# Tegra firmware driver
+#
+# end of Tegra firmware driver
+# end of Firmware Drivers
+
+# CONFIG_GNSS is not set
+CONFIG_MTD=m
+# CONFIG_MTD_TESTS is not set
+
+#
+# Partition parsers
+#
+CONFIG_MTD_CMDLINE_PARTS=m
+CONFIG_MTD_OF_PARTS=m
+CONFIG_MTD_REDBOOT_PARTS=m
+CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
+# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
+# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
+# end of Partition parsers
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_BLKDEVS=m
+CONFIG_MTD_BLOCK=m
+CONFIG_MTD_BLOCK_RO=m
+
+#
+# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK.
+#
+CONFIG_FTL=m
+CONFIG_NFTL=m
+CONFIG_NFTL_RW=y
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+CONFIG_SSFDC=m
+CONFIG_SM_FTL=m
+CONFIG_MTD_OOPS=m
+CONFIG_MTD_SWAP=m
+# CONFIG_MTD_PARTITIONED_MASTER is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+CONFIG_MTD_CFI_INTELEXT=m
+CONFIG_MTD_CFI_AMDSTD=m
+CONFIG_MTD_CFI_STAA=m
+CONFIG_MTD_CFI_UTIL=m
+CONFIG_MTD_RAM=m
+CONFIG_MTD_ROM=m
+CONFIG_MTD_ABSENT=m
+# end of RAM/ROM/Flash chip drivers
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_PHYSMAP=m
+# CONFIG_MTD_PHYSMAP_COMPAT is not set
+# CONFIG_MTD_PHYSMAP_OF is not set
+# CONFIG_MTD_PHYSMAP_GPIO_ADDR is not set
+CONFIG_MTD_SBC_GXX=m
+CONFIG_MTD_AMD76XROM=m
+CONFIG_MTD_ICHXROM=m
+CONFIG_MTD_ESB2ROM=m
+CONFIG_MTD_CK804XROM=m
+CONFIG_MTD_SCB2_FLASH=m
+CONFIG_MTD_NETtel=m
+CONFIG_MTD_L440GX=m
+CONFIG_MTD_PCI=m
+CONFIG_MTD_PCMCIA=m
+# CONFIG_MTD_PCMCIA_ANONYMOUS is not set
+CONFIG_MTD_PLATRAM=m
+# end of Mapping drivers for chip access
+
+#
+# Self-contained MTD device drivers
+#
+CONFIG_MTD_PMC551=m
+# CONFIG_MTD_PMC551_BUGFIX is not set
+# CONFIG_MTD_PMC551_DEBUG is not set
+CONFIG_MTD_DATAFLASH=m
+# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
+CONFIG_MTD_DATAFLASH_OTP=y
+# CONFIG_MTD_MCHP23K256 is not set
+# CONFIG_MTD_MCHP48L640 is not set
+CONFIG_MTD_SST25L=m
+CONFIG_MTD_SLRAM=m
+CONFIG_MTD_PHRAM=m
+CONFIG_MTD_MTDRAM=m
+CONFIG_MTDRAM_TOTAL_SIZE=4096
+CONFIG_MTDRAM_ERASE_SIZE=128
+CONFIG_MTD_BLOCK2MTD=m
+
+#
+# Disk-On-Chip Device Drivers
+#
+CONFIG_MTD_DOCG3=m
+CONFIG_BCH_CONST_M=14
+CONFIG_BCH_CONST_T=4
+# end of Self-contained MTD device drivers
+
+#
+# NAND
+#
+CONFIG_MTD_NAND_CORE=m
+CONFIG_MTD_ONENAND=m
+CONFIG_MTD_ONENAND_VERIFY_WRITE=y
+CONFIG_MTD_ONENAND_GENERIC=m
+# CONFIG_MTD_ONENAND_OTP is not set
+CONFIG_MTD_ONENAND_2X_PROGRAM=y
+# CONFIG_MTD_RAW_NAND is not set
+# CONFIG_MTD_SPI_NAND is not set
+
+#
+# ECC engine support
+#
+CONFIG_MTD_NAND_ECC=y
+CONFIG_MTD_NAND_ECC_SW_HAMMING=y
+# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set
+# CONFIG_MTD_NAND_ECC_SW_BCH is not set
+# CONFIG_MTD_NAND_ECC_MXIC is not set
+# end of ECC engine support
+# end of NAND
+
+#
+# LPDDR & LPDDR2 PCM memory drivers
+#
+CONFIG_MTD_LPDDR=m
+CONFIG_MTD_QINFO_PROBE=m
+# end of LPDDR & LPDDR2 PCM memory drivers
+
+CONFIG_MTD_SPI_NOR=m
+CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
+# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set
+CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y
+# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set
+CONFIG_MTD_UBI=m
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_LIMIT=20
+CONFIG_MTD_UBI_FASTMAP=y
+CONFIG_MTD_UBI_GLUEBI=m
+CONFIG_MTD_UBI_BLOCK=y
+# CONFIG_MTD_UBI_NVMEM is not set
+# CONFIG_MTD_HYPERBUS 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_KOBJ=y
+CONFIG_OF_DYNAMIC=y
+CONFIG_OF_ADDRESS=y
+CONFIG_OF_IRQ=y
+CONFIG_OF_RESERVED_MEM=y
+# CONFIG_OF_OVERLAY is not set
+CONFIG_OF_NUMA=y
+CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
+CONFIG_PARPORT=m
+CONFIG_PARPORT_PC=m
+CONFIG_PARPORT_SERIAL=m
+CONFIG_PARPORT_PC_FIFO=y
+# CONFIG_PARPORT_PC_SUPERIO is not set
+CONFIG_PARPORT_PC_PCMCIA=m
+CONFIG_PARPORT_1284=y
+CONFIG_PARPORT_NOT_PC=y
+CONFIG_PNP=y
+# CONFIG_PNP_DEBUG_MESSAGES is not set
+
+#
+# Protocols
+#
+CONFIG_PNPACPI=y
+CONFIG_BLK_DEV=y
+CONFIG_BLK_DEV_NULL_BLK=m
+CONFIG_BLK_DEV_FD=m
+# CONFIG_BLK_DEV_FD_RAWCMD is not set
+CONFIG_CDROM=y
+CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
+CONFIG_ZRAM=m
+# CONFIG_ZRAM_BACKEND_LZ4 is not set
+# CONFIG_ZRAM_BACKEND_LZ4HC is not set
+# CONFIG_ZRAM_BACKEND_ZSTD is not set
+# CONFIG_ZRAM_BACKEND_DEFLATE is not set
+# CONFIG_ZRAM_BACKEND_842 is not set
+CONFIG_ZRAM_BACKEND_FORCE_LZO=y
+CONFIG_ZRAM_BACKEND_LZO=y
+CONFIG_ZRAM_DEF_COMP_LZORLE=y
+# CONFIG_ZRAM_DEF_COMP_LZO is not set
+CONFIG_ZRAM_DEF_COMP="lzo-rle"
+# CONFIG_ZRAM_WRITEBACK is not set
+# CONFIG_ZRAM_TRACK_ENTRY_ACTIME is not set
+# CONFIG_ZRAM_MEMORY_TRACKING is not set
+# CONFIG_ZRAM_MULTI_COMP is not set
+CONFIG_BLK_DEV_LOOP=y
+CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
+# CONFIG_BLK_DEV_DRBD is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=65536
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+CONFIG_BLK_DEV_RBD=m
+# CONFIG_BLK_DEV_UBLK is not set
+
+#
+# NVME Support
+#
+CONFIG_NVME_CORE=y
+CONFIG_BLK_DEV_NVME=y
+# CONFIG_NVME_MULTIPATH is not set
+# CONFIG_NVME_VERBOSE_ERRORS is not set
+CONFIG_NVME_HWMON=y
+# CONFIG_NVME_FC is not set
+# CONFIG_NVME_TCP is not set
+# CONFIG_NVME_HOST_AUTH is not set
+# CONFIG_NVME_TARGET is not set
+# end of NVME Support
+
+#
+# Misc devices
+#
+CONFIG_SENSORS_LIS3LV02D=m
+CONFIG_AD525X_DPOT=m
+CONFIG_AD525X_DPOT_I2C=m
+CONFIG_AD525X_DPOT_SPI=m
+CONFIG_DUMMY_IRQ=m
+CONFIG_IBM_ASM=m
+CONFIG_PHANTOM=m
+CONFIG_RPMB=y
+CONFIG_TIFM_CORE=y
+CONFIG_TIFM_7XX1=m
+CONFIG_ICS932S401=m
+CONFIG_ENCLOSURE_SERVICES=m
+CONFIG_HI6421V600_IRQ=m
+CONFIG_HP_ILO=m
+CONFIG_APDS9802ALS=m
+CONFIG_ISL29003=m
+CONFIG_ISL29020=m
+CONFIG_SENSORS_TSL2550=m
+CONFIG_SENSORS_BH1770=m
+CONFIG_SENSORS_APDS990X=m
+CONFIG_HMC6352=m
+CONFIG_DS1682=m
+CONFIG_LATTICE_ECP3_CONFIG=m
+CONFIG_SRAM=y
+# CONFIG_DW_XDATA_PCIE is not set
+# CONFIG_PCI_ENDPOINT_TEST is not set
+# CONFIG_XILINX_SDFEC is not set
+# CONFIG_HISI_HIKEY_USB is not set
+# CONFIG_OPEN_DICE is not set
+# CONFIG_NTSYNC is not set
+# CONFIG_VCPU_STALL_DETECTOR is not set
+CONFIG_C2PORT=m
+CONFIG_C2PORT_DURAMAR_2150=m
+
+#
+# EEPROM support
+#
+CONFIG_EEPROM_AT24=m
+CONFIG_EEPROM_AT25=m
+CONFIG_EEPROM_MAX6875=m
+CONFIG_EEPROM_93CX6=y
+CONFIG_EEPROM_93XX46=m
+# CONFIG_EEPROM_IDT_89HPESX is not set
+# CONFIG_EEPROM_EE1004 is not set
+# end of EEPROM support
+
+CONFIG_CB710_CORE=y
+# CONFIG_CB710_DEBUG is not set
+CONFIG_CB710_DEBUG_ASSUMPTIONS=y
+CONFIG_SENSORS_LIS3_I2C=m
+# CONFIG_ALTERA_STAPL is not set
+CONFIG_INTEL_MEI=y
+CONFIG_INTEL_MEI_ME=y
+CONFIG_INTEL_MEI_TXE=m
+# CONFIG_INTEL_MEI_GSC is not set
+# CONFIG_INTEL_MEI_VSC_HW is not set
+CONFIG_INTEL_MEI_HDCP=m
+CONFIG_INTEL_MEI_PXP=m
+# CONFIG_INTEL_MEI_GSC_PROXY is not set
+# CONFIG_VMWARE_VMCI is not set
+CONFIG_GENWQE=m
+CONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0
+CONFIG_ECHO=m
+# CONFIG_BCM_VK is not set
+# CONFIG_MISC_ALCOR_PCI is not set
+# CONFIG_MISC_RTSX_PCI is not set
+# CONFIG_MISC_RTSX_USB is not set
+# CONFIG_UACCE is not set
+# CONFIG_PVPANIC is not set
+# CONFIG_GP_PCI1XXXX is not set
+# CONFIG_KEBA_CP500 is not set
+# end of Misc devices
+
+#
+# SCSI device support
+#
+CONFIG_SCSI_MOD=y
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI_COMMON=y
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_NETLINK=y
+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_BLK_DEV_SR=y
+CONFIG_CHR_DEV_SG=y
+CONFIG_BLK_DEV_BSG=y
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_ENCLOSURE is not set
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+
+#
+# SCSI Transports
+#
+CONFIG_SCSI_SPI_ATTRS=m
+CONFIG_SCSI_FC_ATTRS=m
+CONFIG_SCSI_ISCSI_ATTRS=m
+CONFIG_SCSI_SAS_ATTRS=m
+CONFIG_SCSI_SAS_LIBSAS=m
+CONFIG_SCSI_SAS_ATA=y
+CONFIG_SCSI_SAS_HOST_SMP=y
+CONFIG_SCSI_SRP_ATTRS=m
+# end of SCSI Transports
+
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+CONFIG_ISCSI_BOOT_SYSFS=m
+CONFIG_SCSI_CXGB3_ISCSI=m
+CONFIG_SCSI_CXGB4_ISCSI=m
+CONFIG_SCSI_BNX2_ISCSI=m
+CONFIG_SCSI_BNX2X_FCOE=m
+CONFIG_BE2ISCSI=m
+CONFIG_BLK_DEV_3W_XXXX_RAID=m
+CONFIG_SCSI_HPSA=m
+CONFIG_SCSI_3W_9XXX=m
+CONFIG_SCSI_3W_SAS=m
+CONFIG_SCSI_ACARD=m
+CONFIG_SCSI_AACRAID=m
+CONFIG_SCSI_AIC7XXX=m
+CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
+CONFIG_AIC7XXX_RESET_DELAY_MS=5000
+# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
+CONFIG_AIC7XXX_DEBUG_MASK=0
+CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC79XX=m
+CONFIG_AIC79XX_CMDS_PER_DEVICE=32
+CONFIG_AIC79XX_RESET_DELAY_MS=5000
+# CONFIG_AIC79XX_DEBUG_ENABLE is not set
+CONFIG_AIC79XX_DEBUG_MASK=0
+CONFIG_AIC79XX_REG_PRETTY_PRINT=y
+CONFIG_SCSI_AIC94XX=m
+# CONFIG_AIC94XX_DEBUG is not set
+CONFIG_SCSI_MVSAS=m
+# CONFIG_SCSI_MVSAS_DEBUG is not set
+# CONFIG_SCSI_MVSAS_TASKLET is not set
+CONFIG_SCSI_MVUMI=m
+CONFIG_SCSI_ADVANSYS=m
+CONFIG_SCSI_ARCMSR=m
+CONFIG_SCSI_ESAS2R=m
+CONFIG_MEGARAID_NEWGEN=y
+CONFIG_MEGARAID_MM=m
+CONFIG_MEGARAID_MAILBOX=m
+CONFIG_MEGARAID_LEGACY=m
+CONFIG_MEGARAID_SAS=m
+CONFIG_SCSI_MPT3SAS=m
+CONFIG_SCSI_MPT2SAS_MAX_SGE=128
+CONFIG_SCSI_MPT3SAS_MAX_SGE=128
+CONFIG_SCSI_MPT2SAS=m
+# CONFIG_SCSI_MPI3MR is not set
+# CONFIG_SCSI_SMARTPQI is not set
+CONFIG_SCSI_HPTIOP=m
+CONFIG_SCSI_BUSLOGIC=m
+CONFIG_SCSI_FLASHPOINT=y
+# CONFIG_SCSI_MYRB is not set
+# CONFIG_SCSI_MYRS is not set
+CONFIG_VMWARE_PVSCSI=m
+CONFIG_LIBFC=m
+CONFIG_LIBFCOE=m
+CONFIG_FCOE=m
+CONFIG_FCOE_FNIC=m
+CONFIG_SCSI_SNIC=m
+# CONFIG_SCSI_SNIC_DEBUG_FS is not set
+CONFIG_SCSI_DMX3191D=m
+CONFIG_SCSI_FDOMAIN=m
+# CONFIG_SCSI_FDOMAIN_PCI is not set
+CONFIG_SCSI_ISCI=m
+CONFIG_SCSI_IPS=m
+CONFIG_SCSI_INITIO=m
+CONFIG_SCSI_INIA100=m
+CONFIG_SCSI_PPA=m
+CONFIG_SCSI_IMM=m
+# CONFIG_SCSI_IZIP_SLOW_CTR is not set
+CONFIG_SCSI_STEX=m
+CONFIG_SCSI_SYM53C8XX_2=m
+CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
+CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
+CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
+CONFIG_SCSI_SYM53C8XX_MMIO=y
+CONFIG_SCSI_IPR=m
+CONFIG_SCSI_IPR_TRACE=y
+CONFIG_SCSI_IPR_DUMP=y
+CONFIG_SCSI_QLOGIC_1280=m
+CONFIG_SCSI_QLA_FC=m
+# CONFIG_TCM_QLA2XXX is not set
+CONFIG_SCSI_QLA_ISCSI=m
+# CONFIG_QEDI is not set
+# CONFIG_QEDF is not set
+CONFIG_SCSI_LPFC=m
+# CONFIG_SCSI_LPFC_DEBUG_FS is not set
+# CONFIG_SCSI_EFCT is not set
+CONFIG_SCSI_DC395x=m
+CONFIG_SCSI_AM53C974=m
+CONFIG_SCSI_WD719X=m
+CONFIG_SCSI_DEBUG=m
+CONFIG_SCSI_PMCRAID=m
+CONFIG_SCSI_PM8001=m
+CONFIG_SCSI_BFA_FC=m
+CONFIG_SCSI_CHELSIO_FCOE=m
+CONFIG_SCSI_LOWLEVEL_PCMCIA=y
+CONFIG_PCMCIA_AHA152X=m
+CONFIG_PCMCIA_FDOMAIN=m
+CONFIG_PCMCIA_QLOGIC=m
+CONFIG_PCMCIA_SYM53C500=m
+CONFIG_SCSI_DH=y
+CONFIG_SCSI_DH_RDAC=m
+CONFIG_SCSI_DH_HP_SW=m
+CONFIG_SCSI_DH_EMC=m
+CONFIG_SCSI_DH_ALUA=m
+# end of SCSI device support
+
+CONFIG_ATA=y
+CONFIG_SATA_HOST=y
+CONFIG_PATA_TIMINGS=y
+CONFIG_ATA_VERBOSE_ERROR=y
+CONFIG_ATA_FORCE=y
+CONFIG_ATA_ACPI=y
+CONFIG_SATA_ZPODD=y
+CONFIG_SATA_PMP=y
+
+#
+# Controllers with non-SFF native interface
+#
+CONFIG_SATA_AHCI=y
+CONFIG_SATA_MOBILE_LPM_POLICY=3
+CONFIG_SATA_AHCI_PLATFORM=y
+# CONFIG_AHCI_DWC is not set
+# CONFIG_AHCI_CEVA is not set
+CONFIG_SATA_INIC162X=y
+CONFIG_SATA_ACARD_AHCI=y
+CONFIG_SATA_SIL24=y
+CONFIG_ATA_SFF=y
+
+#
+# SFF controllers with custom DMA interface
+#
+CONFIG_PDC_ADMA=y
+CONFIG_SATA_QSTOR=y
+CONFIG_SATA_SX4=y
+CONFIG_ATA_BMDMA=y
+
+#
+# SATA SFF controllers with BMDMA
+#
+CONFIG_ATA_PIIX=y
+CONFIG_SATA_MV=y
+CONFIG_SATA_NV=y
+CONFIG_SATA_PROMISE=y
+CONFIG_SATA_SIL=y
+CONFIG_SATA_SIS=y
+CONFIG_SATA_SVW=y
+CONFIG_SATA_ULI=y
+CONFIG_SATA_VIA=y
+CONFIG_SATA_VITESSE=y
+
+#
+# PATA SFF controllers with BMDMA
+#
+CONFIG_PATA_ALI=y
+CONFIG_PATA_AMD=y
+CONFIG_PATA_ARTOP=y
+CONFIG_PATA_ATIIXP=y
+CONFIG_PATA_ATP867X=y
+CONFIG_PATA_CMD64X=y
+CONFIG_PATA_CYPRESS=y
+CONFIG_PATA_EFAR=y
+CONFIG_PATA_HPT366=y
+CONFIG_PATA_HPT37X=y
+CONFIG_PATA_HPT3X2N=y
+CONFIG_PATA_HPT3X3=y
+CONFIG_PATA_HPT3X3_DMA=y
+CONFIG_PATA_IT8213=y
+CONFIG_PATA_IT821X=y
+CONFIG_PATA_JMICRON=y
+CONFIG_PATA_MARVELL=y
+CONFIG_PATA_NETCELL=y
+CONFIG_PATA_NINJA32=y
+CONFIG_PATA_NS87415=y
+CONFIG_PATA_OLDPIIX=y
+CONFIG_PATA_OPTIDMA=y
+CONFIG_PATA_PDC2027X=y
+CONFIG_PATA_PDC_OLD=y
+CONFIG_PATA_RADISYS=y
+CONFIG_PATA_RDC=y
+CONFIG_PATA_SCH=y
+CONFIG_PATA_SERVERWORKS=y
+CONFIG_PATA_SIL680=y
+CONFIG_PATA_SIS=y
+CONFIG_PATA_TOSHIBA=y
+CONFIG_PATA_TRIFLEX=y
+CONFIG_PATA_VIA=y
+CONFIG_PATA_WINBOND=y
+
+#
+# PIO-only SFF controllers
+#
+CONFIG_PATA_CMD640_PCI=y
+CONFIG_PATA_MPIIX=y
+CONFIG_PATA_NS87410=y
+CONFIG_PATA_OPTI=y
+CONFIG_PATA_PCMCIA=m
+# CONFIG_PATA_OF_PLATFORM is not set
+CONFIG_PATA_RZ1000=y
+# CONFIG_PATA_PARPORT is not set
+
+#
+# Generic fallback / legacy drivers
+#
+CONFIG_PATA_ACPI=y
+CONFIG_ATA_GENERIC=y
+CONFIG_PATA_LEGACY=y
+CONFIG_MD=y
+# CONFIG_BLK_DEV_MD is not set
+CONFIG_MD_BITMAP_FILE=y
+# CONFIG_BCACHE is not set
+CONFIG_BLK_DEV_DM_BUILTIN=y
+CONFIG_BLK_DEV_DM=m
+# CONFIG_DM_DEBUG is not set
+# CONFIG_DM_UNSTRIPED is not set
+# CONFIG_DM_CRYPT is not set
+# CONFIG_DM_SNAPSHOT is not set
+# CONFIG_DM_THIN_PROVISIONING is not set
+# CONFIG_DM_CACHE is not set
+# CONFIG_DM_WRITECACHE is not set
+# CONFIG_DM_EBS is not set
+# CONFIG_DM_ERA is not set
+# CONFIG_DM_CLONE 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_DUST is not set
+CONFIG_DM_UEVENT=y
+# CONFIG_DM_FLAKEY is not set
+# CONFIG_DM_VERITY is not set
+# CONFIG_DM_SWITCH is not set
+# CONFIG_DM_LOG_WRITES is not set
+# CONFIG_DM_INTEGRITY is not set
+# CONFIG_DM_AUDIT is not set
+# CONFIG_DM_VDO is not set
+CONFIG_TARGET_CORE=m
+# CONFIG_TCM_IBLOCK is not set
+# CONFIG_TCM_FILEIO is not set
+# CONFIG_TCM_PSCSI is not set
+# CONFIG_TCM_USER2 is not set
+# CONFIG_LOOPBACK_TARGET is not set
+# CONFIG_TCM_FC is not set
+# CONFIG_ISCSI_TARGET is not set
+# CONFIG_SBP_TARGET is not set
+# CONFIG_REMOTE_TARGET is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+CONFIG_FIREWIRE=m
+CONFIG_FIREWIRE_OHCI=m
+CONFIG_FIREWIRE_SBP2=m
+CONFIG_FIREWIRE_NET=m
+CONFIG_FIREWIRE_NOSY=m
+# end of IEEE 1394 (FireWire) support
+
+CONFIG_MACINTOSH_DRIVERS=y
+CONFIG_MAC_EMUMOUSEBTN=m
+CONFIG_NETDEVICES=y
+CONFIG_MII=m
+CONFIG_NET_CORE=y
+# CONFIG_BONDING is not set
+CONFIG_DUMMY=m
+# CONFIG_WIREGUARD is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_NET_FC is not set
+# CONFIG_NET_TEAM is not set
+CONFIG_MACVLAN=m
+CONFIG_MACVTAP=m
+CONFIG_IPVLAN=m
+# CONFIG_IPVTAP is not set
+# CONFIG_VXLAN is not set
+# CONFIG_GENEVE is not set
+# CONFIG_BAREUDP is not set
+# CONFIG_GTP is not set
+# CONFIG_PFCP is not set
+# CONFIG_AMT is not set
+# CONFIG_MACSEC is not set
+CONFIG_NETCONSOLE=m
+CONFIG_NETCONSOLE_DYNAMIC=y
+# CONFIG_NETCONSOLE_EXTENDED_LOG is not set
+CONFIG_NETPOLL=y
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_NTB_NETDEV is not set
+CONFIG_TUN=y
+CONFIG_TAP=m
+# CONFIG_TUN_VNET_CROSS_LE is not set
+CONFIG_VETH=m
+CONFIG_NLMON=m
+# CONFIG_MHI_NET is not set
+CONFIG_SUNGEM_PHY=m
+# CONFIG_ARCNET is not set
+CONFIG_ETHERNET=y
+CONFIG_MDIO=m
+CONFIG_NET_VENDOR_3COM=y
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_3C589=m
+CONFIG_VORTEX=m
+CONFIG_TYPHOON=m
+CONFIG_NET_VENDOR_ADAPTEC=y
+CONFIG_ADAPTEC_STARFIRE=m
+CONFIG_NET_VENDOR_AGERE=y
+CONFIG_ET131X=m
+CONFIG_NET_VENDOR_ALACRITECH=y
+CONFIG_SLICOSS=m
+CONFIG_NET_VENDOR_ALTEON=y
+CONFIG_ACENIC=m
+# CONFIG_ACENIC_OMIT_TIGON_I is not set
+CONFIG_ALTERA_TSE=m
+CONFIG_NET_VENDOR_AMAZON=y
+CONFIG_ENA_ETHERNET=m
+CONFIG_NET_VENDOR_AMD=y
+CONFIG_AMD8111_ETH=m
+CONFIG_PCNET32=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_AMD_XGBE=m
+CONFIG_AMD_XGBE_HAVE_ECC=y
+CONFIG_PDS_CORE=m
+CONFIG_NET_VENDOR_AQUANTIA=y
+CONFIG_AQTION=m
+CONFIG_NET_VENDOR_ARC=y
+CONFIG_NET_VENDOR_ASIX=y
+# CONFIG_SPI_AX88796C is not set
+CONFIG_NET_VENDOR_ATHEROS=y
+CONFIG_ATL2=m
+CONFIG_ATL1=m
+CONFIG_ATL1E=m
+CONFIG_ATL1C=m
+CONFIG_ALX=m
+CONFIG_CX_ECAT=m
+CONFIG_NET_VENDOR_BROADCOM=y
+CONFIG_B44=m
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+CONFIG_BCMGENET=m
+CONFIG_BNX2=m
+CONFIG_CNIC=m
+CONFIG_TIGON3=m
+CONFIG_TIGON3_HWMON=y
+CONFIG_BNX2X=m
+CONFIG_BNX2X_SRIOV=y
+CONFIG_SYSTEMPORT=m
+CONFIG_BNXT=m
+CONFIG_BNXT_SRIOV=y
+CONFIG_BNXT_FLOWER_OFFLOAD=y
+CONFIG_BNXT_HWMON=y
+CONFIG_NET_VENDOR_CADENCE=y
+CONFIG_MACB=m
+CONFIG_MACB_USE_HWSTAMP=y
+CONFIG_MACB_PCI=m
+CONFIG_NET_VENDOR_CAVIUM=y
+CONFIG_THUNDER_NIC_PF=m
+CONFIG_THUNDER_NIC_VF=m
+CONFIG_THUNDER_NIC_BGX=m
+CONFIG_THUNDER_NIC_RGX=m
+CONFIG_CAVIUM_PTP=m
+CONFIG_LIQUIDIO_CORE=m
+CONFIG_LIQUIDIO=m
+CONFIG_LIQUIDIO_VF=m
+CONFIG_NET_VENDOR_CHELSIO=y
+CONFIG_CHELSIO_T1=m
+CONFIG_CHELSIO_T1_1G=y
+CONFIG_CHELSIO_T3=m
+CONFIG_CHELSIO_T4=m
+CONFIG_CHELSIO_T4VF=m
+CONFIG_CHELSIO_LIB=m
+CONFIG_CHELSIO_INLINE_CRYPTO=y
+# CONFIG_CHELSIO_IPSEC_INLINE is not set
+# CONFIG_CHELSIO_TLS_DEVICE is not set
+CONFIG_NET_VENDOR_CISCO=y
+CONFIG_ENIC=m
+CONFIG_NET_VENDOR_CORTINA=y
+CONFIG_GEMINI_ETHERNET=m
+CONFIG_NET_VENDOR_DAVICOM=y
+# CONFIG_DM9051 is not set
+CONFIG_DNET=m
+CONFIG_NET_VENDOR_DEC=y
+CONFIG_NET_TULIP=y
+CONFIG_DE2104X=m
+CONFIG_DE2104X_DSL=0
+CONFIG_TULIP=m
+CONFIG_TULIP_MWI=y
+CONFIG_TULIP_MMIO=y
+CONFIG_TULIP_NAPI=y
+CONFIG_TULIP_NAPI_HW_MITIGATION=y
+CONFIG_WINBOND_840=m
+CONFIG_DM9102=m
+CONFIG_ULI526X=m
+CONFIG_PCMCIA_XIRCOM=m
+CONFIG_NET_VENDOR_DLINK=y
+CONFIG_DL2K=m
+CONFIG_NET_VENDOR_EMULEX=y
+CONFIG_BE2NET=m
+CONFIG_BE2NET_HWMON=y
+CONFIG_BE2NET_BE2=y
+CONFIG_BE2NET_BE3=y
+CONFIG_BE2NET_LANCER=y
+CONFIG_BE2NET_SKYHAWK=y
+CONFIG_NET_VENDOR_ENGLEDER=y
+# CONFIG_TSNEP is not set
+CONFIG_NET_VENDOR_EZCHIP=y
+CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=m
+CONFIG_NET_VENDOR_FUJITSU=y
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_NET_VENDOR_FUNGIBLE=y
+# CONFIG_FUN_ETH is not set
+CONFIG_NET_VENDOR_GOOGLE=y
+CONFIG_GVE=m
+CONFIG_NET_VENDOR_HISILICON=y
+# CONFIG_HIBMCGE is not set
+CONFIG_NET_VENDOR_HUAWEI=y
+CONFIG_HINIC=m
+CONFIG_NET_VENDOR_I825XX=y
+CONFIG_NET_VENDOR_INTEL=y
+CONFIG_LIBETH=m
+CONFIG_LIBIE=m
+CONFIG_E100=m
+CONFIG_E1000=m
+CONFIG_E1000E=m
+CONFIG_E1000E_HWTS=y
+CONFIG_IGB=m
+CONFIG_IGB_HWMON=y
+CONFIG_IGBVF=m
+CONFIG_IXGBE=m
+CONFIG_IXGBE_HWMON=y
+CONFIG_IXGBE_IPSEC=y
+CONFIG_IXGBEVF=m
+CONFIG_IXGBEVF_IPSEC=y
+CONFIG_I40E=m
+CONFIG_IAVF=m
+CONFIG_I40EVF=m
+CONFIG_ICE=m
+CONFIG_ICE_HWMON=y
+CONFIG_ICE_HWTS=y
+CONFIG_FM10K=m
+CONFIG_IGC=m
+CONFIG_IGC_LEDS=y
+# CONFIG_IDPF is not set
+CONFIG_JME=m
+CONFIG_NET_VENDOR_ADI=y
+CONFIG_NET_VENDOR_LITEX=y
+# CONFIG_LITEX_LITEETH is not set
+CONFIG_NET_VENDOR_MARVELL=y
+CONFIG_MVMDIO=m
+CONFIG_SKGE=m
+# CONFIG_SKGE_DEBUG is not set
+CONFIG_SKGE_GENESIS=y
+CONFIG_SKY2=m
+# CONFIG_SKY2_DEBUG is not set
+# CONFIG_OCTEON_EP is not set
+# CONFIG_OCTEON_EP_VF is not set
+# CONFIG_NET_VENDOR_MELLANOX is not set
+CONFIG_NET_VENDOR_META=y
+# CONFIG_FBNIC is not set
+CONFIG_NET_VENDOR_MICREL=y
+CONFIG_KS8851=m
+CONFIG_KS8851_MLL=m
+CONFIG_KSZ884X_PCI=m
+CONFIG_NET_VENDOR_MICROCHIP=y
+CONFIG_ENC28J60=m
+# CONFIG_ENC28J60_WRITEVERIFY is not set
+CONFIG_ENCX24J600=m
+CONFIG_LAN743X=m
+# CONFIG_LAN865X is not set
+# CONFIG_VCAP is not set
+CONFIG_NET_VENDOR_MICROSEMI=y
+CONFIG_NET_VENDOR_MICROSOFT=y
+CONFIG_NET_VENDOR_MYRI=y
+CONFIG_MYRI10GE=m
+CONFIG_FEALNX=m
+CONFIG_NET_VENDOR_NI=y
+CONFIG_NI_XGE_MANAGEMENT_ENET=m
+CONFIG_NET_VENDOR_NATSEMI=y
+CONFIG_NATSEMI=m
+CONFIG_NS83820=m
+CONFIG_NET_VENDOR_NETERION=y
+CONFIG_S2IO=m
+CONFIG_NET_VENDOR_NETRONOME=y
+# CONFIG_NFP is not set
+CONFIG_NET_VENDOR_8390=y
+CONFIG_PCMCIA_AXNET=m
+CONFIG_NE2K_PCI=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_NET_VENDOR_NVIDIA=y
+CONFIG_FORCEDETH=m
+CONFIG_NET_VENDOR_OKI=y
+CONFIG_ETHOC=m
+CONFIG_NET_VENDOR_PACKET_ENGINES=y
+CONFIG_HAMACHI=m
+CONFIG_YELLOWFIN=m
+CONFIG_NET_VENDOR_PENSANDO=y
+CONFIG_IONIC=m
+CONFIG_NET_VENDOR_QLOGIC=y
+CONFIG_QLA3XXX=m
+CONFIG_QLCNIC=m
+CONFIG_QLCNIC_SRIOV=y
+CONFIG_QLCNIC_HWMON=y
+CONFIG_NETXEN_NIC=m
+CONFIG_QED=m
+CONFIG_QED_SRIOV=y
+CONFIG_QEDE=m
+CONFIG_NET_VENDOR_BROCADE=y
+CONFIG_BNA=m
+CONFIG_NET_VENDOR_QUALCOMM=y
+CONFIG_QCA7000=m
+CONFIG_QCA7000_SPI=m
+# CONFIG_QCA7000_UART is not set
+CONFIG_QCOM_EMAC=m
+CONFIG_RMNET=m
+CONFIG_NET_VENDOR_RDC=y
+CONFIG_R6040=m
+CONFIG_NET_VENDOR_REALTEK=y
+CONFIG_ATP=m
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+CONFIG_8139TOO_PIO=y
+CONFIG_8139TOO_TUNE_TWISTER=y
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+CONFIG_R8169=m
+CONFIG_R8169_LEDS=y
+# CONFIG_RTASE is not set
+CONFIG_NET_VENDOR_RENESAS=y
+CONFIG_NET_VENDOR_ROCKER=y
+CONFIG_NET_VENDOR_SAMSUNG=y
+CONFIG_SXGBE_ETH=m
+CONFIG_NET_VENDOR_SEEQ=y
+CONFIG_NET_VENDOR_SILAN=y
+CONFIG_SC92031=m
+CONFIG_NET_VENDOR_SIS=y
+CONFIG_SIS900=m
+CONFIG_SIS190=m
+CONFIG_NET_VENDOR_SOLARFLARE=y
+CONFIG_SFC=m
+CONFIG_SFC_MTD=y
+CONFIG_SFC_MCDI_MON=y
+CONFIG_SFC_SRIOV=y
+CONFIG_SFC_MCDI_LOGGING=y
+CONFIG_SFC_FALCON=m
+CONFIG_SFC_FALCON_MTD=y
+# CONFIG_SFC_SIENA is not set
+CONFIG_NET_VENDOR_SMSC=y
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_EPIC100=m
+CONFIG_SMSC911X=m
+CONFIG_SMSC9420=m
+CONFIG_NET_VENDOR_SOCIONEXT=y
+CONFIG_NET_VENDOR_STMICRO=y
+CONFIG_STMMAC_ETH=m
+# CONFIG_STMMAC_SELFTESTS is not set
+CONFIG_STMMAC_PLATFORM=m
+# CONFIG_DWMAC_DWC_QOS_ETH is not set
+CONFIG_DWMAC_GENERIC=m
+# CONFIG_DWMAC_INTEL_PLAT is not set
+CONFIG_DWMAC_INTEL=m
+CONFIG_STMMAC_PCI=m
+CONFIG_NET_VENDOR_SUN=y
+CONFIG_HAPPYMEAL=m
+CONFIG_SUNGEM=m
+CONFIG_CASSINI=m
+CONFIG_NIU=m
+CONFIG_NET_VENDOR_SYNOPSYS=y
+CONFIG_DWC_XLGMAC=m
+CONFIG_DWC_XLGMAC_PCI=m
+CONFIG_NET_VENDOR_TEHUTI=y
+CONFIG_TEHUTI=m
+# CONFIG_TEHUTI_TN40 is not set
+CONFIG_NET_VENDOR_TI=y
+# CONFIG_TI_CPSW_PHY_SEL is not set
+CONFIG_TLAN=m
+CONFIG_NET_VENDOR_VERTEXCOM=y
+# CONFIG_MSE102X is not set
+CONFIG_NET_VENDOR_VIA=y
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+CONFIG_VIA_VELOCITY=m
+CONFIG_NET_VENDOR_WANGXUN=y
+CONFIG_LIBWX=m
+CONFIG_NGBE=m
+# CONFIG_TXGBE is not set
+CONFIG_NET_VENDOR_WIZNET=y
+CONFIG_WIZNET_W5100=m
+CONFIG_WIZNET_W5300=m
+# CONFIG_WIZNET_BUS_DIRECT is not set
+# CONFIG_WIZNET_BUS_INDIRECT is not set
+CONFIG_WIZNET_BUS_ANY=y
+# CONFIG_WIZNET_W5100_SPI is not set
+CONFIG_NET_VENDOR_XILINX=y
+# CONFIG_XILINX_EMACLITE is not set
+CONFIG_XILINX_LL_TEMAC=m
+CONFIG_NET_VENDOR_XIRCOM=y
+CONFIG_PCMCIA_XIRC2PS=m
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PHYLINK=m
+CONFIG_PHYLIB=y
+CONFIG_SWPHY=y
+# CONFIG_LED_TRIGGER_PHY is not set
+CONFIG_OPEN_ALLIANCE_HELPERS=y
+CONFIG_PHYLIB_LEDS=y
+CONFIG_FIXED_PHY=y
+# CONFIG_SFP is not set
+
+#
+# MII PHY device drivers
+#
+CONFIG_AIR_EN8811H_PHY=m
+CONFIG_AMD_PHY=m
+CONFIG_ADIN_PHY=m
+CONFIG_ADIN1100_PHY=m
+CONFIG_AQUANTIA_PHY=m
+CONFIG_AX88796B_PHY=m
+CONFIG_BROADCOM_PHY=m
+CONFIG_BCM54140_PHY=m
+CONFIG_BCM7XXX_PHY=m
+CONFIG_BCM84881_PHY=m
+CONFIG_BCM87XX_PHY=m
+CONFIG_BCM_NET_PHYLIB=m
+CONFIG_CICADA_PHY=m
+# CONFIG_CORTINA_PHY is not set
+CONFIG_DAVICOM_PHY=m
+CONFIG_ICPLUS_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_INTEL_XWAY_PHY=m
+CONFIG_LSI_ET1011C_PHY=m
+CONFIG_MARVELL_PHY=m
+CONFIG_MARVELL_10G_PHY=m
+CONFIG_MARVELL_88Q2XXX_PHY=m
+CONFIG_MARVELL_88X2222_PHY=m
+CONFIG_MAXLINEAR_GPHY=m
+CONFIG_MTK_NET_PHYLIB=m
+CONFIG_MEDIATEK_GE_PHY=m
+CONFIG_MICREL_PHY=m
+CONFIG_MICROCHIP_T1S_PHY=m
+CONFIG_MICROCHIP_PHY=m
+CONFIG_MICROCHIP_T1_PHY=m
+CONFIG_MICROSEMI_PHY=m
+CONFIG_MOTORCOMM_PHY=m
+CONFIG_NATIONAL_PHY=m
+# CONFIG_NXP_CBTX_PHY is not set
+# CONFIG_NXP_C45_TJA11XX_PHY is not set
+# CONFIG_NXP_TJA11XX_PHY is not set
+# CONFIG_NCN26000_PHY is not set
+CONFIG_QCOM_NET_PHYLIB=m
+CONFIG_AT803X_PHY=m
+CONFIG_QCA83XX_PHY=m
+CONFIG_QCA808X_PHY=m
+CONFIG_QCA807X_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_REALTEK_PHY=m
+CONFIG_REALTEK_PHY_HWMON=y
+CONFIG_RENESAS_PHY=m
+# CONFIG_ROCKCHIP_PHY is not set
+CONFIG_SMSC_PHY=m
+CONFIG_STE10XP=m
+CONFIG_TERANETICS_PHY=m
+CONFIG_DP83822_PHY=m
+CONFIG_DP83TC811_PHY=m
+CONFIG_DP83848_PHY=m
+CONFIG_DP83867_PHY=m
+CONFIG_DP83869_PHY=m
+CONFIG_DP83TD510_PHY=m
+CONFIG_DP83TG720_PHY=m
+CONFIG_VITESSE_PHY=m
+# CONFIG_XILINX_GMII2RGMII is not set
+# CONFIG_MICREL_KS8995MA is not set
+# CONFIG_PSE_CONTROLLER is not set
+CONFIG_MDIO_DEVICE=y
+CONFIG_MDIO_BUS=y
+CONFIG_FWNODE_MDIO=y
+CONFIG_OF_MDIO=y
+CONFIG_ACPI_MDIO=y
+CONFIG_MDIO_DEVRES=y
+CONFIG_MDIO_BITBANG=m
+CONFIG_MDIO_BCM_UNIMAC=m
+CONFIG_MDIO_CAVIUM=m
+CONFIG_MDIO_GPIO=m
+# CONFIG_MDIO_HISI_FEMAC is not set
+# CONFIG_MDIO_MVUSB is not set
+# CONFIG_MDIO_MSCC_MIIM is not set
+# CONFIG_MDIO_OCTEON is not set
+# CONFIG_MDIO_IPQ4019 is not set
+# CONFIG_MDIO_IPQ8064 is not set
+CONFIG_MDIO_REGMAP=m
+CONFIG_MDIO_THUNDER=m
+
+#
+# MDIO Multiplexers
+#
+# CONFIG_MDIO_BUS_MUX_GPIO is not set
+# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set
+# CONFIG_MDIO_BUS_MUX_MMIOREG is not set
+
+#
+# PCS device drivers
+#
+CONFIG_PCS_XPCS=m
+CONFIG_PCS_LYNX=m
+# end of PCS device drivers
+
+# CONFIG_PLIP is not set
+CONFIG_PPP=m
+# CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_DEFLATE is not set
+# CONFIG_PPP_FILTER is not set
+# CONFIG_PPP_MPPE is not set
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPPOE is not set
+CONFIG_PPPOE_HASH_BITS=4
+# CONFIG_PPP_ASYNC is not set
+# CONFIG_PPP_SYNC_TTY is not set
+# CONFIG_SLIP is not set
+CONFIG_SLHC=m
+CONFIG_USB_NET_DRIVERS=m
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_RTL8152=m
+CONFIG_USB_LAN78XX=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_AX88179_178A=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_CDC_EEM=m
+CONFIG_USB_NET_CDC_NCM=m
+CONFIG_USB_NET_HUAWEI_CDC_NCM=m
+CONFIG_USB_NET_CDC_MBIM=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_SR9700=m
+CONFIG_USB_NET_SR9800=m
+CONFIG_USB_NET_SMSC75XX=m
+CONFIG_USB_NET_SMSC95XX=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET_ENABLE=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+CONFIG_USB_NET_CX82310_ETH=m
+CONFIG_USB_NET_KALMIA=m
+CONFIG_USB_NET_QMI_WWAN=m
+CONFIG_USB_HSO=m
+CONFIG_USB_NET_INT51X1=m
+CONFIG_USB_IPHETH=m
+CONFIG_USB_SIERRA_NET=m
+CONFIG_USB_VL600=m
+CONFIG_USB_NET_CH9200=m
+CONFIG_USB_NET_AQC111=m
+CONFIG_USB_RTL8153_ECM=m
+CONFIG_WLAN=y
+CONFIG_WLAN_VENDOR_ADMTEK=y
+CONFIG_ADM8211=m
+CONFIG_ATH_COMMON=m
+CONFIG_WLAN_VENDOR_ATH=y
+# CONFIG_ATH_DEBUG is not set
+CONFIG_ATH5K=m
+# CONFIG_ATH5K_DEBUG is not set
+# CONFIG_ATH5K_TRACER is not set
+CONFIG_ATH5K_PCI=y
+CONFIG_ATH9K_HW=m
+CONFIG_ATH9K_COMMON=m
+CONFIG_ATH9K_BTCOEX_SUPPORT=y
+CONFIG_ATH9K=m
+CONFIG_ATH9K_PCI=y
+CONFIG_ATH9K_AHB=y
+CONFIG_ATH9K_DYNACK=y
+# CONFIG_ATH9K_WOW is not set
+CONFIG_ATH9K_RFKILL=y
+# CONFIG_ATH9K_CHANNEL_CONTEXT is not set
+CONFIG_ATH9K_PCOEM=y
+CONFIG_ATH9K_PCI_NO_EEPROM=m
+CONFIG_ATH9K_HTC=m
+# CONFIG_ATH9K_HTC_DEBUGFS is not set
+CONFIG_ATH9K_HWRNG=y
+CONFIG_CARL9170=m
+CONFIG_CARL9170_LEDS=y
+CONFIG_CARL9170_WPC=y
+# CONFIG_CARL9170_HWRNG is not set
+CONFIG_ATH6KL=m
+CONFIG_ATH6KL_SDIO=m
+CONFIG_ATH6KL_USB=m
+# CONFIG_ATH6KL_DEBUG is not set
+# CONFIG_ATH6KL_TRACING is not set
+CONFIG_AR5523=m
+CONFIG_WIL6210=m
+CONFIG_WIL6210_ISR_COR=y
+# CONFIG_WIL6210_TRACING is not set
+CONFIG_WIL6210_DEBUGFS=y
+CONFIG_ATH10K=m
+CONFIG_ATH10K_CE=y
+CONFIG_ATH10K_PCI=m
+CONFIG_ATH10K_AHB=y
+CONFIG_ATH10K_SDIO=m
+CONFIG_ATH10K_USB=m
+# CONFIG_ATH10K_DEBUG is not set
+# CONFIG_ATH10K_DEBUGFS is not set
+CONFIG_ATH10K_LEDS=y
+# CONFIG_ATH10K_TRACING is not set
+CONFIG_WCN36XX=m
+# CONFIG_WCN36XX_DEBUGFS is not set
+CONFIG_ATH11K=m
+CONFIG_ATH11K_PCI=m
+# CONFIG_ATH11K_DEBUG is not set
+# CONFIG_ATH11K_TRACING is not set
+CONFIG_ATH12K=m
+# CONFIG_ATH12K_DEBUG is not set
+# CONFIG_ATH12K_TRACING is not set
+# CONFIG_ATH12K_COREDUMP is not set
+CONFIG_WLAN_VENDOR_ATMEL=y
+CONFIG_AT76C50X_USB=m
+CONFIG_WLAN_VENDOR_BROADCOM=y
+CONFIG_B43=m
+CONFIG_B43_BCMA=y
+CONFIG_B43_SSB=y
+CONFIG_B43_BUSES_BCMA_AND_SSB=y
+# CONFIG_B43_BUSES_BCMA is not set
+# CONFIG_B43_BUSES_SSB is not set
+CONFIG_B43_PCI_AUTOSELECT=y
+CONFIG_B43_PCICORE_AUTOSELECT=y
+CONFIG_B43_SDIO=y
+CONFIG_B43_BCMA_PIO=y
+CONFIG_B43_PIO=y
+CONFIG_B43_PHY_G=y
+CONFIG_B43_PHY_N=y
+CONFIG_B43_PHY_LP=y
+CONFIG_B43_PHY_HT=y
+CONFIG_B43_LEDS=y
+CONFIG_B43_HWRNG=y
+# CONFIG_B43_DEBUG is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_BRCMUTIL=m
+CONFIG_BRCMSMAC=m
+CONFIG_BRCMFMAC=m
+CONFIG_BRCMFMAC_PROTO_BCDC=y
+CONFIG_BRCMFMAC_PROTO_MSGBUF=y
+CONFIG_BRCMFMAC_SDIO=y
+CONFIG_BRCMFMAC_USB=y
+CONFIG_BRCMFMAC_PCIE=y
+# CONFIG_BRCM_TRACING is not set
+# CONFIG_BRCMDBG is not set
+CONFIG_WLAN_VENDOR_INTEL=y
+CONFIG_IPW2100=m
+# CONFIG_IPW2100_MONITOR is not set
+# CONFIG_IPW2100_DEBUG is not set
+CONFIG_IPW2200=m
+# CONFIG_IPW2200_MONITOR is not set
+# CONFIG_IPW2200_QOS is not set
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_LIBIPW=m
+# CONFIG_LIBIPW_DEBUG is not set
+CONFIG_IWLEGACY=m
+CONFIG_IWL4965=m
+CONFIG_IWL3945=m
+
+#
+# iwl3945 / iwl4965 Debugging Options
+#
+# CONFIG_IWLEGACY_DEBUG is not set
+# end of iwl3945 / iwl4965 Debugging Options
+
+CONFIG_IWLWIFI=m
+CONFIG_IWLWIFI_LEDS=y
+CONFIG_IWLDVM=m
+CONFIG_IWLMVM=m
+CONFIG_IWLWIFI_OPMODE_MODULAR=y
+
+#
+# Debugging Options
+#
+# CONFIG_IWLWIFI_DEBUG is not set
+CONFIG_IWLWIFI_DEVICE_TRACING=y
+# end of Debugging Options
+
+CONFIG_WLAN_VENDOR_INTERSIL=y
+CONFIG_P54_COMMON=m
+CONFIG_P54_USB=m
+CONFIG_P54_PCI=m
+CONFIG_P54_SPI=m
+CONFIG_P54_SPI_DEFAULT_EEPROM=y
+CONFIG_P54_LEDS=y
+CONFIG_WLAN_VENDOR_MARVELL=y
+CONFIG_LIBERTAS=m
+CONFIG_LIBERTAS_USB=m
+CONFIG_LIBERTAS_SDIO=m
+CONFIG_LIBERTAS_SPI=m
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_LIBERTAS_MESH is not set
+CONFIG_LIBERTAS_THINFIRM=m
+# CONFIG_LIBERTAS_THINFIRM_DEBUG is not set
+CONFIG_LIBERTAS_THINFIRM_USB=m
+CONFIG_MWIFIEX=m
+CONFIG_MWIFIEX_SDIO=m
+CONFIG_MWIFIEX_PCIE=m
+CONFIG_MWIFIEX_USB=m
+CONFIG_MWL8K=m
+CONFIG_WLAN_VENDOR_MEDIATEK=y
+CONFIG_MT7601U=m
+CONFIG_MT76_CORE=m
+CONFIG_MT76_LEDS=y
+CONFIG_MT76_USB=m
+CONFIG_MT76_SDIO=m
+CONFIG_MT76x02_LIB=m
+CONFIG_MT76x02_USB=m
+CONFIG_MT76_CONNAC_LIB=m
+CONFIG_MT792x_LIB=m
+CONFIG_MT792x_USB=m
+CONFIG_MT76x0_COMMON=m
+CONFIG_MT76x0U=m
+CONFIG_MT76x0E=m
+CONFIG_MT76x2_COMMON=m
+CONFIG_MT76x2E=m
+CONFIG_MT76x2U=m
+CONFIG_MT7603E=m
+CONFIG_MT7615_COMMON=m
+CONFIG_MT7615E=m
+CONFIG_MT7663_USB_SDIO_COMMON=m
+CONFIG_MT7663U=m
+CONFIG_MT7663S=m
+CONFIG_MT7915E=m
+CONFIG_MT7921_COMMON=m
+CONFIG_MT7921E=m
+CONFIG_MT7921S=m
+CONFIG_MT7921U=m
+CONFIG_MT7996E=m
+CONFIG_MT7925_COMMON=m
+CONFIG_MT7925E=m
+CONFIG_MT7925U=m
+CONFIG_WLAN_VENDOR_MICROCHIP=y
+CONFIG_WILC1000=m
+CONFIG_WILC1000_SDIO=m
+CONFIG_WILC1000_SPI=m
+CONFIG_WILC1000_HW_OOB_INTR=y
+CONFIG_WLAN_VENDOR_PURELIFI=y
+CONFIG_PLFXLC=m
+CONFIG_WLAN_VENDOR_RALINK=y
+CONFIG_RT2X00=m
+CONFIG_RT2400PCI=m
+CONFIG_RT2500PCI=m
+CONFIG_RT61PCI=m
+CONFIG_RT2800PCI=m
+CONFIG_RT2800PCI_RT33XX=y
+CONFIG_RT2800PCI_RT35XX=y
+CONFIG_RT2800PCI_RT53XX=y
+CONFIG_RT2800PCI_RT3290=y
+CONFIG_RT2500USB=m
+CONFIG_RT73USB=m
+CONFIG_RT2800USB=m
+CONFIG_RT2800USB_RT33XX=y
+CONFIG_RT2800USB_RT35XX=y
+CONFIG_RT2800USB_RT3573=y
+CONFIG_RT2800USB_RT53XX=y
+CONFIG_RT2800USB_RT55XX=y
+CONFIG_RT2800USB_UNKNOWN=y
+CONFIG_RT2800_LIB=m
+CONFIG_RT2800_LIB_MMIO=m
+CONFIG_RT2X00_LIB_MMIO=m
+CONFIG_RT2X00_LIB_PCI=m
+CONFIG_RT2X00_LIB_USB=m
+CONFIG_RT2X00_LIB=m
+CONFIG_RT2X00_LIB_FIRMWARE=y
+CONFIG_RT2X00_LIB_CRYPTO=y
+CONFIG_RT2X00_LIB_LEDS=y
+# CONFIG_RT2X00_DEBUG is not set
+CONFIG_WLAN_VENDOR_REALTEK=y
+CONFIG_RTL8180=m
+CONFIG_RTL8187=m
+CONFIG_RTL8187_LEDS=y
+CONFIG_RTL_CARDS=m
+CONFIG_RTL8192CE=m
+CONFIG_RTL8192SE=m
+CONFIG_RTL8192DE=m
+CONFIG_RTL8723AE=m
+CONFIG_RTL8723BE=m
+CONFIG_RTL8188EE=m
+CONFIG_RTL8192EE=m
+CONFIG_RTL8821AE=m
+CONFIG_RTL8192CU=m
+# CONFIG_RTL8192DU is not set
+CONFIG_RTLWIFI=m
+CONFIG_RTLWIFI_PCI=m
+CONFIG_RTLWIFI_USB=m
+CONFIG_RTLWIFI_DEBUG=y
+CONFIG_RTL8192C_COMMON=m
+CONFIG_RTL8192D_COMMON=m
+CONFIG_RTL8723_COMMON=m
+CONFIG_RTLBTCOEXIST=m
+CONFIG_RTL8XXXU=m
+CONFIG_RTL8XXXU_UNTESTED=y
+CONFIG_RTW88=m
+CONFIG_RTW88_CORE=m
+CONFIG_RTW88_PCI=m
+CONFIG_RTW88_USB=m
+CONFIG_RTW88_8822B=m
+CONFIG_RTW88_8822C=m
+CONFIG_RTW88_8723X=m
+CONFIG_RTW88_8723D=m
+CONFIG_RTW88_8821C=m
+CONFIG_RTW88_88XXA=m
+CONFIG_RTW88_8821A=m
+CONFIG_RTW88_8812A=m
+CONFIG_RTW88_8822BE=m
+# CONFIG_RTW88_8822BS is not set
+CONFIG_RTW88_8822BU=m
+CONFIG_RTW88_8822CE=m
+# CONFIG_RTW88_8822CS is not set
+CONFIG_RTW88_8822CU=m
+CONFIG_RTW88_8723DE=m
+# CONFIG_RTW88_8723DS is not set
+# CONFIG_RTW88_8723CS is not set
+CONFIG_RTW88_8723DU=m
+CONFIG_RTW88_8821CE=m
+# CONFIG_RTW88_8821CS is not set
+CONFIG_RTW88_8821CU=m
+CONFIG_RTW88_8821AU=m
+CONFIG_RTW88_8812AU=m
+# CONFIG_RTW88_DEBUG is not set
+# CONFIG_RTW88_DEBUGFS is not set
+CONFIG_RTW88_LEDS=y
+CONFIG_RTW89=m
+CONFIG_RTW89_CORE=m
+CONFIG_RTW89_PCI=m
+CONFIG_RTW89_8851B=m
+CONFIG_RTW89_8852A=m
+CONFIG_RTW89_8852B_COMMON=m
+CONFIG_RTW89_8852B=m
+CONFIG_RTW89_8852BT=m
+CONFIG_RTW89_8852C=m
+CONFIG_RTW89_8922A=m
+CONFIG_RTW89_8851BE=m
+CONFIG_RTW89_8852AE=m
+CONFIG_RTW89_8852BE=m
+CONFIG_RTW89_8852BTE=m
+CONFIG_RTW89_8852CE=m
+CONFIG_RTW89_8922AE=m
+# CONFIG_RTW89_DEBUGMSG is not set
+# CONFIG_RTW89_DEBUGFS is not set
+CONFIG_WLAN_VENDOR_RSI=y
+CONFIG_RSI_91X=m
+CONFIG_RSI_DEBUGFS=y
+CONFIG_RSI_SDIO=m
+CONFIG_RSI_USB=m
+CONFIG_RSI_COEX=y
+CONFIG_WLAN_VENDOR_SILABS=y
+# CONFIG_WFX is not set
+CONFIG_WLAN_VENDOR_ST=y
+CONFIG_CW1200=m
+CONFIG_CW1200_WLAN_SDIO=m
+CONFIG_CW1200_WLAN_SPI=m
+CONFIG_WLAN_VENDOR_TI=y
+CONFIG_WL1251=m
+CONFIG_WL1251_SPI=m
+CONFIG_WL1251_SDIO=m
+CONFIG_WL12XX=m
+CONFIG_WL18XX=m
+CONFIG_WLCORE=m
+CONFIG_WLCORE_SPI=m
+CONFIG_WLCORE_SDIO=m
+CONFIG_WLAN_VENDOR_ZYDAS=y
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_WLAN_VENDOR_QUANTENNA=y
+CONFIG_QTNFMAC=m
+CONFIG_QTNFMAC_PCIE=m
+CONFIG_MAC80211_HWSIM=m
+# CONFIG_VIRT_WIFI is not set
+# CONFIG_WAN is not set
+
+#
+# Wireless WAN
+#
+# CONFIG_WWAN is not set
+# end of Wireless WAN
+
+CONFIG_VMXNET3=m
+CONFIG_FUJITSU_ES=m
+# CONFIG_USB4_NET is not set
+# CONFIG_NETDEVSIM is not set
+CONFIG_NET_FAILOVER=y
+# CONFIG_ISDN is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+CONFIG_INPUT_LEDS=m
+CONFIG_INPUT_FF_MEMLESS=m
+CONFIG_INPUT_SPARSEKMAP=m
+CONFIG_INPUT_MATRIXKMAP=m
+CONFIG_INPUT_VIVALDIFMAP=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=m
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+CONFIG_INPUT_JOYDEV=y
+CONFIG_INPUT_EVDEV=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADC is not set
+CONFIG_KEYBOARD_ADP5520=m
+CONFIG_KEYBOARD_ADP5588=m
+CONFIG_KEYBOARD_ADP5589=m
+# CONFIG_KEYBOARD_APPLESPI is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_QT1050 is not set
+CONFIG_KEYBOARD_QT1070=m
+CONFIG_KEYBOARD_QT2160=m
+# CONFIG_KEYBOARD_DLINK_DIR685 is not set
+CONFIG_KEYBOARD_LKKBD=m
+CONFIG_KEYBOARD_GPIO=m
+CONFIG_KEYBOARD_GPIO_POLLED=m
+CONFIG_KEYBOARD_TCA6416=m
+CONFIG_KEYBOARD_TCA8418=m
+CONFIG_KEYBOARD_MATRIX=m
+CONFIG_KEYBOARD_LM8323=m
+CONFIG_KEYBOARD_LM8333=m
+CONFIG_KEYBOARD_MAX7359=m
+CONFIG_KEYBOARD_MPR121=m
+CONFIG_KEYBOARD_NEWTON=m
+CONFIG_KEYBOARD_OPENCORES=m
+# CONFIG_KEYBOARD_PINEPHONE is not set
+CONFIG_KEYBOARD_SAMSUNG=m
+CONFIG_KEYBOARD_STOWAWAY=m
+CONFIG_KEYBOARD_SUNKBD=m
+# CONFIG_KEYBOARD_OMAP4 is not set
+# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set
+CONFIG_KEYBOARD_TWL4030=m
+CONFIG_KEYBOARD_XTKBD=m
+# CONFIG_KEYBOARD_CROS_EC is not set
+# CONFIG_KEYBOARD_CAP11XX is not set
+# CONFIG_KEYBOARD_BCM is not set
+# CONFIG_KEYBOARD_MTK_PMIC is not set
+# CONFIG_KEYBOARD_CYPRESS_SF is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=m
+CONFIG_MOUSE_PS2_ALPS=y
+CONFIG_MOUSE_PS2_BYD=y
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+CONFIG_MOUSE_PS2_SYNAPTICS=y
+CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS=y
+CONFIG_MOUSE_PS2_CYPRESS=y
+CONFIG_MOUSE_PS2_LIFEBOOK=y
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+CONFIG_MOUSE_PS2_ELANTECH=y
+CONFIG_MOUSE_PS2_ELANTECH_SMBUS=y
+CONFIG_MOUSE_PS2_SENTELIC=y
+CONFIG_MOUSE_PS2_TOUCHKIT=y
+CONFIG_MOUSE_PS2_FOCALTECH=y
+CONFIG_MOUSE_PS2_SMBUS=y
+CONFIG_MOUSE_SERIAL=m
+CONFIG_MOUSE_APPLETOUCH=m
+CONFIG_MOUSE_BCM5974=m
+CONFIG_MOUSE_CYAPA=m
+CONFIG_MOUSE_ELAN_I2C=m
+CONFIG_MOUSE_ELAN_I2C_I2C=y
+CONFIG_MOUSE_ELAN_I2C_SMBUS=y
+CONFIG_MOUSE_VSXXXAA=m
+CONFIG_MOUSE_GPIO=m
+CONFIG_MOUSE_SYNAPTICS_I2C=m
+CONFIG_MOUSE_SYNAPTICS_USB=m
+CONFIG_INPUT_JOYSTICK=y
+CONFIG_JOYSTICK_ANALOG=m
+CONFIG_JOYSTICK_A3D=m
+# CONFIG_JOYSTICK_ADC is not set
+CONFIG_JOYSTICK_ADI=m
+CONFIG_JOYSTICK_COBRA=m
+CONFIG_JOYSTICK_GF2K=m
+CONFIG_JOYSTICK_GRIP=m
+CONFIG_JOYSTICK_GRIP_MP=m
+CONFIG_JOYSTICK_GUILLEMOT=m
+CONFIG_JOYSTICK_INTERACT=m
+CONFIG_JOYSTICK_SIDEWINDER=m
+CONFIG_JOYSTICK_TMDC=m
+CONFIG_JOYSTICK_IFORCE=m
+CONFIG_JOYSTICK_IFORCE_USB=m
+CONFIG_JOYSTICK_IFORCE_232=m
+CONFIG_JOYSTICK_WARRIOR=m
+CONFIG_JOYSTICK_MAGELLAN=m
+CONFIG_JOYSTICK_SPACEORB=m
+CONFIG_JOYSTICK_SPACEBALL=m
+CONFIG_JOYSTICK_STINGER=m
+CONFIG_JOYSTICK_TWIDJOY=m
+CONFIG_JOYSTICK_ZHENHUA=m
+CONFIG_JOYSTICK_DB9=m
+CONFIG_JOYSTICK_GAMECON=m
+CONFIG_JOYSTICK_TURBOGRAFX=m
+CONFIG_JOYSTICK_AS5011=m
+CONFIG_JOYSTICK_JOYDUMP=m
+CONFIG_JOYSTICK_XPAD=m
+CONFIG_JOYSTICK_XPAD_FF=y
+CONFIG_JOYSTICK_XPAD_LEDS=y
+CONFIG_JOYSTICK_WALKERA0701=m
+CONFIG_JOYSTICK_PSXPAD_SPI=m
+CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
+CONFIG_JOYSTICK_PXRC=m
+CONFIG_JOYSTICK_QWIIC=m
+CONFIG_JOYSTICK_FSIA6B=m
+# CONFIG_JOYSTICK_SENSEHAT is not set
+# CONFIG_JOYSTICK_SEESAW is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_88PM860X=m
+CONFIG_TOUCHSCREEN_ADS7846=m
+CONFIG_TOUCHSCREEN_AD7877=m
+CONFIG_TOUCHSCREEN_AD7879=m
+CONFIG_TOUCHSCREEN_AD7879_I2C=m
+CONFIG_TOUCHSCREEN_AD7879_SPI=m
+# CONFIG_TOUCHSCREEN_ADC is not set
+# CONFIG_TOUCHSCREEN_AR1021_I2C is not set
+CONFIG_TOUCHSCREEN_ATMEL_MXT=m
+# CONFIG_TOUCHSCREEN_ATMEL_MXT_T37 is not set
+CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
+CONFIG_TOUCHSCREEN_BU21013=m
+# CONFIG_TOUCHSCREEN_BU21029 is not set
+# CONFIG_TOUCHSCREEN_CHIPONE_ICN8318 is not set
+# CONFIG_TOUCHSCREEN_CHIPONE_ICN8505 is not set
+# CONFIG_TOUCHSCREEN_CY8CTMA140 is not set
+CONFIG_TOUCHSCREEN_CY8CTMG110=m
+CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
+CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
+CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
+# CONFIG_TOUCHSCREEN_CYTTSP5 is not set
+CONFIG_TOUCHSCREEN_DA9034=m
+CONFIG_TOUCHSCREEN_DA9052=m
+CONFIG_TOUCHSCREEN_DYNAPRO=m
+CONFIG_TOUCHSCREEN_HAMPSHIRE=m
+CONFIG_TOUCHSCREEN_EETI=m
+# CONFIG_TOUCHSCREEN_EGALAX is not set
+# CONFIG_TOUCHSCREEN_EGALAX_SERIAL is not set
+# CONFIG_TOUCHSCREEN_EXC3000 is not set
+CONFIG_TOUCHSCREEN_FUJITSU=m
+CONFIG_TOUCHSCREEN_GOODIX=m
+CONFIG_TOUCHSCREEN_GOODIX_BERLIN_CORE=m
+CONFIG_TOUCHSCREEN_GOODIX_BERLIN_I2C=m
+CONFIG_TOUCHSCREEN_GOODIX_BERLIN_SPI=m
+# CONFIG_TOUCHSCREEN_HIDEEP is not set
+# CONFIG_TOUCHSCREEN_HYCON_HY46XX is not set
+# CONFIG_TOUCHSCREEN_HYNITRON_CSTXXX is not set
+CONFIG_TOUCHSCREEN_ILI210X=m
+# CONFIG_TOUCHSCREEN_ILITEK is not set
+# CONFIG_TOUCHSCREEN_S6SY761 is not set
+CONFIG_TOUCHSCREEN_GUNZE=m
+# CONFIG_TOUCHSCREEN_EKTF2127 is not set
+CONFIG_TOUCHSCREEN_ELAN=m
+CONFIG_TOUCHSCREEN_ELO=m
+CONFIG_TOUCHSCREEN_WACOM_W8001=m
+CONFIG_TOUCHSCREEN_WACOM_I2C=m
+CONFIG_TOUCHSCREEN_MAX11801=m
+CONFIG_TOUCHSCREEN_MMS114=m
+# CONFIG_TOUCHSCREEN_MELFAS_MIP4 is not set
+# CONFIG_TOUCHSCREEN_MSG2638 is not set
+CONFIG_TOUCHSCREEN_MTOUCH=m
+# CONFIG_TOUCHSCREEN_NOVATEK_NVT_TS is not set
+# CONFIG_TOUCHSCREEN_IMAGIS is not set
+# CONFIG_TOUCHSCREEN_IMX6UL_TSC is not set
+CONFIG_TOUCHSCREEN_INEXIO=m
+CONFIG_TOUCHSCREEN_PENMOUNT=m
+CONFIG_TOUCHSCREEN_EDT_FT5X06=m
+CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
+CONFIG_TOUCHSCREEN_TOUCHWIN=m
+CONFIG_TOUCHSCREEN_PIXCIR=m
+CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
+CONFIG_TOUCHSCREEN_WM831X=m
+CONFIG_TOUCHSCREEN_WM97XX=m
+CONFIG_TOUCHSCREEN_WM9705=y
+CONFIG_TOUCHSCREEN_WM9712=y
+CONFIG_TOUCHSCREEN_WM9713=y
+CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
+CONFIG_TOUCHSCREEN_MC13783=m
+CONFIG_TOUCHSCREEN_USB_EGALAX=y
+CONFIG_TOUCHSCREEN_USB_PANJIT=y
+CONFIG_TOUCHSCREEN_USB_3M=y
+CONFIG_TOUCHSCREEN_USB_ITM=y
+CONFIG_TOUCHSCREEN_USB_ETURBO=y
+CONFIG_TOUCHSCREEN_USB_GUNZE=y
+CONFIG_TOUCHSCREEN_USB_DMC_TSC10=y
+CONFIG_TOUCHSCREEN_USB_IRTOUCH=y
+CONFIG_TOUCHSCREEN_USB_IDEALTEK=y
+CONFIG_TOUCHSCREEN_USB_GENERAL_TOUCH=y
+CONFIG_TOUCHSCREEN_USB_GOTOP=y
+CONFIG_TOUCHSCREEN_USB_JASTEC=y
+CONFIG_TOUCHSCREEN_USB_ELO=y
+CONFIG_TOUCHSCREEN_USB_E2I=y
+CONFIG_TOUCHSCREEN_USB_ZYTRONIC=y
+CONFIG_TOUCHSCREEN_USB_ETT_TC45USB=y
+CONFIG_TOUCHSCREEN_USB_NEXIO=y
+CONFIG_TOUCHSCREEN_USB_EASYTOUCH=y
+CONFIG_TOUCHSCREEN_TOUCHIT213=m
+CONFIG_TOUCHSCREEN_TSC_SERIO=m
+CONFIG_TOUCHSCREEN_TSC200X_CORE=m
+CONFIG_TOUCHSCREEN_TSC2004=m
+CONFIG_TOUCHSCREEN_TSC2005=m
+CONFIG_TOUCHSCREEN_TSC2007=m
+# CONFIG_TOUCHSCREEN_TSC2007_IIO is not set
+CONFIG_TOUCHSCREEN_PCAP=m
+# CONFIG_TOUCHSCREEN_RM_TS is not set
+# CONFIG_TOUCHSCREEN_SILEAD is not set
+# CONFIG_TOUCHSCREEN_SIS_I2C is not set
+CONFIG_TOUCHSCREEN_ST1232=m
+# CONFIG_TOUCHSCREEN_STMFTS is not set
+CONFIG_TOUCHSCREEN_SUR40=m
+# CONFIG_TOUCHSCREEN_SURFACE3_SPI is not set
+CONFIG_TOUCHSCREEN_SX8654=m
+CONFIG_TOUCHSCREEN_TPS6507X=m
+# CONFIG_TOUCHSCREEN_ZET6223 is not set
+CONFIG_TOUCHSCREEN_ZFORCE=m
+# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set
+CONFIG_TOUCHSCREEN_ROHM_BU21023=m
+# CONFIG_TOUCHSCREEN_IQS5XX is not set
+# CONFIG_TOUCHSCREEN_IQS7211 is not set
+# CONFIG_TOUCHSCREEN_ZINITIX is not set
+# CONFIG_TOUCHSCREEN_HIMAX_HX83112B is not set
+CONFIG_INPUT_MISC=y
+CONFIG_INPUT_88PM860X_ONKEY=m
+CONFIG_INPUT_88PM80X_ONKEY=m
+CONFIG_INPUT_AD714X=m
+CONFIG_INPUT_AD714X_I2C=m
+CONFIG_INPUT_AD714X_SPI=m
+CONFIG_INPUT_ARIZONA_HAPTICS=m
+# CONFIG_INPUT_ATMEL_CAPTOUCH is not set
+CONFIG_INPUT_BMA150=m
+CONFIG_INPUT_E3X0_BUTTON=m
+CONFIG_INPUT_PCSPKR=m
+# CONFIG_INPUT_MAX77693_HAPTIC is not set
+CONFIG_INPUT_MAX8925_ONKEY=m
+# CONFIG_INPUT_MAX8997_HAPTIC is not set
+CONFIG_INPUT_MC13783_PWRBUTTON=m
+CONFIG_INPUT_MMA8450=m
+CONFIG_INPUT_APANEL=m
+CONFIG_INPUT_GPIO_BEEPER=m
+# CONFIG_INPUT_GPIO_DECODER is not set
+# CONFIG_INPUT_GPIO_VIBRA is not set
+CONFIG_INPUT_ATLAS_BTNS=m
+CONFIG_INPUT_ATI_REMOTE2=m
+CONFIG_INPUT_KEYSPAN_REMOTE=m
+CONFIG_INPUT_KXTJ9=m
+CONFIG_INPUT_POWERMATE=m
+CONFIG_INPUT_YEALINK=m
+CONFIG_INPUT_CM109=m
+CONFIG_INPUT_REGULATOR_HAPTIC=m
+CONFIG_INPUT_RETU_PWRBUTTON=m
+CONFIG_INPUT_TWL4030_PWRBUTTON=m
+CONFIG_INPUT_TWL4030_VIBRA=m
+CONFIG_INPUT_TWL6040_VIBRA=m
+CONFIG_INPUT_UINPUT=y
+CONFIG_INPUT_PALMAS_PWRBUTTON=m
+CONFIG_INPUT_PCF50633_PMU=m
+CONFIG_INPUT_PCF8574=m
+# CONFIG_INPUT_PWM_BEEPER is not set
+# CONFIG_INPUT_PWM_VIBRA is not set
+CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
+# CONFIG_INPUT_DA7280_HAPTICS is not set
+CONFIG_INPUT_DA9052_ONKEY=m
+CONFIG_INPUT_DA9055_ONKEY=m
+CONFIG_INPUT_DA9063_ONKEY=m
+CONFIG_INPUT_WM831X_ON=m
+CONFIG_INPUT_PCAP=m
+CONFIG_INPUT_ADXL34X=m
+CONFIG_INPUT_ADXL34X_I2C=m
+CONFIG_INPUT_ADXL34X_SPI=m
+# CONFIG_INPUT_IBM_PANEL is not set
+CONFIG_INPUT_IMS_PCU=m
+# CONFIG_INPUT_IQS269A is not set
+# CONFIG_INPUT_IQS626A is not set
+# CONFIG_INPUT_IQS7222 is not set
+CONFIG_INPUT_CMA3000=m
+CONFIG_INPUT_CMA3000_I2C=m
+CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
+CONFIG_INPUT_SOC_BUTTON_ARRAY=m
+CONFIG_INPUT_DRV260X_HAPTICS=m
+CONFIG_INPUT_DRV2665_HAPTICS=m
+CONFIG_INPUT_DRV2667_HAPTICS=m
+CONFIG_RMI4_CORE=m
+# CONFIG_RMI4_I2C is not set
+# CONFIG_RMI4_SPI is not set
+# CONFIG_RMI4_SMB is not set
+CONFIG_RMI4_F03=y
+CONFIG_RMI4_F03_SERIO=m
+CONFIG_RMI4_2D_SENSOR=y
+CONFIG_RMI4_F11=y
+CONFIG_RMI4_F12=y
+CONFIG_RMI4_F30=y
+# CONFIG_RMI4_F34 is not set
+CONFIG_RMI4_F3A=y
+# CONFIG_RMI4_F54 is not set
+# CONFIG_RMI4_F55 is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_ARCH_MIGHT_HAVE_PC_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=m
+CONFIG_SERIO_CT82C710=m
+CONFIG_SERIO_PARKBD=m
+CONFIG_SERIO_PCIPS2=m
+CONFIG_SERIO_LIBPS2=y
+CONFIG_SERIO_RAW=m
+CONFIG_SERIO_ALTERA_PS2=m
+CONFIG_SERIO_PS2MULT=m
+CONFIG_SERIO_ARC_PS2=m
+# CONFIG_SERIO_APBPS2 is not set
+# CONFIG_SERIO_GPIO_PS2 is not set
+CONFIG_USERIO=m
+CONFIG_GAMEPORT=m
+CONFIG_GAMEPORT_EMU10K1=m
+CONFIG_GAMEPORT_FM801=m
+# end of Hardware I/O ports
+# end of Input device support
+
+#
+# Character devices
+#
+CONFIG_TTY=y
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_VT_CONSOLE_SLEEP=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=0
+CONFIG_LEGACY_TIOCSTI=y
+CONFIG_LDISC_AUTOLOAD=y
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_EARLYCON=y
+CONFIG_SERIAL_8250=y
+# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
+CONFIG_SERIAL_8250_PNP=y
+# CONFIG_SERIAL_8250_16550A_VARIANTS is not set
+# CONFIG_SERIAL_8250_FINTEK is not set
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_PCILIB=y
+CONFIG_SERIAL_8250_PCI=y
+CONFIG_SERIAL_8250_EXAR=y
+CONFIG_SERIAL_8250_CS=m
+# CONFIG_SERIAL_8250_MEN_MCB is not set
+CONFIG_SERIAL_8250_NR_UARTS=48
+CONFIG_SERIAL_8250_RUNTIME_UARTS=32
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+# CONFIG_SERIAL_8250_PCI1XXXX is not set
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
+CONFIG_SERIAL_8250_RSA=y
+CONFIG_SERIAL_8250_DWLIB=y
+CONFIG_SERIAL_8250_DW=m
+CONFIG_SERIAL_8250_RT288X=y
+CONFIG_SERIAL_8250_LPSS=y
+CONFIG_SERIAL_8250_MID=m
+CONFIG_SERIAL_8250_PERICOM=y
+# CONFIG_SERIAL_OF_PLATFORM is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_KGDB_NMI=y
+CONFIG_SERIAL_MAX3100=m
+CONFIG_SERIAL_MAX310X=y
+CONFIG_SERIAL_UARTLITE=m
+CONFIG_SERIAL_UARTLITE_NR_UARTS=1
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_CONSOLE_POLL=y
+CONFIG_SERIAL_JSM=m
+# CONFIG_SERIAL_SIFIVE is not set
+# CONFIG_SERIAL_LANTIQ is not set
+CONFIG_SERIAL_SCCNXP=y
+CONFIG_SERIAL_SCCNXP_CONSOLE=y
+CONFIG_SERIAL_SC16IS7XX=m
+CONFIG_SERIAL_SC16IS7XX_I2C=m
+CONFIG_SERIAL_SC16IS7XX_SPI=m
+CONFIG_SERIAL_ALTERA_JTAGUART=m
+CONFIG_SERIAL_ALTERA_UART=m
+CONFIG_SERIAL_ALTERA_UART_MAXPORTS=4
+CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200
+# CONFIG_SERIAL_XILINX_PS_UART is not set
+CONFIG_SERIAL_ARC=m
+CONFIG_SERIAL_ARC_NR_PORTS=1
+CONFIG_SERIAL_RP2=m
+CONFIG_SERIAL_RP2_NR_UARTS=32
+CONFIG_SERIAL_FSL_LPUART=m
+# CONFIG_SERIAL_FSL_LINFLEXUART is not set
+# CONFIG_SERIAL_CONEXANT_DIGICOLOR is not set
+CONFIG_SERIAL_MEN_Z135=m
+# CONFIG_SERIAL_SPRD is not set
+# end of Serial drivers
+
+CONFIG_SERIAL_MCTRL_GPIO=y
+CONFIG_SERIAL_NONSTANDARD=y
+CONFIG_MOXA_INTELLIO=m
+CONFIG_MOXA_SMARTIO=m
+CONFIG_N_HDLC=m
+CONFIG_IPWIRELESS=m
+CONFIG_N_GSM=m
+CONFIG_NOZOMI=m
+# CONFIG_NULL_TTY is not set
+CONFIG_SERIAL_DEV_BUS=m
+CONFIG_TTY_PRINTK=y
+CONFIG_TTY_PRINTK_LEVEL=6
+CONFIG_PRINTER=m
+# CONFIG_LP_CONSOLE is not set
+CONFIG_PPDEV=m
+# CONFIG_VIRTIO_CONSOLE is not set
+CONFIG_IPMI_HANDLER=m
+CONFIG_IPMI_DMI_DECODE=y
+CONFIG_IPMI_PLAT_DATA=y
+# CONFIG_IPMI_PANIC_EVENT is not set
+CONFIG_IPMI_DEVICE_INTERFACE=m
+CONFIG_IPMI_SI=m
+CONFIG_IPMI_SSIF=m
+# CONFIG_IPMI_IPMB is not set
+CONFIG_IPMI_WATCHDOG=m
+CONFIG_IPMI_POWEROFF=m
+# CONFIG_SSIF_IPMI_BMC is not set
+# CONFIG_IPMB_DEVICE_INTERFACE is not set
+CONFIG_HW_RANDOM=y
+CONFIG_HW_RANDOM_TIMERIOMEM=m
+CONFIG_HW_RANDOM_INTEL=m
+CONFIG_HW_RANDOM_AMD=m
+# CONFIG_HW_RANDOM_BA431 is not set
+CONFIG_HW_RANDOM_VIA=m
+# CONFIG_HW_RANDOM_CCTRNG is not set
+# CONFIG_HW_RANDOM_XIPHERA is not set
+CONFIG_APPLICOM=m
+CONFIG_MWAVE=m
+CONFIG_DEVMEM=y
+CONFIG_NVRAM=m
+CONFIG_DEVPORT=y
+CONFIG_HPET=y
+CONFIG_HPET_MMAP=y
+CONFIG_HPET_MMAP_DEFAULT=y
+CONFIG_HANGCHECK_TIMER=m
+CONFIG_TCG_TPM=y
+CONFIG_TCG_TPM2_HMAC=y
+CONFIG_HW_RANDOM_TPM=y
+CONFIG_TCG_TIS_CORE=y
+CONFIG_TCG_TIS=y
+# CONFIG_TCG_TIS_SPI is not set
+# CONFIG_TCG_TIS_I2C is not set
+# CONFIG_TCG_TIS_I2C_CR50 is not set
+CONFIG_TCG_TIS_I2C_ATMEL=m
+CONFIG_TCG_TIS_I2C_INFINEON=m
+CONFIG_TCG_TIS_I2C_NUVOTON=m
+CONFIG_TCG_NSC=m
+CONFIG_TCG_ATMEL=m
+CONFIG_TCG_INFINEON=m
+CONFIG_TCG_CRB=y
+# CONFIG_TCG_VTPM_PROXY is not set
+CONFIG_TCG_TIS_ST33ZP24=m
+CONFIG_TCG_TIS_ST33ZP24_I2C=m
+CONFIG_TCG_TIS_ST33ZP24_SPI=m
+CONFIG_TELCLOCK=m
+CONFIG_XILLYBUS_CLASS=m
+CONFIG_XILLYBUS=m
+CONFIG_XILLYBUS_PCIE=m
+# CONFIG_XILLYBUS_OF is not set
+# CONFIG_XILLYUSB is not set
+# end of Character devices
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_ACPI_I2C_OPREGION=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_CHARDEV=y
+# CONFIG_I2C_MUX is not set
+CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_SMBUS=m
+CONFIG_I2C_ALGOBIT=m
+CONFIG_I2C_ALGOPCA=m
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# PC SMBus host controller drivers
+#
+CONFIG_I2C_CCGX_UCSI=m
+CONFIG_I2C_ALI1535=m
+CONFIG_I2C_ALI1563=m
+CONFIG_I2C_ALI15X3=m
+CONFIG_I2C_AMD756=m
+CONFIG_I2C_AMD8111=m
+CONFIG_I2C_AMD_MP2=m
+CONFIG_I2C_AMD_ASF=m
+CONFIG_I2C_I801=m
+CONFIG_I2C_ISCH=m
+CONFIG_I2C_ISMT=m
+CONFIG_I2C_PIIX4=m
+CONFIG_I2C_NFORCE2=m
+CONFIG_I2C_NVIDIA_GPU=m
+CONFIG_I2C_SIS5595=m
+CONFIG_I2C_SIS630=m
+CONFIG_I2C_SIS96X=m
+CONFIG_I2C_VIA=m
+CONFIG_I2C_VIAPRO=m
+# CONFIG_I2C_ZHAOXIN is not set
+
+#
+# ACPI drivers
+#
+CONFIG_I2C_SCMI=m
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+CONFIG_I2C_CBUS_GPIO=m
+CONFIG_I2C_DESIGNWARE_CORE=m
+CONFIG_I2C_DESIGNWARE_SLAVE=y
+CONFIG_I2C_DESIGNWARE_PLATFORM=m
+CONFIG_I2C_DESIGNWARE_AMDPSP=y
+CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
+CONFIG_I2C_DESIGNWARE_PCI=m
+CONFIG_I2C_EMEV2=m
+CONFIG_I2C_GPIO=m
+# CONFIG_I2C_GPIO_FAULT_INJECTOR is not set
+CONFIG_I2C_KEMPLD=m
+CONFIG_I2C_OCORES=m
+CONFIG_I2C_PCA_PLATFORM=m
+CONFIG_I2C_RK3X=y
+CONFIG_I2C_SIMTEC=m
+CONFIG_I2C_XILINX=m
+
+#
+# External I2C/SMBus adapter drivers
+#
+CONFIG_I2C_DIOLAN_U2C=m
+CONFIG_I2C_DLN2=m
+# CONFIG_I2C_CP2615 is not set
+CONFIG_I2C_PARPORT=m
+# CONFIG_I2C_PCI1XXXX is not set
+CONFIG_I2C_ROBOTFUZZ_OSIF=m
+CONFIG_I2C_TAOS_EVM=m
+CONFIG_I2C_TINY_USB=m
+CONFIG_I2C_VIPERBOARD=m
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_MLXCPLD is not set
+CONFIG_I2C_CROS_EC_TUNNEL=m
+# CONFIG_I2C_VIRTIO is not set
+# end of I2C Hardware Bus support
+
+CONFIG_I2C_STUB=m
+CONFIG_I2C_SLAVE=y
+# CONFIG_I2C_SLAVE_EEPROM is not set
+# CONFIG_I2C_SLAVE_TESTUNIT is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# end of I2C support
+
+# CONFIG_I3C is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+CONFIG_SPI_MEM=y
+
+#
+# SPI Master Controller Drivers
+#
+CONFIG_SPI_ALTERA=m
+CONFIG_SPI_ALTERA_CORE=m
+# CONFIG_SPI_AXI_SPI_ENGINE is not set
+CONFIG_SPI_BITBANG=m
+CONFIG_SPI_BUTTERFLY=m
+CONFIG_SPI_CADENCE=m
+# CONFIG_SPI_CADENCE_QUADSPI is not set
+# CONFIG_SPI_CADENCE_XSPI is not set
+# CONFIG_SPI_CH341 is not set
+CONFIG_SPI_CS42L43=m
+CONFIG_SPI_DESIGNWARE=m
+# CONFIG_SPI_DW_DMA is not set
+CONFIG_SPI_DW_PCI=m
+CONFIG_SPI_DW_MMIO=m
+CONFIG_SPI_DLN2=m
+CONFIG_SPI_GPIO=m
+CONFIG_SPI_INTEL=m
+CONFIG_SPI_INTEL_PCI=m
+# CONFIG_SPI_INTEL_PLATFORM is not set
+CONFIG_SPI_LM70_LLP=m
+# CONFIG_SPI_FSL_SPI is not set
+# CONFIG_SPI_MICROCHIP_CORE is not set
+# CONFIG_SPI_MICROCHIP_CORE_QSPI is not set
+# CONFIG_SPI_LANTIQ_SSC is not set
+CONFIG_SPI_OC_TINY=m
+# CONFIG_SPI_PCI1XXXX is not set
+# CONFIG_SPI_PXA2XX is not set
+CONFIG_SPI_SC18IS602=m
+# CONFIG_SPI_SIFIVE is not set
+# CONFIG_SPI_SN_F_OSPI is not set
+# CONFIG_SPI_MXIC is not set
+CONFIG_SPI_XCOMM=m
+# CONFIG_SPI_XILINX is not set
+CONFIG_SPI_ZYNQMP_GQSPI=m
+CONFIG_SPI_AMD=m
+
+#
+# SPI Multiplexer support
+#
+# CONFIG_SPI_MUX is not set
+
+#
+# SPI Protocol Masters
+#
+CONFIG_SPI_SPIDEV=m
+# CONFIG_SPI_LOOPBACK_TEST is not set
+CONFIG_SPI_TLE62X0=m
+# CONFIG_SPI_SLAVE is not set
+CONFIG_SPI_DYNAMIC=y
+CONFIG_SPMI=m
+# CONFIG_SPMI_HISI3670 is not set
+CONFIG_HSI=m
+CONFIG_HSI_BOARDINFO=y
+
+#
+# HSI controllers
+#
+
+#
+# HSI clients
+#
+CONFIG_HSI_CHAR=m
+CONFIG_PPS=y
+# CONFIG_PPS_DEBUG is not set
+
+#
+# PPS clients support
+#
+# CONFIG_PPS_CLIENT_KTIMER is not set
+CONFIG_PPS_CLIENT_LDISC=m
+CONFIG_PPS_CLIENT_PARPORT=m
+CONFIG_PPS_CLIENT_GPIO=m
+# CONFIG_PPS_GENERATOR is not set
+
+#
+# PTP clock support
+#
+CONFIG_PTP_1588_CLOCK=y
+CONFIG_PTP_1588_CLOCK_OPTIONAL=y
+
+#
+# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks.
+#
+# CONFIG_PTP_1588_CLOCK_VMCLOCK is not set
+# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set
+# CONFIG_PTP_1588_CLOCK_IDTCM is not set
+# CONFIG_PTP_1588_CLOCK_FC3W is not set
+# CONFIG_PTP_1588_CLOCK_MOCK is not set
+# CONFIG_PTP_1588_CLOCK_OCP is not set
+# end of PTP clock support
+
+CONFIG_PINCTRL=y
+CONFIG_PINMUX=y
+CONFIG_PINCONF=y
+CONFIG_GENERIC_PINCONF=y
+# CONFIG_DEBUG_PINCTRL is not set
+CONFIG_PINCTRL_AMD=y
+# CONFIG_PINCTRL_AW9523 is not set
+# CONFIG_PINCTRL_CY8C95X0 is not set
+# CONFIG_PINCTRL_DA9062 is not set
+# CONFIG_PINCTRL_EQUILIBRIUM is not set
+# CONFIG_PINCTRL_MCP23S08 is not set
+# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set
+# CONFIG_PINCTRL_OCELOT is not set
+# CONFIG_PINCTRL_PALMAS is not set
+# CONFIG_PINCTRL_SINGLE is not set
+# CONFIG_PINCTRL_STMFX is not set
+# CONFIG_PINCTRL_SX150X is not set
+CONFIG_PINCTRL_CS42L43=m
+
+#
+# Intel pinctrl drivers
+#
+CONFIG_PINCTRL_BAYTRAIL=y
+CONFIG_PINCTRL_CHERRYVIEW=m
+# CONFIG_PINCTRL_LYNXPOINT is not set
+CONFIG_PINCTRL_INTEL=y
+# CONFIG_PINCTRL_INTEL_PLATFORM is not set
+# CONFIG_PINCTRL_ALDERLAKE is not set
+CONFIG_PINCTRL_BROXTON=m
+# CONFIG_PINCTRL_CANNONLAKE is not set
+# CONFIG_PINCTRL_CEDARFORK is not set
+# CONFIG_PINCTRL_DENVERTON is not set
+# CONFIG_PINCTRL_ELKHARTLAKE is not set
+# CONFIG_PINCTRL_EMMITSBURG is not set
+# CONFIG_PINCTRL_GEMINILAKE is not set
+# CONFIG_PINCTRL_ICELAKE is not set
+# CONFIG_PINCTRL_JASPERLAKE is not set
+# CONFIG_PINCTRL_LAKEFIELD is not set
+# CONFIG_PINCTRL_LEWISBURG is not set
+# CONFIG_PINCTRL_METEORLAKE is not set
+# CONFIG_PINCTRL_METEORPOINT is not set
+CONFIG_PINCTRL_SUNRISEPOINT=m
+# CONFIG_PINCTRL_TIGERLAKE is not set
+# end of Intel pinctrl drivers
+
+#
+# Renesas pinctrl drivers
+#
+# end of Renesas pinctrl drivers
+
+CONFIG_GPIOLIB=y
+CONFIG_GPIOLIB_FASTPATH_LIMIT=512
+CONFIG_OF_GPIO=y
+CONFIG_GPIO_ACPI=y
+CONFIG_GPIOLIB_IRQCHIP=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+CONFIG_GPIO_CDEV=y
+CONFIG_GPIO_CDEV_V1=y
+CONFIG_GPIO_GENERIC=m
+CONFIG_GPIO_SWNODE_UNDEFINED=y
+CONFIG_GPIO_MAX730X=m
+
+#
+# Memory mapped GPIO drivers
+#
+# CONFIG_GPIO_74XX_MMIO is not set
+# CONFIG_GPIO_ALTERA is not set
+CONFIG_GPIO_AMDPT=m
+# CONFIG_GPIO_CADENCE is not set
+CONFIG_GPIO_DWAPB=m
+# CONFIG_GPIO_EXAR is not set
+# CONFIG_GPIO_FTGPIO010 is not set
+CONFIG_GPIO_GENERIC_PLATFORM=m
+# CONFIG_GPIO_GRANITERAPIDS is not set
+# CONFIG_GPIO_GRGPIO is not set
+# CONFIG_GPIO_HLWD is not set
+# CONFIG_GPIO_ICH is not set
+# CONFIG_GPIO_LOGICVC is not set
+# CONFIG_GPIO_MB86S7X is not set
+# CONFIG_GPIO_MENZ127 is not set
+# CONFIG_GPIO_POLARFIRE_SOC is not set
+# CONFIG_GPIO_SIFIVE is not set
+# CONFIG_GPIO_SYSCON is not set
+# CONFIG_GPIO_XILINX is not set
+CONFIG_GPIO_AMD_FCH=m
+# end of Memory mapped GPIO drivers
+
+#
+# Port-mapped I/O GPIO drivers
+#
+CONFIG_GPIO_VX855=m
+CONFIG_GPIO_F7188X=m
+CONFIG_GPIO_IT87=m
+CONFIG_GPIO_SCH=m
+CONFIG_GPIO_SCH311X=m
+# CONFIG_GPIO_WINBOND is not set
+# CONFIG_GPIO_WS16C48 is not set
+# end of Port-mapped I/O GPIO drivers
+
+#
+# I2C GPIO expanders
+#
+# CONFIG_GPIO_ADNP is not set
+# CONFIG_GPIO_FXL6408 is not set
+# CONFIG_GPIO_DS4520 is not set
+# CONFIG_GPIO_GW_PLD is not set
+CONFIG_GPIO_MAX7300=m
+CONFIG_GPIO_MAX732X=m
+CONFIG_GPIO_PCA953X=m
+# CONFIG_GPIO_PCA953X_IRQ is not set
+# CONFIG_GPIO_PCA9570 is not set
+CONFIG_GPIO_PCF857X=m
+# CONFIG_GPIO_TPIC2810 is not set
+# end of I2C GPIO expanders
+
+#
+# MFD GPIO expanders
+#
+CONFIG_GPIO_ADP5520=m
+CONFIG_GPIO_ARIZONA=m
+# CONFIG_GPIO_CROS_EC is not set
+CONFIG_GPIO_DA9052=m
+CONFIG_GPIO_DA9055=m
+CONFIG_GPIO_DLN2=m
+# CONFIG_GPIO_ELKHARTLAKE is not set
+CONFIG_GPIO_JANZ_TTL=m
+CONFIG_GPIO_KEMPLD=m
+CONFIG_GPIO_LP3943=m
+CONFIG_GPIO_PALMAS=y
+CONFIG_GPIO_RC5T583=y
+CONFIG_GPIO_TPS6586X=y
+CONFIG_GPIO_TPS65910=y
+CONFIG_GPIO_TPS65912=m
+CONFIG_GPIO_TWL4030=m
+CONFIG_GPIO_TWL6040=m
+# CONFIG_GPIO_WHISKEY_COVE is not set
+CONFIG_GPIO_WM831X=m
+CONFIG_GPIO_WM8350=m
+CONFIG_GPIO_WM8994=m
+# end of MFD GPIO expanders
+
+#
+# PCI GPIO expanders
+#
+CONFIG_GPIO_AMD8111=m
+# CONFIG_GPIO_BT8XX is not set
+CONFIG_GPIO_ML_IOH=m
+# CONFIG_GPIO_PCI_IDIO_16 is not set
+# CONFIG_GPIO_PCIE_IDIO_24 is not set
+CONFIG_GPIO_RDC321X=m
+# CONFIG_GPIO_SODAVILLE is not set
+# end of PCI GPIO expanders
+
+#
+# SPI GPIO expanders
+#
+# CONFIG_GPIO_74X164 is not set
+# CONFIG_GPIO_MAX3191X is not set
+CONFIG_GPIO_MAX7301=m
+CONFIG_GPIO_MC33880=m
+# CONFIG_GPIO_PISOSR is not set
+# CONFIG_GPIO_XRA1403 is not set
+# end of SPI GPIO expanders
+
+#
+# USB GPIO expanders
+#
+CONFIG_GPIO_VIPERBOARD=m
+# CONFIG_GPIO_MPSSE is not set
+# end of USB GPIO expanders
+
+#
+# Virtual GPIO drivers
+#
+# CONFIG_GPIO_AGGREGATOR is not set
+# CONFIG_GPIO_LATCH is not set
+# CONFIG_GPIO_MOCKUP is not set
+# CONFIG_GPIO_SIM is not set
+# end of Virtual GPIO drivers
+
+#
+# GPIO Debugging utilities
+#
+# CONFIG_GPIO_SLOPPY_LOGIC_ANALYZER is not set
+# CONFIG_GPIO_VIRTUSER is not set
+# end of GPIO Debugging utilities
+
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+# CONFIG_W1_MASTER_AMD_AXI is not set
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+CONFIG_W1_MASTER_DS2482=m
+CONFIG_W1_MASTER_GPIO=m
+# CONFIG_W1_MASTER_SGI is not set
+# CONFIG_W1_MASTER_UART is not set
+# end of 1-wire Bus Masters
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+# CONFIG_W1_SLAVE_DS2405 is not set
+CONFIG_W1_SLAVE_DS2408=m
+CONFIG_W1_SLAVE_DS2408_READBACK=y
+CONFIG_W1_SLAVE_DS2413=m
+CONFIG_W1_SLAVE_DS2406=m
+CONFIG_W1_SLAVE_DS2423=m
+# CONFIG_W1_SLAVE_DS2805 is not set
+# CONFIG_W1_SLAVE_DS2430 is not set
+CONFIG_W1_SLAVE_DS2431=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+# CONFIG_W1_SLAVE_DS2438 is not set
+# CONFIG_W1_SLAVE_DS250X is not set
+CONFIG_W1_SLAVE_DS2780=m
+CONFIG_W1_SLAVE_DS2781=m
+CONFIG_W1_SLAVE_DS28E04=m
+# CONFIG_W1_SLAVE_DS28E17 is not set
+# end of 1-wire Slaves
+
+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_MT6323 is not set
+# CONFIG_POWER_RESET_REGULATOR is not set
+CONFIG_POWER_RESET_RESTART=y
+# CONFIG_POWER_RESET_SYSCON is not set
+# CONFIG_POWER_RESET_SYSCON_POWEROFF is not set
+# CONFIG_SYSCON_REBOOT_MODE is not set
+# CONFIG_NVMEM_REBOOT_MODE is not set
+# CONFIG_POWER_SEQUENCING is not set
+CONFIG_POWER_SUPPLY=y
+# CONFIG_POWER_SUPPLY_DEBUG is not set
+CONFIG_POWER_SUPPLY_HWMON=y
+CONFIG_GENERIC_ADC_BATTERY=m
+# CONFIG_IP5XXX_POWER is not set
+CONFIG_MAX8925_POWER=m
+CONFIG_WM831X_BACKUP=m
+CONFIG_WM831X_POWER=m
+CONFIG_WM8350_POWER=m
+CONFIG_TEST_POWER=m
+CONFIG_BATTERY_88PM860X=m
+CONFIG_CHARGER_ADP5061=m
+CONFIG_BATTERY_CW2015=m
+CONFIG_BATTERY_DS2760=m
+CONFIG_BATTERY_DS2780=m
+CONFIG_BATTERY_DS2781=m
+CONFIG_BATTERY_DS2782=m
+# CONFIG_BATTERY_SAMSUNG_SDI is not set
+CONFIG_BATTERY_SBS=m
+# CONFIG_CHARGER_SBS is not set
+CONFIG_BATTERY_BQ27XXX=m
+CONFIG_BATTERY_BQ27XXX_I2C=m
+CONFIG_BATTERY_BQ27XXX_HDQ=m
+# CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM is not set
+CONFIG_BATTERY_DA9030=m
+CONFIG_BATTERY_DA9052=m
+CONFIG_CHARGER_DA9150=m
+CONFIG_BATTERY_DA9150=m
+CONFIG_BATTERY_MAX17040=m
+CONFIG_BATTERY_MAX17042=m
+CONFIG_BATTERY_MAX1720X=m
+CONFIG_BATTERY_MAX1721X=m
+CONFIG_BATTERY_TWL4030_MADC=m
+CONFIG_CHARGER_88PM860X=m
+CONFIG_CHARGER_PCF50633=m
+CONFIG_BATTERY_RX51=m
+CONFIG_CHARGER_ISP1704=m
+CONFIG_CHARGER_MAX8903=m
+CONFIG_CHARGER_TWL4030=m
+CONFIG_CHARGER_TWL6030=m
+CONFIG_CHARGER_LP8727=m
+CONFIG_CHARGER_LP8788=m
+CONFIG_CHARGER_GPIO=m
+CONFIG_CHARGER_MANAGER=y
+CONFIG_CHARGER_LT3651=m
+CONFIG_CHARGER_LTC4162L=m
+CONFIG_CHARGER_MAX14577=m
+CONFIG_CHARGER_DETECTOR_MAX14656=m
+CONFIG_CHARGER_MAX77693=m
+CONFIG_CHARGER_MAX77976=m
+CONFIG_CHARGER_MAX8997=m
+CONFIG_CHARGER_MAX8998=m
+CONFIG_CHARGER_BQ2415X=m
+CONFIG_CHARGER_BQ24190=m
+CONFIG_CHARGER_BQ24257=m
+CONFIG_CHARGER_BQ24735=m
+CONFIG_CHARGER_BQ2515X=m
+CONFIG_CHARGER_BQ25890=m
+CONFIG_CHARGER_BQ25980=m
+CONFIG_CHARGER_BQ256XX=m
+CONFIG_CHARGER_SMB347=m
+CONFIG_CHARGER_TPS65090=m
+CONFIG_BATTERY_GAUGE_LTC2941=m
+CONFIG_BATTERY_GOLDFISH=m
+CONFIG_BATTERY_RT5033=m
+CONFIG_CHARGER_RT5033=m
+CONFIG_CHARGER_RT9455=m
+CONFIG_CHARGER_RT9467=m
+CONFIG_CHARGER_RT9471=m
+CONFIG_CHARGER_CROS_USBPD=m
+CONFIG_CHARGER_CROS_PCHG=m
+CONFIG_CHARGER_CROS_CONTROL=m
+CONFIG_FUEL_GAUGE_STC3117=m
+CONFIG_CHARGER_UCS1002=m
+CONFIG_CHARGER_BD99954=m
+CONFIG_CHARGER_WILCO=m
+CONFIG_BATTERY_UG3105=m
+CONFIG_FUEL_GAUGE_MM8013=m
+CONFIG_HWMON=y
+CONFIG_HWMON_VID=m
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+CONFIG_SENSORS_ABITUGURU=m
+CONFIG_SENSORS_ABITUGURU3=m
+CONFIG_SENSORS_AD7314=m
+CONFIG_SENSORS_AD7414=m
+CONFIG_SENSORS_AD7418=m
+CONFIG_SENSORS_ADM1025=m
+CONFIG_SENSORS_ADM1026=m
+CONFIG_SENSORS_ADM1029=m
+CONFIG_SENSORS_ADM1031=m
+CONFIG_SENSORS_ADM1177=m
+CONFIG_SENSORS_ADM9240=m
+CONFIG_SENSORS_ADT7X10=m
+CONFIG_SENSORS_ADT7310=m
+CONFIG_SENSORS_ADT7410=m
+CONFIG_SENSORS_ADT7411=m
+CONFIG_SENSORS_ADT7462=m
+CONFIG_SENSORS_ADT7470=m
+CONFIG_SENSORS_ADT7475=m
+CONFIG_SENSORS_AHT10=m
+CONFIG_SENSORS_AQUACOMPUTER_D5NEXT=m
+CONFIG_SENSORS_AS370=m
+CONFIG_SENSORS_ASC7621=m
+CONFIG_SENSORS_ASUS_ROG_RYUJIN=m
+CONFIG_SENSORS_AXI_FAN_CONTROL=m
+CONFIG_SENSORS_K8TEMP=m
+CONFIG_SENSORS_K10TEMP=m
+CONFIG_SENSORS_FAM15H_POWER=m
+CONFIG_SENSORS_APPLESMC=m
+CONFIG_SENSORS_ASB100=m
+CONFIG_SENSORS_ATXP1=m
+CONFIG_SENSORS_CHIPCAP2=m
+CONFIG_SENSORS_CORSAIR_CPRO=m
+CONFIG_SENSORS_CORSAIR_PSU=m
+CONFIG_SENSORS_CROS_EC=m
+CONFIG_SENSORS_DRIVETEMP=m
+CONFIG_SENSORS_DS620=m
+CONFIG_SENSORS_DS1621=m
+CONFIG_SENSORS_DELL_SMM=m
+# CONFIG_I8K is not set
+CONFIG_SENSORS_DA9052_ADC=m
+CONFIG_SENSORS_DA9055=m
+CONFIG_SENSORS_I5K_AMB=m
+CONFIG_SENSORS_F71805F=m
+CONFIG_SENSORS_F71882FG=m
+CONFIG_SENSORS_F75375S=m
+CONFIG_SENSORS_MC13783_ADC=m
+CONFIG_SENSORS_FSCHMD=m
+CONFIG_SENSORS_FTSTEUTATES=m
+CONFIG_SENSORS_GIGABYTE_WATERFORCE=m
+CONFIG_SENSORS_GL518SM=m
+CONFIG_SENSORS_GL520SM=m
+CONFIG_SENSORS_G760A=m
+CONFIG_SENSORS_G762=m
+# CONFIG_SENSORS_GPIO_FAN is not set
+CONFIG_SENSORS_HIH6130=m
+# CONFIG_SENSORS_HS3001 is not set
+CONFIG_SENSORS_IBMAEM=m
+CONFIG_SENSORS_IBMPEX=m
+CONFIG_SENSORS_IIO_HWMON=m
+CONFIG_SENSORS_I5500=m
+CONFIG_SENSORS_CORETEMP=m
+CONFIG_SENSORS_ISL28022=m
+CONFIG_SENSORS_IT87=m
+CONFIG_SENSORS_JC42=m
+CONFIG_SENSORS_POWERZ=m
+CONFIG_SENSORS_POWR1220=m
+CONFIG_SENSORS_LENOVO_EC=m
+CONFIG_SENSORS_LINEAGE=m
+CONFIG_SENSORS_LTC2945=m
+CONFIG_SENSORS_LTC2947=m
+CONFIG_SENSORS_LTC2947_I2C=m
+CONFIG_SENSORS_LTC2947_SPI=m
+CONFIG_SENSORS_LTC2990=m
+CONFIG_SENSORS_LTC2991=m
+CONFIG_SENSORS_LTC2992=m
+CONFIG_SENSORS_LTC4151=m
+CONFIG_SENSORS_LTC4215=m
+CONFIG_SENSORS_LTC4222=m
+CONFIG_SENSORS_LTC4245=m
+CONFIG_SENSORS_LTC4260=m
+CONFIG_SENSORS_LTC4261=m
+CONFIG_SENSORS_LTC4282=m
+CONFIG_SENSORS_MAX1111=m
+CONFIG_SENSORS_MAX127=m
+CONFIG_SENSORS_MAX16065=m
+CONFIG_SENSORS_MAX1619=m
+CONFIG_SENSORS_MAX1668=m
+CONFIG_SENSORS_MAX197=m
+CONFIG_SENSORS_MAX31722=m
+CONFIG_SENSORS_MAX31730=m
+CONFIG_SENSORS_MAX31760=m
+CONFIG_MAX31827=m
+CONFIG_SENSORS_MAX6620=m
+CONFIG_SENSORS_MAX6621=m
+CONFIG_SENSORS_MAX6639=m
+CONFIG_SENSORS_MAX6650=m
+CONFIG_SENSORS_MAX6697=m
+CONFIG_SENSORS_MAX31790=m
+CONFIG_SENSORS_MC34VR500=m
+CONFIG_SENSORS_MCP3021=m
+CONFIG_SENSORS_TC654=m
+CONFIG_SENSORS_TPS23861=m
+CONFIG_SENSORS_MENF21BMC_HWMON=m
+CONFIG_SENSORS_MR75203=m
+CONFIG_SENSORS_ADCXX=m
+CONFIG_SENSORS_LM63=m
+CONFIG_SENSORS_LM70=m
+CONFIG_SENSORS_LM73=m
+CONFIG_SENSORS_LM75=m
+CONFIG_SENSORS_LM77=m
+CONFIG_SENSORS_LM78=m
+CONFIG_SENSORS_LM80=m
+CONFIG_SENSORS_LM83=m
+CONFIG_SENSORS_LM85=m
+CONFIG_SENSORS_LM87=m
+CONFIG_SENSORS_LM90=m
+CONFIG_SENSORS_LM92=m
+CONFIG_SENSORS_LM93=m
+CONFIG_SENSORS_LM95234=m
+CONFIG_SENSORS_LM95241=m
+CONFIG_SENSORS_LM95245=m
+CONFIG_SENSORS_PC87360=m
+CONFIG_SENSORS_PC87427=m
+CONFIG_SENSORS_NTC_THERMISTOR=m
+CONFIG_SENSORS_NCT6683=m
+CONFIG_SENSORS_NCT6775_CORE=m
+CONFIG_SENSORS_NCT6775=m
+CONFIG_SENSORS_NCT6775_I2C=m
+CONFIG_SENSORS_NCT7363=m
+CONFIG_SENSORS_NCT7802=m
+CONFIG_SENSORS_NCT7904=m
+CONFIG_SENSORS_NPCM7XX=m
+CONFIG_SENSORS_NZXT_KRAKEN2=m
+CONFIG_SENSORS_NZXT_KRAKEN3=m
+CONFIG_SENSORS_NZXT_SMART2=m
+CONFIG_SENSORS_OCC_P8_I2C=m
+CONFIG_SENSORS_OCC=m
+CONFIG_SENSORS_OXP=m
+CONFIG_SENSORS_PCF8591=m
+CONFIG_PMBUS=m
+CONFIG_SENSORS_PMBUS=m
+# CONFIG_SENSORS_ACBEL_FSG032 is not set
+# CONFIG_SENSORS_ADM1266 is not set
+CONFIG_SENSORS_ADM1275=m
+# CONFIG_SENSORS_ADP1050 is not set
+# CONFIG_SENSORS_BEL_PFE is not set
+# CONFIG_SENSORS_BPA_RS600 is not set
+# CONFIG_SENSORS_CRPS is not set
+# CONFIG_SENSORS_DELTA_AHE50DC_FAN is not set
+# CONFIG_SENSORS_FSP_3Y is not set
+# CONFIG_SENSORS_IBM_CFFPS is not set
+# CONFIG_SENSORS_DPS920AB is not set
+# CONFIG_SENSORS_INSPUR_IPSPS is not set
+# CONFIG_SENSORS_IR35221 is not set
+# CONFIG_SENSORS_IR36021 is not set
+# CONFIG_SENSORS_IR38064 is not set
+# CONFIG_SENSORS_IRPS5401 is not set
+# CONFIG_SENSORS_ISL68137 is not set
+CONFIG_SENSORS_LM25066=m
+# CONFIG_SENSORS_LM25066_REGULATOR is not set
+# CONFIG_SENSORS_LT7182S is not set
+CONFIG_SENSORS_LTC2978=m
+CONFIG_SENSORS_LTC2978_REGULATOR=y
+# CONFIG_SENSORS_LTC3815 is not set
+# CONFIG_SENSORS_LTC4286 is not set
+# CONFIG_SENSORS_MAX15301 is not set
+CONFIG_SENSORS_MAX16064=m
+# CONFIG_SENSORS_MAX16601 is not set
+# CONFIG_SENSORS_MAX20730 is not set
+CONFIG_SENSORS_MAX20751=m
+# CONFIG_SENSORS_MAX31785 is not set
+CONFIG_SENSORS_MAX34440=m
+CONFIG_SENSORS_MAX8688=m
+# CONFIG_SENSORS_MP2856 is not set
+# CONFIG_SENSORS_MP2888 is not set
+# CONFIG_SENSORS_MP2891 is not set
+# CONFIG_SENSORS_MP2975 is not set
+# CONFIG_SENSORS_MP2993 is not set
+# CONFIG_SENSORS_MP5023 is not set
+# CONFIG_SENSORS_MP5920 is not set
+# CONFIG_SENSORS_MP5990 is not set
+# CONFIG_SENSORS_MP9941 is not set
+# CONFIG_SENSORS_MPQ7932 is not set
+# CONFIG_SENSORS_MPQ8785 is not set
+# CONFIG_SENSORS_PIM4328 is not set
+# CONFIG_SENSORS_PLI1209BC is not set
+# CONFIG_SENSORS_PM6764TR is not set
+# CONFIG_SENSORS_PXE1610 is not set
+# CONFIG_SENSORS_Q54SJ108A2 is not set
+# CONFIG_SENSORS_STPDDC60 is not set
+# CONFIG_SENSORS_TDA38640 is not set
+# CONFIG_SENSORS_TPS25990 is not set
+CONFIG_SENSORS_TPS40422=m
+# CONFIG_SENSORS_TPS53679 is not set
+# CONFIG_SENSORS_TPS546D24 is not set
+CONFIG_SENSORS_UCD9000=m
+CONFIG_SENSORS_UCD9200=m
+# CONFIG_SENSORS_XDP710 is not set
+# CONFIG_SENSORS_XDPE152 is not set
+# CONFIG_SENSORS_XDPE122 is not set
+CONFIG_SENSORS_ZL6100=m
+CONFIG_SENSORS_PT5161L=m
+# CONFIG_SENSORS_PWM_FAN is not set
+CONFIG_SENSORS_SBTSI=m
+CONFIG_SENSORS_SBRMI=m
+CONFIG_SENSORS_SHT15=m
+CONFIG_SENSORS_SHT21=m
+CONFIG_SENSORS_SHT3x=m
+CONFIG_SENSORS_SHT4x=m
+CONFIG_SENSORS_SHTC1=m
+CONFIG_SENSORS_SIS5595=m
+CONFIG_SENSORS_DME1737=m
+CONFIG_SENSORS_EMC1403=m
+CONFIG_SENSORS_EMC2103=m
+CONFIG_SENSORS_EMC2305=m
+CONFIG_SENSORS_EMC6W201=m
+CONFIG_SENSORS_SMSC47M1=m
+CONFIG_SENSORS_SMSC47M192=m
+CONFIG_SENSORS_SMSC47B397=m
+CONFIG_SENSORS_SCH56XX_COMMON=m
+CONFIG_SENSORS_SCH5627=m
+CONFIG_SENSORS_SCH5636=m
+CONFIG_SENSORS_STEAMDECK=m
+CONFIG_SENSORS_STTS751=m
+CONFIG_SENSORS_ADC128D818=m
+CONFIG_SENSORS_ADS7828=m
+CONFIG_SENSORS_ADS7871=m
+CONFIG_SENSORS_AMC6821=m
+CONFIG_SENSORS_INA209=m
+CONFIG_SENSORS_INA2XX=m
+CONFIG_SENSORS_INA238=m
+CONFIG_SENSORS_INA3221=m
+CONFIG_SENSORS_SPD5118=m
+# CONFIG_SENSORS_SPD5118_DETECT is not set
+CONFIG_SENSORS_TC74=m
+CONFIG_SENSORS_THMC50=m
+CONFIG_SENSORS_TMP102=m
+CONFIG_SENSORS_TMP103=m
+CONFIG_SENSORS_TMP108=m
+CONFIG_SENSORS_TMP401=m
+CONFIG_SENSORS_TMP421=m
+CONFIG_SENSORS_TMP464=m
+CONFIG_SENSORS_TMP513=m
+CONFIG_SENSORS_VIA_CPUTEMP=m
+CONFIG_SENSORS_VIA686A=m
+CONFIG_SENSORS_VT1211=m
+CONFIG_SENSORS_VT8231=m
+CONFIG_SENSORS_W83773G=m
+CONFIG_SENSORS_W83781D=m
+CONFIG_SENSORS_W83791D=m
+CONFIG_SENSORS_W83792D=m
+CONFIG_SENSORS_W83793=m
+CONFIG_SENSORS_W83795=m
+# CONFIG_SENSORS_W83795_FANCTRL is not set
+CONFIG_SENSORS_W83L785TS=m
+CONFIG_SENSORS_W83L786NG=m
+CONFIG_SENSORS_W83627HF=m
+CONFIG_SENSORS_W83627EHF=m
+CONFIG_SENSORS_WM831X=m
+CONFIG_SENSORS_WM8350=m
+CONFIG_SENSORS_XGENE=m
+
+#
+# ACPI drivers
+#
+CONFIG_SENSORS_ACPI_POWER=m
+CONFIG_SENSORS_ATK0110=m
+CONFIG_SENSORS_ASUS_WMI=m
+CONFIG_SENSORS_ASUS_EC=m
+CONFIG_SENSORS_HP_WMI=m
+CONFIG_THERMAL=y
+CONFIG_THERMAL_NETLINK=y
+# CONFIG_THERMAL_STATISTICS is not set
+# CONFIG_THERMAL_DEBUGFS is not set
+# CONFIG_THERMAL_CORE_TESTING is not set
+CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0
+CONFIG_THERMAL_HWMON=y
+CONFIG_THERMAL_OF=y
+CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y
+# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_DEFAULT_GOV_BANG_BANG is not set
+CONFIG_THERMAL_GOV_FAIR_SHARE=y
+CONFIG_THERMAL_GOV_STEP_WISE=y
+CONFIG_THERMAL_GOV_BANG_BANG=y
+# CONFIG_THERMAL_GOV_USER_SPACE is not set
+# CONFIG_THERMAL_GOV_POWER_ALLOCATOR is not set
+# CONFIG_CPU_THERMAL is not set
+# CONFIG_DEVFREQ_THERMAL is not set
+# CONFIG_PCIE_THERMAL is not set
+CONFIG_THERMAL_EMULATION=y
+# CONFIG_THERMAL_MMIO is not set
+# CONFIG_DA9062_THERMAL is not set
+
+#
+# Intel thermal drivers
+#
+CONFIG_INTEL_POWERCLAMP=m
+CONFIG_X86_THERMAL_VECTOR=y
+CONFIG_INTEL_TCC=y
+CONFIG_X86_PKG_TEMP_THERMAL=m
+CONFIG_INTEL_SOC_DTS_IOSF_CORE=m
+CONFIG_INTEL_SOC_DTS_THERMAL=m
+
+#
+# ACPI INT340X thermal drivers
+#
+CONFIG_INT340X_THERMAL=m
+CONFIG_ACPI_THERMAL_REL=m
+CONFIG_INT3406_THERMAL=m
+CONFIG_PROC_THERMAL_MMIO_RAPL=m
+# end of ACPI INT340X thermal drivers
+
+# CONFIG_INTEL_BXT_PMIC_THERMAL is not set
+CONFIG_INTEL_PCH_THERMAL=m
+# CONFIG_INTEL_TCC_COOLING is not set
+# CONFIG_INTEL_HFI_THERMAL is not set
+# end of Intel thermal drivers
+
+# CONFIG_GENERIC_ADC_THERMAL is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_CORE=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y
+CONFIG_WATCHDOG_OPEN_TIMEOUT=0
+# CONFIG_WATCHDOG_SYSFS is not set
+# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
+
+#
+# Watchdog Pretimeout Governors
+#
+# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set
+
+#
+# Watchdog Device Drivers
+#
+CONFIG_SOFT_WATCHDOG=m
+# CONFIG_CROS_EC_WATCHDOG is not set
+CONFIG_DA9052_WATCHDOG=m
+CONFIG_DA9055_WATCHDOG=m
+CONFIG_DA9063_WATCHDOG=m
+CONFIG_DA9062_WATCHDOG=m
+# CONFIG_GPIO_WATCHDOG is not set
+# CONFIG_LENOVO_SE10_WDT is not set
+CONFIG_MENF21BMC_WATCHDOG=m
+# CONFIG_MENZ069_WATCHDOG is not set
+# CONFIG_WDAT_WDT is not set
+CONFIG_WM831X_WATCHDOG=m
+CONFIG_WM8350_WATCHDOG=m
+CONFIG_XILINX_WATCHDOG=m
+# CONFIG_ZIIRAVE_WATCHDOG is not set
+CONFIG_CADENCE_WATCHDOG=m
+CONFIG_DW_WATCHDOG=m
+CONFIG_TWL4030_WATCHDOG=m
+CONFIG_MAX63XX_WATCHDOG=m
+CONFIG_RETU_WATCHDOG=m
+CONFIG_ACQUIRE_WDT=m
+CONFIG_ADVANTECH_WDT=m
+# CONFIG_ADVANTECH_EC_WDT is not set
+CONFIG_ALIM1535_WDT=m
+CONFIG_ALIM7101_WDT=m
+# CONFIG_EBC_C384_WDT is not set
+# CONFIG_EXAR_WDT is not set
+CONFIG_F71808E_WDT=m
+CONFIG_SP5100_TCO=m
+CONFIG_SBC_FITPC2_WATCHDOG=m
+CONFIG_EUROTECH_WDT=m
+CONFIG_IB700_WDT=m
+CONFIG_IBMASR=m
+CONFIG_WAFER_WDT=m
+CONFIG_I6300ESB_WDT=m
+CONFIG_IE6XX_WDT=m
+CONFIG_ITCO_WDT=m
+CONFIG_ITCO_VENDOR_SUPPORT=y
+CONFIG_IT8712F_WDT=m
+CONFIG_IT87_WDT=m
+CONFIG_HP_WATCHDOG=m
+CONFIG_HPWDT_NMI_DECODING=y
+CONFIG_KEMPLD_WDT=m
+CONFIG_SC1200_WDT=m
+CONFIG_PC87413_WDT=m
+CONFIG_NV_TCO=m
+CONFIG_60XX_WDT=m
+CONFIG_SMSC_SCH311X_WDT=m
+CONFIG_SMSC37B787_WDT=m
+# CONFIG_TQMX86_WDT is not set
+CONFIG_VIA_WDT=m
+CONFIG_W83627HF_WDT=m
+CONFIG_W83877F_WDT=m
+CONFIG_W83977F_WDT=m
+CONFIG_MACHZ_WDT=m
+CONFIG_SBC_EPX_C3_WATCHDOG=m
+# CONFIG_INTEL_MEI_WDT is not set
+# CONFIG_NI903X_WDT is not set
+# CONFIG_NIC7018_WDT is not set
+CONFIG_MEN_A21_WDT=m
+
+#
+# PCI-based Watchdog Cards
+#
+CONFIG_PCIPCWATCHDOG=m
+CONFIG_WDTPCI=m
+
+#
+# USB-based Watchdog Cards
+#
+CONFIG_USBPCWATCHDOG=m
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=m
+CONFIG_SSB_SPROM=y
+CONFIG_SSB_BLOCKIO=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+CONFIG_SSB_B43_PCI_BRIDGE=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+# CONFIG_SSB_PCMCIAHOST is not set
+CONFIG_SSB_SDIOHOST_POSSIBLE=y
+CONFIG_SSB_SDIOHOST=y
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+CONFIG_SSB_DRIVER_GPIO=y
+CONFIG_BCMA_POSSIBLE=y
+CONFIG_BCMA=m
+CONFIG_BCMA_BLOCKIO=y
+CONFIG_BCMA_HOST_PCI_POSSIBLE=y
+CONFIG_BCMA_HOST_PCI=y
+# CONFIG_BCMA_HOST_SOC is not set
+CONFIG_BCMA_DRIVER_PCI=y
+# CONFIG_BCMA_DRIVER_GMAC_CMN is not set
+# CONFIG_BCMA_DRIVER_GPIO is not set
+# CONFIG_BCMA_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+CONFIG_MFD_CORE=y
+# CONFIG_MFD_ADP5585 is not set
+# CONFIG_MFD_ACT8945A is not set
+CONFIG_MFD_AS3711=y
+# CONFIG_MFD_SMPRO is not set
+# CONFIG_MFD_AS3722 is not set
+CONFIG_PMIC_ADP5520=y
+CONFIG_MFD_AAT2870_CORE=y
+# CONFIG_MFD_ATMEL_FLEXCOM is not set
+# CONFIG_MFD_ATMEL_HLCDC is not set
+CONFIG_MFD_BCM590XX=m
+# CONFIG_MFD_BD9571MWV is not set
+# CONFIG_MFD_AXP20X_I2C is not set
+# CONFIG_MFD_CGBC is not set
+CONFIG_MFD_CROS_EC_DEV=m
+CONFIG_MFD_CS42L43=m
+# CONFIG_MFD_CS42L43_I2C is not set
+CONFIG_MFD_CS42L43_SDW=m
+# CONFIG_MFD_MADERA is not set
+# CONFIG_MFD_MAX5970 is not set
+CONFIG_PMIC_DA903X=y
+CONFIG_PMIC_DA9052=y
+CONFIG_MFD_DA9052_SPI=y
+CONFIG_MFD_DA9052_I2C=y
+CONFIG_MFD_DA9055=y
+CONFIG_MFD_DA9062=m
+CONFIG_MFD_DA9063=y
+CONFIG_MFD_DA9150=m
+CONFIG_MFD_DLN2=m
+# CONFIG_MFD_GATEWORKS_GSC is not set
+CONFIG_MFD_MC13XXX=m
+CONFIG_MFD_MC13XXX_SPI=m
+CONFIG_MFD_MC13XXX_I2C=m
+# CONFIG_MFD_MP2629 is not set
+# CONFIG_MFD_HI6421_PMIC is not set
+# CONFIG_MFD_HI6421_SPMI is not set
+CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m
+CONFIG_LPC_ICH=m
+CONFIG_LPC_SCH=m
+CONFIG_INTEL_SOC_PMIC_BXTWC=m
+CONFIG_MFD_INTEL_LPSS=m
+CONFIG_MFD_INTEL_LPSS_ACPI=m
+CONFIG_MFD_INTEL_LPSS_PCI=m
+CONFIG_MFD_INTEL_PMC_BXT=m
+# CONFIG_MFD_IQS62X is not set
+CONFIG_MFD_JANZ_CMODIO=m
+CONFIG_MFD_KEMPLD=m
+CONFIG_MFD_88PM800=m
+CONFIG_MFD_88PM805=m
+CONFIG_MFD_88PM860X=y
+# CONFIG_MFD_88PM886_PMIC is not set
+CONFIG_MFD_MAX14577=y
+# CONFIG_MFD_MAX77541 is not set
+# CONFIG_MFD_MAX77620 is not set
+# CONFIG_MFD_MAX77650 is not set
+# CONFIG_MFD_MAX77686 is not set
+CONFIG_MFD_MAX77693=y
+# CONFIG_MFD_MAX77714 is not set
+CONFIG_MFD_MAX77843=y
+CONFIG_MFD_MAX8907=m
+CONFIG_MFD_MAX8925=y
+CONFIG_MFD_MAX8997=y
+CONFIG_MFD_MAX8998=y
+# CONFIG_MFD_MT6360 is not set
+# CONFIG_MFD_MT6370 is not set
+CONFIG_MFD_MT6397=m
+CONFIG_MFD_MENF21BMC=m
+# CONFIG_MFD_OCELOT is not set
+CONFIG_EZX_PCAP=y
+# CONFIG_MFD_CPCAP is not set
+CONFIG_MFD_VIPERBOARD=m
+# CONFIG_MFD_NTXEC is not set
+CONFIG_MFD_RETU=m
+CONFIG_MFD_PCF50633=m
+CONFIG_PCF50633_ADC=m
+CONFIG_PCF50633_GPIO=m
+# CONFIG_MFD_SY7636A is not set
+CONFIG_MFD_RDC321X=m
+# CONFIG_MFD_RT4831 is not set
+CONFIG_MFD_RT5033=m
+# CONFIG_MFD_RT5120 is not set
+CONFIG_MFD_RC5T583=y
+# CONFIG_MFD_RK8XX_I2C is not set
+# CONFIG_MFD_RK8XX_SPI is not set
+# CONFIG_MFD_RN5T618 is not set
+CONFIG_MFD_SEC_CORE=y
+CONFIG_MFD_SI476X_CORE=m
+CONFIG_MFD_SM501=m
+CONFIG_MFD_SM501_GPIO=y
+CONFIG_MFD_SKY81452=m
+# CONFIG_MFD_STMPE is not set
+CONFIG_MFD_SYSCON=y
+CONFIG_MFD_LP3943=m
+CONFIG_MFD_LP8788=y
+# CONFIG_MFD_TI_LMU is not set
+CONFIG_MFD_PALMAS=y
+CONFIG_TPS6105X=m
+CONFIG_TPS65010=m
+CONFIG_TPS6507X=m
+# CONFIG_MFD_TPS65086 is not set
+CONFIG_MFD_TPS65090=y
+# CONFIG_MFD_TPS65217 is not set
+# CONFIG_MFD_TI_LP873X is not set
+# CONFIG_MFD_TI_LP87565 is not set
+# CONFIG_MFD_TPS65218 is not set
+# CONFIG_MFD_TPS65219 is not set
+CONFIG_MFD_TPS6586X=y
+CONFIG_MFD_TPS65910=y
+CONFIG_MFD_TPS65912=y
+CONFIG_MFD_TPS65912_I2C=y
+CONFIG_MFD_TPS65912_SPI=y
+# CONFIG_MFD_TPS6594_I2C is not set
+# CONFIG_MFD_TPS6594_SPI is not set
+CONFIG_TWL4030_CORE=y
+CONFIG_MFD_TWL4030_AUDIO=y
+CONFIG_TWL6040_CORE=y
+CONFIG_MFD_WL1273_CORE=m
+CONFIG_MFD_LM3533=m
+# CONFIG_MFD_TC3589X is not set
+# CONFIG_MFD_TQMX86 is not set
+CONFIG_MFD_VX855=m
+# CONFIG_MFD_LOCHNAGAR is not set
+CONFIG_MFD_ARIZONA=m
+CONFIG_MFD_ARIZONA_I2C=m
+CONFIG_MFD_ARIZONA_SPI=m
+# CONFIG_MFD_CS47L24 is not set
+CONFIG_MFD_WM5102=y
+CONFIG_MFD_WM5110=y
+CONFIG_MFD_WM8997=y
+CONFIG_MFD_WM8998=y
+CONFIG_MFD_WM8400=y
+CONFIG_MFD_WM831X=y
+CONFIG_MFD_WM831X_I2C=y
+CONFIG_MFD_WM831X_SPI=y
+CONFIG_MFD_WM8350=y
+CONFIG_MFD_WM8350_I2C=y
+CONFIG_MFD_WM8994=m
+# CONFIG_MFD_ROHM_BD718XX is not set
+# CONFIG_MFD_ROHM_BD71828 is not set
+# CONFIG_MFD_ROHM_BD957XMUF is not set
+# CONFIG_MFD_ROHM_BD96801 is not set
+# CONFIG_MFD_STPMIC1 is not set
+# CONFIG_MFD_STMFX is not set
+# CONFIG_MFD_ATC260X_I2C is not set
+# CONFIG_MFD_QCOM_PM8008 is not set
+# CONFIG_MFD_CS40L50_I2C is not set
+# CONFIG_MFD_CS40L50_SPI is not set
+# CONFIG_RAVE_SP_CORE is not set
+# CONFIG_MFD_INTEL_M10_BMC_SPI is not set
+# CONFIG_MFD_QNAP_MCU is not set
+# CONFIG_MFD_RSMU_I2C is not set
+# CONFIG_MFD_RSMU_SPI is not set
+# CONFIG_MFD_UPBOARD_FPGA is not set
+CONFIG_MFD_STEAMDECK=m
+# end of Multifunction device drivers
+
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+CONFIG_REGULATOR_FIXED_VOLTAGE=m
+CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
+CONFIG_REGULATOR_USERSPACE_CONSUMER=m
+# CONFIG_REGULATOR_NETLINK_EVENTS is not set
+# CONFIG_REGULATOR_88PG86X is not set
+CONFIG_REGULATOR_88PM800=m
+CONFIG_REGULATOR_88PM8607=m
+CONFIG_REGULATOR_ACT8865=m
+CONFIG_REGULATOR_AD5398=m
+CONFIG_REGULATOR_AAT2870=m
+# CONFIG_REGULATOR_ARIZONA_LDO1 is not set
+# CONFIG_REGULATOR_ARIZONA_MICSUPP is not set
+CONFIG_REGULATOR_AS3711=m
+# CONFIG_REGULATOR_AW37503 is not set
+CONFIG_REGULATOR_BCM590XX=m
+# CONFIG_REGULATOR_CROS_EC is not set
+CONFIG_REGULATOR_DA903X=m
+CONFIG_REGULATOR_DA9052=m
+CONFIG_REGULATOR_DA9055=m
+CONFIG_REGULATOR_DA9062=m
+# CONFIG_REGULATOR_DA9063 is not set
+# CONFIG_REGULATOR_DA9121 is not set
+CONFIG_REGULATOR_DA9210=m
+CONFIG_REGULATOR_DA9211=m
+CONFIG_REGULATOR_FAN53555=m
+# CONFIG_REGULATOR_FAN53880 is not set
+CONFIG_REGULATOR_GPIO=m
+CONFIG_REGULATOR_ISL9305=m
+CONFIG_REGULATOR_ISL6271A=m
+CONFIG_REGULATOR_LP3971=m
+CONFIG_REGULATOR_LP3972=m
+CONFIG_REGULATOR_LP872X=m
+CONFIG_REGULATOR_LP8755=m
+CONFIG_REGULATOR_LP8788=m
+CONFIG_REGULATOR_LTC3589=m
+# CONFIG_REGULATOR_LTC3676 is not set
+CONFIG_REGULATOR_MAX14577=m
+CONFIG_REGULATOR_MAX1586=m
+# CONFIG_REGULATOR_MAX77503 is not set
+# CONFIG_REGULATOR_MAX77857 is not set
+CONFIG_REGULATOR_MAX8649=m
+CONFIG_REGULATOR_MAX8660=m
+# CONFIG_REGULATOR_MAX8893 is not set
+CONFIG_REGULATOR_MAX8907=m
+CONFIG_REGULATOR_MAX8925=m
+CONFIG_REGULATOR_MAX8952=m
+# CONFIG_REGULATOR_MAX8973 is not set
+CONFIG_REGULATOR_MAX8997=m
+CONFIG_REGULATOR_MAX8998=m
+# CONFIG_REGULATOR_MAX20086 is not set
+# CONFIG_REGULATOR_MAX20411 is not set
+CONFIG_REGULATOR_MAX77693=m
+# CONFIG_REGULATOR_MAX77826 is not set
+CONFIG_REGULATOR_MC13XXX_CORE=m
+CONFIG_REGULATOR_MC13783=m
+CONFIG_REGULATOR_MC13892=m
+# CONFIG_REGULATOR_MCP16502 is not set
+# CONFIG_REGULATOR_MP5416 is not set
+# CONFIG_REGULATOR_MP8859 is not set
+# CONFIG_REGULATOR_MP886X is not set
+# CONFIG_REGULATOR_MPQ7920 is not set
+CONFIG_REGULATOR_MT6311=m
+# CONFIG_REGULATOR_MT6315 is not set
+# CONFIG_REGULATOR_MT6323 is not set
+# CONFIG_REGULATOR_MT6331 is not set
+# CONFIG_REGULATOR_MT6332 is not set
+# CONFIG_REGULATOR_MT6357 is not set
+# CONFIG_REGULATOR_MT6358 is not set
+# CONFIG_REGULATOR_MT6359 is not set
+CONFIG_REGULATOR_MT6397=m
+CONFIG_REGULATOR_PALMAS=m
+# CONFIG_REGULATOR_PCA9450 is not set
+CONFIG_REGULATOR_PCAP=m
+CONFIG_REGULATOR_PCF50633=m
+# CONFIG_REGULATOR_PF8X00 is not set
+CONFIG_REGULATOR_PFUZE100=m
+# 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_QCOM_SPMI=m
+# CONFIG_REGULATOR_QCOM_USB_VBUS is not set
+# CONFIG_REGULATOR_RAA215300 is not set
+# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set
+CONFIG_REGULATOR_RC5T583=m
+# CONFIG_REGULATOR_RT4801 is not set
+# CONFIG_REGULATOR_RT4803 is not set
+CONFIG_REGULATOR_RT5033=m
+# CONFIG_REGULATOR_RT5190A is not set
+# CONFIG_REGULATOR_RT5739 is not set
+# CONFIG_REGULATOR_RT5759 is not set
+# CONFIG_REGULATOR_RT6160 is not set
+# CONFIG_REGULATOR_RT6190 is not set
+# CONFIG_REGULATOR_RT6245 is not set
+# CONFIG_REGULATOR_RTQ2134 is not set
+# CONFIG_REGULATOR_RTMV20 is not set
+# CONFIG_REGULATOR_RTQ6752 is not set
+# CONFIG_REGULATOR_RTQ2208 is not set
+CONFIG_REGULATOR_S2MPA01=m
+CONFIG_REGULATOR_S2MPS11=m
+CONFIG_REGULATOR_S5M8767=m
+CONFIG_REGULATOR_SKY81452=m
+# CONFIG_REGULATOR_SLG51000 is not set
+# CONFIG_REGULATOR_SY8106A is not set
+# CONFIG_REGULATOR_SY8824X is not set
+# CONFIG_REGULATOR_SY8827N is not set
+CONFIG_REGULATOR_TPS51632=m
+CONFIG_REGULATOR_TPS6105X=m
+CONFIG_REGULATOR_TPS62360=m
+# CONFIG_REGULATOR_TPS6286X is not set
+# CONFIG_REGULATOR_TPS6287X is not set
+CONFIG_REGULATOR_TPS65023=m
+CONFIG_REGULATOR_TPS6507X=m
+CONFIG_REGULATOR_TPS65090=m
+# CONFIG_REGULATOR_TPS65132 is not set
+CONFIG_REGULATOR_TPS6524X=m
+CONFIG_REGULATOR_TPS6586X=m
+CONFIG_REGULATOR_TPS65910=m
+CONFIG_REGULATOR_TPS65912=m
+CONFIG_REGULATOR_TWL4030=m
+# CONFIG_REGULATOR_VCTRL is not set
+CONFIG_REGULATOR_WM831X=m
+CONFIG_REGULATOR_WM8350=m
+CONFIG_REGULATOR_WM8400=m
+CONFIG_REGULATOR_WM8994=m
+# CONFIG_REGULATOR_QCOM_LABIBB is not set
+# CONFIG_RC_CORE is not set
+CONFIG_CEC_CORE=m
+CONFIG_CEC_NOTIFIER=y
+CONFIG_CEC_PIN=y
+
+#
+# CEC support
+#
+# CONFIG_CEC_PIN_ERROR_INJ is not set
+CONFIG_MEDIA_CEC_SUPPORT=y
+CONFIG_CEC_CH7322=m
+# CONFIG_CEC_CROS_EC is not set
+CONFIG_CEC_GPIO=m
+CONFIG_CEC_SECO=m
+# CONFIG_USB_EXTRON_DA_HD_4K_PLUS_CEC is not set
+CONFIG_USB_PULSE8_CEC=m
+CONFIG_USB_RAINSHADOW_CEC=m
+# end of CEC support
+
+CONFIG_MEDIA_SUPPORT=m
+# CONFIG_MEDIA_SUPPORT_FILTER is not set
+# CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set
+
+#
+# Media device types
+#
+CONFIG_MEDIA_CAMERA_SUPPORT=y
+CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
+CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
+CONFIG_MEDIA_RADIO_SUPPORT=y
+CONFIG_MEDIA_SDR_SUPPORT=y
+CONFIG_MEDIA_PLATFORM_SUPPORT=y
+CONFIG_MEDIA_TEST_SUPPORT=y
+# end of Media device types
+
+#
+# Media core support
+#
+CONFIG_VIDEO_DEV=m
+CONFIG_MEDIA_CONTROLLER=y
+CONFIG_DVB_CORE=m
+# end of Media core support
+
+#
+# Video4Linux options
+#
+CONFIG_VIDEO_V4L2_I2C=y
+CONFIG_VIDEO_V4L2_SUBDEV_API=y
+# CONFIG_VIDEO_ADV_DEBUG is not set
+# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
+CONFIG_VIDEO_TUNER=m
+CONFIG_V4L2_FLASH_LED_CLASS=m
+CONFIG_V4L2_FWNODE=m
+CONFIG_V4L2_ASYNC=m
+# end of Video4Linux options
+
+#
+# Media controller options
+#
+CONFIG_MEDIA_CONTROLLER_DVB=y
+# end of Media controller options
+
+#
+# Digital TV options
+#
+# CONFIG_DVB_MMAP is not set
+CONFIG_DVB_NET=y
+CONFIG_DVB_MAX_ADAPTERS=16
+CONFIG_DVB_DYNAMIC_MINORS=y
+# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set
+# CONFIG_DVB_ULE_DEBUG is not set
+# end of Digital TV options
+
+#
+# Media drivers
+#
+
+#
+# Media drivers
+#
+CONFIG_MEDIA_USB_SUPPORT=y
+
+#
+# Webcam devices
+#
+# CONFIG_USB_GSPCA is not set
+# CONFIG_USB_PWC is not set
+# CONFIG_USB_S2255 is not set
+# CONFIG_VIDEO_USBTV is not set
+# CONFIG_USB_VIDEO_CLASS is not set
+
+#
+# Analog TV USB devices
+#
+CONFIG_VIDEO_GO7007=m
+CONFIG_VIDEO_GO7007_USB=m
+CONFIG_VIDEO_GO7007_LOADER=m
+CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
+CONFIG_VIDEO_HDPVR=m
+CONFIG_VIDEO_PVRUSB2=m
+CONFIG_VIDEO_PVRUSB2_SYSFS=y
+CONFIG_VIDEO_PVRUSB2_DVB=y
+# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
+# CONFIG_VIDEO_STK1160 is not set
+
+#
+# Analog/digital TV USB devices
+#
+CONFIG_VIDEO_AU0828=m
+CONFIG_VIDEO_AU0828_V4L2=y
+
+#
+# Digital TV USB devices
+#
+CONFIG_DVB_AS102=m
+CONFIG_DVB_B2C2_FLEXCOP_USB=m
+# CONFIG_DVB_B2C2_FLEXCOP_USB_DEBUG is not set
+CONFIG_DVB_USB_V2=m
+CONFIG_DVB_USB_AF9035=m
+CONFIG_DVB_USB_ANYSEE=m
+CONFIG_DVB_USB_AU6610=m
+CONFIG_DVB_USB_AZ6007=m
+CONFIG_DVB_USB_CE6230=m
+CONFIG_DVB_USB_DVBSKY=m
+CONFIG_DVB_USB_EC168=m
+CONFIG_DVB_USB_GL861=m
+CONFIG_DVB_USB_MXL111SF=m
+# CONFIG_DVB_USB_ZD1301 is not set
+CONFIG_SMS_USB_DRV=m
+CONFIG_DVB_TTUSB_BUDGET=m
+CONFIG_DVB_TTUSB_DEC=m
+
+#
+# Webcam, TV (analog/digital) USB devices
+#
+CONFIG_VIDEO_EM28XX=m
+CONFIG_VIDEO_EM28XX_V4L2=m
+CONFIG_VIDEO_EM28XX_ALSA=m
+CONFIG_VIDEO_EM28XX_DVB=m
+
+#
+# Software defined radio USB devices
+#
+CONFIG_USB_AIRSPY=m
+CONFIG_USB_HACKRF=m
+CONFIG_USB_MSI2500=m
+CONFIG_MEDIA_PCI_SUPPORT=y
+
+#
+# Media capture support
+#
+# CONFIG_VIDEO_SOLO6X10 is not set
+# CONFIG_VIDEO_TW5864 is not set
+# CONFIG_VIDEO_TW68 is not set
+# CONFIG_VIDEO_TW686X is not set
+# CONFIG_VIDEO_ZORAN is not set
+
+#
+# Media capture/analog TV support
+#
+CONFIG_VIDEO_DT3155=m
+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+# CONFIG_VIDEO_HEXIUM_ORION is not set
+# CONFIG_VIDEO_MXB is not set
+
+#
+# Media capture/analog/hybrid TV support
+#
+CONFIG_VIDEO_COBALT=m
+CONFIG_VIDEO_CX25821=m
+CONFIG_VIDEO_CX25821_ALSA=m
+CONFIG_VIDEO_SAA7134=m
+CONFIG_VIDEO_SAA7134_ALSA=m
+CONFIG_VIDEO_SAA7134_DVB=m
+CONFIG_VIDEO_SAA7134_GO7007=m
+CONFIG_VIDEO_SAA7164=m
+
+#
+# Media digital TV PCI Adapters
+#
+CONFIG_DVB_B2C2_FLEXCOP_PCI=m
+# CONFIG_DVB_B2C2_FLEXCOP_PCI_DEBUG is not set
+CONFIG_DVB_DDBRIDGE=m
+# CONFIG_DVB_DDBRIDGE_MSIENABLE is not set
+CONFIG_DVB_NETUP_UNIDVB=m
+CONFIG_DVB_NGENE=m
+CONFIG_DVB_PLUTO2=m
+CONFIG_DVB_PT1=m
+CONFIG_DVB_PT3=m
+# CONFIG_DVB_BUDGET_CORE is not set
+# CONFIG_VIDEO_IPU3_CIO2 is not set
+# CONFIG_VIDEO_INTEL_IPU6 is not set
+# CONFIG_INTEL_VSC is not set
+# CONFIG_IPU_BRIDGE is not set
+CONFIG_RADIO_ADAPTERS=m
+CONFIG_RADIO_MAXIRADIO=m
+CONFIG_RADIO_SAA7706H=m
+CONFIG_RADIO_SHARK=m
+CONFIG_RADIO_SHARK2=m
+CONFIG_RADIO_SI4713=m
+CONFIG_RADIO_SI476X=m
+CONFIG_RADIO_TEA575X=m
+CONFIG_RADIO_TEA5764=m
+CONFIG_RADIO_TEF6862=m
+CONFIG_RADIO_WL1273=m
+CONFIG_USB_DSBR=m
+CONFIG_USB_KEENE=m
+CONFIG_USB_MA901=m
+CONFIG_USB_MR800=m
+CONFIG_USB_RAREMONO=m
+CONFIG_RADIO_SI470X=m
+CONFIG_USB_SI470X=m
+CONFIG_I2C_SI470X=m
+CONFIG_USB_SI4713=m
+CONFIG_PLATFORM_SI4713=m
+CONFIG_I2C_SI4713=m
+CONFIG_MEDIA_PLATFORM_DRIVERS=y
+# CONFIG_V4L_PLATFORM_DRIVERS is not set
+# CONFIG_SDR_PLATFORM_DRIVERS is not set
+CONFIG_DVB_PLATFORM_DRIVERS=y
+# CONFIG_V4L_MEM2MEM_DRIVERS is not set
+
+#
+# Allegro DVT media platform drivers
+#
+
+#
+# Amlogic media platform drivers
+#
+
+#
+# Amphion drivers
+#
+
+#
+# Aspeed media platform drivers
+#
+
+#
+# Atmel media platform drivers
+#
+
+#
+# Cadence media platform drivers
+#
+# CONFIG_VIDEO_CADENCE_CSI2RX is not set
+# CONFIG_VIDEO_CADENCE_CSI2TX is not set
+
+#
+# Chips&Media media platform drivers
+#
+
+#
+# Intel media platform drivers
+#
+
+#
+# Marvell media platform drivers
+#
+
+#
+# Mediatek media platform drivers
+#
+
+#
+# Microchip Technology, Inc. media platform drivers
+#
+
+#
+# Nuvoton media platform drivers
+#
+
+#
+# NVidia media platform drivers
+#
+
+#
+# NXP media platform drivers
+#
+
+#
+# Qualcomm media platform drivers
+#
+
+#
+# Raspberry Pi media platform drivers
+#
+# CONFIG_VIDEO_RP1_CFE is not set
+
+#
+# Renesas media platform drivers
+#
+
+#
+# Rockchip media platform drivers
+#
+
+#
+# Samsung media platform drivers
+#
+
+#
+# STMicroelectronics media platform drivers
+#
+
+#
+# Sunxi media platform drivers
+#
+
+#
+# Texas Instruments drivers
+#
+
+#
+# Verisilicon media platform drivers
+#
+
+#
+# VIA media platform drivers
+#
+
+#
+# Xilinx media platform drivers
+#
+
+#
+# MMC/SDIO DVB adapters
+#
+CONFIG_SMS_SDIO_DRV=m
+# CONFIG_V4L_TEST_DRIVERS is not set
+# CONFIG_DVB_TEST_DRIVERS is not set
+
+#
+# FireWire (IEEE 1394) Adapters
+#
+CONFIG_DVB_FIREDTV=m
+CONFIG_DVB_FIREDTV_INPUT=y
+CONFIG_MEDIA_COMMON_OPTIONS=y
+
+#
+# common driver options
+#
+CONFIG_CYPRESS_FIRMWARE=m
+CONFIG_UVC_COMMON=m
+CONFIG_VIDEO_CX2341X=m
+CONFIG_VIDEO_TVEEPROM=m
+CONFIG_DVB_B2C2_FLEXCOP=m
+CONFIG_SMS_SIANO_MDTV=m
+CONFIG_SMS_SIANO_DEBUGFS=y
+CONFIG_VIDEOBUF2_CORE=m
+CONFIG_VIDEOBUF2_V4L2=m
+CONFIG_VIDEOBUF2_MEMOPS=m
+CONFIG_VIDEOBUF2_DMA_CONTIG=m
+CONFIG_VIDEOBUF2_VMALLOC=m
+CONFIG_VIDEOBUF2_DMA_SG=m
+CONFIG_VIDEOBUF2_DVB=m
+# end of Media drivers
+
+#
+# Media ancillary drivers
+#
+CONFIG_MEDIA_ATTACH=y
+CONFIG_VIDEO_CAMERA_SENSOR=y
+# CONFIG_VIDEO_ALVIUM_CSI2 is not set
+# CONFIG_VIDEO_AR0521 is not set
+# CONFIG_VIDEO_GC0308 is not set
+# CONFIG_VIDEO_GC05A2 is not set
+# CONFIG_VIDEO_GC08A3 is not set
+# CONFIG_VIDEO_GC2145 is not set
+# CONFIG_VIDEO_HI556 is not set
+# CONFIG_VIDEO_HI846 is not set
+# CONFIG_VIDEO_HI847 is not set
+# CONFIG_VIDEO_IMX208 is not set
+# CONFIG_VIDEO_IMX214 is not set
+# CONFIG_VIDEO_IMX219 is not set
+# CONFIG_VIDEO_IMX258 is not set
+# CONFIG_VIDEO_IMX274 is not set
+# CONFIG_VIDEO_IMX283 is not set
+# CONFIG_VIDEO_IMX290 is not set
+# CONFIG_VIDEO_IMX296 is not set
+# CONFIG_VIDEO_IMX319 is not set
+# CONFIG_VIDEO_IMX334 is not set
+# CONFIG_VIDEO_IMX335 is not set
+# CONFIG_VIDEO_IMX355 is not set
+# CONFIG_VIDEO_IMX412 is not set
+# CONFIG_VIDEO_IMX415 is not set
+# CONFIG_VIDEO_MT9M001 is not set
+CONFIG_VIDEO_MT9M111=m
+# CONFIG_VIDEO_MT9M114 is not set
+# CONFIG_VIDEO_MT9P031 is not set
+# CONFIG_VIDEO_MT9T112 is not set
+# CONFIG_VIDEO_MT9V011 is not set
+# CONFIG_VIDEO_MT9V032 is not set
+# CONFIG_VIDEO_MT9V111 is not set
+# CONFIG_VIDEO_OG01A1B is not set
+# CONFIG_VIDEO_OV01A10 is not set
+# CONFIG_VIDEO_OV02A10 is not set
+# CONFIG_VIDEO_OV08D10 is not set
+# CONFIG_VIDEO_OV08X40 is not set
+# CONFIG_VIDEO_OV13858 is not set
+# CONFIG_VIDEO_OV13B10 is not set
+# CONFIG_VIDEO_OV2640 is not set
+# CONFIG_VIDEO_OV2659 is not set
+# CONFIG_VIDEO_OV2680 is not set
+# CONFIG_VIDEO_OV2685 is not set
+# CONFIG_VIDEO_OV2740 is not set
+# CONFIG_VIDEO_OV4689 is not set
+# CONFIG_VIDEO_OV5640 is not set
+# CONFIG_VIDEO_OV5645 is not set
+# CONFIG_VIDEO_OV5647 is not set
+# CONFIG_VIDEO_OV5648 is not set
+# CONFIG_VIDEO_OV5670 is not set
+# CONFIG_VIDEO_OV5675 is not set
+# CONFIG_VIDEO_OV5693 is not set
+# CONFIG_VIDEO_OV5695 is not set
+# CONFIG_VIDEO_OV64A40 is not set
+# CONFIG_VIDEO_OV6650 is not set
+# CONFIG_VIDEO_OV7251 is not set
+# CONFIG_VIDEO_OV7640 is not set
+# CONFIG_VIDEO_OV7670 is not set
+# CONFIG_VIDEO_OV772X is not set
+# CONFIG_VIDEO_OV7740 is not set
+# CONFIG_VIDEO_OV8856 is not set
+# CONFIG_VIDEO_OV8858 is not set
+# CONFIG_VIDEO_OV8865 is not set
+# CONFIG_VIDEO_OV9282 is not set
+# CONFIG_VIDEO_OV9640 is not set
+# CONFIG_VIDEO_OV9650 is not set
+# CONFIG_VIDEO_OV9734 is not set
+# CONFIG_VIDEO_RDACM20 is not set
+# CONFIG_VIDEO_RDACM21 is not set
+# CONFIG_VIDEO_RJ54N1 is not set
+# CONFIG_VIDEO_S5C73M3 is not set
+# CONFIG_VIDEO_S5K5BAF is not set
+# CONFIG_VIDEO_S5K6A3 is not set
+# CONFIG_VIDEO_VGXY61 is not set
+# CONFIG_VIDEO_CCS is not set
+# CONFIG_VIDEO_ET8EK8 is not set
+
+#
+# Camera ISPs
+#
+# CONFIG_VIDEO_THP7312 is not set
+# end of Camera ISPs
+
+#
+# Lens drivers
+#
+# CONFIG_VIDEO_AD5820 is not set
+# CONFIG_VIDEO_AK7375 is not set
+# CONFIG_VIDEO_DW9714 is not set
+# CONFIG_VIDEO_DW9719 is not set
+# CONFIG_VIDEO_DW9768 is not set
+# CONFIG_VIDEO_DW9807_VCM is not set
+# end of Lens drivers
+
+#
+# Flash devices
+#
+# CONFIG_VIDEO_ADP1653 is not set
+# CONFIG_VIDEO_LM3560 is not set
+# CONFIG_VIDEO_LM3646 is not set
+# end of Flash devices
+
+#
+# Audio decoders, processors and mixers
+#
+# CONFIG_VIDEO_CS3308 is not set
+# CONFIG_VIDEO_CS5345 is not set
+CONFIG_VIDEO_CS53L32A=m
+CONFIG_VIDEO_MSP3400=m
+# CONFIG_VIDEO_SONY_BTF_MPX is not set
+# CONFIG_VIDEO_TDA1997X is not set
+# CONFIG_VIDEO_TDA7432 is not set
+# CONFIG_VIDEO_TDA9840 is not set
+# CONFIG_VIDEO_TEA6415C is not set
+# CONFIG_VIDEO_TEA6420 is not set
+# CONFIG_VIDEO_TLV320AIC23B is not set
+# CONFIG_VIDEO_TVAUDIO is not set
+# CONFIG_VIDEO_UDA1342 is not set
+# CONFIG_VIDEO_VP27SMPX is not set
+# CONFIG_VIDEO_WM8739 is not set
+CONFIG_VIDEO_WM8775=m
+# end of Audio decoders, processors and mixers
+
+#
+# RDS decoders
+#
+# CONFIG_VIDEO_SAA6588 is not set
+# end of RDS decoders
+
+#
+# Video decoders
+#
+# CONFIG_VIDEO_ADV7180 is not set
+# CONFIG_VIDEO_ADV7183 is not set
+# CONFIG_VIDEO_ADV748X is not set
+CONFIG_VIDEO_ADV7604=m
+# CONFIG_VIDEO_ADV7604_CEC is not set
+CONFIG_VIDEO_ADV7842=m
+# CONFIG_VIDEO_ADV7842_CEC is not set
+CONFIG_VIDEO_BT819=m
+CONFIG_VIDEO_BT856=m
+CONFIG_VIDEO_BT866=m
+# CONFIG_VIDEO_ISL7998X is not set
+CONFIG_VIDEO_KS0127=m
+# CONFIG_VIDEO_ML86V7667 is not set
+CONFIG_VIDEO_SAA7110=m
+CONFIG_VIDEO_SAA711X=m
+# CONFIG_VIDEO_TC358743 is not set
+# CONFIG_VIDEO_TC358746 is not set
+# CONFIG_VIDEO_TVP514X is not set
+# CONFIG_VIDEO_TVP5150 is not set
+# CONFIG_VIDEO_TVP7002 is not set
+# CONFIG_VIDEO_TW2804 is not set
+# CONFIG_VIDEO_TW9900 is not set
+# CONFIG_VIDEO_TW9903 is not set
+# CONFIG_VIDEO_TW9906 is not set
+# CONFIG_VIDEO_TW9910 is not set
+CONFIG_VIDEO_VPX3220=m
+
+#
+# Video and audio decoders
+#
+# CONFIG_VIDEO_SAA717X is not set
+CONFIG_VIDEO_CX25840=m
+# end of Video decoders
+
+#
+# Video encoders
+#
+CONFIG_VIDEO_ADV7170=m
+CONFIG_VIDEO_ADV7175=m
+# CONFIG_VIDEO_ADV7343 is not set
+# CONFIG_VIDEO_ADV7393 is not set
+CONFIG_VIDEO_ADV7511=m
+# CONFIG_VIDEO_ADV7511_CEC is not set
+# CONFIG_VIDEO_AK881X is not set
+# CONFIG_VIDEO_SAA7127 is not set
+CONFIG_VIDEO_SAA7185=m
+# CONFIG_VIDEO_THS8200 is not set
+# end of Video encoders
+
+#
+# Video improvement chips
+#
+# CONFIG_VIDEO_UPD64031A is not set
+# CONFIG_VIDEO_UPD64083 is not set
+# end of Video improvement chips
+
+#
+# Audio/Video compression chips
+#
+# CONFIG_VIDEO_SAA6752HS is not set
+# end of Audio/Video compression chips
+
+#
+# SDR tuner chips
+#
+# CONFIG_SDR_MAX2175 is not set
+# end of SDR tuner chips
+
+#
+# Miscellaneous helper chips
+#
+# CONFIG_VIDEO_I2C is not set
+# CONFIG_VIDEO_M52790 is not set
+# CONFIG_VIDEO_ST_MIPID02 is not set
+# CONFIG_VIDEO_THS7303 is not set
+# end of Miscellaneous helper chips
+
+#
+# Video serializers and deserializers
+#
+# CONFIG_VIDEO_DS90UB913 is not set
+# CONFIG_VIDEO_DS90UB953 is not set
+# CONFIG_VIDEO_DS90UB960 is not set
+# CONFIG_VIDEO_MAX96714 is not set
+# CONFIG_VIDEO_MAX96717 is not set
+# end of Video serializers and deserializers
+
+#
+# Media SPI Adapters
+#
+CONFIG_CXD2880_SPI_DRV=m
+# CONFIG_VIDEO_GS1662 is not set
+# end of Media SPI Adapters
+
+CONFIG_MEDIA_TUNER=m
+
+#
+# Customize TV tuners
+#
+CONFIG_MEDIA_TUNER_E4000=m
+CONFIG_MEDIA_TUNER_FC0011=m
+CONFIG_MEDIA_TUNER_FC0012=m
+CONFIG_MEDIA_TUNER_FC0013=m
+CONFIG_MEDIA_TUNER_FC2580=m
+CONFIG_MEDIA_TUNER_IT913X=m
+CONFIG_MEDIA_TUNER_M88RS6000T=m
+CONFIG_MEDIA_TUNER_MAX2165=m
+CONFIG_MEDIA_TUNER_MC44S803=m
+CONFIG_MEDIA_TUNER_MSI001=m
+CONFIG_MEDIA_TUNER_MT2060=m
+CONFIG_MEDIA_TUNER_MT2063=m
+CONFIG_MEDIA_TUNER_MT20XX=m
+CONFIG_MEDIA_TUNER_MT2131=m
+CONFIG_MEDIA_TUNER_MT2266=m
+CONFIG_MEDIA_TUNER_MXL301RF=m
+CONFIG_MEDIA_TUNER_MXL5005S=m
+CONFIG_MEDIA_TUNER_MXL5007T=m
+CONFIG_MEDIA_TUNER_QM1D1B0004=m
+CONFIG_MEDIA_TUNER_QM1D1C0042=m
+CONFIG_MEDIA_TUNER_QT1010=m
+CONFIG_MEDIA_TUNER_R820T=m
+CONFIG_MEDIA_TUNER_SI2157=m
+CONFIG_MEDIA_TUNER_SIMPLE=m
+CONFIG_MEDIA_TUNER_TDA18212=m
+CONFIG_MEDIA_TUNER_TDA18218=m
+CONFIG_MEDIA_TUNER_TDA18250=m
+CONFIG_MEDIA_TUNER_TDA18271=m
+CONFIG_MEDIA_TUNER_TDA827X=m
+CONFIG_MEDIA_TUNER_TDA8290=m
+CONFIG_MEDIA_TUNER_TDA9887=m
+CONFIG_MEDIA_TUNER_TEA5761=m
+CONFIG_MEDIA_TUNER_TEA5767=m
+CONFIG_MEDIA_TUNER_TUA9001=m
+CONFIG_MEDIA_TUNER_XC2028=m
+CONFIG_MEDIA_TUNER_XC4000=m
+CONFIG_MEDIA_TUNER_XC5000=m
+# end of Customize TV tuners
+
+#
+# Customise DVB Frontends
+#
+
+#
+# Multistandard (satellite) frontends
+#
+CONFIG_DVB_MXL5XX=m
+CONFIG_DVB_STB0899=m
+CONFIG_DVB_STB6100=m
+CONFIG_DVB_STV090x=m
+CONFIG_DVB_STV0910=m
+CONFIG_DVB_STV6110x=m
+CONFIG_DVB_STV6111=m
+
+#
+# Multistandard (cable + terrestrial) frontends
+#
+CONFIG_DVB_DRXK=m
+CONFIG_DVB_MN88472=m
+CONFIG_DVB_MN88473=m
+CONFIG_DVB_SI2165=m
+CONFIG_DVB_TDA18271C2DD=m
+
+#
+# DVB-S (satellite) frontends
+#
+CONFIG_DVB_CX24110=m
+CONFIG_DVB_CX24116=m
+CONFIG_DVB_CX24117=m
+CONFIG_DVB_CX24120=m
+CONFIG_DVB_CX24123=m
+CONFIG_DVB_DS3000=m
+CONFIG_DVB_MB86A16=m
+CONFIG_DVB_MT312=m
+CONFIG_DVB_S5H1420=m
+CONFIG_DVB_SI21XX=m
+CONFIG_DVB_STB6000=m
+CONFIG_DVB_STV0288=m
+CONFIG_DVB_STV0299=m
+CONFIG_DVB_STV0900=m
+CONFIG_DVB_STV6110=m
+CONFIG_DVB_TDA10071=m
+CONFIG_DVB_TDA10086=m
+CONFIG_DVB_TDA8083=m
+CONFIG_DVB_TDA8261=m
+CONFIG_DVB_TDA826X=m
+CONFIG_DVB_TS2020=m
+CONFIG_DVB_TUA6100=m
+CONFIG_DVB_TUNER_CX24113=m
+CONFIG_DVB_TUNER_ITD1000=m
+CONFIG_DVB_VES1X93=m
+CONFIG_DVB_ZL10036=m
+CONFIG_DVB_ZL10039=m
+
+#
+# DVB-T (terrestrial) frontends
+#
+CONFIG_DVB_AS102_FE=m
+CONFIG_DVB_CX22700=m
+CONFIG_DVB_CX22702=m
+CONFIG_DVB_CXD2820R=m
+CONFIG_DVB_CXD2841ER=m
+CONFIG_DVB_DIB3000MB=m
+CONFIG_DVB_DIB3000MC=m
+CONFIG_DVB_DIB7000M=m
+CONFIG_DVB_DIB7000P=m
+CONFIG_DVB_DIB9000=m
+CONFIG_DVB_DRXD=m
+CONFIG_DVB_EC100=m
+CONFIG_DVB_L64781=m
+CONFIG_DVB_MT352=m
+CONFIG_DVB_NXT6000=m
+CONFIG_DVB_S5H1432=m
+CONFIG_DVB_SP887X=m
+CONFIG_DVB_STV0367=m
+CONFIG_DVB_TDA10048=m
+CONFIG_DVB_TDA1004X=m
+CONFIG_DVB_ZD1301_DEMOD=m
+CONFIG_DVB_ZL10353=m
+CONFIG_DVB_CXD2880=m
+
+#
+# DVB-C (cable) frontends
+#
+CONFIG_DVB_STV0297=m
+CONFIG_DVB_TDA10021=m
+CONFIG_DVB_TDA10023=m
+CONFIG_DVB_VES1820=m
+
+#
+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
+#
+CONFIG_DVB_AU8522=m
+CONFIG_DVB_AU8522_DTV=m
+CONFIG_DVB_AU8522_V4L=m
+CONFIG_DVB_BCM3510=m
+CONFIG_DVB_LG2160=m
+CONFIG_DVB_LGDT3305=m
+CONFIG_DVB_LGDT330X=m
+CONFIG_DVB_MXL692=m
+CONFIG_DVB_NXT200X=m
+CONFIG_DVB_OR51132=m
+CONFIG_DVB_OR51211=m
+CONFIG_DVB_S5H1409=m
+CONFIG_DVB_S5H1411=m
+
+#
+# ISDB-T (terrestrial) frontends
+#
+CONFIG_DVB_DIB8000=m
+CONFIG_DVB_MB86A20S=m
+CONFIG_DVB_S921=m
+
+#
+# ISDB-S (satellite) & ISDB-T (terrestrial) frontends
+#
+CONFIG_DVB_MN88443X=m
+CONFIG_DVB_TC90522=m
+
+#
+# Digital terrestrial only tuners/PLL
+#
+CONFIG_DVB_PLL=m
+CONFIG_DVB_TUNER_DIB0070=m
+CONFIG_DVB_TUNER_DIB0090=m
+
+#
+# SEC control devices for DVB-S
+#
+CONFIG_DVB_A8293=m
+CONFIG_DVB_AF9033=m
+CONFIG_DVB_ASCOT2E=m
+CONFIG_DVB_ATBM8830=m
+CONFIG_DVB_HELENE=m
+CONFIG_DVB_HORUS3A=m
+CONFIG_DVB_ISL6405=m
+CONFIG_DVB_ISL6421=m
+CONFIG_DVB_ISL6423=m
+CONFIG_DVB_IX2505V=m
+CONFIG_DVB_LGS8GL5=m
+CONFIG_DVB_LGS8GXX=m
+CONFIG_DVB_LNBH25=m
+CONFIG_DVB_LNBH29=m
+CONFIG_DVB_LNBP21=m
+CONFIG_DVB_LNBP22=m
+CONFIG_DVB_M88RS2000=m
+CONFIG_DVB_TDA665x=m
+CONFIG_DVB_DRX39XYJ=m
+
+#
+# Common Interface (EN50221) controller drivers
+#
+CONFIG_DVB_CXD2099=m
+CONFIG_DVB_SP2=m
+# end of Customise DVB Frontends
+
+#
+# Tools to develop new frontends
+#
+# CONFIG_DVB_DUMMY_FE is not set
+# end of Media ancillary drivers
+
+#
+# Graphics support
+#
+CONFIG_APERTURE_HELPERS=y
+CONFIG_SCREEN_INFO=y
+CONFIG_VIDEO=y
+CONFIG_AUXDISPLAY=y
+CONFIG_CHARLCD=m
+CONFIG_HD44780_COMMON=m
+# CONFIG_HD44780 is not set
+# CONFIG_LCD2S is not set
+CONFIG_PARPORT_PANEL=m
+CONFIG_PANEL_PARPORT=0
+CONFIG_PANEL_PROFILE=5
+# CONFIG_PANEL_CHANGE_MESSAGE is not set
+# CONFIG_CHARLCD_BL_OFF is not set
+# CONFIG_CHARLCD_BL_ON is not set
+CONFIG_CHARLCD_BL_FLASH=y
+CONFIG_KS0108=m
+CONFIG_KS0108_PORT=0x378
+CONFIG_KS0108_DELAY=2
+# CONFIG_CFAG12864B is not set
+# CONFIG_IMG_ASCII_LCD is not set
+# CONFIG_HT16K33 is not set
+# CONFIG_MAX6959 is not set
+# CONFIG_SEG_LED_GPIO is not set
+CONFIG_PANEL=m
+CONFIG_AGP=y
+CONFIG_AGP_AMD64=m
+CONFIG_AGP_INTEL=m
+CONFIG_AGP_SIS=m
+CONFIG_AGP_VIA=m
+CONFIG_INTEL_GTT=m
+# CONFIG_VGA_SWITCHEROO is not set
+CONFIG_DRM=y
+CONFIG_DRM_MIPI_DSI=y
+# CONFIG_DRM_DEBUG_MM is not set
+CONFIG_DRM_KMS_HELPER=m
+# CONFIG_DRM_PANIC is not set
+# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set
+# CONFIG_DRM_DEBUG_MODESET_LOCK is not set
+CONFIG_DRM_CLIENT=y
+CONFIG_DRM_CLIENT_LIB=m
+CONFIG_DRM_CLIENT_SELECTION=m
+CONFIG_DRM_CLIENT_SETUP=y
+
+#
+# Supported DRM clients
+#
+CONFIG_DRM_FBDEV_EMULATION=y
+CONFIG_DRM_FBDEV_OVERALLOC=100
+# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set
+# CONFIG_DRM_CLIENT_LOG is not set
+CONFIG_DRM_CLIENT_DEFAULT_FBDEV=y
+CONFIG_DRM_CLIENT_DEFAULT="fbdev"
+# end of Supported DRM clients
+
+CONFIG_DRM_LOAD_EDID_FIRMWARE=y
+CONFIG_DRM_DISPLAY_HELPER=m
+# CONFIG_DRM_DISPLAY_DP_AUX_CEC is not set
+# CONFIG_DRM_DISPLAY_DP_AUX_CHARDEV is not set
+CONFIG_DRM_DISPLAY_DP_HELPER=y
+CONFIG_DRM_DISPLAY_DP_TUNNEL=y
+CONFIG_DRM_DISPLAY_DSC_HELPER=y
+CONFIG_DRM_DISPLAY_HDCP_HELPER=y
+CONFIG_DRM_DISPLAY_HDMI_HELPER=y
+CONFIG_DRM_TTM=m
+CONFIG_DRM_EXEC=m
+CONFIG_DRM_GPUVM=m
+CONFIG_DRM_BUDDY=m
+CONFIG_DRM_TTM_HELPER=m
+CONFIG_DRM_GEM_SHMEM_HELPER=m
+CONFIG_DRM_SUBALLOC_HELPER=m
+CONFIG_DRM_SCHED=m
+
+#
+# I2C encoder or helper chips
+#
+CONFIG_DRM_I2C_CH7006=m
+CONFIG_DRM_I2C_SIL164=m
+CONFIG_DRM_I2C_NXP_TDA998X=m
+CONFIG_DRM_I2C_NXP_TDA9950=m
+# end of I2C encoder or helper chips
+
+#
+# ARM devices
+#
+# CONFIG_DRM_KOMEDA is not set
+# end of ARM devices
+
+CONFIG_DRM_RADEON=m
+# CONFIG_DRM_RADEON_USERPTR is not set
+CONFIG_DRM_AMDGPU=m
+CONFIG_DRM_AMDGPU_SI=y
+CONFIG_DRM_AMDGPU_CIK=y
+CONFIG_DRM_AMDGPU_USERPTR=y
+# CONFIG_DRM_AMD_ISP is not set
+# CONFIG_DRM_AMDGPU_WERROR is not set
+
+#
+# ACP (Audio CoProcessor) Configuration
+#
+CONFIG_DRM_AMD_ACP=y
+# end of ACP (Audio CoProcessor) Configuration
+
+#
+# Display Engine Configuration
+#
+CONFIG_DRM_AMD_DC=y
+CONFIG_DRM_AMD_DC_FP=y
+CONFIG_DRM_AMD_DC_SI=y
+# CONFIG_DEBUG_KERNEL_DC is not set
+# CONFIG_DRM_AMD_SECURE_DISPLAY is not set
+# end of Display Engine Configuration
+
+CONFIG_HSA_AMD=y
+CONFIG_DRM_NOUVEAU=m
+CONFIG_NOUVEAU_DEBUG=5
+CONFIG_NOUVEAU_DEBUG_DEFAULT=3
+# CONFIG_NOUVEAU_DEBUG_MMU is not set
+# CONFIG_NOUVEAU_DEBUG_PUSH is not set
+CONFIG_DRM_NOUVEAU_BACKLIGHT=y
+CONFIG_DRM_NOUVEAU_GSP_DEFAULT=y
+CONFIG_DRM_I915=m
+CONFIG_DRM_I915_FORCE_PROBE=""
+CONFIG_DRM_I915_CAPTURE_ERROR=y
+CONFIG_DRM_I915_COMPRESS_ERROR=y
+CONFIG_DRM_I915_USERPTR=y
+# CONFIG_DRM_I915_GVT_KVMGT is not set
+CONFIG_DRM_I915_PXP=y
+CONFIG_DRM_I915_DP_TUNNEL=y
+
+#
+# drm/i915 Debugging
+#
+# CONFIG_DRM_I915_WERROR is not set
+# CONFIG_DRM_I915_REPLAY_GPU_HANGS_API is not set
+# CONFIG_DRM_I915_DEBUG is not set
+# CONFIG_DRM_I915_DEBUG_MMIO is not set
+# CONFIG_DRM_I915_SW_FENCE_DEBUG_OBJECTS is not set
+# CONFIG_DRM_I915_SW_FENCE_CHECK_DAG is not set
+# CONFIG_DRM_I915_DEBUG_GUC is not set
+# CONFIG_DRM_I915_SELFTEST is not set
+# CONFIG_DRM_I915_LOW_LEVEL_TRACEPOINTS is not set
+# CONFIG_DRM_I915_DEBUG_VBLANK_EVADE is not set
+# CONFIG_DRM_I915_DEBUG_RUNTIME_PM is not set
+# CONFIG_DRM_I915_DEBUG_WAKEREF is not set
+# end of drm/i915 Debugging
+
+#
+# drm/i915 Profile Guided Optimisation
+#
+CONFIG_DRM_I915_REQUEST_TIMEOUT=20000
+CONFIG_DRM_I915_FENCE_TIMEOUT=10000
+CONFIG_DRM_I915_USERFAULT_AUTOSUSPEND=250
+CONFIG_DRM_I915_HEARTBEAT_INTERVAL=2500
+CONFIG_DRM_I915_PREEMPT_TIMEOUT=640
+CONFIG_DRM_I915_PREEMPT_TIMEOUT_COMPUTE=7500
+CONFIG_DRM_I915_MAX_REQUEST_BUSYWAIT=8000
+CONFIG_DRM_I915_STOP_TIMEOUT=100
+CONFIG_DRM_I915_TIMESLICE_DURATION=1
+# end of drm/i915 Profile Guided Optimisation
+
+CONFIG_DRM_XE=m
+CONFIG_DRM_XE_DISPLAY=y
+CONFIG_DRM_XE_FORCE_PROBE=""
+
+#
+# drm/Xe Debugging
+#
+# CONFIG_DRM_XE_WERROR is not set
+# CONFIG_DRM_XE_DEBUG is not set
+# CONFIG_DRM_XE_DEBUG_VM is not set
+# CONFIG_DRM_XE_DEBUG_MEMIRQ is not set
+# CONFIG_DRM_XE_DEBUG_SRIOV is not set
+# CONFIG_DRM_XE_DEBUG_MEM is not set
+# CONFIG_DRM_XE_LARGE_GUC_BUFFER is not set
+# CONFIG_DRM_XE_USERPTR_INVAL_INJECT is not set
+# end of drm/Xe Debugging
+
+#
+# drm/xe Profile Guided Optimisation
+#
+CONFIG_DRM_XE_JOB_TIMEOUT_MAX=10000
+CONFIG_DRM_XE_JOB_TIMEOUT_MIN=1
+CONFIG_DRM_XE_TIMESLICE_MAX=10000000
+CONFIG_DRM_XE_TIMESLICE_MIN=1
+CONFIG_DRM_XE_PREEMPT_TIMEOUT=640000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MAX=10000000
+CONFIG_DRM_XE_PREEMPT_TIMEOUT_MIN=1
+CONFIG_DRM_XE_ENABLE_SCHEDTIMEOUT_LIMIT=y
+# end of drm/xe Profile Guided Optimisation
+
+CONFIG_DRM_VGEM=m
+# CONFIG_DRM_VKMS is not set
+CONFIG_DRM_GMA500=m
+CONFIG_DRM_UDL=m
+CONFIG_DRM_AST=m
+# CONFIG_DRM_MGAG200 is not set
+CONFIG_DRM_QXL=m
+CONFIG_DRM_PANEL=y
+
+#
+# Display Panels
+#
+# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set
+# CONFIG_DRM_PANEL_ARM_VERSATILE is not set
+# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set
+# CONFIG_DRM_PANEL_AUO_A030JTN01 is not set
+# CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0 is not set
+# CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set
+# CONFIG_DRM_PANEL_BOE_TH101MB31UIG002_28A is not set
+# CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set
+# CONFIG_DRM_PANEL_BOE_TV101WUM_LL2 is not set
+# CONFIG_DRM_PANEL_EBBG_FT8719 is not set
+# CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set
+# CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02 is not set
+# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set
+# CONFIG_DRM_PANEL_DSI_CM is not set
+# CONFIG_DRM_PANEL_LVDS is not set
+# CONFIG_DRM_PANEL_HIMAX_HX83102 is not set
+# CONFIG_DRM_PANEL_HIMAX_HX83112A is not set
+# CONFIG_DRM_PANEL_HIMAX_HX8394 is not set
+# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9341 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9805 is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9806E is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9881C is not set
+# CONFIG_DRM_PANEL_ILITEK_ILI9882T is not set
+# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set
+# CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set
+# CONFIG_DRM_PANEL_JADARD_JD9365DA_H3 is not set
+# CONFIG_DRM_PANEL_JDI_LPM102A188A is not set
+# CONFIG_DRM_PANEL_JDI_LT070ME05000 is not set
+# CONFIG_DRM_PANEL_JDI_R63452 is not set
+# CONFIG_DRM_PANEL_KHADAS_TS050 is not set
+# CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04 is not set
+# CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set
+# CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set
+# CONFIG_DRM_PANEL_LINCOLNTECH_LCD197 is not set
+# CONFIG_DRM_PANEL_LG_LB035Q02 is not set
+# CONFIG_DRM_PANEL_LG_LG4573 is not set
+# CONFIG_DRM_PANEL_LG_SW43408 is not set
+# CONFIG_DRM_PANEL_MAGNACHIP_D53E6EA8966 is not set
+# CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set
+# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set
+# CONFIG_DRM_PANEL_NEWVISION_NV3051D is not set
+# CONFIG_DRM_PANEL_NEWVISION_NV3052C is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT35950 is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT36523 is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT36672E is not set
+# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set
+# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set
+# CONFIG_DRM_PANEL_ORISETECH_OTA5601A is not set
+# CONFIG_DRM_PANEL_ORISETECH_OTM8009A is not set
+# CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS is not set
+# CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00 is not set
+# CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM67191 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM68200 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM692E5 is not set
+# CONFIG_DRM_PANEL_RAYDIUM_RM69380 is not set
+# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_AMS581VF01 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_AMS639RQ08 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS427AP24 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3FA7 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6D7AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E3HA8 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set
+# CONFIG_DRM_PANEL_SAMSUNG_SOFEF00 is not set
+# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set
+# CONFIG_DRM_PANEL_SHARP_LQ101R1SX01 is not set
+# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set
+# CONFIG_DRM_PANEL_SHARP_LS043T1LE01 is not set
+# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set
+# CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set
+# CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set
+# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set
+# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set
+# CONFIG_DRM_PANEL_SONY_TD4353_JDI is not set
+# CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521 is not set
+# CONFIG_DRM_PANEL_STARTEK_KD070FHFID015 is not set
+# CONFIG_DRM_PANEL_EDP is not set
+# CONFIG_DRM_PANEL_SIMPLE is not set
+# CONFIG_DRM_PANEL_SYNAPTICS_R63353 is not set
+# CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set
+# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set
+# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set
+# CONFIG_DRM_PANEL_TPO_TPG110 is not set
+# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set
+# CONFIG_DRM_PANEL_VISIONOX_R66451 is not set
+# CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set
+# CONFIG_DRM_PANEL_VISIONOX_VTDR6130 is not set
+# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set
+# CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set
+# end of Display Panels
+
+CONFIG_DRM_BRIDGE=y
+CONFIG_DRM_PANEL_BRIDGE=y
+
+#
+# Display Interface Bridges
+#
+# CONFIG_DRM_CHIPONE_ICN6211 is not set
+# CONFIG_DRM_CHRONTEL_CH7033 is not set
+# CONFIG_DRM_CROS_EC_ANX7688 is not set
+# CONFIG_DRM_DISPLAY_CONNECTOR is not set
+# CONFIG_DRM_ITE_IT6263 is not set
+# CONFIG_DRM_ITE_IT6505 is not set
+# CONFIG_DRM_LONTIUM_LT8912B is not set
+# CONFIG_DRM_LONTIUM_LT9211 is not set
+# CONFIG_DRM_LONTIUM_LT9611 is not set
+# CONFIG_DRM_LONTIUM_LT9611UXC is not set
+# CONFIG_DRM_ITE_IT66121 is not set
+# CONFIG_DRM_LVDS_CODEC is not set
+# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set
+# CONFIG_DRM_NWL_MIPI_DSI is not set
+# CONFIG_DRM_NXP_PTN3460 is not set
+# CONFIG_DRM_PARADE_PS8622 is not set
+# CONFIG_DRM_PARADE_PS8640 is not set
+# CONFIG_DRM_SAMSUNG_DSIM is not set
+# CONFIG_DRM_SIL_SII8620 is not set
+# CONFIG_DRM_SII902X is not set
+# CONFIG_DRM_SII9234 is not set
+# CONFIG_DRM_SIMPLE_BRIDGE is not set
+# CONFIG_DRM_THINE_THC63LVD1024 is not set
+# CONFIG_DRM_TOSHIBA_TC358762 is not set
+# CONFIG_DRM_TOSHIBA_TC358764 is not set
+# CONFIG_DRM_TOSHIBA_TC358767 is not set
+# CONFIG_DRM_TOSHIBA_TC358768 is not set
+# CONFIG_DRM_TOSHIBA_TC358775 is not set
+# CONFIG_DRM_TI_DLPC3433 is not set
+# CONFIG_DRM_TI_TDP158 is not set
+# CONFIG_DRM_TI_TFP410 is not set
+# CONFIG_DRM_TI_SN65DSI83 is not set
+# CONFIG_DRM_TI_SN65DSI86 is not set
+# CONFIG_DRM_TI_TPD12S015 is not set
+# CONFIG_DRM_ANALOGIX_ANX6345 is not set
+# CONFIG_DRM_ANALOGIX_ANX78XX is not set
+# CONFIG_DRM_ANALOGIX_ANX7625 is not set
+# CONFIG_DRM_I2C_ADV7511 is not set
+# CONFIG_DRM_CDNS_DSI is not set
+# CONFIG_DRM_CDNS_MHDP8546 is not set
+# end of Display Interface Bridges
+
+# CONFIG_DRM_ETNAVIV is not set
+# CONFIG_DRM_HISI_HIBMC is not set
+# CONFIG_DRM_LOGICVC is not set
+# CONFIG_DRM_ARCPGU is not set
+# CONFIG_DRM_BOCHS is not set
+CONFIG_DRM_CIRRUS_QEMU=m
+# CONFIG_DRM_GM12U320 is not set
+# CONFIG_DRM_PANEL_MIPI_DBI is not set
+CONFIG_DRM_SIMPLEDRM=m
+# CONFIG_TINYDRM_HX8357D is not set
+# CONFIG_TINYDRM_ILI9163 is not set
+# CONFIG_TINYDRM_ILI9225 is not set
+# CONFIG_TINYDRM_ILI9341 is not set
+# CONFIG_TINYDRM_ILI9486 is not set
+# CONFIG_TINYDRM_MI0283QT is not set
+# CONFIG_TINYDRM_REPAPER is not set
+# CONFIG_TINYDRM_SHARP_MEMORY is not set
+# CONFIG_TINYDRM_ST7586 is not set
+# CONFIG_TINYDRM_ST7735R is not set
+# CONFIG_DRM_VBOXVIDEO is not set
+# CONFIG_DRM_GUD is not set
+# CONFIG_DRM_SSD130X is not set
+CONFIG_DRM_PANEL_BACKLIGHT_QUIRKS=m
+CONFIG_DRM_PRIVACY_SCREEN=y
+# CONFIG_DRM_WERROR is not set
+CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y
+
+#
+# Frame buffer Devices
+#
+CONFIG_FB=y
+CONFIG_FB_HECUBA=m
+CONFIG_FB_SVGALIB=m
+CONFIG_FB_CIRRUS=m
+CONFIG_FB_PM2=m
+CONFIG_FB_PM2_FIFO_DISCONNECT=y
+CONFIG_FB_CYBER2000=m
+CONFIG_FB_CYBER2000_DDC=y
+CONFIG_FB_ARC=m
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+CONFIG_FB_VGA16=m
+CONFIG_FB_UVESA=m
+CONFIG_FB_VESA=y
+CONFIG_FB_EFI=y
+CONFIG_FB_N411=m
+CONFIG_FB_HGA=m
+CONFIG_FB_OPENCORES=m
+CONFIG_FB_S1D13XXX=m
+CONFIG_FB_NVIDIA=m
+CONFIG_FB_NVIDIA_I2C=y
+# CONFIG_FB_NVIDIA_DEBUG is not set
+CONFIG_FB_NVIDIA_BACKLIGHT=y
+CONFIG_FB_RIVA=m
+CONFIG_FB_RIVA_I2C=y
+# CONFIG_FB_RIVA_DEBUG is not set
+CONFIG_FB_RIVA_BACKLIGHT=y
+CONFIG_FB_I740=m
+CONFIG_FB_MATROX=m
+CONFIG_FB_MATROX_MILLENIUM=y
+CONFIG_FB_MATROX_MYSTIQUE=y
+CONFIG_FB_MATROX_G=y
+CONFIG_FB_MATROX_I2C=m
+CONFIG_FB_MATROX_MAVEN=m
+CONFIG_FB_RADEON=m
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+CONFIG_FB_ATY128=m
+CONFIG_FB_ATY128_BACKLIGHT=y
+CONFIG_FB_ATY=m
+CONFIG_FB_ATY_CT=y
+CONFIG_FB_ATY_GENERIC_LCD=y
+CONFIG_FB_ATY_GX=y
+CONFIG_FB_ATY_BACKLIGHT=y
+CONFIG_FB_S3=m
+CONFIG_FB_S3_DDC=y
+CONFIG_FB_SAVAGE=m
+CONFIG_FB_SAVAGE_I2C=y
+CONFIG_FB_SAVAGE_ACCEL=y
+CONFIG_FB_SIS=m
+CONFIG_FB_SIS_300=y
+CONFIG_FB_SIS_315=y
+CONFIG_FB_VIA=m
+CONFIG_FB_VIA_DIRECT_PROCFS=y
+CONFIG_FB_VIA_X_COMPATIBILITY=y
+CONFIG_FB_NEOMAGIC=m
+CONFIG_FB_KYRO=m
+CONFIG_FB_3DFX=m
+CONFIG_FB_3DFX_ACCEL=y
+CONFIG_FB_3DFX_I2C=y
+CONFIG_FB_VOODOO1=m
+CONFIG_FB_VT8623=m
+CONFIG_FB_TRIDENT=m
+CONFIG_FB_ARK=m
+CONFIG_FB_PM3=m
+CONFIG_FB_CARMINE=m
+CONFIG_FB_CARMINE_DRAM_EVAL=y
+# CONFIG_CARMINE_DRAM_CUSTOM is not set
+CONFIG_FB_SM501=m
+CONFIG_FB_SMSCUFX=m
+CONFIG_FB_UDL=m
+CONFIG_FB_IBM_GXT4500=m
+# CONFIG_FB_VIRTUAL is not set
+CONFIG_FB_METRONOME=m
+CONFIG_FB_MB862XX=m
+CONFIG_FB_MB862XX_PCI_GDC=y
+CONFIG_FB_MB862XX_I2C=y
+CONFIG_FB_SIMPLE=m
+CONFIG_FB_SSD1307=m
+CONFIG_FB_SM712=m
+CONFIG_FB_CORE=y
+CONFIG_FB_NOTIFY=y
+CONFIG_FIRMWARE_EDID=y
+CONFIG_FB_DEVICE=y
+CONFIG_FB_DDC=m
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+CONFIG_FB_SYS_FILLRECT=y
+CONFIG_FB_SYS_COPYAREA=y
+CONFIG_FB_SYS_IMAGEBLIT=y
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+CONFIG_FB_SYSMEM_FOPS=y
+CONFIG_FB_DEFERRED_IO=y
+CONFIG_FB_IOMEM_FOPS=y
+CONFIG_FB_IOMEM_HELPERS=y
+CONFIG_FB_SYSMEM_HELPERS=y
+CONFIG_FB_SYSMEM_HELPERS_DEFERRED=y
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+CONFIG_FB_TILEBLITTING=y
+# end of Frame buffer Devices
+
+#
+# Backlight & LCD device support
+#
+CONFIG_LCD_CLASS_DEVICE=m
+CONFIG_LCD_L4F00242T03=m
+CONFIG_LCD_LMS283GF05=m
+CONFIG_LCD_LTV350QV=m
+CONFIG_LCD_ILI922X=m
+CONFIG_LCD_ILI9320=m
+CONFIG_LCD_TDO24M=m
+CONFIG_LCD_VGG2432A4=m
+CONFIG_LCD_PLATFORM=m
+CONFIG_LCD_AMS369FG06=m
+CONFIG_LCD_LMS501KF03=m
+CONFIG_LCD_HX8357=m
+CONFIG_LCD_OTM3225A=m
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_KTD253=m
+CONFIG_BACKLIGHT_KTD2801=m
+CONFIG_BACKLIGHT_KTZ8866=m
+CONFIG_BACKLIGHT_LM3533=m
+CONFIG_BACKLIGHT_PWM=m
+CONFIG_BACKLIGHT_DA903X=m
+CONFIG_BACKLIGHT_DA9052=m
+CONFIG_BACKLIGHT_MAX8925=m
+CONFIG_BACKLIGHT_APPLE=m
+CONFIG_BACKLIGHT_QCOM_WLED=m
+CONFIG_BACKLIGHT_SAHARA=m
+CONFIG_BACKLIGHT_WM831X=m
+CONFIG_BACKLIGHT_ADP5520=m
+CONFIG_BACKLIGHT_ADP8860=m
+CONFIG_BACKLIGHT_ADP8870=m
+CONFIG_BACKLIGHT_88PM860X=m
+CONFIG_BACKLIGHT_PCF50633=m
+CONFIG_BACKLIGHT_AAT2870=m
+CONFIG_BACKLIGHT_LM3509=m
+CONFIG_BACKLIGHT_LM3630A=m
+CONFIG_BACKLIGHT_LM3639=m
+CONFIG_BACKLIGHT_LP855X=m
+CONFIG_BACKLIGHT_LP8788=m
+CONFIG_BACKLIGHT_MP3309C=m
+CONFIG_BACKLIGHT_PANDORA=m
+CONFIG_BACKLIGHT_SKY81452=m
+CONFIG_BACKLIGHT_AS3711=m
+CONFIG_BACKLIGHT_GPIO=m
+CONFIG_BACKLIGHT_LV5207LP=m
+CONFIG_BACKLIGHT_BD6107=m
+CONFIG_BACKLIGHT_ARCXCNN=m
+CONFIG_BACKLIGHT_LED=m
+# end of Backlight & LCD device support
+
+CONFIG_VGASTATE=m
+CONFIG_HDMI=y
+
+#
+# Console display driver support
+#
+CONFIG_VGA_CONSOLE=y
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_DUMMY_CONSOLE_COLUMNS=80
+CONFIG_DUMMY_CONSOLE_ROWS=25
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set
+CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y
+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set
+# end of Console display driver support
+
+# CONFIG_LOGO is not set
+# end of Graphics support
+
+# CONFIG_DRM_ACCEL is not set
+CONFIG_SOUND=m
+CONFIG_SOUND_OSS_CORE=y
+CONFIG_SOUND_OSS_CORE_PRECLAIM=y
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_PCM_ELD=y
+CONFIG_SND_PCM_IEC958=y
+CONFIG_SND_DMAENGINE_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_SEQ_DEVICE=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_COMPRESS_OFFLOAD=m
+CONFIG_SND_COMPRESS_ACCEL=y
+CONFIG_SND_JACK=y
+CONFIG_SND_JACK_INPUT_DEV=y
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_PCM_TIMER=y
+CONFIG_SND_HRTIMER=m
+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_CTL_FAST_LOOKUP=y
+# CONFIG_SND_DEBUG is not set
+CONFIG_SND_CTL_INPUT_VALIDATION=y
+# CONFIG_SND_UTIMER is not set
+CONFIG_SND_VMASTER=y
+CONFIG_SND_DMA_SGBUF=y
+CONFIG_SND_CTL_LED=m
+CONFIG_SND_SEQUENCER=m
+CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_SEQUENCER_OSS=m
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
+CONFIG_SND_SEQ_MIDI_EVENT=m
+CONFIG_SND_SEQ_MIDI=m
+CONFIG_SND_SEQ_MIDI_EMUL=m
+CONFIG_SND_SEQ_VIRMIDI=m
+CONFIG_SND_SEQ_UMP=y
+CONFIG_SND_MPU401_UART=m
+CONFIG_SND_OPL3_LIB=m
+CONFIG_SND_OPL3_LIB_SEQ=m
+CONFIG_SND_VX_LIB=m
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_DRIVERS=y
+CONFIG_SND_PCSP=m
+CONFIG_SND_DUMMY=m
+CONFIG_SND_ALOOP=m
+# CONFIG_SND_PCMTEST is not set
+CONFIG_SND_VIRMIDI=m
+CONFIG_SND_MTPAV=m
+CONFIG_SND_MTS64=m
+CONFIG_SND_SERIAL_U16550=m
+# CONFIG_SND_SERIAL_GENERIC is not set
+CONFIG_SND_MPU401=m
+CONFIG_SND_PORTMAN2X4=m
+CONFIG_SND_AC97_POWER_SAVE=y
+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=0
+CONFIG_SND_SB_COMMON=m
+CONFIG_SND_PCI=y
+CONFIG_SND_AD1889=m
+CONFIG_SND_ALS300=m
+CONFIG_SND_ALS4000=m
+CONFIG_SND_ALI5451=m
+CONFIG_SND_ASIHPI=m
+CONFIG_SND_ATIIXP=m
+CONFIG_SND_ATIIXP_MODEM=m
+CONFIG_SND_AU8810=m
+CONFIG_SND_AU8820=m
+CONFIG_SND_AU8830=m
+CONFIG_SND_AW2=m
+CONFIG_SND_AZT3328=m
+CONFIG_SND_BT87X=m
+# CONFIG_SND_BT87X_OVERCLOCK is not set
+CONFIG_SND_CA0106=m
+CONFIG_SND_CMIPCI=m
+CONFIG_SND_OXYGEN_LIB=m
+CONFIG_SND_OXYGEN=m
+CONFIG_SND_CS4281=m
+CONFIG_SND_CS46XX=m
+CONFIG_SND_CS46XX_NEW_DSP=y
+CONFIG_SND_CTXFI=m
+CONFIG_SND_DARLA20=m
+CONFIG_SND_GINA20=m
+CONFIG_SND_LAYLA20=m
+CONFIG_SND_DARLA24=m
+CONFIG_SND_GINA24=m
+CONFIG_SND_LAYLA24=m
+CONFIG_SND_MONA=m
+CONFIG_SND_MIA=m
+CONFIG_SND_ECHO3G=m
+CONFIG_SND_INDIGO=m
+CONFIG_SND_INDIGOIO=m
+CONFIG_SND_INDIGODJ=m
+CONFIG_SND_INDIGOIOX=m
+CONFIG_SND_INDIGODJX=m
+CONFIG_SND_EMU10K1=m
+CONFIG_SND_EMU10K1_SEQ=m
+CONFIG_SND_EMU10K1X=m
+CONFIG_SND_ENS1370=m
+CONFIG_SND_ENS1371=m
+CONFIG_SND_ES1938=m
+CONFIG_SND_ES1968=m
+CONFIG_SND_ES1968_INPUT=y
+CONFIG_SND_ES1968_RADIO=y
+CONFIG_SND_FM801=m
+CONFIG_SND_FM801_TEA575X_BOOL=y
+CONFIG_SND_HDSP=m
+CONFIG_SND_HDSPM=m
+CONFIG_SND_ICE1712=m
+CONFIG_SND_ICE1724=m
+CONFIG_SND_INTEL8X0=m
+CONFIG_SND_INTEL8X0M=m
+CONFIG_SND_KORG1212=m
+CONFIG_SND_LOLA=m
+CONFIG_SND_LX6464ES=m
+CONFIG_SND_MAESTRO3=m
+CONFIG_SND_MAESTRO3_INPUT=y
+CONFIG_SND_MIXART=m
+CONFIG_SND_NM256=m
+CONFIG_SND_PCXHR=m
+CONFIG_SND_RIPTIDE=m
+CONFIG_SND_RME32=m
+CONFIG_SND_RME96=m
+CONFIG_SND_RME9652=m
+CONFIG_SND_SONICVIBES=m
+CONFIG_SND_TRIDENT=m
+CONFIG_SND_VIA82XX=m
+CONFIG_SND_VIA82XX_MODEM=m
+CONFIG_SND_VIRTUOSO=m
+CONFIG_SND_VX222=m
+CONFIG_SND_YMFPCI=m
+
+#
+# HD-Audio
+#
+CONFIG_SND_HDA=m
+CONFIG_SND_HDA_GENERIC_LEDS=y
+CONFIG_SND_HDA_INTEL=m
+CONFIG_SND_HDA_HWDEP=y
+CONFIG_SND_HDA_RECONFIG=y
+CONFIG_SND_HDA_INPUT_BEEP=y
+CONFIG_SND_HDA_INPUT_BEEP_MODE=0
+CONFIG_SND_HDA_PATCH_LOADER=y
+CONFIG_SND_HDA_CIRRUS_SCODEC=m
+CONFIG_SND_HDA_SCODEC_CS35L41=m
+CONFIG_SND_HDA_CS_DSP_CONTROLS=m
+CONFIG_SND_HDA_SCODEC_COMPONENT=m
+CONFIG_SND_HDA_SCODEC_CS35L41_I2C=m
+CONFIG_SND_HDA_SCODEC_CS35L41_SPI=m
+CONFIG_SND_HDA_SCODEC_CS35L56=m
+CONFIG_SND_HDA_SCODEC_CS35L56_I2C=m
+CONFIG_SND_HDA_SCODEC_CS35L56_SPI=m
+CONFIG_SND_HDA_SCODEC_TAS2781_I2C=m
+CONFIG_SND_HDA_SCODEC_TAS2781_SPI=m
+CONFIG_SND_HDA_CODEC_REALTEK=m
+CONFIG_SND_HDA_CODEC_ANALOG=m
+CONFIG_SND_HDA_CODEC_SIGMATEL=m
+CONFIG_SND_HDA_CODEC_VIA=m
+CONFIG_SND_HDA_CODEC_HDMI=m
+CONFIG_SND_HDA_CODEC_CIRRUS=m
+CONFIG_SND_HDA_CODEC_CS8409=m
+CONFIG_SND_HDA_CODEC_CONEXANT=m
+CONFIG_SND_HDA_CODEC_SENARYTECH=m
+CONFIG_SND_HDA_CODEC_CA0110=m
+CONFIG_SND_HDA_CODEC_CA0132=m
+CONFIG_SND_HDA_CODEC_CA0132_DSP=y
+CONFIG_SND_HDA_CODEC_CMEDIA=m
+CONFIG_SND_HDA_CODEC_SI3054=m
+CONFIG_SND_HDA_GENERIC=m
+CONFIG_SND_HDA_POWER_SAVE_DEFAULT=0
+CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y
+# CONFIG_SND_HDA_CTL_DEV_ID is not set
+# end of HD-Audio
+
+CONFIG_SND_HDA_CORE=m
+CONFIG_SND_HDA_DSP_LOADER=y
+CONFIG_SND_HDA_COMPONENT=y
+CONFIG_SND_HDA_I915=y
+CONFIG_SND_HDA_EXT_CORE=m
+CONFIG_SND_HDA_PREALLOC_SIZE=0
+CONFIG_SND_INTEL_NHLT=y
+CONFIG_SND_INTEL_DSP_CONFIG=m
+CONFIG_SND_INTEL_SOUNDWIRE_ACPI=m
+# CONFIG_SND_INTEL_BYT_PREFER_SOF is not set
+CONFIG_SND_SPI=y
+CONFIG_SND_USB=y
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_AUDIO_MIDI_V2 is not set
+CONFIG_SND_USB_AUDIO_USE_MEDIA_CONTROLLER=y
+CONFIG_SND_USB_UA101=m
+CONFIG_SND_USB_USX2Y=m
+CONFIG_SND_USB_CAIAQ=m
+CONFIG_SND_USB_CAIAQ_INPUT=y
+CONFIG_SND_USB_US122L=m
+CONFIG_SND_USB_6FIRE=m
+CONFIG_SND_USB_HIFACE=m
+CONFIG_SND_BCD2000=m
+CONFIG_SND_USB_LINE6=m
+CONFIG_SND_USB_POD=m
+CONFIG_SND_USB_PODHD=m
+CONFIG_SND_USB_TONEPORT=m
+CONFIG_SND_USB_VARIAX=m
+CONFIG_SND_FIREWIRE=y
+CONFIG_SND_FIREWIRE_LIB=m
+CONFIG_SND_DICE=m
+CONFIG_SND_OXFW=m
+CONFIG_SND_ISIGHT=m
+CONFIG_SND_FIREWORKS=m
+CONFIG_SND_BEBOB=m
+CONFIG_SND_FIREWIRE_DIGI00X=m
+CONFIG_SND_FIREWIRE_TASCAM=m
+CONFIG_SND_FIREWIRE_MOTU=m
+CONFIG_SND_FIREFACE=m
+CONFIG_SND_PCMCIA=y
+CONFIG_SND_VXPOCKET=m
+CONFIG_SND_PDAUDIOCF=m
+CONFIG_SND_SOC=m
+CONFIG_SND_SOC_AC97_BUS=y
+CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y
+CONFIG_SND_SOC_COMPRESS=y
+CONFIG_SND_SOC_TOPOLOGY=y
+CONFIG_SND_SOC_ACPI=m
+CONFIG_SND_SOC_ADI=m
+CONFIG_SND_SOC_ADI_AXI_I2S=m
+CONFIG_SND_SOC_ADI_AXI_SPDIF=m
+CONFIG_SND_SOC_AMD_ACP=m
+CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m
+CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
+CONFIG_SND_SOC_AMD_ST_ES8336_MACH=m
+CONFIG_SND_SOC_AMD_ACP3x=m
+CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m
+CONFIG_SND_SOC_AMD_RENOIR=m
+CONFIG_SND_SOC_AMD_RENOIR_MACH=m
+CONFIG_SND_SOC_AMD_ACP5x=m
+CONFIG_SND_SOC_AMD_VANGOGH_MACH=m
+CONFIG_SND_SOC_AMD_ACP6x=m
+CONFIG_SND_SOC_AMD_YC_MACH=m
+CONFIG_SND_AMD_ACP_CONFIG=m
+CONFIG_SND_SOC_AMD_ACP_COMMON=m
+CONFIG_SND_SOC_ACPI_AMD_MATCH=m
+CONFIG_SND_SOC_AMD_ACP_PDM=m
+CONFIG_SND_SOC_AMD_ACP_LEGACY_COMMON=m
+CONFIG_SND_SOC_AMD_ACP_I2S=m
+CONFIG_SND_SOC_AMD_ACP_PCM=m
+CONFIG_SND_SOC_AMD_ACP_PCI=m
+CONFIG_SND_AMD_ASOC_RENOIR=m
+CONFIG_SND_AMD_ASOC_REMBRANDT=m
+CONFIG_SND_AMD_ASOC_ACP63=m
+CONFIG_SND_AMD_ASOC_ACP70=m
+CONFIG_SND_SOC_AMD_MACH_COMMON=m
+CONFIG_SND_SOC_AMD_LEGACY_MACH=m
+CONFIG_SND_SOC_AMD_SOF_MACH=m
+CONFIG_SND_SOC_AMD_SDW_MACH_COMMON=m
+CONFIG_SND_SOC_AMD_SOF_SDW_MACH=m
+# CONFIG_SND_SOC_AMD_LEGACY_SDW_MACH is not set
+CONFIG_SND_AMD_SOUNDWIRE_ACPI=m
+CONFIG_SND_SOC_AMD_RPL_ACP6x=m
+CONFIG_SND_SOC_AMD_ACP63_TOPLEVEL=m
+CONFIG_SND_SOC_AMD_SOUNDWIRE_LINK_BASELINE=m
+CONFIG_SND_SOC_AMD_SOUNDWIRE=m
+CONFIG_SND_SOC_AMD_PS=m
+CONFIG_SND_SOC_AMD_PS_MACH=m
+CONFIG_SND_ATMEL_SOC=m
+CONFIG_SND_SOC_MIKROE_PROTO=m
+CONFIG_SND_BCM63XX_I2S_WHISTLER=m
+CONFIG_SND_DESIGNWARE_I2S=m
+CONFIG_SND_DESIGNWARE_PCM=y
+
+#
+# SoC Audio for Freescale CPUs
+#
+
+#
+# Common SoC Audio options for Freescale CPUs:
+#
+CONFIG_SND_SOC_FSL_ASRC=m
+CONFIG_SND_SOC_FSL_SAI=m
+# CONFIG_SND_SOC_FSL_MQS is not set
+# CONFIG_SND_SOC_FSL_AUDMIX is not set
+CONFIG_SND_SOC_FSL_SSI=m
+CONFIG_SND_SOC_FSL_SPDIF=m
+CONFIG_SND_SOC_FSL_ESAI=m
+# CONFIG_SND_SOC_FSL_MICFIL is not set
+# CONFIG_SND_SOC_FSL_EASRC is not set
+# CONFIG_SND_SOC_FSL_XCVR is not set
+CONFIG_SND_SOC_FSL_UTILS=m
+CONFIG_SND_SOC_IMX_AUDMUX=m
+# end of SoC Audio for Freescale CPUs
+
+# CONFIG_SND_SOC_CHV3_I2S is not set
+CONFIG_SND_I2S_HI6210_I2S=m
+
+#
+# SoC Audio for Loongson CPUs
+#
+# end of SoC Audio for Loongson CPUs
+
+CONFIG_SND_SOC_IMG=y
+CONFIG_SND_SOC_IMG_I2S_IN=m
+CONFIG_SND_SOC_IMG_I2S_OUT=m
+CONFIG_SND_SOC_IMG_PARALLEL_OUT=m
+CONFIG_SND_SOC_IMG_SPDIF_IN=m
+CONFIG_SND_SOC_IMG_SPDIF_OUT=m
+CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m
+CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=y
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m
+CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_ACPI=m
+CONFIG_SND_SOC_ACPI_INTEL_MATCH=m
+CONFIG_SND_SOC_ACPI_INTEL_SDCA_QUIRKS=m
+# CONFIG_SND_SOC_INTEL_AVS is not set
+CONFIG_SND_SOC_INTEL_MACH=y
+CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
+CONFIG_SND_SOC_INTEL_HDA_DSP_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_MAXIM_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_REALTEK_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_CIRRUS_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_NUVOTON_COMMON=m
+CONFIG_SND_SOC_INTEL_SOF_BOARD_HELPERS=m
+# CONFIG_SND_SOC_INTEL_BDW_RT5650_MACH is not set
+# CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH is not set
+# CONFIG_SND_SOC_INTEL_BROADWELL_MACH is not set
+CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
+CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
+CONFIG_SND_SOC_INTEL_BYTCR_WM5102_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
+CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m
+CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_WM8804_MACH=m
+CONFIG_SND_SOC_INTEL_GLK_DA7219_MAX98357A_MACH=m
+CONFIG_SND_SOC_INTEL_GLK_RT5682_MAX98357A_MACH=m
+CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CS42L42_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_PCM512x_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_ES8336_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_NAU8825_MACH=m
+CONFIG_SND_SOC_INTEL_CML_LP_DA7219_MAX98357A_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_CML_RT1011_RT5682_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_DA7219_MACH=m
+CONFIG_SND_SOC_INTEL_SOF_SSP_AMP_MACH=m
+CONFIG_SND_SOC_INTEL_EHL_RT5660_MACH=m
+CONFIG_SND_SOC_INTEL_SOUNDWIRE_SOF_MACH=m
+CONFIG_SND_SOC_MTK_BTCVSD=m
+CONFIG_SND_SOC_SDCA=m
+CONFIG_SND_SOC_SDCA_OPTIONAL=m
+CONFIG_SND_SOC_SOF_TOPLEVEL=y
+CONFIG_SND_SOC_SOF_PCI_DEV=m
+CONFIG_SND_SOC_SOF_PCI=m
+CONFIG_SND_SOC_SOF_ACPI=m
+CONFIG_SND_SOC_SOF_ACPI_DEV=m
+CONFIG_SND_SOC_SOF_OF=m
+CONFIG_SND_SOC_SOF_DEBUG_PROBES=m
+CONFIG_SND_SOC_SOF_CLIENT=m
+# CONFIG_SND_SOC_SOF_DEVELOPER_SUPPORT is not set
+CONFIG_SND_SOC_SOF=m
+CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE=y
+CONFIG_SND_SOC_SOF_IPC3=y
+CONFIG_SND_SOC_SOF_IPC4=y
+CONFIG_SND_SOC_SOF_AMD_TOPLEVEL=m
+CONFIG_SND_SOC_SOF_AMD_COMMON=m
+CONFIG_SND_SOC_SOF_AMD_RENOIR=m
+CONFIG_SND_SOC_SOF_AMD_VANGOGH=m
+CONFIG_SND_SOC_SOF_AMD_REMBRANDT=m
+CONFIG_SND_SOC_SOF_ACP_PROBES=m
+CONFIG_SND_SOC_SOF_AMD_SOUNDWIRE_LINK_BASELINE=m
+CONFIG_SND_SOC_SOF_AMD_SOUNDWIRE=m
+CONFIG_SND_SOC_SOF_AMD_ACP63=m
+CONFIG_SND_SOC_SOF_AMD_ACP70=m
+CONFIG_SND_SOC_SOF_INTEL_TOPLEVEL=y
+CONFIG_SND_SOC_SOF_INTEL_HIFI_EP_IPC=m
+CONFIG_SND_SOC_SOF_INTEL_ATOM_HIFI_EP=m
+CONFIG_SND_SOC_SOF_INTEL_COMMON=m
+CONFIG_SND_SOC_SOF_BAYTRAIL=m
+CONFIG_SND_SOC_SOF_BROADWELL=m
+CONFIG_SND_SOC_SOF_MERRIFIELD=m
+CONFIG_SND_SOC_SOF_INTEL_SKL=m
+CONFIG_SND_SOC_SOF_SKYLAKE=m
+CONFIG_SND_SOC_SOF_KABYLAKE=m
+CONFIG_SND_SOC_SOF_INTEL_APL=m
+CONFIG_SND_SOC_SOF_APOLLOLAKE=m
+CONFIG_SND_SOC_SOF_GEMINILAKE=m
+CONFIG_SND_SOC_SOF_INTEL_CNL=m
+CONFIG_SND_SOC_SOF_CANNONLAKE=m
+CONFIG_SND_SOC_SOF_COFFEELAKE=m
+CONFIG_SND_SOC_SOF_COMETLAKE=m
+CONFIG_SND_SOC_SOF_INTEL_ICL=m
+CONFIG_SND_SOC_SOF_ICELAKE=m
+CONFIG_SND_SOC_SOF_JASPERLAKE=m
+CONFIG_SND_SOC_SOF_INTEL_TGL=m
+CONFIG_SND_SOC_SOF_TIGERLAKE=m
+CONFIG_SND_SOC_SOF_ELKHARTLAKE=m
+CONFIG_SND_SOC_SOF_ALDERLAKE=m
+CONFIG_SND_SOC_SOF_INTEL_MTL=m
+CONFIG_SND_SOC_SOF_METEORLAKE=m
+CONFIG_SND_SOC_SOF_INTEL_LNL=m
+CONFIG_SND_SOC_SOF_LUNARLAKE=m
+CONFIG_SND_SOC_SOF_INTEL_PTL=m
+CONFIG_SND_SOC_SOF_PANTHERLAKE=m
+CONFIG_SND_SOC_SOF_HDA_COMMON=m
+CONFIG_SND_SOC_SOF_HDA_GENERIC=m
+CONFIG_SND_SOC_SOF_HDA_MLINK=m
+CONFIG_SND_SOC_SOF_HDA_LINK=y
+CONFIG_SND_SOC_SOF_HDA_AUDIO_CODEC=y
+CONFIG_SND_SOC_SOF_HDA_LINK_BASELINE=m
+CONFIG_SND_SOC_SOF_HDA=m
+CONFIG_SND_SOC_SOF_HDA_PROBES=m
+CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE_LINK_BASELINE=m
+CONFIG_SND_SOC_SOF_INTEL_SOUNDWIRE=m
+CONFIG_SND_SOC_SOF_XTENSA=m
+
+#
+# STMicroelectronics STM32 SOC audio support
+#
+# end of STMicroelectronics STM32 SOC audio support
+
+CONFIG_SND_SOC_XILINX_I2S=m
+CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
+CONFIG_SND_SOC_XILINX_SPDIF=m
+CONFIG_SND_SOC_XTFPGA_I2S=m
+CONFIG_SND_SOC_I2C_AND_SPI=m
+
+#
+# CODEC drivers
+#
+CONFIG_SND_SOC_ARIZONA=m
+CONFIG_SND_SOC_WM_ADSP=m
+CONFIG_SND_SOC_AC97_CODEC=m
+CONFIG_SND_SOC_ADAU_UTILS=m
+CONFIG_SND_SOC_ADAU1372=m
+CONFIG_SND_SOC_ADAU1372_I2C=m
+CONFIG_SND_SOC_ADAU1372_SPI=m
+CONFIG_SND_SOC_ADAU1373=m
+CONFIG_SND_SOC_ADAU1701=m
+CONFIG_SND_SOC_ADAU17X1=m
+CONFIG_SND_SOC_ADAU1761=m
+CONFIG_SND_SOC_ADAU1761_I2C=m
+CONFIG_SND_SOC_ADAU1761_SPI=m
+CONFIG_SND_SOC_ADAU7002=m
+CONFIG_SND_SOC_ADAU7118=m
+CONFIG_SND_SOC_ADAU7118_HW=m
+CONFIG_SND_SOC_ADAU7118_I2C=m
+CONFIG_SND_SOC_AK4104=m
+CONFIG_SND_SOC_AK4118=m
+CONFIG_SND_SOC_AK4375=m
+CONFIG_SND_SOC_AK4458=m
+CONFIG_SND_SOC_AK4554=m
+CONFIG_SND_SOC_AK4613=m
+CONFIG_SND_SOC_AK4619=m
+CONFIG_SND_SOC_AK4642=m
+CONFIG_SND_SOC_AK5386=m
+CONFIG_SND_SOC_AK5558=m
+CONFIG_SND_SOC_ALC5623=m
+CONFIG_SND_SOC_AUDIO_IIO_AUX=m
+CONFIG_SND_SOC_AW8738=m
+CONFIG_SND_SOC_AW88395_LIB=m
+CONFIG_SND_SOC_AW88395=m
+CONFIG_SND_SOC_AW88261=m
+CONFIG_SND_SOC_AW88081=m
+CONFIG_SND_SOC_AW87390=m
+CONFIG_SND_SOC_AW88399=m
+CONFIG_SND_SOC_BD28623=m
+CONFIG_SND_SOC_BT_SCO=m
+CONFIG_SND_SOC_CHV3_CODEC=m
+CONFIG_SND_SOC_CROS_EC_CODEC=m
+CONFIG_SND_SOC_CS_AMP_LIB=m
+CONFIG_SND_SOC_CS35L32=m
+CONFIG_SND_SOC_CS35L33=m
+CONFIG_SND_SOC_CS35L34=m
+CONFIG_SND_SOC_CS35L35=m
+CONFIG_SND_SOC_CS35L36=m
+CONFIG_SND_SOC_CS35L41_LIB=m
+CONFIG_SND_SOC_CS35L41=m
+CONFIG_SND_SOC_CS35L41_SPI=m
+CONFIG_SND_SOC_CS35L41_I2C=m
+CONFIG_SND_SOC_CS35L45=m
+CONFIG_SND_SOC_CS35L45_SPI=m
+CONFIG_SND_SOC_CS35L45_I2C=m
+CONFIG_SND_SOC_CS35L56=m
+CONFIG_SND_SOC_CS35L56_SHARED=m
+CONFIG_SND_SOC_CS35L56_I2C=m
+CONFIG_SND_SOC_CS35L56_SPI=m
+CONFIG_SND_SOC_CS35L56_SDW=m
+CONFIG_SND_SOC_CS42L42_CORE=m
+CONFIG_SND_SOC_CS42L42=m
+CONFIG_SND_SOC_CS42L42_SDW=m
+CONFIG_SND_SOC_CS42L43=m
+CONFIG_SND_SOC_CS42L43_SDW=m
+CONFIG_SND_SOC_CS42L51=m
+CONFIG_SND_SOC_CS42L51_I2C=m
+CONFIG_SND_SOC_CS42L52=m
+CONFIG_SND_SOC_CS42L56=m
+CONFIG_SND_SOC_CS42L73=m
+CONFIG_SND_SOC_CS42L83=m
+CONFIG_SND_SOC_CS42L84=m
+CONFIG_SND_SOC_CS4234=m
+CONFIG_SND_SOC_CS4265=m
+CONFIG_SND_SOC_CS4270=m
+CONFIG_SND_SOC_CS4271=m
+CONFIG_SND_SOC_CS4271_I2C=m
+CONFIG_SND_SOC_CS4271_SPI=m
+CONFIG_SND_SOC_CS42XX8=m
+CONFIG_SND_SOC_CS42XX8_I2C=m
+CONFIG_SND_SOC_CS43130=m
+CONFIG_SND_SOC_CS4341=m
+CONFIG_SND_SOC_CS4349=m
+CONFIG_SND_SOC_CS53L30=m
+CONFIG_SND_SOC_CS530X=m
+CONFIG_SND_SOC_CS530X_I2C=m
+CONFIG_SND_SOC_CX2072X=m
+CONFIG_SND_SOC_DA7213=m
+CONFIG_SND_SOC_DA7219=m
+CONFIG_SND_SOC_DMIC=m
+CONFIG_SND_SOC_HDMI_CODEC=m
+CONFIG_SND_SOC_ES7134=m
+CONFIG_SND_SOC_ES7241=m
+CONFIG_SND_SOC_ES83XX_DSM_COMMON=m
+CONFIG_SND_SOC_ES8311=m
+CONFIG_SND_SOC_ES8316=m
+CONFIG_SND_SOC_ES8323=m
+CONFIG_SND_SOC_ES8326=m
+CONFIG_SND_SOC_ES8328=m
+CONFIG_SND_SOC_ES8328_I2C=m
+CONFIG_SND_SOC_ES8328_SPI=m
+CONFIG_SND_SOC_GTM601=m
+CONFIG_SND_SOC_HDAC_HDA=m
+CONFIG_SND_SOC_HDA=m
+CONFIG_SND_SOC_ICS43432=m
+CONFIG_SND_SOC_IDT821034=m
+CONFIG_SND_SOC_MAX98088=m
+CONFIG_SND_SOC_MAX98090=m
+CONFIG_SND_SOC_MAX98357A=m
+CONFIG_SND_SOC_MAX98504=m
+CONFIG_SND_SOC_MAX9867=m
+CONFIG_SND_SOC_MAX98927=m
+CONFIG_SND_SOC_MAX98520=m
+CONFIG_SND_SOC_MAX98363=m
+CONFIG_SND_SOC_MAX98373=m
+CONFIG_SND_SOC_MAX98373_I2C=m
+CONFIG_SND_SOC_MAX98373_SDW=m
+CONFIG_SND_SOC_MAX98388=m
+CONFIG_SND_SOC_MAX98390=m
+CONFIG_SND_SOC_MAX98396=m
+CONFIG_SND_SOC_MAX9860=m
+CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
+CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
+CONFIG_SND_SOC_PCM1681=m
+CONFIG_SND_SOC_PCM1789=m
+CONFIG_SND_SOC_PCM1789_I2C=m
+CONFIG_SND_SOC_PCM179X=m
+CONFIG_SND_SOC_PCM179X_I2C=m
+CONFIG_SND_SOC_PCM179X_SPI=m
+CONFIG_SND_SOC_PCM186X=m
+CONFIG_SND_SOC_PCM186X_I2C=m
+CONFIG_SND_SOC_PCM186X_SPI=m
+CONFIG_SND_SOC_PCM3060=m
+CONFIG_SND_SOC_PCM3060_I2C=m
+CONFIG_SND_SOC_PCM3060_SPI=m
+CONFIG_SND_SOC_PCM3168A=m
+CONFIG_SND_SOC_PCM3168A_I2C=m
+CONFIG_SND_SOC_PCM3168A_SPI=m
+CONFIG_SND_SOC_PCM5102A=m
+CONFIG_SND_SOC_PCM512x=m
+CONFIG_SND_SOC_PCM512x_I2C=m
+CONFIG_SND_SOC_PCM512x_SPI=m
+CONFIG_SND_SOC_PCM6240=m
+CONFIG_SND_SOC_PEB2466=m
+CONFIG_SND_SOC_RL6231=m
+CONFIG_SND_SOC_RT_SDW_COMMON=m
+CONFIG_SND_SOC_RT1011=m
+CONFIG_SND_SOC_RT1015=m
+CONFIG_SND_SOC_RT1015P=m
+CONFIG_SND_SOC_RT1017_SDCA_SDW=m
+CONFIG_SND_SOC_RT1019=m
+CONFIG_SND_SOC_RT1308=m
+CONFIG_SND_SOC_RT1308_SDW=m
+CONFIG_SND_SOC_RT1316_SDW=m
+CONFIG_SND_SOC_RT1318_SDW=m
+CONFIG_SND_SOC_RT1320_SDW=m
+CONFIG_SND_SOC_RT5616=m
+CONFIG_SND_SOC_RT5631=m
+CONFIG_SND_SOC_RT5640=m
+CONFIG_SND_SOC_RT5645=m
+CONFIG_SND_SOC_RT5651=m
+CONFIG_SND_SOC_RT5659=m
+CONFIG_SND_SOC_RT5660=m
+CONFIG_SND_SOC_RT5670=m
+CONFIG_SND_SOC_RT5682=m
+CONFIG_SND_SOC_RT5682_I2C=m
+CONFIG_SND_SOC_RT5682_SDW=m
+CONFIG_SND_SOC_RT5682S=m
+CONFIG_SND_SOC_RT700=m
+CONFIG_SND_SOC_RT700_SDW=m
+CONFIG_SND_SOC_RT711=m
+CONFIG_SND_SOC_RT711_SDW=m
+CONFIG_SND_SOC_RT711_SDCA_SDW=m
+CONFIG_SND_SOC_RT712_SDCA_SDW=m
+CONFIG_SND_SOC_RT712_SDCA_DMIC_SDW=m
+CONFIG_SND_SOC_RT721_SDCA_SDW=m
+CONFIG_SND_SOC_RT722_SDCA_SDW=m
+CONFIG_SND_SOC_RT715=m
+CONFIG_SND_SOC_RT715_SDW=m
+CONFIG_SND_SOC_RT715_SDCA_SDW=m
+CONFIG_SND_SOC_RT9120=m
+CONFIG_SND_SOC_RTQ9128=m
+CONFIG_SND_SOC_SDW_MOCKUP=m
+CONFIG_SND_SOC_SGTL5000=m
+CONFIG_SND_SOC_SI476X=m
+CONFIG_SND_SOC_SIGMADSP=m
+CONFIG_SND_SOC_SIGMADSP_I2C=m
+CONFIG_SND_SOC_SIGMADSP_REGMAP=m
+CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
+CONFIG_SND_SOC_SIMPLE_MUX=m
+CONFIG_SND_SOC_SMA1303=m
+CONFIG_SND_SOC_SMA1307=m
+CONFIG_SND_SOC_SPDIF=m
+CONFIG_SND_SOC_SRC4XXX_I2C=m
+CONFIG_SND_SOC_SRC4XXX=m
+CONFIG_SND_SOC_SSM2305=m
+CONFIG_SND_SOC_SSM2518=m
+CONFIG_SND_SOC_SSM2602=m
+CONFIG_SND_SOC_SSM2602_SPI=m
+CONFIG_SND_SOC_SSM2602_I2C=m
+CONFIG_SND_SOC_SSM3515=m
+CONFIG_SND_SOC_SSM4567=m
+CONFIG_SND_SOC_STA32X=m
+CONFIG_SND_SOC_STA350=m
+CONFIG_SND_SOC_STI_SAS=m
+CONFIG_SND_SOC_TAS2552=m
+CONFIG_SND_SOC_TAS2562=m
+CONFIG_SND_SOC_TAS2764=m
+CONFIG_SND_SOC_TAS2770=m
+CONFIG_SND_SOC_TAS2780=m
+CONFIG_SND_SOC_TAS2781_COMLIB=m
+CONFIG_SND_SOC_TAS2781_FMWLIB=m
+CONFIG_SND_SOC_TAS2781_I2C=m
+CONFIG_SND_SOC_TAS5086=m
+CONFIG_SND_SOC_TAS571X=m
+CONFIG_SND_SOC_TAS5720=m
+CONFIG_SND_SOC_TAS5805M=m
+CONFIG_SND_SOC_TAS6424=m
+CONFIG_SND_SOC_TDA7419=m
+CONFIG_SND_SOC_TFA9879=m
+CONFIG_SND_SOC_TFA989X=m
+CONFIG_SND_SOC_TLV320ADC3XXX=m
+CONFIG_SND_SOC_TLV320AIC23=m
+CONFIG_SND_SOC_TLV320AIC23_I2C=m
+CONFIG_SND_SOC_TLV320AIC23_SPI=m
+CONFIG_SND_SOC_TLV320AIC31XX=m
+CONFIG_SND_SOC_TLV320AIC32X4=m
+CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
+CONFIG_SND_SOC_TLV320AIC32X4_SPI=m
+CONFIG_SND_SOC_TLV320AIC3X=m
+CONFIG_SND_SOC_TLV320AIC3X_I2C=m
+CONFIG_SND_SOC_TLV320AIC3X_SPI=m
+CONFIG_SND_SOC_TLV320ADCX140=m
+CONFIG_SND_SOC_TS3A227E=m
+CONFIG_SND_SOC_TSCS42XX=m
+CONFIG_SND_SOC_TSCS454=m
+CONFIG_SND_SOC_UDA1334=m
+CONFIG_SND_SOC_UDA1342=m
+CONFIG_SND_SOC_WCD_CLASSH=m
+CONFIG_SND_SOC_WCD_MBHC=m
+CONFIG_SND_SOC_WCD937X=m
+CONFIG_SND_SOC_WCD937X_SDW=m
+CONFIG_SND_SOC_WCD938X=m
+CONFIG_SND_SOC_WCD938X_SDW=m
+CONFIG_SND_SOC_WCD939X=m
+CONFIG_SND_SOC_WCD939X_SDW=m
+CONFIG_SND_SOC_WM5102=m
+CONFIG_SND_SOC_WM8510=m
+CONFIG_SND_SOC_WM8523=m
+CONFIG_SND_SOC_WM8524=m
+CONFIG_SND_SOC_WM8580=m
+CONFIG_SND_SOC_WM8711=m
+CONFIG_SND_SOC_WM8728=m
+CONFIG_SND_SOC_WM8731=m
+CONFIG_SND_SOC_WM8731_I2C=m
+CONFIG_SND_SOC_WM8731_SPI=m
+CONFIG_SND_SOC_WM8737=m
+CONFIG_SND_SOC_WM8741=m
+CONFIG_SND_SOC_WM8750=m
+CONFIG_SND_SOC_WM8753=m
+CONFIG_SND_SOC_WM8770=m
+CONFIG_SND_SOC_WM8776=m
+CONFIG_SND_SOC_WM8782=m
+CONFIG_SND_SOC_WM8804=m
+CONFIG_SND_SOC_WM8804_I2C=m
+CONFIG_SND_SOC_WM8804_SPI=m
+CONFIG_SND_SOC_WM8903=m
+CONFIG_SND_SOC_WM8904=m
+CONFIG_SND_SOC_WM8940=m
+CONFIG_SND_SOC_WM8960=m
+CONFIG_SND_SOC_WM8961=m
+CONFIG_SND_SOC_WM8962=m
+CONFIG_SND_SOC_WM8974=m
+CONFIG_SND_SOC_WM8978=m
+CONFIG_SND_SOC_WM8985=m
+CONFIG_SND_SOC_WSA881X=m
+CONFIG_SND_SOC_WSA883X=m
+CONFIG_SND_SOC_WSA884X=m
+CONFIG_SND_SOC_ZL38060=m
+CONFIG_SND_SOC_MAX9759=m
+CONFIG_SND_SOC_MT6351=m
+CONFIG_SND_SOC_MT6357=m
+CONFIG_SND_SOC_MT6358=m
+CONFIG_SND_SOC_MT6660=m
+CONFIG_SND_SOC_NAU8315=m
+CONFIG_SND_SOC_NAU8540=m
+CONFIG_SND_SOC_NAU8810=m
+CONFIG_SND_SOC_NAU8821=m
+CONFIG_SND_SOC_NAU8822=m
+CONFIG_SND_SOC_NAU8824=m
+CONFIG_SND_SOC_NAU8825=m
+CONFIG_SND_SOC_NTPFW=m
+CONFIG_SND_SOC_NTP8918=m
+CONFIG_SND_SOC_NTP8835=m
+CONFIG_SND_SOC_TPA6130A2=m
+CONFIG_SND_SOC_LPASS_MACRO_COMMON=m
+CONFIG_SND_SOC_LPASS_WSA_MACRO=m
+CONFIG_SND_SOC_LPASS_VA_MACRO=m
+CONFIG_SND_SOC_LPASS_RX_MACRO=m
+CONFIG_SND_SOC_LPASS_TX_MACRO=m
+# end of CODEC drivers
+
+CONFIG_SND_SOC_SDW_UTILS=m
+CONFIG_SND_SIMPLE_CARD_UTILS=m
+CONFIG_SND_SIMPLE_CARD=m
+CONFIG_SND_AUDIO_GRAPH_CARD=m
+CONFIG_SND_AUDIO_GRAPH_CARD2=m
+CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=m
+# CONFIG_SND_TEST_COMPONENT is not set
+CONFIG_SND_X86=y
+CONFIG_HDMI_LPE_AUDIO=m
+CONFIG_SND_SYNTH_EMUX=m
+CONFIG_AC97_BUS=m
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+CONFIG_HID_BATTERY_STRENGTH=y
+CONFIG_HIDRAW=y
+CONFIG_UHID=m
+CONFIG_HID_GENERIC=m
+
+#
+# Special HID drivers
+#
+CONFIG_HID_A4TECH=m
+# CONFIG_HID_ACCUTOUCH is not set
+CONFIG_HID_ACRUX=m
+CONFIG_HID_ACRUX_FF=y
+CONFIG_HID_APPLE=m
+CONFIG_HID_APPLEIR=m
+CONFIG_HID_ASUS=m
+CONFIG_HID_AUREAL=m
+CONFIG_HID_BELKIN=m
+CONFIG_HID_BETOP_FF=m
+CONFIG_HID_BIGBEN_FF=m
+CONFIG_HID_CHERRY=m
+CONFIG_HID_CHICONY=m
+CONFIG_HID_CORSAIR=m
+# CONFIG_HID_COUGAR is not set
+# CONFIG_HID_MACALLY is not set
+CONFIG_HID_PRODIKEYS=m
+# CONFIG_HID_CMEDIA is not set
+CONFIG_HID_CP2112=m
+# CONFIG_HID_CREATIVE_SB0540 is not set
+CONFIG_HID_CYPRESS=m
+CONFIG_HID_DRAGONRISE=m
+CONFIG_DRAGONRISE_FF=y
+CONFIG_HID_EMS_FF=m
+CONFIG_HID_ELAN=m
+CONFIG_HID_ELECOM=m
+CONFIG_HID_ELO=m
+# CONFIG_HID_EVISION is not set
+CONFIG_HID_EZKEY=m
+# CONFIG_HID_FT260 is not set
+CONFIG_HID_GEMBIRD=m
+CONFIG_HID_GFRM=m
+# CONFIG_HID_GLORIOUS is not set
+CONFIG_HID_HOLTEK=m
+CONFIG_HOLTEK_FF=y
+CONFIG_HID_GOODIX_SPI=m
+# CONFIG_HID_GOOGLE_HAMMER is not set
+CONFIG_HID_GOOGLE_STADIA_FF=m
+# CONFIG_HID_VIVALDI is not set
+CONFIG_HID_GT683R=m
+CONFIG_HID_KEYTOUCH=m
+CONFIG_HID_KYE=m
+# CONFIG_HID_KYSONA is not set
+CONFIG_HID_UCLOGIC=m
+CONFIG_HID_WALTOP=m
+# CONFIG_HID_VIEWSONIC is not set
+# CONFIG_HID_VRC2 is not set
+# CONFIG_HID_XIAOMI is not set
+CONFIG_HID_GYRATION=m
+CONFIG_HID_ICADE=m
+# CONFIG_HID_ITE is not set
+CONFIG_HID_JABRA=m
+CONFIG_HID_TWINHAN=m
+CONFIG_HID_KENSINGTON=m
+CONFIG_HID_LCPOWER=m
+CONFIG_HID_LED=m
+CONFIG_HID_LENOVO=m
+# CONFIG_HID_LETSKETCH is not set
+CONFIG_HID_LOGITECH=m
+CONFIG_HID_LOGITECH_DJ=m
+CONFIG_HID_LOGITECH_HIDPP=m
+CONFIG_LOGITECH_FF=y
+CONFIG_LOGIRUMBLEPAD2_FF=y
+CONFIG_LOGIG940_FF=y
+CONFIG_LOGIWHEELS_FF=y
+CONFIG_HID_MAGICMOUSE=m
+# CONFIG_HID_MALTRON is not set
+CONFIG_HID_MAYFLASH=m
+# CONFIG_HID_MEGAWORLD_FF is not set
+# CONFIG_HID_REDRAGON is not set
+CONFIG_HID_MICROSOFT=m
+CONFIG_HID_MONTEREY=m
+CONFIG_HID_MULTITOUCH=m
+CONFIG_HID_NINTENDO=m
+CONFIG_NINTENDO_FF=y
+# CONFIG_HID_NTI is not set
+CONFIG_HID_NTRIG=m
+# CONFIG_HID_NVIDIA_SHIELD is not set
+CONFIG_HID_ORTEK=m
+CONFIG_HID_PANTHERLORD=m
+CONFIG_PANTHERLORD_FF=y
+CONFIG_HID_PENMOUNT=m
+CONFIG_HID_PETALYNX=m
+CONFIG_HID_PICOLCD=m
+# CONFIG_HID_PICOLCD_FB is not set
+CONFIG_HID_PICOLCD_BACKLIGHT=y
+CONFIG_HID_PICOLCD_LCD=y
+CONFIG_HID_PICOLCD_LEDS=y
+CONFIG_HID_PLANTRONICS=m
+CONFIG_HID_PLAYSTATION=m
+CONFIG_PLAYSTATION_FF=y
+# CONFIG_HID_PXRC is not set
+# CONFIG_HID_RAZER is not set
+CONFIG_HID_PRIMAX=m
+CONFIG_HID_RETRODE=m
+CONFIG_HID_ROCCAT=m
+CONFIG_HID_SAITEK=m
+CONFIG_HID_SAMSUNG=m
+# CONFIG_HID_SEMITEK is not set
+# CONFIG_HID_SIGMAMICRO is not set
+CONFIG_HID_SONY=m
+CONFIG_SONY_FF=y
+CONFIG_HID_SPEEDLINK=m
+CONFIG_HID_STEAM=m
+CONFIG_STEAM_FF=y
+CONFIG_HID_STEELSERIES=m
+CONFIG_HID_SUNPLUS=m
+CONFIG_HID_RMI=m
+CONFIG_HID_GREENASIA=m
+CONFIG_GREENASIA_FF=y
+CONFIG_HID_SMARTJOYPLUS=m
+CONFIG_SMARTJOYPLUS_FF=y
+CONFIG_HID_TIVO=m
+CONFIG_HID_TOPSEED=m
+# CONFIG_HID_TOPRE is not set
+CONFIG_HID_THINGM=m
+CONFIG_HID_THRUSTMASTER=m
+CONFIG_THRUSTMASTER_FF=y
+# CONFIG_HID_UDRAW_PS3 is not set
+# CONFIG_HID_U2FZERO is not set
+# CONFIG_HID_UNIVERSAL_PIDFF is not set
+CONFIG_HID_WACOM=m
+CONFIG_HID_WIIMOTE=m
+# CONFIG_HID_WINWING is not set
+CONFIG_HID_XINMO=m
+CONFIG_HID_ZEROPLUS=m
+CONFIG_ZEROPLUS_FF=y
+CONFIG_HID_ZYDACRON=m
+CONFIG_HID_SENSOR_HUB=m
+CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
+CONFIG_HID_ALPS=m
+# CONFIG_HID_MCP2200 is not set
+# CONFIG_HID_MCP2221 is not set
+# end of Special HID drivers
+
+#
+# HID-BPF support
+#
+# end of HID-BPF support
+
+CONFIG_I2C_HID=m
+CONFIG_I2C_HID_ACPI=m
+CONFIG_I2C_HID_OF=m
+CONFIG_I2C_HID_OF_ELAN=m
+CONFIG_I2C_HID_OF_GOODIX=m
+CONFIG_I2C_HID_CORE=m
+
+#
+# Intel ISH HID support
+#
+CONFIG_INTEL_ISH_HID=m
+CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
+# end of Intel ISH HID support
+
+#
+# AMD SFH HID Support
+#
+CONFIG_AMD_SFH_HID=m
+# end of AMD SFH HID Support
+
+CONFIG_ASUS_ALLY_HID=m
+
+#
+# Intel THC HID Support
+#
+CONFIG_INTEL_THC_HID=m
+CONFIG_INTEL_QUICKSPI=m
+CONFIG_INTEL_QUICKI2C=m
+# end of Intel THC HID Support
+
+#
+# USB HID support
+#
+CONFIG_USB_HID=m
+CONFIG_HID_PID=y
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+CONFIG_USB_KBD=m
+CONFIG_USB_MOUSE=m
+# end of USB HID Boot Protocol drivers
+# end of USB HID support
+
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_COMMON=y
+CONFIG_USB_LED_TRIG=y
+CONFIG_USB_ULPI_BUS=m
+# CONFIG_USB_CONN_GPIO is not set
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB=y
+CONFIG_USB_PCI=y
+CONFIG_USB_PCI_AMD=y
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEFAULT_PERSIST=y
+# CONFIG_USB_FEW_INIT_RETRIES is not set
+CONFIG_USB_DYNAMIC_MINORS=y
+# CONFIG_USB_OTG is not set
+# CONFIG_USB_OTG_PRODUCTLIST is not set
+# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set
+CONFIG_USB_LEDS_TRIGGER_USBPORT=m
+CONFIG_USB_AUTOSUSPEND_DELAY=2
+CONFIG_USB_DEFAULT_AUTHORIZATION_MODE=1
+CONFIG_USB_MON=m
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_C67X00_HCD=m
+CONFIG_USB_XHCI_HCD=y
+# CONFIG_USB_XHCI_DBGCAP is not set
+CONFIG_USB_XHCI_PCI=y
+# CONFIG_USB_XHCI_PCI_RENESAS is not set
+CONFIG_USB_XHCI_PLATFORM=m
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+CONFIG_USB_EHCI_PCI=y
+CONFIG_USB_EHCI_FSL=m
+CONFIG_USB_EHCI_HCD_PLATFORM=y
+CONFIG_USB_OXU210HP_HCD=m
+CONFIG_USB_ISP116X_HCD=m
+CONFIG_USB_MAX3421_HCD=m
+CONFIG_USB_OHCI_HCD=y
+CONFIG_USB_OHCI_HCD_PCI=y
+CONFIG_USB_OHCI_HCD_PLATFORM=y
+CONFIG_USB_UHCI_HCD=y
+CONFIG_USB_SL811_HCD=m
+CONFIG_USB_SL811_HCD_ISO=y
+CONFIG_USB_SL811_CS=m
+CONFIG_USB_R8A66597_HCD=m
+# CONFIG_USB_HCD_BCMA is not set
+CONFIG_USB_HCD_SSB=m
+# CONFIG_USB_HCD_TEST_MODE is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=y
+CONFIG_USB_PRINTER=m
+CONFIG_USB_WDM=m
+CONFIG_USB_TMC=m
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_REALTEK=y
+CONFIG_REALTEK_AUTOPM=y
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+CONFIG_USB_STORAGE_ENE_UB6250=y
+CONFIG_USB_UAS=y
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+CONFIG_USBIP_CORE=m
+CONFIG_USBIP_VHCI_HCD=m
+CONFIG_USBIP_VHCI_HC_PORTS=8
+CONFIG_USBIP_VHCI_NR_HCS=1
+CONFIG_USBIP_HOST=m
+# CONFIG_USBIP_VUDC is not set
+# CONFIG_USBIP_DEBUG is not set
+
+#
+# USB dual-mode controller drivers
+#
+# CONFIG_USB_CDNS_SUPPORT is not set
+CONFIG_USB_MUSB_HDRC=m
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_GADGET is not set
+CONFIG_USB_MUSB_DUAL_ROLE=y
+
+#
+# Platform Glue Layer
+#
+
+#
+# MUSB DMA mode
+#
+CONFIG_MUSB_PIO_ONLY=y
+CONFIG_USB_DWC3=m
+CONFIG_USB_DWC3_ULPI=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_PCI=m
+CONFIG_USB_DWC3_HAPS=m
+CONFIG_USB_DWC3_OF_SIMPLE=m
+CONFIG_USB_DWC2=y
+CONFIG_USB_DWC2_HOST=y
+
+#
+# Gadget/Dual-role mode requires USB Gadget support to be enabled
+#
+CONFIG_USB_DWC2_PCI=m
+# CONFIG_USB_DWC2_DEBUG is not set
+# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set
+CONFIG_USB_CHIPIDEA=m
+CONFIG_USB_CHIPIDEA_UDC=y
+CONFIG_USB_CHIPIDEA_HOST=y
+CONFIG_USB_CHIPIDEA_PCI=m
+CONFIG_USB_CHIPIDEA_MSM=m
+CONFIG_USB_CHIPIDEA_NPCM=m
+CONFIG_USB_CHIPIDEA_IMX=m
+CONFIG_USB_CHIPIDEA_GENERIC=m
+CONFIG_USB_CHIPIDEA_TEGRA=m
+CONFIG_USB_ISP1760=m
+CONFIG_USB_ISP1760_HCD=y
+CONFIG_USB_ISP1761_UDC=y
+# CONFIG_USB_ISP1760_HOST_ROLE is not set
+# CONFIG_USB_ISP1760_GADGET_ROLE is not set
+CONFIG_USB_ISP1760_DUAL_ROLE=y
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_SIMPLE=m
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+CONFIG_USB_SERIAL_WHITEHEAT=m
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP210X=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+CONFIG_USB_SERIAL_EDGEPORT=m
+CONFIG_USB_SERIAL_EDGEPORT_TI=m
+CONFIG_USB_SERIAL_F81232=m
+# CONFIG_USB_SERIAL_F8153X is not set
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+CONFIG_USB_SERIAL_IUU=m
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+CONFIG_USB_SERIAL_KEYSPAN=m
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_METRO=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7715_PARPORT=y
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_MXUPORT=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_QCAUX=m
+CONFIG_USB_SERIAL_QUALCOMM=m
+CONFIG_USB_SERIAL_SPCP8X5=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+CONFIG_USB_SERIAL_SYMBOL=m
+CONFIG_USB_SERIAL_TI=m
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_WWAN=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_OPTICON=m
+CONFIG_USB_SERIAL_XSENS_MT=m
+CONFIG_USB_SERIAL_WISHBONE=m
+CONFIG_USB_SERIAL_SSU100=m
+CONFIG_USB_SERIAL_QT2=m
+# CONFIG_USB_SERIAL_UPD78F0730 is not set
+# CONFIG_USB_SERIAL_XR is not set
+CONFIG_USB_SERIAL_DEBUG=m
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_USS720=m
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_SEVSEG=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_APPLEDISPLAY=m
+# CONFIG_APPLE_MFI_FASTCHARGE is not set
+# CONFIG_USB_LJCA is not set
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_EHSET_TEST_FIXTURE=m
+CONFIG_USB_ISIGHTFW=m
+CONFIG_USB_YUREX=m
+CONFIG_USB_EZUSB_FX2=m
+CONFIG_USB_HUB_USB251XB=m
+CONFIG_USB_HSIC_USB3503=m
+CONFIG_USB_HSIC_USB4604=m
+CONFIG_USB_LINK_LAYER_TEST=m
+CONFIG_USB_CHAOSKEY=m
+# CONFIG_USB_ONBOARD_DEV is not set
+
+#
+# USB Physical Layer drivers
+#
+CONFIG_USB_PHY=y
+CONFIG_NOP_USB_XCEIV=m
+CONFIG_USB_GPIO_VBUS=m
+CONFIG_TAHVO_USB=m
+CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
+CONFIG_USB_ISP1301=m
+# end of USB Physical Layer drivers
+
+CONFIG_USB_GADGET=m
+# 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_U_SERIAL_CONSOLE is not set
+
+#
+# USB Peripheral Controller
+#
+CONFIG_USB_GR_UDC=m
+CONFIG_USB_R8A66597=m
+CONFIG_USB_PXA27X=m
+CONFIG_USB_MV_UDC=m
+CONFIG_USB_MV_U3D=m
+CONFIG_USB_SNP_CORE=m
+# CONFIG_USB_SNP_UDC_PLAT is not set
+# CONFIG_USB_M66592 is not set
+CONFIG_USB_BDC_UDC=m
+CONFIG_USB_AMD5536UDC=m
+CONFIG_USB_NET2272=m
+CONFIG_USB_NET2272_DMA=y
+CONFIG_USB_NET2280=m
+CONFIG_USB_GOKU=m
+CONFIG_USB_EG20T=m
+# CONFIG_USB_GADGET_XILINX is not set
+# CONFIG_USB_MAX3420_UDC is not set
+# CONFIG_USB_CDNS2_UDC is not set
+# CONFIG_USB_DUMMY_HCD is not set
+# end of USB Peripheral Controller
+
+CONFIG_USB_LIBCOMPOSITE=m
+CONFIG_USB_F_ACM=m
+CONFIG_USB_F_SS_LB=m
+CONFIG_USB_U_SERIAL=m
+CONFIG_USB_U_ETHER=m
+CONFIG_USB_U_AUDIO=m
+CONFIG_USB_F_SERIAL=m
+CONFIG_USB_F_OBEX=m
+CONFIG_USB_F_NCM=m
+CONFIG_USB_F_ECM=m
+CONFIG_USB_F_EEM=m
+CONFIG_USB_F_SUBSET=m
+CONFIG_USB_F_RNDIS=m
+CONFIG_USB_F_MASS_STORAGE=m
+CONFIG_USB_F_FS=m
+CONFIG_USB_F_UAC1=m
+CONFIG_USB_F_UAC2=m
+CONFIG_USB_F_UVC=m
+CONFIG_USB_F_MIDI=m
+CONFIG_USB_F_HID=m
+CONFIG_USB_F_PRINTER=m
+CONFIG_USB_CONFIGFS=m
+CONFIG_USB_CONFIGFS_SERIAL=y
+CONFIG_USB_CONFIGFS_ACM=y
+CONFIG_USB_CONFIGFS_OBEX=y
+CONFIG_USB_CONFIGFS_NCM=y
+CONFIG_USB_CONFIGFS_ECM=y
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
+CONFIG_USB_CONFIGFS_RNDIS=y
+CONFIG_USB_CONFIGFS_EEM=y
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
+CONFIG_USB_CONFIGFS_F_LB_SS=y
+CONFIG_USB_CONFIGFS_F_FS=y
+CONFIG_USB_CONFIGFS_F_UAC1=y
+# CONFIG_USB_CONFIGFS_F_UAC1_LEGACY is not set
+CONFIG_USB_CONFIGFS_F_UAC2=y
+CONFIG_USB_CONFIGFS_F_MIDI=y
+# CONFIG_USB_CONFIGFS_F_MIDI2 is not set
+CONFIG_USB_CONFIGFS_F_HID=y
+CONFIG_USB_CONFIGFS_F_UVC=y
+CONFIG_USB_CONFIGFS_F_PRINTER=y
+# CONFIG_USB_CONFIGFS_F_TCM is not set
+
+#
+# USB Gadget precomposed configurations
+#
+CONFIG_USB_ZERO=m
+CONFIG_USB_AUDIO=m
+CONFIG_GADGET_UAC1=y
+# CONFIG_GADGET_UAC1_LEGACY is not set
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_ETH_EEM=y
+CONFIG_USB_G_NCM=m
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FUNCTIONFS=m
+CONFIG_USB_FUNCTIONFS_ETH=y
+CONFIG_USB_FUNCTIONFS_RNDIS=y
+CONFIG_USB_FUNCTIONFS_GENERIC=y
+CONFIG_USB_MASS_STORAGE=m
+# CONFIG_USB_GADGET_TARGET is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+CONFIG_USB_G_PRINTER=m
+CONFIG_USB_CDC_COMPOSITE=m
+CONFIG_USB_G_ACM_MS=m
+# CONFIG_USB_G_MULTI is not set
+CONFIG_USB_G_HID=m
+CONFIG_USB_G_DBGP=m
+# CONFIG_USB_G_DBGP_PRINTK is not set
+CONFIG_USB_G_DBGP_SERIAL=y
+CONFIG_USB_G_WEBCAM=m
+# CONFIG_USB_RAW_GADGET is not set
+# end of USB Gadget precomposed configurations
+
+CONFIG_TYPEC=m
+# CONFIG_TYPEC_TCPM is not set
+# CONFIG_TYPEC_UCSI is not set
+# CONFIG_TYPEC_TPS6598X is not set
+# CONFIG_TYPEC_ANX7411 is not set
+# CONFIG_TYPEC_RT1719 is not set
+# CONFIG_TYPEC_HD3SS3220 is not set
+# CONFIG_TYPEC_STUSB160X is not set
+# CONFIG_TYPEC_WUSB3801 is not set
+
+#
+# USB Type-C Multiplexer/DeMultiplexer Switch support
+#
+# CONFIG_TYPEC_MUX_FSA4480 is not set
+# CONFIG_TYPEC_MUX_GPIO_SBU is not set
+# CONFIG_TYPEC_MUX_PI3USB30532 is not set
+# CONFIG_TYPEC_MUX_INTEL_PMC is not set
+# CONFIG_TYPEC_MUX_IT5205 is not set
+# CONFIG_TYPEC_MUX_NB7VPQ904M is not set
+# CONFIG_TYPEC_MUX_PTN36502 is not set
+# CONFIG_TYPEC_MUX_TUSB1046 is not set
+# CONFIG_TYPEC_MUX_WCD939X_USBSS is not set
+# end of USB Type-C Multiplexer/DeMultiplexer Switch support
+
+#
+# USB Type-C Alternate Mode drivers
+#
+# CONFIG_TYPEC_DP_ALTMODE is not set
+# CONFIG_TYPEC_TBT_ALTMODE is not set
+# end of USB Type-C Alternate Mode drivers
+
+CONFIG_USB_ROLE_SWITCH=y
+# CONFIG_USB_ROLES_INTEL_XHCI is not set
+CONFIG_MMC=y
+CONFIG_PWRSEQ_EMMC=y
+CONFIG_PWRSEQ_SD8787=m
+CONFIG_PWRSEQ_SIMPLE=y
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_MINORS=8
+CONFIG_SDIO_UART=y
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_IO_ACCESSORS=y
+CONFIG_MMC_SDHCI_UHS2=y
+CONFIG_MMC_SDHCI_PCI=y
+CONFIG_MMC_RICOH_MMC=y
+CONFIG_MMC_SDHCI_ACPI=y
+CONFIG_MMC_SDHCI_PLTFM=y
+CONFIG_MMC_SDHCI_OF_ARASAN=y
+CONFIG_MMC_SDHCI_OF_AT91=y
+CONFIG_MMC_SDHCI_OF_DWCMSHC=y
+CONFIG_MMC_SDHCI_CADENCE=y
+CONFIG_MMC_SDHCI_F_SDH30=y
+CONFIG_MMC_SDHCI_MILBEAUT=y
+CONFIG_MMC_WBSD=y
+CONFIG_MMC_TIFM_SD=y
+CONFIG_MMC_SPI=y
+CONFIG_MMC_SDRICOH_CS=m
+CONFIG_MMC_CB710=y
+CONFIG_MMC_VIA_SDMMC=y
+CONFIG_MMC_VUB300=y
+CONFIG_MMC_USHC=y
+CONFIG_MMC_USDHI6ROL0=y
+CONFIG_MMC_CQHCI=y
+CONFIG_MMC_HSQ=y
+CONFIG_MMC_TOSHIBA_PCI=y
+CONFIG_MMC_MTK=y
+CONFIG_MMC_SDHCI_XENON=y
+# CONFIG_SCSI_UFSHCD is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_LEDS_EXPRESSWIRE=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_CLASS_FLASH=m
+CONFIG_LEDS_CLASS_MULTICOLOR=m
+# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
+
+#
+# LED drivers
+#
+CONFIG_LEDS_88PM860X=m
+# CONFIG_LEDS_AN30259A is not set
+# CONFIG_LEDS_APU is not set
+# CONFIG_LEDS_AW200XX is not set
+# CONFIG_LEDS_AW2013 is not set
+# CONFIG_LEDS_BCM6328 is not set
+# CONFIG_LEDS_BCM6358 is not set
+# CONFIG_LEDS_CR0014114 is not set
+CONFIG_LEDS_CROS_EC=m
+# CONFIG_LEDS_EL15203000 is not set
+CONFIG_LEDS_LM3530=m
+# CONFIG_LEDS_LM3532 is not set
+CONFIG_LEDS_LM3533=m
+CONFIG_LEDS_LM3642=m
+# CONFIG_LEDS_LM3692X is not set
+# CONFIG_LEDS_MT6323 is not set
+CONFIG_LEDS_PCA9532=m
+CONFIG_LEDS_PCA9532_GPIO=y
+CONFIG_LEDS_GPIO=m
+CONFIG_LEDS_LP3944=m
+# CONFIG_LEDS_LP3952 is not set
+# CONFIG_LEDS_LP50XX is not set
+# CONFIG_LEDS_LP55XX_COMMON is not set
+CONFIG_LEDS_LP8788=m
+# CONFIG_LEDS_LP8860 is not set
+# CONFIG_LEDS_LP8864 is not set
+CONFIG_LEDS_PCA955X=m
+# CONFIG_LEDS_PCA955X_GPIO is not set
+CONFIG_LEDS_PCA963X=m
+# CONFIG_LEDS_PCA995X is not set
+CONFIG_LEDS_WM831X_STATUS=m
+CONFIG_LEDS_WM8350=m
+CONFIG_LEDS_DA903X=m
+CONFIG_LEDS_DA9052=m
+CONFIG_LEDS_DAC124S085=m
+# CONFIG_LEDS_PWM is not set
+CONFIG_LEDS_REGULATOR=m
+# CONFIG_LEDS_BD2606MVV is not set
+CONFIG_LEDS_BD2802=m
+CONFIG_LEDS_INTEL_SS4200=m
+# CONFIG_LEDS_LT3593 is not set
+CONFIG_LEDS_ADP5520=m
+CONFIG_LEDS_MC13783=m
+CONFIG_LEDS_TCA6507=m
+CONFIG_LEDS_TLC591XX=m
+CONFIG_LEDS_MAX8997=m
+CONFIG_LEDS_LM355x=m
+CONFIG_LEDS_MENF21BMC=m
+# 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=m
+# CONFIG_LEDS_BLINKM_MULTICOLOR is not set
+CONFIG_LEDS_SYSCON=y
+# CONFIG_LEDS_MLXCPLD is not set
+# CONFIG_LEDS_MLXREG is not set
+# CONFIG_LEDS_USER is not set
+# CONFIG_LEDS_NIC78BX is not set
+# CONFIG_LEDS_SPI_BYTE is not set
+# CONFIG_LEDS_LM3697 is not set
+# CONFIG_LEDS_ST1202 is not set
+CONFIG_LEDS_TPS6105X=m
+CONFIG_LEDS_STEAMDECK=m
+# CONFIG_LEDS_LGM is not set
+
+#
+# Flash and Torch LED drivers
+#
+# CONFIG_LEDS_AAT1290 is not set
+# CONFIG_LEDS_AS3645A is not set
+# CONFIG_LEDS_KTD2692 is not set
+# CONFIG_LEDS_LM3601X is not set
+# CONFIG_LEDS_MAX77693 is not set
+# CONFIG_LEDS_RT4505 is not set
+# CONFIG_LEDS_RT8515 is not set
+# CONFIG_LEDS_SGM3140 is not set
+# CONFIG_LEDS_SY7802 is not set
+
+#
+# RGB LED drivers
+#
+CONFIG_LEDS_GROUP_MULTICOLOR=m
+# CONFIG_LEDS_KTD202X is not set
+# CONFIG_LEDS_NCP5623 is not set
+# CONFIG_LEDS_PWM_MULTICOLOR is not set
+# CONFIG_LEDS_QCOM_LPG is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=m
+CONFIG_LEDS_TRIGGER_ONESHOT=m
+CONFIG_LEDS_TRIGGER_DISK=y
+# CONFIG_LEDS_TRIGGER_MTD is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=m
+CONFIG_LEDS_TRIGGER_BACKLIGHT=m
+CONFIG_LEDS_TRIGGER_CPU=y
+CONFIG_LEDS_TRIGGER_ACTIVITY=m
+CONFIG_LEDS_TRIGGER_GPIO=m
+CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+CONFIG_LEDS_TRIGGER_TRANSIENT=m
+CONFIG_LEDS_TRIGGER_CAMERA=m
+CONFIG_LEDS_TRIGGER_PANIC=y
+CONFIG_LEDS_TRIGGER_NETDEV=m
+CONFIG_LEDS_TRIGGER_PATTERN=m
+CONFIG_LEDS_TRIGGER_TTY=m
+CONFIG_LEDS_TRIGGER_INPUT_EVENTS=m
+
+#
+# Simple LED drivers
+#
+# CONFIG_ACCESSIBILITY is not set
+# CONFIG_INFINIBAND is not set
+CONFIG_EDAC_ATOMIC_SCRUB=y
+CONFIG_EDAC_SUPPORT=y
+CONFIG_EDAC=y
+# CONFIG_EDAC_LEGACY_SYSFS is not set
+# CONFIG_EDAC_DEBUG is not set
+CONFIG_EDAC_DECODE_MCE=m
+# CONFIG_EDAC_GHES is not set
+CONFIG_EDAC_AMD64=m
+CONFIG_EDAC_E752X=m
+CONFIG_EDAC_I82975X=m
+CONFIG_EDAC_I3000=m
+CONFIG_EDAC_I3200=m
+CONFIG_EDAC_IE31200=m
+CONFIG_EDAC_X38=m
+CONFIG_EDAC_I5400=m
+CONFIG_EDAC_I7CORE=m
+CONFIG_EDAC_I5100=m
+CONFIG_EDAC_I7300=m
+CONFIG_EDAC_SBRIDGE=m
+# CONFIG_EDAC_SKX is not set
+# CONFIG_EDAC_I10NM is not set
+# CONFIG_EDAC_PND2 is not set
+# CONFIG_EDAC_IGEN6 is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_MC146818_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
+CONFIG_RTC_NVMEM=y
+
+#
+# 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_88PM860X=m
+CONFIG_RTC_DRV_88PM80X=m
+CONFIG_RTC_DRV_ABB5ZES3=m
+# CONFIG_RTC_DRV_ABEOZ9 is not set
+CONFIG_RTC_DRV_ABX80X=m
+CONFIG_RTC_DRV_DS1307=m
+# CONFIG_RTC_DRV_DS1307_CENTURY is not set
+CONFIG_RTC_DRV_DS1374=m
+CONFIG_RTC_DRV_DS1374_WDT=y
+CONFIG_RTC_DRV_DS1672=m
+# CONFIG_RTC_DRV_HYM8563 is not set
+CONFIG_RTC_DRV_LP8788=m
+CONFIG_RTC_DRV_MAX6900=m
+CONFIG_RTC_DRV_MAX8907=m
+CONFIG_RTC_DRV_MAX8925=m
+CONFIG_RTC_DRV_MAX8998=m
+CONFIG_RTC_DRV_MAX8997=m
+# CONFIG_RTC_DRV_MAX31335 is not set
+# CONFIG_RTC_DRV_NCT3018Y is not set
+CONFIG_RTC_DRV_RS5C372=m
+CONFIG_RTC_DRV_ISL1208=m
+CONFIG_RTC_DRV_ISL12022=m
+# CONFIG_RTC_DRV_ISL12026 is not set
+CONFIG_RTC_DRV_X1205=m
+CONFIG_RTC_DRV_PCF8523=m
+CONFIG_RTC_DRV_PCF85063=m
+# CONFIG_RTC_DRV_PCF85363 is not set
+CONFIG_RTC_DRV_PCF8563=m
+CONFIG_RTC_DRV_PCF8583=m
+CONFIG_RTC_DRV_M41T80=m
+CONFIG_RTC_DRV_M41T80_WDT=y
+CONFIG_RTC_DRV_BQ32K=m
+# CONFIG_RTC_DRV_TWL4030 is not set
+CONFIG_RTC_DRV_PALMAS=m
+CONFIG_RTC_DRV_TPS6586X=m
+CONFIG_RTC_DRV_TPS65910=m
+CONFIG_RTC_DRV_RC5T583=m
+CONFIG_RTC_DRV_S35390A=m
+CONFIG_RTC_DRV_FM3130=m
+# CONFIG_RTC_DRV_RX8010 is not set
+# CONFIG_RTC_DRV_RX8111 is not set
+CONFIG_RTC_DRV_RX8581=m
+CONFIG_RTC_DRV_RX8025=m
+CONFIG_RTC_DRV_EM3027=m
+# CONFIG_RTC_DRV_RV3028 is not set
+# CONFIG_RTC_DRV_RV3032 is not set
+CONFIG_RTC_DRV_RV8803=m
+CONFIG_RTC_DRV_S5M=m
+# CONFIG_RTC_DRV_SD2405AL is not set
+# CONFIG_RTC_DRV_SD3078 is not set
+
+#
+# SPI RTC drivers
+#
+CONFIG_RTC_DRV_M41T93=m
+CONFIG_RTC_DRV_M41T94=m
+# CONFIG_RTC_DRV_DS1302 is not set
+CONFIG_RTC_DRV_DS1305=m
+CONFIG_RTC_DRV_DS1343=m
+CONFIG_RTC_DRV_DS1347=m
+CONFIG_RTC_DRV_DS1390=m
+# CONFIG_RTC_DRV_MAX6916 is not set
+CONFIG_RTC_DRV_R9701=m
+CONFIG_RTC_DRV_RX4581=m
+CONFIG_RTC_DRV_RS5C348=m
+CONFIG_RTC_DRV_MAX6902=m
+CONFIG_RTC_DRV_PCF2123=m
+CONFIG_RTC_DRV_MCP795=m
+CONFIG_RTC_I2C_AND_SPI=y
+
+#
+# SPI and I2C RTC drivers
+#
+CONFIG_RTC_DRV_DS3232=m
+CONFIG_RTC_DRV_DS3232_HWMON=y
+CONFIG_RTC_DRV_PCF2127=m
+CONFIG_RTC_DRV_RV3029C2=m
+CONFIG_RTC_DRV_RV3029_HWMON=y
+# CONFIG_RTC_DRV_RX6110 is not set
+
+#
+# Platform RTC drivers
+#
+CONFIG_RTC_DRV_CMOS=y
+CONFIG_RTC_DRV_DS1286=m
+CONFIG_RTC_DRV_DS1511=m
+CONFIG_RTC_DRV_DS1553=m
+CONFIG_RTC_DRV_DS1685_FAMILY=m
+CONFIG_RTC_DRV_DS1685=y
+# CONFIG_RTC_DRV_DS1689 is not set
+# CONFIG_RTC_DRV_DS17285 is not set
+# CONFIG_RTC_DRV_DS17485 is not set
+# CONFIG_RTC_DRV_DS17885 is not set
+CONFIG_RTC_DRV_DS1742=m
+CONFIG_RTC_DRV_DS2404=m
+CONFIG_RTC_DRV_DA9052=m
+CONFIG_RTC_DRV_DA9055=m
+CONFIG_RTC_DRV_DA9063=m
+CONFIG_RTC_DRV_STK17TA8=m
+CONFIG_RTC_DRV_M48T86=m
+CONFIG_RTC_DRV_M48T35=m
+CONFIG_RTC_DRV_M48T59=m
+CONFIG_RTC_DRV_MSM6242=m
+CONFIG_RTC_DRV_RP5C01=m
+CONFIG_RTC_DRV_WM831X=m
+CONFIG_RTC_DRV_WM8350=m
+CONFIG_RTC_DRV_PCF50633=m
+# CONFIG_RTC_DRV_ZYNQMP is not set
+# CONFIG_RTC_DRV_CROS_EC is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_RTC_DRV_CADENCE is not set
+# CONFIG_RTC_DRV_FTRTC010 is not set
+CONFIG_RTC_DRV_PCAP=m
+CONFIG_RTC_DRV_MC13XXX=m
+CONFIG_RTC_DRV_MT6397=m
+# CONFIG_RTC_DRV_R7301 is not set
+
+#
+# HID Sensor RTC drivers
+#
+CONFIG_RTC_DRV_HID_SENSOR_TIME=m
+# CONFIG_RTC_DRV_GOLDFISH is not set
+CONFIG_RTC_DRV_WILCO_EC=m
+# CONFIG_DMADEVICES is not set
+
+#
+# DMABUF options
+#
+CONFIG_SYNC_FILE=y
+# CONFIG_SW_SYNC is not set
+# CONFIG_UDMABUF is not set
+# CONFIG_DMABUF_MOVE_NOTIFY is not set
+# CONFIG_DMABUF_DEBUG is not set
+# CONFIG_DMABUF_SELFTESTS is not set
+# CONFIG_DMABUF_HEAPS is not set
+# CONFIG_DMABUF_SYSFS_STATS is not set
+# end of DMABUF options
+
+CONFIG_UIO=m
+CONFIG_UIO_CIF=m
+CONFIG_UIO_PDRV_GENIRQ=m
+CONFIG_UIO_DMEM_GENIRQ=m
+CONFIG_UIO_AEC=m
+CONFIG_UIO_SERCOS3=m
+CONFIG_UIO_PCI_GENERIC=m
+CONFIG_UIO_NETX=m
+CONFIG_UIO_MF624=m
+CONFIG_VFIO=m
+CONFIG_VFIO_GROUP=y
+CONFIG_VFIO_CONTAINER=y
+CONFIG_VFIO_IOMMU_TYPE1=m
+# CONFIG_VFIO_NOIOMMU is not set
+CONFIG_VFIO_VIRQFD=y
+# CONFIG_VFIO_DEBUGFS is not set
+
+#
+# VFIO support for PCI devices
+#
+CONFIG_VFIO_PCI_CORE=m
+CONFIG_VFIO_PCI_MMAP=y
+CONFIG_VFIO_PCI_INTX=y
+CONFIG_VFIO_PCI=m
+CONFIG_VFIO_PCI_VGA=y
+CONFIG_VFIO_PCI_IGD=y
+# CONFIG_PDS_VFIO_PCI is not set
+# end of VFIO support for PCI devices
+
+CONFIG_IRQ_BYPASS_MANAGER=m
+# CONFIG_VIRT_DRIVERS is not set
+# CONFIG_VIRTIO_MENU is not set
+# CONFIG_VDPA is not set
+CONFIG_VHOST_IOTLB=m
+CONFIG_VHOST_TASK=y
+CONFIG_VHOST=m
+CONFIG_VHOST_MENU=y
+CONFIG_VHOST_NET=m
+# CONFIG_VHOST_SCSI is not set
+# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set
+
+#
+# Microsoft Hyper-V guest support
+#
+# end of Microsoft Hyper-V guest support
+
+# CONFIG_GREYBUS is not set
+CONFIG_COMEDI=m
+# CONFIG_COMEDI_DEBUG is not set
+CONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048
+CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
+CONFIG_COMEDI_MISC_DRIVERS=y
+CONFIG_COMEDI_BOND=m
+CONFIG_COMEDI_TEST=m
+CONFIG_COMEDI_PARPORT=m
+CONFIG_COMEDI_PCI_DRIVERS=m
+CONFIG_COMEDI_8255_PCI=m
+CONFIG_COMEDI_ADDI_WATCHDOG=m
+CONFIG_COMEDI_ADDI_APCI_1032=m
+CONFIG_COMEDI_ADDI_APCI_1500=m
+CONFIG_COMEDI_ADDI_APCI_1516=m
+CONFIG_COMEDI_ADDI_APCI_1564=m
+CONFIG_COMEDI_ADDI_APCI_16XX=m
+CONFIG_COMEDI_ADDI_APCI_2032=m
+CONFIG_COMEDI_ADDI_APCI_2200=m
+CONFIG_COMEDI_ADDI_APCI_3120=m
+CONFIG_COMEDI_ADDI_APCI_3501=m
+CONFIG_COMEDI_ADDI_APCI_3XXX=m
+CONFIG_COMEDI_ADL_PCI6208=m
+CONFIG_COMEDI_ADL_PCI7X3X=m
+CONFIG_COMEDI_ADL_PCI8164=m
+CONFIG_COMEDI_ADL_PCI9111=m
+CONFIG_COMEDI_ADL_PCI9118=m
+CONFIG_COMEDI_ADV_PCI1710=m
+# CONFIG_COMEDI_ADV_PCI1720 is not set
+CONFIG_COMEDI_ADV_PCI1723=m
+CONFIG_COMEDI_ADV_PCI1724=m
+# CONFIG_COMEDI_ADV_PCI1760 is not set
+CONFIG_COMEDI_ADV_PCI_DIO=m
+CONFIG_COMEDI_AMPLC_DIO200_PCI=m
+CONFIG_COMEDI_AMPLC_PC236_PCI=m
+CONFIG_COMEDI_AMPLC_PC263_PCI=m
+CONFIG_COMEDI_AMPLC_PCI224=m
+CONFIG_COMEDI_AMPLC_PCI230=m
+CONFIG_COMEDI_CONTEC_PCI_DIO=m
+CONFIG_COMEDI_DAS08_PCI=m
+CONFIG_COMEDI_DT3000=m
+CONFIG_COMEDI_DYNA_PCI10XX=m
+CONFIG_COMEDI_GSC_HPDI=m
+CONFIG_COMEDI_MF6X4=m
+CONFIG_COMEDI_ICP_MULTI=m
+CONFIG_COMEDI_DAQBOARD2000=m
+CONFIG_COMEDI_JR3_PCI=m
+CONFIG_COMEDI_KE_COUNTER=m
+CONFIG_COMEDI_CB_PCIDAS64=m
+CONFIG_COMEDI_CB_PCIDAS=m
+CONFIG_COMEDI_CB_PCIDDA=m
+CONFIG_COMEDI_CB_PCIMDAS=m
+CONFIG_COMEDI_CB_PCIMDDA=m
+CONFIG_COMEDI_ME4000=m
+CONFIG_COMEDI_ME_DAQ=m
+CONFIG_COMEDI_NI_6527=m
+CONFIG_COMEDI_NI_65XX=m
+CONFIG_COMEDI_NI_660X=m
+CONFIG_COMEDI_NI_670X=m
+CONFIG_COMEDI_NI_LABPC_PCI=m
+CONFIG_COMEDI_NI_PCIDIO=m
+CONFIG_COMEDI_NI_PCIMIO=m
+CONFIG_COMEDI_RTD520=m
+CONFIG_COMEDI_S626=m
+CONFIG_COMEDI_MITE=m
+CONFIG_COMEDI_NI_TIOCMD=m
+CONFIG_COMEDI_PCMCIA_DRIVERS=m
+CONFIG_COMEDI_CB_DAS16_CS=m
+CONFIG_COMEDI_DAS08_CS=m
+CONFIG_COMEDI_NI_DAQ_700_CS=m
+CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
+CONFIG_COMEDI_NI_LABPC_CS=m
+CONFIG_COMEDI_NI_MIO_CS=m
+CONFIG_COMEDI_QUATECH_DAQP_CS=m
+CONFIG_COMEDI_USB_DRIVERS=m
+CONFIG_COMEDI_DT9812=m
+CONFIG_COMEDI_NI_USB6501=m
+CONFIG_COMEDI_USBDUX=m
+CONFIG_COMEDI_USBDUXFAST=m
+CONFIG_COMEDI_USBDUXSIGMA=m
+CONFIG_COMEDI_VMK80XX=m
+CONFIG_COMEDI_8254=m
+CONFIG_COMEDI_8255=m
+CONFIG_COMEDI_8255_SA=m
+CONFIG_COMEDI_KCOMEDILIB=m
+CONFIG_COMEDI_AMPLC_DIO200=m
+CONFIG_COMEDI_AMPLC_PC236=m
+CONFIG_COMEDI_DAS08=m
+CONFIG_COMEDI_NI_LABPC=m
+CONFIG_COMEDI_NI_TIO=m
+CONFIG_COMEDI_NI_ROUTING=m
+# CONFIG_COMEDI_TESTS is not set
+CONFIG_STAGING=y
+CONFIG_RTL8723BS=m
+
+#
+# IIO staging drivers
+#
+
+#
+# Accelerometers
+#
+CONFIG_ADIS16203=m
+CONFIG_ADIS16240=m
+# end of Accelerometers
+
+#
+# Analog to digital converters
+#
+CONFIG_AD7816=m
+# end of Analog to digital converters
+
+#
+# Analog digital bi-direction converters
+#
+CONFIG_ADT7316=m
+CONFIG_ADT7316_SPI=m
+CONFIG_ADT7316_I2C=m
+# end of Analog digital bi-direction converters
+
+#
+# Direct Digital Synthesis
+#
+CONFIG_AD9832=m
+CONFIG_AD9834=m
+# end of Direct Digital Synthesis
+
+#
+# Network Analyzer, Impedance Converters
+#
+CONFIG_AD5933=m
+# end of Network Analyzer, Impedance Converters
+# end of IIO staging drivers
+
+# CONFIG_FB_SM750 is not set
+CONFIG_STAGING_MEDIA=y
+# CONFIG_INTEL_ATOMISP is not set
+# CONFIG_DVB_AV7110 is not set
+# CONFIG_VIDEO_IPU3_IMGU is not set
+# CONFIG_VIDEO_MAX96712 is not set
+
+#
+# StarFive media platform drivers
+#
+# CONFIG_STAGING_MEDIA_DEPRECATED is not set
+# CONFIG_FB_TFT is not set
+# CONFIG_MOST_COMPONENTS is not set
+# CONFIG_XIL_AXIS_FIFO is not set
+# CONFIG_VME_BUS is not set
+# CONFIG_GPIB is not set
+# CONFIG_GOLDFISH is not set
+CONFIG_CHROME_PLATFORMS=y
+# CONFIG_CHROMEOS_ACPI is not set
+CONFIG_CHROMEOS_LAPTOP=m
+CONFIG_CHROMEOS_PSTORE=m
+CONFIG_CHROMEOS_TBMC=m
+CONFIG_CHROMEOS_OF_HW_PROBER=y
+CONFIG_CROS_EC=m
+CONFIG_CROS_EC_I2C=m
+CONFIG_CROS_EC_ISHTP=m
+CONFIG_CROS_EC_SPI=m
+# CONFIG_CROS_EC_UART is not set
+CONFIG_CROS_EC_LPC=m
+CONFIG_CROS_EC_PROTO=y
+CONFIG_CROS_KBD_LED_BACKLIGHT=m
+CONFIG_CROS_EC_CHARDEV=m
+CONFIG_CROS_EC_LIGHTBAR=m
+CONFIG_CROS_EC_VBC=m
+CONFIG_CROS_EC_DEBUGFS=m
+CONFIG_CROS_EC_SENSORHUB=m
+CONFIG_CROS_EC_SYSFS=m
+CONFIG_CROS_EC_TYPEC=m
+# CONFIG_CROS_HPS_I2C is not set
+CONFIG_CROS_USBPD_LOGGER=m
+CONFIG_CROS_USBPD_NOTIFY=m
+# CONFIG_CHROMEOS_PRIVACY_SCREEN is not set
+CONFIG_CROS_TYPEC_SWITCH=m
+CONFIG_WILCO_EC=m
+# CONFIG_WILCO_EC_DEBUGFS is not set
+CONFIG_WILCO_EC_EVENTS=m
+CONFIG_WILCO_EC_TELEMETRY=m
+# CONFIG_MELLANOX_PLATFORM is not set
+CONFIG_SURFACE_PLATFORMS=y
+CONFIG_SURFACE3_WMI=m
+# CONFIG_SURFACE_3_POWER_OPREGION is not set
+# CONFIG_SURFACE_GPE is not set
+# CONFIG_SURFACE_HOTPLUG is not set
+CONFIG_SURFACE_PRO3_BUTTON=m
+# CONFIG_SURFACE_AGGREGATOR is not set
+CONFIG_X86_PLATFORM_DEVICES=y
+CONFIG_ACPI_WMI=m
+CONFIG_WMI_BMOF=m
+CONFIG_HUAWEI_WMI=m
+CONFIG_MXM_WMI=m
+CONFIG_NVIDIA_WMI_EC_BACKLIGHT=m
+CONFIG_XIAOMI_WMI=m
+CONFIG_GIGABYTE_WMI=m
+CONFIG_YOGABOOK=m
+# CONFIG_YT2_1380 is not set
+CONFIG_ACERHDF=m
+CONFIG_ACER_WIRELESS=m
+CONFIG_ACER_WMI=m
+CONFIG_AMD_HSMP=m
+
+#
+# AMD HSMP Driver
+#
+CONFIG_AMD_HSMP_ACPI=m
+CONFIG_AMD_HSMP_PLAT=m
+# end of AMD HSMP Driver
+
+CONFIG_AMD_PMC=m
+CONFIG_AMD_MP2_STB=y
+CONFIG_AMD_3D_VCACHE=m
+# CONFIG_AMD_WBRF is not set
+CONFIG_ADV_SWBUTTON=m
+CONFIG_APPLE_GMUX=m
+CONFIG_ASUS_LAPTOP=m
+CONFIG_ASUS_WIRELESS=m
+CONFIG_ASUS_ARMOURY=m
+CONFIG_ASUS_WMI=m
+# CONFIG_ASUS_WMI_DEPRECATED_ATTRS is not set
+CONFIG_ASUS_NB_WMI=m
+CONFIG_ASUS_TF103C_DOCK=m
+CONFIG_EEEPC_LAPTOP=m
+CONFIG_EEEPC_WMI=m
+CONFIG_X86_PLATFORM_DRIVERS_DELL=y
+CONFIG_ALIENWARE_WMI=m
+CONFIG_DCDBAS=m
+CONFIG_DELL_LAPTOP=m
+CONFIG_DELL_RBU=m
+CONFIG_DELL_RBTN=m
+CONFIG_DELL_PC=m
+CONFIG_DELL_SMBIOS=m
+CONFIG_DELL_SMBIOS_WMI=y
+CONFIG_DELL_SMBIOS_SMM=y
+CONFIG_DELL_SMO8800=m
+# CONFIG_DELL_UART_BACKLIGHT is not set
+CONFIG_DELL_WMI=m
+CONFIG_DELL_WMI_PRIVACY=y
+CONFIG_DELL_WMI_AIO=m
+CONFIG_DELL_WMI_DESCRIPTOR=m
+CONFIG_DELL_WMI_DDV=m
+CONFIG_DELL_WMI_LED=m
+CONFIG_DELL_WMI_SYSMAN=m
+CONFIG_AMILO_RFKILL=m
+CONFIG_FUJITSU_LAPTOP=m
+CONFIG_FUJITSU_TABLET=m
+CONFIG_GPD_POCKET_FAN=m
+CONFIG_X86_PLATFORM_DRIVERS_HP=y
+CONFIG_HP_ACCEL=m
+CONFIG_HP_WMI=m
+CONFIG_HP_BIOSCFG=m
+CONFIG_WIRELESS_HOTKEY=m
+CONFIG_IBM_RTL=m
+CONFIG_IDEAPAD_LAPTOP=m
+CONFIG_LENOVO_YMC=m
+CONFIG_SENSORS_HDAPS=m
+CONFIG_THINKPAD_ACPI=m
+CONFIG_THINKPAD_ACPI_ALSA_SUPPORT=y
+CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
+CONFIG_THINKPAD_ACPI_VIDEO=y
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_THINKPAD_LMI=m
+# CONFIG_INTEL_ATOMISP2_LED is not set
+# CONFIG_INTEL_ATOMISP2_PM is not set
+# CONFIG_INTEL_IFS is not set
+# CONFIG_INTEL_SAR_INT1092 is not set
+# CONFIG_INTEL_SKL_INT3472 is not set
+
+#
+# Intel Speed Select Technology interface support
+#
+CONFIG_INTEL_SPEED_SELECT_INTERFACE=m
+# end of Intel Speed Select Technology interface support
+
+# CONFIG_INTEL_TELEMETRY is not set
+CONFIG_INTEL_WMI=y
+CONFIG_INTEL_WMI_SBL_FW_UPDATE=m
+CONFIG_INTEL_WMI_THUNDERBOLT=m
+
+#
+# Intel Uncore Frequency Control
+#
+CONFIG_INTEL_UNCORE_FREQ_CONTROL=m
+# end of Intel Uncore Frequency Control
+
+CONFIG_INTEL_HID_EVENT=m
+CONFIG_INTEL_VBTN=m
+# CONFIG_INTEL_INT0002_VGPIO is not set
+CONFIG_INTEL_OAKTRAIL=m
+# CONFIG_INTEL_BXTWC_PMIC_TMU is not set
+# CONFIG_INTEL_ISHTP_ECLITE is not set
+CONFIG_INTEL_PUNIT_IPC=m
+CONFIG_INTEL_RST=m
+CONFIG_INTEL_SMARTCONNECT=m
+CONFIG_INTEL_TURBO_MAX_3=y
+# CONFIG_INTEL_VSEC is not set
+# CONFIG_ACPI_QUICKSTART is not set
+CONFIG_MEEGOPAD_ANX7428=m
+CONFIG_MSI_EC=m
+CONFIG_MSI_LAPTOP=m
+CONFIG_MSI_WMI=m
+CONFIG_MSI_WMI_PLATFORM=m
+CONFIG_PCENGINES_APU2=m
+CONFIG_BARCO_P50_GPIO=m
+CONFIG_SAMSUNG_LAPTOP=m
+CONFIG_SAMSUNG_Q10=m
+CONFIG_ACPI_TOSHIBA=m
+CONFIG_TOSHIBA_BT_RFKILL=m
+CONFIG_TOSHIBA_HAPS=m
+CONFIG_TOSHIBA_WMI=m
+CONFIG_ACPI_CMPC=m
+CONFIG_COMPAL_LAPTOP=m
+CONFIG_LG_LAPTOP=m
+CONFIG_PANASONIC_LAPTOP=m
+CONFIG_SONY_LAPTOP=m
+CONFIG_SONYPI_COMPAT=y
+CONFIG_SYSTEM76_ACPI=m
+CONFIG_TOPSTAR_LAPTOP=m
+CONFIG_SERIAL_MULTI_INSTANTIATE=m
+# CONFIG_MLX_PLATFORM is not set
+# CONFIG_INSPUR_PLATFORM_PROFILE is not set
+# CONFIG_LENOVO_WMI_CAMERA is not set
+CONFIG_FW_ATTR_CLASS=m
+CONFIG_INTEL_IPS=m
+CONFIG_INTEL_SCU_IPC=y
+# CONFIG_INTEL_SCU_PCI is not set
+# CONFIG_INTEL_SCU_PLATFORM is not set
+# CONFIG_SIEMENS_SIMATIC_IPC is not set
+# CONFIG_SILICOM_PLATFORM is not set
+# CONFIG_WINMATE_FM07_KEYS is not set
+# CONFIG_SEL3350_PLATFORM is not set
+CONFIG_P2SB=y
+CONFIG_HAVE_CLK=y
+CONFIG_HAVE_CLK_PREPARE=y
+CONFIG_COMMON_CLK=y
+CONFIG_COMMON_CLK_WM831X=m
+# CONFIG_LMK04832 is not set
+# CONFIG_COMMON_CLK_MAX9485 is not set
+# CONFIG_COMMON_CLK_SI5341 is not set
+CONFIG_COMMON_CLK_SI5351=m
+# CONFIG_COMMON_CLK_SI514 is not set
+# CONFIG_COMMON_CLK_SI544 is not set
+# CONFIG_COMMON_CLK_SI570 is not set
+CONFIG_COMMON_CLK_CDCE706=m
+# CONFIG_COMMON_CLK_CDCE925 is not set
+# CONFIG_COMMON_CLK_CS2000_CP is not set
+CONFIG_COMMON_CLK_S2MPS11=m
+# CONFIG_CLK_TWL is not set
+CONFIG_CLK_TWL6040=m
+# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
+CONFIG_COMMON_CLK_PALMAS=m
+# CONFIG_COMMON_CLK_PWM is not set
+# CONFIG_COMMON_CLK_RS9_PCIE is not set
+# CONFIG_COMMON_CLK_SI521XX is not set
+# CONFIG_COMMON_CLK_VC3 is not set
+# CONFIG_COMMON_CLK_VC5 is not set
+# CONFIG_COMMON_CLK_VC7 is not set
+# CONFIG_COMMON_CLK_FIXED_MMIO is not set
+# CONFIG_CLK_LGM_CGU is not set
+# CONFIG_XILINX_VCU is not set
+# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set
+# CONFIG_HWSPINLOCK is not set
+
+#
+# Clock Source drivers
+#
+CONFIG_CLKEVT_I8253=y
+CONFIG_I8253_LOCK=y
+CONFIG_CLKBLD_I8253=y
+# end of Clock Source drivers
+
+CONFIG_MAILBOX=y
+# CONFIG_PLATFORM_MHU is not set
+CONFIG_PCC=y
+CONFIG_ALTERA_MBOX=m
+# CONFIG_MAILBOX_TEST is not set
+CONFIG_IOMMU_IOVA=y
+CONFIG_IOMMU_API=y
+CONFIG_IOMMU_SUPPORT=y
+
+#
+# Generic IOMMU Pagetable Support
+#
+CONFIG_IOMMU_IO_PGTABLE=y
+# end of Generic IOMMU Pagetable Support
+
+# CONFIG_IOMMU_DEBUGFS is not set
+# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
+CONFIG_IOMMU_DEFAULT_DMA_LAZY=y
+# CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set
+CONFIG_OF_IOMMU=y
+CONFIG_IOMMU_DMA=y
+CONFIG_IOMMU_SVA=y
+CONFIG_IOMMU_IOPF=y
+CONFIG_AMD_IOMMU=y
+CONFIG_DMAR_TABLE=y
+CONFIG_INTEL_IOMMU=y
+CONFIG_INTEL_IOMMU_SVM=y
+# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
+CONFIG_INTEL_IOMMU_FLOPPY_WA=y
+CONFIG_INTEL_IOMMU_SCALABLE_MODE_DEFAULT_ON=y
+CONFIG_INTEL_IOMMU_PERF_EVENTS=y
+# CONFIG_IOMMUFD is not set
+CONFIG_IRQ_REMAP=y
+
+#
+# Remoteproc drivers
+#
+# CONFIG_REMOTEPROC is not set
+# end of Remoteproc drivers
+
+#
+# Rpmsg drivers
+#
+# CONFIG_RPMSG_QCOM_GLINK_RPM is not set
+# CONFIG_RPMSG_VIRTIO is not set
+# end of Rpmsg drivers
+
+CONFIG_SOUNDWIRE=m
+
+#
+# SoundWire Devices
+#
+CONFIG_SOUNDWIRE_AMD=m
+CONFIG_SOUNDWIRE_CADENCE=m
+CONFIG_SOUNDWIRE_INTEL=m
+CONFIG_SOUNDWIRE_QCOM=m
+CONFIG_SOUNDWIRE_GENERIC_ALLOCATION=m
+
+#
+# SOC (System On Chip) specific Drivers
+#
+
+#
+# Amlogic SoC drivers
+#
+# end of Amlogic SoC drivers
+
+#
+# Broadcom SoC drivers
+#
+# end of Broadcom SoC drivers
+
+#
+# NXP/Freescale QorIQ SoC drivers
+#
+# end of NXP/Freescale QorIQ SoC drivers
+
+#
+# fujitsu SoC drivers
+#
+# end of fujitsu SoC drivers
+
+#
+# i.MX SoC drivers
+#
+# end of i.MX SoC drivers
+
+#
+# Enable LiteX SoC Builder specific drivers
+#
+# CONFIG_LITEX_SOC_CONTROLLER is not set
+# end of Enable LiteX SoC Builder specific drivers
+
+# CONFIG_WPCM450_SOC is not set
+
+#
+# Qualcomm SoC drivers
+#
+CONFIG_QCOM_QMI_HELPERS=m
+# CONFIG_QCOM_PBS is not set
+# end of Qualcomm SoC drivers
+
+CONFIG_SOC_TI=y
+
+#
+# Xilinx SoC drivers
+#
+# end of Xilinx SoC drivers
+# end of SOC (System On Chip) specific Drivers
+
+#
+# PM Domains
+#
+
+#
+# Amlogic PM Domains
+#
+# end of Amlogic PM Domains
+
+#
+# Broadcom PM Domains
+#
+# end of Broadcom PM Domains
+
+#
+# i.MX PM Domains
+#
+# end of i.MX PM Domains
+
+#
+# Qualcomm PM Domains
+#
+# end of Qualcomm PM Domains
+# end of PM Domains
+
+CONFIG_PM_DEVFREQ=y
+
+#
+# DEVFREQ Governors
+#
+CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
+CONFIG_DEVFREQ_GOV_PERFORMANCE=y
+CONFIG_DEVFREQ_GOV_POWERSAVE=y
+CONFIG_DEVFREQ_GOV_USERSPACE=y
+# CONFIG_DEVFREQ_GOV_PASSIVE is not set
+
+#
+# DEVFREQ Drivers
+#
+CONFIG_PM_DEVFREQ_EVENT=y
+CONFIG_EXTCON=y
+
+#
+# Extcon Device Drivers
+#
+CONFIG_EXTCON_ADC_JACK=m
+# CONFIG_EXTCON_FSA9480 is not set
+CONFIG_EXTCON_GPIO=m
+# CONFIG_EXTCON_INTEL_INT3496 is not set
+# CONFIG_EXTCON_LC824206XA is not set
+CONFIG_EXTCON_MAX14577=m
+# CONFIG_EXTCON_MAX3355 is not set
+CONFIG_EXTCON_MAX77693=m
+CONFIG_EXTCON_MAX77843=m
+CONFIG_EXTCON_MAX8997=m
+CONFIG_EXTCON_PALMAS=m
+# CONFIG_EXTCON_PTN5150 is not set
+CONFIG_EXTCON_RT8973A=m
+CONFIG_EXTCON_SM5502=m
+CONFIG_EXTCON_USB_GPIO=m
+# CONFIG_EXTCON_USBC_CROS_EC is not set
+# CONFIG_EXTCON_USBC_TUSB320 is not set
+CONFIG_EXTCON_STEAMDECK=m
+CONFIG_MEMORY=y
+CONFIG_IIO=m
+CONFIG_IIO_BUFFER=y
+CONFIG_IIO_BUFFER_CB=m
+# CONFIG_IIO_BUFFER_DMA is not set
+# CONFIG_IIO_BUFFER_DMAENGINE is not set
+# CONFIG_IIO_BUFFER_HW_CONSUMER is not set
+CONFIG_IIO_KFIFO_BUF=m
+CONFIG_IIO_TRIGGERED_BUFFER=m
+# 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
+CONFIG_IIO_TRIGGERED_EVENT=m
+CONFIG_IIO_BACKEND=m
+
+#
+# Accelerometers
+#
+CONFIG_ADIS16201=m
+CONFIG_ADIS16209=m
+# CONFIG_ADXL313_I2C is not set
+# CONFIG_ADXL313_SPI is not set
+# CONFIG_ADXL355_I2C is not set
+# CONFIG_ADXL355_SPI is not set
+# CONFIG_ADXL367_SPI is not set
+# CONFIG_ADXL367_I2C is not set
+# CONFIG_ADXL372_SPI is not set
+# CONFIG_ADXL372_I2C is not set
+# CONFIG_ADXL380_SPI is not set
+# CONFIG_ADXL380_I2C is not set
+# CONFIG_BMA220 is not set
+# CONFIG_BMA400 is not set
+CONFIG_BMC150_ACCEL=m
+CONFIG_BMC150_ACCEL_I2C=m
+CONFIG_BMC150_ACCEL_SPI=m
+# CONFIG_BMI088_ACCEL is not set
+# CONFIG_DA280 is not set
+# CONFIG_DA311 is not set
+# CONFIG_DMARD06 is not set
+# CONFIG_DMARD09 is not set
+# CONFIG_DMARD10 is not set
+# CONFIG_FXLS8962AF_I2C is not set
+# CONFIG_FXLS8962AF_SPI is not set
+CONFIG_HID_SENSOR_ACCEL_3D=m
+CONFIG_IIO_ST_ACCEL_3AXIS=m
+CONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
+CONFIG_IIO_ST_ACCEL_SPI_3AXIS=m
+# CONFIG_IIO_KX022A_SPI is not set
+# CONFIG_IIO_KX022A_I2C is not set
+CONFIG_KXSD9=m
+CONFIG_KXSD9_SPI=m
+CONFIG_KXSD9_I2C=m
+CONFIG_KXCJK1013=m
+# CONFIG_MC3230 is not set
+# CONFIG_MMA7455_I2C is not set
+# CONFIG_MMA7455_SPI is not set
+# CONFIG_MMA7660 is not set
+CONFIG_MMA8452=m
+CONFIG_MMA9551_CORE=m
+CONFIG_MMA9551=m
+CONFIG_MMA9553=m
+# CONFIG_MSA311 is not set
+CONFIG_MXC4005=m
+# CONFIG_MXC6255 is not set
+CONFIG_SCA3000=m
+# CONFIG_SCA3300 is not set
+CONFIG_STK8312=m
+CONFIG_STK8BA50=m
+# end of Accelerometers
+
+#
+# Analog to digital converters
+#
+CONFIG_AD_SIGMA_DELTA=m
+# CONFIG_AD4000 is not set
+# CONFIG_AD4130 is not set
+# CONFIG_AD4695 is not set
+# CONFIG_AD7091R5 is not set
+# CONFIG_AD7091R8 is not set
+# CONFIG_AD7124 is not set
+# CONFIG_AD7173 is not set
+CONFIG_AD7192=m
+CONFIG_AD7266=m
+CONFIG_AD7280=m
+CONFIG_AD7291=m
+# CONFIG_AD7292 is not set
+CONFIG_AD7298=m
+# CONFIG_AD7380 is not set
+CONFIG_AD7476=m
+CONFIG_AD7606=m
+CONFIG_AD7606_IFACE_PARALLEL=m
+CONFIG_AD7606_IFACE_SPI=m
+# CONFIG_AD7625 is not set
+# CONFIG_AD7766 is not set
+# CONFIG_AD7768_1 is not set
+# CONFIG_AD7779 is not set
+CONFIG_AD7780=m
+CONFIG_AD7791=m
+CONFIG_AD7793=m
+CONFIG_AD7887=m
+CONFIG_AD7923=m
+# CONFIG_AD7944 is not set
+# CONFIG_AD7949 is not set
+CONFIG_AD799X=m
+# CONFIG_AD9467 is not set
+CONFIG_CC10001_ADC=m
+CONFIG_DA9150_GPADC=m
+# CONFIG_DLN2_ADC is not set
+# CONFIG_ENVELOPE_DETECTOR is not set
+# CONFIG_GEHC_PMC_ADC is not set
+CONFIG_HI8435=m
+# CONFIG_HX711 is not set
+# CONFIG_INA2XX_ADC is not set
+CONFIG_LP8788_ADC=m
+# CONFIG_LTC2309 is not set
+# CONFIG_LTC2471 is not set
+# CONFIG_LTC2485 is not set
+# CONFIG_LTC2496 is not set
+# CONFIG_LTC2497 is not set
+CONFIG_MAX1027=m
+# CONFIG_MAX11100 is not set
+# CONFIG_MAX1118 is not set
+# CONFIG_MAX11205 is not set
+# CONFIG_MAX11410 is not set
+# CONFIG_MAX1241 is not set
+CONFIG_MAX1363=m
+# CONFIG_MAX34408 is not set
+# CONFIG_MAX9611 is not set
+CONFIG_MCP320X=m
+CONFIG_MCP3422=m
+# CONFIG_MCP3564 is not set
+# CONFIG_MCP3911 is not set
+# CONFIG_MEDIATEK_MT6359_AUXADC is not set
+CONFIG_MEN_Z188_ADC=m
+CONFIG_NAU7802=m
+# CONFIG_PAC1921 is not set
+# CONFIG_PAC1934 is not set
+# CONFIG_PALMAS_GPADC is not set
+CONFIG_QCOM_VADC_COMMON=m
+CONFIG_QCOM_SPMI_IADC=m
+CONFIG_QCOM_SPMI_VADC=m
+# CONFIG_QCOM_SPMI_ADC5 is not set
+# CONFIG_RICHTEK_RTQ6056 is not set
+# CONFIG_SD_ADC_MODULATOR is not set
+CONFIG_TI_ADC081C=m
+# CONFIG_TI_ADC0832 is not set
+# CONFIG_TI_ADC084S021 is not set
+# CONFIG_TI_ADC12138 is not set
+# CONFIG_TI_ADC108S102 is not set
+CONFIG_TI_ADC128S052=m
+# CONFIG_TI_ADC161S626 is not set
+# CONFIG_TI_ADS1015 is not set
+# CONFIG_TI_ADS1119 is not set
+# CONFIG_TI_ADS7924 is not set
+# CONFIG_TI_ADS1100 is not set
+# CONFIG_TI_ADS1298 is not set
+# CONFIG_TI_ADS7950 is not set
+# CONFIG_TI_ADS8344 is not set
+# CONFIG_TI_ADS8688 is not set
+# CONFIG_TI_ADS124S08 is not set
+# CONFIG_TI_ADS131E08 is not set
+# CONFIG_TI_LMP92064 is not set
+# CONFIG_TI_TLC4541 is not set
+# CONFIG_TI_TSC2046 is not set
+CONFIG_TWL4030_MADC=m
+CONFIG_TWL6030_GPADC=m
+# CONFIG_VF610_ADC is not set
+CONFIG_VIPERBOARD_ADC=m
+# CONFIG_XILINX_XADC is not set
+# end of Analog to digital converters
+
+#
+# Analog to digital and digital to analog converters
+#
+# CONFIG_AD74115 is not set
+# CONFIG_AD74413R is not set
+# end of Analog to digital and digital to analog converters
+
+#
+# Analog Front Ends
+#
+# CONFIG_IIO_RESCALE is not set
+# end of Analog Front Ends
+
+#
+# Amplifiers
+#
+CONFIG_AD8366=m
+# CONFIG_ADA4250 is not set
+# CONFIG_HMC425 is not set
+# end of Amplifiers
+
+#
+# Capacitance to digital converters
+#
+CONFIG_AD7150=m
+CONFIG_AD7746=m
+# end of Capacitance to digital converters
+
+#
+# Chemical Sensors
+#
+# CONFIG_AOSONG_AGS02MA is not set
+# CONFIG_ATLAS_PH_SENSOR is not set
+# CONFIG_ATLAS_EZO_SENSOR is not set
+# CONFIG_BME680 is not set
+# CONFIG_CCS811 is not set
+# CONFIG_ENS160 is not set
+# CONFIG_IAQCORE is not set
+# CONFIG_PMS7003 is not set
+# CONFIG_SCD30_CORE is not set
+# CONFIG_SCD4X is not set
+# CONFIG_SENSIRION_SGP30 is not set
+# CONFIG_SENSIRION_SGP40 is not set
+# CONFIG_SPS30_I2C is not set
+# CONFIG_SPS30_SERIAL is not set
+# CONFIG_SENSEAIR_SUNRISE_CO2 is not set
+CONFIG_VZ89X=m
+# end of Chemical Sensors
+
+# CONFIG_IIO_CROS_EC_SENSORS_CORE is not set
+
+#
+# Hid Sensor IIO Common
+#
+CONFIG_HID_SENSOR_IIO_COMMON=m
+CONFIG_HID_SENSOR_IIO_TRIGGER=m
+# end of Hid Sensor IIO Common
+
+CONFIG_IIO_MS_SENSORS_I2C=m
+
+#
+# IIO SCMI Sensors
+#
+# end of IIO SCMI Sensors
+
+#
+# SSP Sensor Common
+#
+CONFIG_IIO_SSP_SENSORS_COMMONS=m
+CONFIG_IIO_SSP_SENSORHUB=m
+# end of SSP Sensor Common
+
+CONFIG_IIO_ST_SENSORS_I2C=m
+CONFIG_IIO_ST_SENSORS_SPI=m
+CONFIG_IIO_ST_SENSORS_CORE=m
+
+#
+# Digital to analog converters
+#
+# CONFIG_AD3552R_HS is not set
+# CONFIG_AD3552R is not set
+CONFIG_AD5064=m
+CONFIG_AD5360=m
+CONFIG_AD5380=m
+CONFIG_AD5421=m
+CONFIG_AD5446=m
+CONFIG_AD5449=m
+# CONFIG_AD5592R is not set
+# CONFIG_AD5593R is not set
+CONFIG_AD5504=m
+CONFIG_AD5624R_SPI=m
+# CONFIG_AD9739A is not set
+# CONFIG_LTC2688 is not set
+# CONFIG_AD5686_SPI is not set
+# CONFIG_AD5696_I2C is not set
+CONFIG_AD5755=m
+# CONFIG_AD5758 is not set
+# CONFIG_AD5761 is not set
+CONFIG_AD5764=m
+# CONFIG_AD5766 is not set
+# CONFIG_AD5770R is not set
+CONFIG_AD5791=m
+# CONFIG_AD7293 is not set
+CONFIG_AD7303=m
+# CONFIG_AD8460 is not set
+# CONFIG_AD8801 is not set
+# CONFIG_BD79703 is not set
+# CONFIG_DPOT_DAC is not set
+# CONFIG_DS4424 is not set
+# CONFIG_LTC1660 is not set
+# CONFIG_LTC2632 is not set
+# CONFIG_LTC2664 is not set
+CONFIG_M62332=m
+CONFIG_MAX517=m
+# CONFIG_MAX5522 is not set
+# CONFIG_MAX5821 is not set
+CONFIG_MCP4725=m
+# CONFIG_MCP4728 is not set
+# CONFIG_MCP4821 is not set
+CONFIG_MCP4922=m
+# CONFIG_TI_DAC082S085 is not set
+# CONFIG_TI_DAC5571 is not set
+# CONFIG_TI_DAC7311 is not set
+# CONFIG_TI_DAC7612 is not set
+# CONFIG_VF610_DAC is not set
+# end of Digital to analog converters
+
+#
+# IIO dummy driver
+#
+# end of IIO dummy driver
+
+#
+# Filters
+#
+# CONFIG_ADMV8818 is not set
+# end of Filters
+
+#
+# Frequency Synthesizers DDS/PLL
+#
+
+#
+# Clock Generator/Distribution
+#
+CONFIG_AD9523=m
+# end of Clock Generator/Distribution
+
+#
+# Phase-Locked Loop (PLL) frequency synthesizers
+#
+CONFIG_ADF4350=m
+# CONFIG_ADF4371 is not set
+# CONFIG_ADF4377 is not set
+# CONFIG_ADMFM2000 is not set
+# CONFIG_ADMV1013 is not set
+# CONFIG_ADMV1014 is not set
+# CONFIG_ADMV4420 is not set
+# CONFIG_ADRF6780 is not set
+# end of Phase-Locked Loop (PLL) frequency synthesizers
+# end of Frequency Synthesizers DDS/PLL
+
+#
+# Digital gyroscope sensors
+#
+CONFIG_ADIS16080=m
+CONFIG_ADIS16130=m
+CONFIG_ADIS16136=m
+CONFIG_ADIS16260=m
+# CONFIG_ADXRS290 is not set
+CONFIG_ADXRS450=m
+CONFIG_BMG160=m
+CONFIG_BMG160_I2C=m
+CONFIG_BMG160_SPI=m
+# CONFIG_FXAS21002C is not set
+CONFIG_HID_SENSOR_GYRO_3D=m
+# CONFIG_MPU3050_I2C is not set
+CONFIG_IIO_ST_GYRO_3AXIS=m
+CONFIG_IIO_ST_GYRO_I2C_3AXIS=m
+CONFIG_IIO_ST_GYRO_SPI_3AXIS=m
+CONFIG_ITG3200=m
+# end of Digital gyroscope sensors
+
+#
+# Health Sensors
+#
+
+#
+# Heart Rate Monitors
+#
+# CONFIG_AFE4403 is not set
+# CONFIG_AFE4404 is not set
+# CONFIG_MAX30100 is not set
+# CONFIG_MAX30102 is not set
+# end of Heart Rate Monitors
+# end of Health Sensors
+
+#
+# Humidity sensors
+#
+# CONFIG_AM2315 is not set
+CONFIG_DHT11=m
+# CONFIG_ENS210 is not set
+CONFIG_HDC100X=m
+# CONFIG_HDC2010 is not set
+# CONFIG_HDC3020 is not set
+# CONFIG_HID_SENSOR_HUMIDITY is not set
+# CONFIG_HTS221 is not set
+CONFIG_HTU21=m
+CONFIG_SI7005=m
+CONFIG_SI7020=m
+# end of Humidity sensors
+
+#
+# Inertial measurement units
+#
+CONFIG_ADIS16400=m
+# CONFIG_ADIS16460 is not set
+# CONFIG_ADIS16475 is not set
+CONFIG_ADIS16480=m
+# CONFIG_BMI160_I2C is not set
+# CONFIG_BMI160_SPI is not set
+# CONFIG_BMI270_I2C is not set
+# CONFIG_BMI270_SPI is not set
+# CONFIG_BMI323_I2C is not set
+# CONFIG_BMI323_SPI is not set
+# CONFIG_BOSCH_BNO055_SERIAL is not set
+# CONFIG_BOSCH_BNO055_I2C is not set
+# CONFIG_FXOS8700_I2C is not set
+# CONFIG_FXOS8700_SPI is not set
+CONFIG_KMX61=m
+# CONFIG_INV_ICM42600_I2C is not set
+# CONFIG_INV_ICM42600_SPI is not set
+# CONFIG_INV_MPU6050_I2C is not set
+# CONFIG_INV_MPU6050_SPI is not set
+# CONFIG_SMI240 is not set
+# CONFIG_IIO_ST_LSM6DSX is not set
+# CONFIG_IIO_ST_LSM9DS0 is not set
+# end of Inertial measurement units
+
+CONFIG_IIO_ADIS_LIB=m
+CONFIG_IIO_ADIS_LIB_BUFFER=y
+
+#
+# Light sensors
+#
+CONFIG_ACPI_ALS=m
+CONFIG_ADJD_S311=m
+# CONFIG_ADUX1020 is not set
+# CONFIG_AL3010 is not set
+CONFIG_AL3320A=m
+CONFIG_APDS9300=m
+# CONFIG_APDS9306 is not set
+CONFIG_APDS9960=m
+# CONFIG_AS73211 is not set
+# CONFIG_BH1745 is not set
+CONFIG_BH1750=m
+# CONFIG_BH1780 is not set
+CONFIG_CM32181=m
+CONFIG_CM3232=m
+CONFIG_CM3323=m
+# CONFIG_CM3605 is not set
+CONFIG_CM36651=m
+# CONFIG_GP2AP002 is not set
+CONFIG_GP2AP020A00F=m
+CONFIG_SENSORS_ISL29018=m
+CONFIG_SENSORS_ISL29028=m
+CONFIG_ISL29125=m
+# CONFIG_ISL76682 is not set
+CONFIG_HID_SENSOR_ALS=m
+CONFIG_HID_SENSOR_PROX=m
+CONFIG_JSA1212=m
+# CONFIG_ROHM_BU27034 is not set
+CONFIG_RPR0521=m
+CONFIG_SENSORS_LM3533=m
+# CONFIG_LTR390 is not set
+CONFIG_LTR501=m
+CONFIG_LTRF216A=m
+# CONFIG_LV0104CS is not set
+# CONFIG_MAX44000 is not set
+# CONFIG_MAX44009 is not set
+# CONFIG_NOA1305 is not set
+CONFIG_OPT3001=m
+# CONFIG_OPT4001 is not set
+# CONFIG_OPT4060 is not set
+CONFIG_PA12203001=m
+# CONFIG_SI1133 is not set
+# CONFIG_SI1145 is not set
+CONFIG_STK3310=m
+# CONFIG_ST_UVIS25 is not set
+CONFIG_TCS3414=m
+CONFIG_TCS3472=m
+CONFIG_SENSORS_TSL2563=m
+CONFIG_TSL2583=m
+# CONFIG_TSL2591 is not set
+# CONFIG_TSL2772 is not set
+CONFIG_TSL4531=m
+CONFIG_US5182D=m
+CONFIG_VCNL4000=m
+# CONFIG_VCNL4035 is not set
+# CONFIG_VEML3235 is not set
+# CONFIG_VEML6030 is not set
+# CONFIG_VEML6040 is not set
+# CONFIG_VEML6070 is not set
+# CONFIG_VEML6075 is not set
+# CONFIG_VL6180 is not set
+# CONFIG_ZOPT2201 is not set
+# end of Light sensors
+
+#
+# Magnetometer sensors
+#
+# CONFIG_AF8133J is not set
+# CONFIG_AK8974 is not set
+CONFIG_AK8975=m
+CONFIG_AK09911=m
+# CONFIG_ALS31300 is not set
+# CONFIG_BMC150_MAGN_I2C is not set
+# CONFIG_BMC150_MAGN_SPI is not set
+CONFIG_MAG3110=m
+CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
+CONFIG_MMC35240=m
+CONFIG_IIO_ST_MAGN_3AXIS=m
+CONFIG_IIO_ST_MAGN_I2C_3AXIS=m
+CONFIG_IIO_ST_MAGN_SPI_3AXIS=m
+CONFIG_SENSORS_HMC5843=m
+CONFIG_SENSORS_HMC5843_I2C=m
+CONFIG_SENSORS_HMC5843_SPI=m
+# CONFIG_SENSORS_RM3100_I2C is not set
+# CONFIG_SENSORS_RM3100_SPI is not set
+# CONFIG_TI_TMAG5273 is not set
+# CONFIG_YAMAHA_YAS530 is not set
+# end of Magnetometer sensors
+
+#
+# Multiplexers
+#
+# CONFIG_IIO_MUX is not set
+# end of Multiplexers
+
+#
+# Inclinometer sensors
+#
+CONFIG_HID_SENSOR_INCLINOMETER_3D=m
+CONFIG_HID_SENSOR_DEVICE_ROTATION=m
+# end of Inclinometer sensors
+
+#
+# Triggers - standalone
+#
+CONFIG_IIO_INTERRUPT_TRIGGER=m
+CONFIG_IIO_SYSFS_TRIGGER=m
+# end of Triggers - standalone
+
+#
+# Linear and angular position sensors
+#
+# CONFIG_HID_SENSOR_CUSTOM_INTEL_HINGE is not set
+# end of Linear and angular position sensors
+
+#
+# Digital potentiometers
+#
+# CONFIG_AD5110 is not set
+# CONFIG_AD5272 is not set
+# CONFIG_DS1803 is not set
+# CONFIG_MAX5432 is not set
+# CONFIG_MAX5481 is not set
+# CONFIG_MAX5487 is not set
+# CONFIG_MCP4018 is not set
+# CONFIG_MCP4131 is not set
+CONFIG_MCP4531=m
+# CONFIG_MCP41010 is not set
+# CONFIG_TPL0102 is not set
+# CONFIG_X9250 is not set
+# end of Digital potentiometers
+
+#
+# Digital potentiostats
+#
+# CONFIG_LMP91000 is not set
+# end of Digital potentiostats
+
+#
+# Pressure sensors
+#
+# CONFIG_ABP060MG is not set
+# CONFIG_ROHM_BM1390 is not set
+CONFIG_BMP280=m
+CONFIG_BMP280_I2C=m
+CONFIG_BMP280_SPI=m
+# CONFIG_DLHL60D is not set
+# CONFIG_DPS310 is not set
+CONFIG_HID_SENSOR_PRESS=m
+# CONFIG_HP03 is not set
+# CONFIG_HSC030PA is not set
+# CONFIG_ICP10100 is not set
+# CONFIG_MPL115_I2C is not set
+# CONFIG_MPL115_SPI is not set
+CONFIG_MPL3115=m
+# CONFIG_MPRLS0025PA is not set
+CONFIG_MS5611=m
+CONFIG_MS5611_I2C=m
+CONFIG_MS5611_SPI=m
+CONFIG_MS5637=m
+# CONFIG_SDP500 is not set
+CONFIG_IIO_ST_PRESS=m
+CONFIG_IIO_ST_PRESS_I2C=m
+CONFIG_IIO_ST_PRESS_SPI=m
+CONFIG_T5403=m
+# CONFIG_HP206C is not set
+# CONFIG_ZPA2326 is not set
+# end of Pressure sensors
+
+#
+# Lightning sensors
+#
+CONFIG_AS3935=m
+# end of Lightning sensors
+
+#
+# Proximity and distance sensors
+#
+# CONFIG_CROS_EC_MKBP_PROXIMITY is not set
+# CONFIG_HX9023S is not set
+# CONFIG_IRSD200 is not set
+# CONFIG_ISL29501 is not set
+CONFIG_LIDAR_LITE_V2=m
+# CONFIG_MB1232 is not set
+# CONFIG_PING is not set
+# CONFIG_RFD77402 is not set
+# CONFIG_SRF04 is not set
+# CONFIG_SX9310 is not set
+# CONFIG_SX9324 is not set
+# CONFIG_SX9360 is not set
+CONFIG_SX9500=m
+# CONFIG_SRF08 is not set
+# CONFIG_VCNL3020 is not set
+# CONFIG_VL53L0X_I2C is not set
+# CONFIG_AW96103 is not set
+# end of Proximity and distance sensors
+
+#
+# Resolver to digital converters
+#
+CONFIG_AD2S90=m
+CONFIG_AD2S1200=m
+CONFIG_AD2S1210=m
+# end of Resolver to digital converters
+
+#
+# Temperature sensors
+#
+# CONFIG_LTC2983 is not set
+# CONFIG_MAXIM_THERMOCOUPLE is not set
+# CONFIG_HID_SENSOR_TEMP is not set
+CONFIG_MLX90614=m
+# CONFIG_MLX90632 is not set
+# CONFIG_MLX90635 is not set
+CONFIG_TMP006=m
+# CONFIG_TMP007 is not set
+# CONFIG_TMP117 is not set
+CONFIG_TSYS01=m
+CONFIG_TSYS02D=m
+# CONFIG_MAX30208 is not set
+# CONFIG_MAX31856 is not set
+# CONFIG_MAX31865 is not set
+# CONFIG_MCP9600 is not set
+# end of Temperature sensors
+
+CONFIG_NTB=m
+# CONFIG_NTB_MSI is not set
+CONFIG_NTB_AMD=m
+# CONFIG_NTB_IDT is not set
+CONFIG_NTB_INTEL=m
+# CONFIG_NTB_EPF is not set
+# CONFIG_NTB_SWITCHTEC is not set
+CONFIG_NTB_PINGPONG=m
+CONFIG_NTB_TOOL=m
+# CONFIG_NTB_PERF is not set
+CONFIG_NTB_TRANSPORT=m
+CONFIG_PWM=y
+# CONFIG_PWM_DEBUG is not set
+CONFIG_PWM_ATMEL_TCB=m
+CONFIG_PWM_CLK=m
+CONFIG_PWM_CROS_EC=m
+CONFIG_PWM_DWC_CORE=m
+CONFIG_PWM_DWC=m
+CONFIG_PWM_FSL_FTM=m
+CONFIG_PWM_GPIO=m
+CONFIG_PWM_INTEL_LGM=m
+CONFIG_PWM_LP3943=m
+CONFIG_PWM_LPSS=m
+CONFIG_PWM_LPSS_PCI=m
+CONFIG_PWM_LPSS_PLATFORM=m
+CONFIG_PWM_PCA9685=m
+CONFIG_PWM_TWL=m
+CONFIG_PWM_TWL_LED=m
+CONFIG_PWM_XILINX=m
+
+#
+# IRQ chip support
+#
+CONFIG_IRQCHIP=y
+# CONFIG_AL_FIC is not set
+# CONFIG_XILINX_INTC is not set
+# end of IRQ chip support
+
+# CONFIG_IPACK_BUS is not set
+CONFIG_RESET_CONTROLLER=y
+# CONFIG_RESET_GPIO is not set
+# CONFIG_RESET_INTEL_GW is not set
+# CONFIG_RESET_SIMPLE is not set
+# CONFIG_RESET_TI_SYSCON is not set
+# CONFIG_RESET_TI_TPS380X is not set
+
+#
+# PHY Subsystem
+#
+CONFIG_GENERIC_PHY=y
+# CONFIG_USB_LGM_PHY is not set
+# CONFIG_PHY_CAN_TRANSCEIVER is not set
+# CONFIG_PHY_NXP_PTN3222 is not set
+
+#
+# PHY drivers for Broadcom platforms
+#
+CONFIG_BCM_KONA_USB2_PHY=m
+# end of PHY drivers for Broadcom platforms
+
+# CONFIG_PHY_CADENCE_TORRENT is not set
+# CONFIG_PHY_CADENCE_DPHY is not set
+# CONFIG_PHY_CADENCE_DPHY_RX is not set
+# CONFIG_PHY_CADENCE_SIERRA is not set
+# CONFIG_PHY_CADENCE_SALVO is not set
+CONFIG_PHY_PXA_28NM_HSIC=m
+CONFIG_PHY_PXA_28NM_USB2=m
+# CONFIG_PHY_LAN966X_SERDES is not set
+# CONFIG_PHY_CPCAP_USB is not set
+# CONFIG_PHY_MAPPHONE_MDM6600 is not set
+# CONFIG_PHY_OCELOT_SERDES is not set
+# CONFIG_PHY_QCOM_USB_HS is not set
+# CONFIG_PHY_QCOM_USB_HSIC is not set
+CONFIG_PHY_SAMSUNG_USB2=m
+CONFIG_PHY_TUSB1210=m
+# CONFIG_PHY_INTEL_LGM_COMBO is not set
+# CONFIG_PHY_INTEL_LGM_EMMC is not set
+# end of PHY Subsystem
+
+CONFIG_POWERCAP=y
+CONFIG_INTEL_RAPL_CORE=m
+CONFIG_INTEL_RAPL=m
+CONFIG_IDLE_INJECT=y
+# CONFIG_DTPM is not set
+CONFIG_MCB=m
+CONFIG_MCB_PCI=m
+# CONFIG_MCB_LPC is not set
+
+#
+# Performance monitor support
+#
+# CONFIG_DWC_PCIE_PMU is not set
+# end of Performance monitor support
+
+CONFIG_RAS=y
+# CONFIG_RAS_CEC is not set
+CONFIG_AMD_ATL=m
+CONFIG_AMD_ATL_PRM=y
+CONFIG_RAS_FMPM=m
+CONFIG_USB4=m
+# CONFIG_USB4_DEBUGFS_WRITE is not set
+# CONFIG_USB4_DMA_TEST is not set
+
+#
+# Android
+#
+# CONFIG_ANDROID_BINDER_IPC is not set
+# end of Android
+
+CONFIG_LIBNVDIMM=y
+CONFIG_BLK_DEV_PMEM=m
+CONFIG_ND_CLAIM=y
+CONFIG_ND_BTT=m
+CONFIG_BTT=y
+CONFIG_OF_PMEM=y
+CONFIG_NVDIMM_KEYS=y
+# CONFIG_NVDIMM_SECURITY_TEST is not set
+CONFIG_DAX=m
+CONFIG_NVMEM=y
+CONFIG_NVMEM_SYSFS=y
+CONFIG_NVMEM_LAYOUTS=y
+
+#
+# Layout Types
+#
+# CONFIG_NVMEM_LAYOUT_SL28_VPD is not set
+# CONFIG_NVMEM_LAYOUT_ONIE_TLV is not set
+# CONFIG_NVMEM_LAYOUT_U_BOOT_ENV is not set
+# end of Layout Types
+
+# CONFIG_NVMEM_RMEM is not set
+# CONFIG_NVMEM_SPMI_SDAM is not set
+# CONFIG_NVMEM_U_BOOT_ENV is not set
+
+#
+# HW tracing support
+#
+CONFIG_STM=m
+# CONFIG_STM_PROTO_BASIC is not set
+# CONFIG_STM_PROTO_SYS_T is not set
+CONFIG_STM_DUMMY=m
+CONFIG_STM_SOURCE_CONSOLE=m
+# CONFIG_STM_SOURCE_HEARTBEAT is not set
+# CONFIG_STM_SOURCE_FTRACE is not set
+CONFIG_INTEL_TH=m
+CONFIG_INTEL_TH_PCI=m
+# CONFIG_INTEL_TH_ACPI is not set
+CONFIG_INTEL_TH_GTH=m
+CONFIG_INTEL_TH_STH=m
+CONFIG_INTEL_TH_MSU=m
+CONFIG_INTEL_TH_PTI=m
+# CONFIG_INTEL_TH_DEBUG is not set
+# end of HW tracing support
+
+CONFIG_FPGA=m
+# CONFIG_ALTERA_PR_IP_CORE is not set
+# CONFIG_FPGA_MGR_ALTERA_PS_SPI is not set
+# CONFIG_FPGA_MGR_ALTERA_CVP is not set
+# CONFIG_FPGA_MGR_XILINX_SELECTMAP is not set
+# CONFIG_FPGA_MGR_XILINX_SPI is not set
+# CONFIG_FPGA_MGR_ICE40_SPI is not set
+# CONFIG_FPGA_MGR_MACHXO2_SPI is not set
+# CONFIG_FPGA_BRIDGE is not set
+# CONFIG_FPGA_DFL is not set
+# CONFIG_FPGA_MGR_MICROCHIP_SPI is not set
+# CONFIG_FPGA_MGR_LATTICE_SYSCONFIG_SPI is not set
+# CONFIG_FSI is not set
+# CONFIG_TEE is not set
+CONFIG_PM_OPP=y
+# CONFIG_SIOX is not set
+# CONFIG_SLIMBUS is not set
+# CONFIG_INTERCONNECT is not set
+# CONFIG_COUNTER is not set
+CONFIG_MOST=m
+# CONFIG_MOST_USB_HDM is not set
+# CONFIG_MOST_CDEV is not set
+# CONFIG_MOST_SND is not set
+# CONFIG_PECI is not set
+# CONFIG_HTE is not set
+CONFIG_DPLL=y
+# end of Device Drivers
+
+#
+# File systems
+#
+CONFIG_DCACHE_WORD_ACCESS=y
+# CONFIG_VALIDATE_FS_PARSER is not set
+CONFIG_FS_IOMAP=y
+CONFIG_FS_STACK=y
+CONFIG_BUFFER_HEAD=y
+CONFIG_LEGACY_DIRECT_IO=y
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+CONFIG_EXT4_FS=y
+CONFIG_EXT4_USE_FOR_EXT2=y
+CONFIG_EXT4_FS_POSIX_ACL=y
+CONFIG_EXT4_FS_SECURITY=y
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD2=y
+# CONFIG_JBD2_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# 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_BCACHEFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_EXPORTFS=y
+# CONFIG_EXPORTFS_BLOCK_OPS is not set
+CONFIG_FILE_LOCKING=y
+# CONFIG_FS_ENCRYPTION is not set
+# CONFIG_FS_VERITY is not set
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_FANOTIFY=y
+CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+# CONFIG_QUOTA_DEBUG is not set
+CONFIG_QUOTA_TREE=m
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_FUSE_FS=y
+CONFIG_CUSE=m
+# CONFIG_VIRTIO_FS is not set
+CONFIG_FUSE_PASSTHROUGH=y
+CONFIG_FUSE_IO_URING=y
+CONFIG_OVERLAY_FS=y
+# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set
+CONFIG_OVERLAY_FS_REDIRECT_ALWAYS_FOLLOW=y
+# CONFIG_OVERLAY_FS_INDEX is not set
+# CONFIG_OVERLAY_FS_XINO_AUTO is not set
+# CONFIG_OVERLAY_FS_METACOPY is not set
+# CONFIG_OVERLAY_FS_DEBUG is not set
+
+#
+# Caches
+#
+CONFIG_NETFS_SUPPORT=m
+# CONFIG_NETFS_STATS is not set
+# CONFIG_NETFS_DEBUG is not set
+# CONFIG_FSCACHE is not set
+# end of Caches
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+# end of CD-ROM/DVD Filesystems
+
+#
+# DOS/FAT/EXFAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_FAT_DEFAULT_UTF8 is not set
+CONFIG_EXFAT_FS=m
+CONFIG_EXFAT_DEFAULT_IOCHARSET="utf8"
+CONFIG_NTFS3_FS=m
+# CONFIG_NTFS3_64BIT_CLUSTER is not set
+CONFIG_NTFS3_LZX_XPRESS=y
+CONFIG_NTFS3_FS_POSIX_ACL=y
+CONFIG_NTFS_FS=m
+# end of DOS/FAT/EXFAT/NT Filesystems
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_VMCORE=y
+# CONFIG_PROC_VMCORE_DEVICE_DUMP is not set
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_PROC_CHILDREN=y
+CONFIG_PROC_PID_ARCH_STATUS=y
+CONFIG_KERNFS=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+CONFIG_TMPFS_XATTR=y
+# CONFIG_TMPFS_INODE64 is not set
+# CONFIG_TMPFS_QUOTA is not set
+CONFIG_HUGETLBFS=y
+# CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON is not set
+CONFIG_HUGETLB_PAGE=y
+CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y
+CONFIG_HUGETLB_PMD_PAGE_TABLE_SHARING=y
+CONFIG_ARCH_HAS_GIGANTIC_PAGE=y
+CONFIG_CONFIGFS_FS=m
+CONFIG_EFIVAR_FS=y
+# end of Pseudo filesystems
+
+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 is not set
+# 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_JFFS2_FS is not set
+# CONFIG_UBIFS_FS is not set
+# CONFIG_CRAMFS is not set
+CONFIG_SQUASHFS=y
+# CONFIG_SQUASHFS_FILE_CACHE is not set
+CONFIG_SQUASHFS_FILE_DIRECT=y
+CONFIG_SQUASHFS_DECOMP_SINGLE=y
+# CONFIG_SQUASHFS_CHOICE_DECOMP_BY_MOUNT is not set
+CONFIG_SQUASHFS_COMPILE_DECOMP_SINGLE=y
+# CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI is not set
+# CONFIG_SQUASHFS_COMPILE_DECOMP_MULTI_PERCPU is not set
+CONFIG_SQUASHFS_XATTR=y
+CONFIG_SQUASHFS_ZLIB=y
+CONFIG_SQUASHFS_LZ4=y
+CONFIG_SQUASHFS_LZO=y
+CONFIG_SQUASHFS_XZ=y
+# CONFIG_SQUASHFS_ZSTD is not set
+# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set
+# CONFIG_SQUASHFS_EMBEDDED is not set
+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_QNX6FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_PSTORE=y
+CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240
+CONFIG_PSTORE_COMPRESS=y
+# CONFIG_PSTORE_CONSOLE is not set
+# CONFIG_PSTORE_PMSG is not set
+# CONFIG_PSTORE_FTRACE is not set
+CONFIG_PSTORE_RAM=m
+# CONFIG_PSTORE_BLK is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+# CONFIG_EROFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+# CONFIG_NFS_V2 is not set
+CONFIG_NFS_V3=m
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=m
+CONFIG_NFS_SWAP=y
+CONFIG_NFS_V4_1=y
+CONFIG_NFS_V4_2=y
+CONFIG_PNFS_FILE_LAYOUT=m
+CONFIG_PNFS_BLOCK=m
+CONFIG_PNFS_FLEXFILE_LAYOUT=m
+CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org"
+CONFIG_NFS_V4_1_MIGRATION=y
+CONFIG_NFS_V4_SECURITY_LABEL=y
+# CONFIG_NFS_FSCACHE is not set
+# CONFIG_NFS_USE_LEGACY_DNS is not set
+CONFIG_NFS_USE_KERNEL_DNS=y
+CONFIG_NFS_DEBUG=y
+CONFIG_NFS_DISABLE_UDP_SUPPORT=y
+CONFIG_NFS_V4_2_READ_PLUS=y
+# CONFIG_NFSD is not set
+CONFIG_GRACE_PERIOD=m
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_NFS_V4_2_SSC_HELPER=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BACKCHANNEL=y
+CONFIG_SUNRPC_SWAP=y
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA1=y
+# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_CAMELLIA is not set
+# CONFIG_RPCSEC_GSS_KRB5_ENCTYPES_AES_SHA2 is not set
+CONFIG_SUNRPC_DEBUG=y
+CONFIG_CEPH_FS=m
+CONFIG_CEPH_FS_POSIX_ACL=y
+CONFIG_CEPH_FS_SECURITY_LABEL=y
+CONFIG_CIFS=m
+CONFIG_CIFS_STATS2=y
+CONFIG_CIFS_ALLOW_INSECURE_LEGACY=y
+CONFIG_CIFS_UPCALL=y
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+CONFIG_CIFS_DEBUG=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_DEBUG_DUMP_KEYS is not set
+CONFIG_CIFS_DFS_UPCALL=y
+CONFIG_CIFS_SWN_UPCALL=y
+# CONFIG_CIFS_COMPRESSION is not set
+# CONFIG_SMB_SERVER is not set
+CONFIG_SMBFS=m
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="utf8"
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_MAC_ROMAN=m
+CONFIG_NLS_MAC_CELTIC=m
+CONFIG_NLS_MAC_CENTEURO=m
+CONFIG_NLS_MAC_CROATIAN=m
+CONFIG_NLS_MAC_CYRILLIC=m
+CONFIG_NLS_MAC_GAELIC=m
+CONFIG_NLS_MAC_GREEK=m
+CONFIG_NLS_MAC_ICELAND=m
+CONFIG_NLS_MAC_INUIT=m
+CONFIG_NLS_MAC_ROMANIAN=m
+CONFIG_NLS_MAC_TURKISH=m
+CONFIG_NLS_UTF8=m
+CONFIG_NLS_UCS2_UTILS=m
+CONFIG_DLM=m
+# CONFIG_DLM_DEBUG is not set
+# CONFIG_UNICODE is not set
+CONFIG_IO_WQ=y
+# end of File systems
+
+#
+# Security options
+#
+CONFIG_KEYS=y
+# CONFIG_KEYS_REQUEST_CACHE is not set
+CONFIG_PERSISTENT_KEYRINGS=y
+CONFIG_TRUSTED_KEYS=y
+CONFIG_HAVE_TRUSTED_KEYS=y
+CONFIG_TRUSTED_KEYS_TPM=y
+CONFIG_ENCRYPTED_KEYS=y
+# CONFIG_USER_DECRYPTED_DATA is not set
+# CONFIG_KEY_DH_OPERATIONS is not set
+# CONFIG_SECURITY_DMESG_RESTRICT is not set
+CONFIG_PROC_MEM_ALWAYS_FORCE=y
+# CONFIG_PROC_MEM_FORCE_PTRACE is not set
+# CONFIG_PROC_MEM_NO_FORCE is not set
+CONFIG_SECURITY=y
+CONFIG_HAS_SECURITY_AUDIT=y
+CONFIG_SECURITYFS=y
+CONFIG_SECURITY_NETWORK=y
+CONFIG_SECURITY_NETWORK_XFRM=y
+CONFIG_SECURITY_PATH=y
+CONFIG_INTEL_TXT=y
+# CONFIG_HARDENED_USERCOPY is not set
+# CONFIG_FORTIFY_SOURCE is not set
+# CONFIG_STATIC_USERMODEHELPER is not set
+# CONFIG_SECURITY_SELINUX is not set
+CONFIG_SECURITY_SMACK=y
+# CONFIG_SECURITY_SMACK_BRINGUP is not set
+# CONFIG_SECURITY_SMACK_APPEND_SIGNALS is not set
+# CONFIG_SECURITY_TOMOYO is not set
+# CONFIG_SECURITY_APPARMOR is not set
+# CONFIG_SECURITY_LOADPIN is not set
+CONFIG_SECURITY_YAMA=y
+# CONFIG_SECURITY_SAFESETID is not set
+# CONFIG_SECURITY_LOCKDOWN_LSM is not set
+# CONFIG_SECURITY_LANDLOCK is not set
+# CONFIG_SECURITY_IPE is not set
+# CONFIG_INTEGRITY is not set
+# CONFIG_IMA_SECURE_AND_OR_TRUSTED_BOOT is not set
+CONFIG_DEFAULT_SECURITY_SMACK=y
+# CONFIG_DEFAULT_SECURITY_DAC is not set
+CONFIG_LSM="lockdown,yama"
+
+#
+# Kernel hardening options
+#
+
+#
+# Memory initialization
+#
+CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
+CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
+CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
+# CONFIG_INIT_STACK_NONE is not set
+# CONFIG_INIT_STACK_ALL_PATTERN is not set
+CONFIG_INIT_STACK_ALL_ZERO=y
+# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
+# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
+CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
+# CONFIG_ZERO_CALL_USED_REGS is not set
+# end of Memory initialization
+
+#
+# Hardening of kernel data structures
+#
+# CONFIG_LIST_HARDENED is not set
+# CONFIG_BUG_ON_DATA_CORRUPTION is not set
+# end of Hardening of kernel data structures
+
+CONFIG_RANDSTRUCT_NONE=y
+# end of Kernel hardening options
+# end of Security options
+
+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_SIG=y
+CONFIG_CRYPTO_SIG2=y
+CONFIG_CRYPTO_SKCIPHER=y
+CONFIG_CRYPTO_SKCIPHER2=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_KPP=y
+CONFIG_CRYPTO_ACOMP2=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+CONFIG_CRYPTO_USER=m
+CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y
+CONFIG_CRYPTO_NULL=y
+CONFIG_CRYPTO_NULL2=y
+CONFIG_CRYPTO_PCRYPT=m
+CONFIG_CRYPTO_CRYPTD=m
+CONFIG_CRYPTO_AUTHENC=m
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_SIMD=m
+# end of Crypto core or helper
+
+#
+# Public-key cryptography
+#
+CONFIG_CRYPTO_RSA=y
+CONFIG_CRYPTO_DH=m
+# CONFIG_CRYPTO_DH_RFC7919_GROUPS is not set
+CONFIG_CRYPTO_ECC=y
+CONFIG_CRYPTO_ECDH=y
+# CONFIG_CRYPTO_ECDSA is not set
+# CONFIG_CRYPTO_ECRDSA is not set
+# CONFIG_CRYPTO_CURVE25519 is not set
+# end of Public-key cryptography
+
+#
+# Block ciphers
+#
+CONFIG_CRYPTO_AES=y
+# CONFIG_CRYPTO_AES_TI is not set
+CONFIG_CRYPTO_ANUBIS=m
+# CONFIG_CRYPTO_ARIA is not set
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_BLOWFISH_COMMON=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_CAST_COMMON=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_SEED=m
+CONFIG_CRYPTO_SERPENT=m
+# CONFIG_CRYPTO_SM4_GENERIC is not set
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+# end of Block ciphers
+
+#
+# Length-preserving ciphers and modes
+#
+# CONFIG_CRYPTO_ADIANTUM is not set
+# CONFIG_CRYPTO_ARC4 is not set
+CONFIG_CRYPTO_CHACHA20=m
+CONFIG_CRYPTO_CBC=y
+CONFIG_CRYPTO_CTR=y
+CONFIG_CRYPTO_CTS=m
+CONFIG_CRYPTO_ECB=y
+# CONFIG_CRYPTO_HCTR2 is not set
+CONFIG_CRYPTO_LRW=m
+# CONFIG_CRYPTO_PCBC is not set
+CONFIG_CRYPTO_XTS=m
+# end of Length-preserving ciphers and modes
+
+#
+# AEAD (authenticated encryption with associated data) ciphers
+#
+# CONFIG_CRYPTO_AEGIS128 is not set
+CONFIG_CRYPTO_CHACHA20POLY1305=m
+CONFIG_CRYPTO_CCM=y
+CONFIG_CRYPTO_GCM=y
+CONFIG_CRYPTO_GENIV=m
+CONFIG_CRYPTO_SEQIV=m
+CONFIG_CRYPTO_ECHAINIV=m
+CONFIG_CRYPTO_ESSIV=m
+# end of AEAD (authenticated encryption with associated data) ciphers
+
+#
+# Hashes, digests, and MACs
+#
+# CONFIG_CRYPTO_BLAKE2B is not set
+CONFIG_CRYPTO_CMAC=y
+CONFIG_CRYPTO_GHASH=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_POLY1305=m
+CONFIG_CRYPTO_RMD160=m
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=y
+CONFIG_CRYPTO_SHA512=y
+CONFIG_CRYPTO_SHA3=y
+# CONFIG_CRYPTO_SM3_GENERIC is not set
+# CONFIG_CRYPTO_STREEBOG is not set
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_XCBC=m
+# CONFIG_CRYPTO_XXHASH is not set
+# end of Hashes, digests, and MACs
+
+#
+# CRCs (cyclic redundancy checks)
+#
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CRC32=m
+# CONFIG_CRYPTO_CRCT10DIF is not set
+CONFIG_CRYPTO_CRC64_ROCKSOFT=y
+# end of CRCs (cyclic redundancy checks)
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_LZO=y
+CONFIG_CRYPTO_842=m
+CONFIG_CRYPTO_LZ4=m
+CONFIG_CRYPTO_LZ4HC=m
+CONFIG_CRYPTO_ZSTD=m
+# end of Compression
+
+#
+# Random number generation
+#
+CONFIG_CRYPTO_ANSI_CPRNG=m
+CONFIG_CRYPTO_DRBG_MENU=y
+CONFIG_CRYPTO_DRBG_HMAC=y
+CONFIG_CRYPTO_DRBG_HASH=y
+CONFIG_CRYPTO_DRBG_CTR=y
+CONFIG_CRYPTO_DRBG=y
+CONFIG_CRYPTO_JITTERENTROPY=y
+CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKS=64
+CONFIG_CRYPTO_JITTERENTROPY_MEMORY_BLOCKSIZE=32
+CONFIG_CRYPTO_JITTERENTROPY_OSR=1
+# end of Random number generation
+
+#
+# Userspace interface
+#
+CONFIG_CRYPTO_USER_API=m
+CONFIG_CRYPTO_USER_API_HASH=m
+CONFIG_CRYPTO_USER_API_SKCIPHER=m
+CONFIG_CRYPTO_USER_API_RNG=m
+# CONFIG_CRYPTO_USER_API_RNG_CAVP is not set
+CONFIG_CRYPTO_USER_API_AEAD=m
+CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE=y
+# end of Userspace interface
+
+CONFIG_CRYPTO_HASH_INFO=y
+
+#
+# Accelerated Cryptographic Algorithms for CPU (x86)
+#
+# CONFIG_CRYPTO_CURVE25519_X86 is not set
+CONFIG_CRYPTO_AES_NI_INTEL=m
+CONFIG_CRYPTO_BLOWFISH_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_AESNI_AVX_X86_64=m
+CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m
+CONFIG_CRYPTO_CAST5_AVX_X86_64=m
+CONFIG_CRYPTO_CAST6_AVX_X86_64=m
+CONFIG_CRYPTO_DES3_EDE_X86_64=m
+CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
+CONFIG_CRYPTO_SERPENT_AVX_X86_64=m
+CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
+# CONFIG_CRYPTO_SM4_AESNI_AVX_X86_64 is not set
+# CONFIG_CRYPTO_SM4_AESNI_AVX2_X86_64 is not set
+CONFIG_CRYPTO_TWOFISH_X86_64=m
+CONFIG_CRYPTO_TWOFISH_X86_64_3WAY=m
+CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
+# CONFIG_CRYPTO_ARIA_AESNI_AVX_X86_64 is not set
+# CONFIG_CRYPTO_ARIA_AESNI_AVX2_X86_64 is not set
+# CONFIG_CRYPTO_ARIA_GFNI_AVX512_X86_64 is not set
+CONFIG_CRYPTO_CHACHA20_X86_64=m
+# CONFIG_CRYPTO_AEGIS128_AESNI_SSE2 is not set
+# CONFIG_CRYPTO_NHPOLY1305_SSE2 is not set
+# CONFIG_CRYPTO_NHPOLY1305_AVX2 is not set
+# CONFIG_CRYPTO_BLAKE2S_X86 is not set
+# CONFIG_CRYPTO_POLYVAL_CLMUL_NI is not set
+CONFIG_CRYPTO_POLY1305_X86_64=m
+CONFIG_CRYPTO_SHA1_SSSE3=m
+CONFIG_CRYPTO_SHA256_SSSE3=m
+CONFIG_CRYPTO_SHA512_SSSE3=m
+# CONFIG_CRYPTO_SM3_AVX_X86_64 is not set
+CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
+# end of Accelerated Cryptographic Algorithms for CPU (x86)
+
+CONFIG_CRYPTO_HW=y
+CONFIG_CRYPTO_DEV_PADLOCK=y
+CONFIG_CRYPTO_DEV_PADLOCK_AES=m
+CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
+# CONFIG_CRYPTO_DEV_ATMEL_ECC is not set
+# CONFIG_CRYPTO_DEV_ATMEL_SHA204A is not set
+CONFIG_CRYPTO_DEV_CCP=y
+CONFIG_CRYPTO_DEV_CCP_DD=m
+CONFIG_CRYPTO_DEV_SP_PSP=y
+# CONFIG_CRYPTO_DEV_NITROX_CNN55XX is not set
+CONFIG_CRYPTO_DEV_QAT=m
+CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
+# CONFIG_CRYPTO_DEV_QAT_C3XXX is not set
+# CONFIG_CRYPTO_DEV_QAT_C62X is not set
+# CONFIG_CRYPTO_DEV_QAT_4XXX is not set
+# CONFIG_CRYPTO_DEV_QAT_420XX is not set
+CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
+# CONFIG_CRYPTO_DEV_QAT_C3XXXVF is not set
+# CONFIG_CRYPTO_DEV_QAT_C62XVF is not set
+# CONFIG_CRYPTO_DEV_QAT_ERROR_INJECTION is not set
+# CONFIG_CRYPTO_DEV_CHELSIO is not set
+# CONFIG_CRYPTO_DEV_SAFEXCEL is not set
+# CONFIG_CRYPTO_DEV_CCREE is not set
+# CONFIG_CRYPTO_DEV_AMLOGIC_GXL is not set
+CONFIG_ASYMMETRIC_KEY_TYPE=y
+CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y
+CONFIG_X509_CERTIFICATE_PARSER=y
+# CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set
+CONFIG_PKCS7_MESSAGE_PARSER=y
+CONFIG_PKCS7_TEST_KEY=m
+CONFIG_SIGNED_PE_FILE_VERIFICATION=y
+# CONFIG_FIPS_SIGNATURE_SELFTEST is not set
+
+#
+# Certificates for signature checking
+#
+CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
+CONFIG_MODULE_SIG_KEY_TYPE_RSA=y
+# CONFIG_MODULE_SIG_KEY_TYPE_ECDSA is not set
+CONFIG_SYSTEM_TRUSTED_KEYRING=y
+CONFIG_SYSTEM_TRUSTED_KEYS=""
+# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set
+# CONFIG_SECONDARY_TRUSTED_KEYRING is not set
+# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set
+# end of Certificates for signature checking
+
+CONFIG_BINARY_PRINTF=y
+
+#
+# Library routines
+#
+CONFIG_LINEAR_RANGES=y
+CONFIG_PACKING=y
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_STRNCPY_FROM_USER=y
+CONFIG_GENERIC_STRNLEN_USER=y
+CONFIG_GENERIC_NET_UTILS=y
+CONFIG_CORDIC=m
+# CONFIG_PRIME_NUMBERS is not set
+CONFIG_RATIONAL=y
+CONFIG_GENERIC_IOMAP=y
+CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
+CONFIG_ARCH_HAS_FAST_MULTIPLIER=y
+CONFIG_ARCH_USE_SYM_ANNOTATIONS=y
+
+#
+# Crypto library routines
+#
+CONFIG_CRYPTO_LIB_UTILS=y
+CONFIG_CRYPTO_LIB_AES=y
+CONFIG_CRYPTO_LIB_AESCFB=y
+CONFIG_CRYPTO_LIB_AESGCM=y
+CONFIG_CRYPTO_LIB_ARC4=y
+CONFIG_CRYPTO_LIB_GF128MUL=y
+CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y
+CONFIG_CRYPTO_ARCH_HAVE_LIB_CHACHA=m
+CONFIG_CRYPTO_LIB_CHACHA_GENERIC=m
+# CONFIG_CRYPTO_LIB_CHACHA is not set
+# CONFIG_CRYPTO_LIB_CURVE25519 is not set
+CONFIG_CRYPTO_LIB_DES=m
+CONFIG_CRYPTO_LIB_POLY1305_RSIZE=11
+CONFIG_CRYPTO_ARCH_HAVE_LIB_POLY1305=m
+CONFIG_CRYPTO_LIB_POLY1305_GENERIC=m
+# CONFIG_CRYPTO_LIB_POLY1305 is not set
+# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set
+CONFIG_CRYPTO_LIB_SHA1=y
+CONFIG_CRYPTO_LIB_SHA256=y
+# end of Crypto library routines
+
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+CONFIG_CRC_T10DIF=y
+CONFIG_ARCH_HAS_CRC_T10DIF=y
+CONFIG_CRC_T10DIF_ARCH=y
+CONFIG_CRC64_ROCKSOFT=y
+CONFIG_CRC_ITU_T=y
+CONFIG_CRC32=y
+CONFIG_ARCH_HAS_CRC32=y
+CONFIG_CRC32_ARCH=y
+CONFIG_CRC64=y
+# CONFIG_CRC4 is not set
+CONFIG_CRC7=y
+CONFIG_LIBCRC32C=m
+CONFIG_CRC8=m
+CONFIG_CRC_OPTIMIZATIONS=y
+CONFIG_XXHASH=y
+# CONFIG_RANDOM32_SELFTEST is not set
+CONFIG_842_COMPRESS=m
+CONFIG_842_DECOMPRESS=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_LZ4_COMPRESS=m
+CONFIG_LZ4HC_COMPRESS=m
+CONFIG_LZ4_DECOMPRESS=y
+CONFIG_ZSTD_COMMON=y
+CONFIG_ZSTD_COMPRESS=m
+CONFIG_ZSTD_DECOMPRESS=y
+CONFIG_XZ_DEC=y
+CONFIG_XZ_DEC_X86=y
+CONFIG_XZ_DEC_POWERPC=y
+CONFIG_XZ_DEC_ARM=y
+CONFIG_XZ_DEC_ARMTHUMB=y
+CONFIG_XZ_DEC_ARM64=y
+CONFIG_XZ_DEC_SPARC=y
+CONFIG_XZ_DEC_RISCV=y
+# CONFIG_XZ_DEC_MICROLZMA is not set
+CONFIG_XZ_DEC_BCJ=y
+CONFIG_XZ_DEC_TEST=m
+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_DECOMPRESS_ZSTD=y
+CONFIG_GENERIC_ALLOCATOR=y
+CONFIG_REED_SOLOMON=m
+CONFIG_REED_SOLOMON_ENC8=y
+CONFIG_REED_SOLOMON_DEC8=y
+CONFIG_BCH=m
+CONFIG_BCH_CONST_PARAMS=y
+CONFIG_BTREE=y
+CONFIG_INTERVAL_TREE=y
+CONFIG_XARRAY_MULTI=y
+CONFIG_ASSOCIATIVE_ARRAY=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_IOPORT_MAP=y
+CONFIG_HAS_DMA=y
+CONFIG_DMA_OPS_HELPERS=y
+CONFIG_NEED_SG_DMA_FLAGS=y
+CONFIG_NEED_SG_DMA_LENGTH=y
+CONFIG_NEED_DMA_MAP_STATE=y
+CONFIG_ARCH_DMA_ADDR_T_64BIT=y
+CONFIG_DMA_DECLARE_COHERENT=y
+CONFIG_ARCH_HAS_FORCE_DMA_UNENCRYPTED=y
+CONFIG_SWIOTLB=y
+# CONFIG_SWIOTLB_DYNAMIC is not set
+CONFIG_DMA_NEED_SYNC=y
+# CONFIG_DMA_RESTRICTED_POOL is not set
+CONFIG_DMA_COHERENT_POOL=y
+# CONFIG_DMA_CMA is not set
+# CONFIG_DMA_API_DEBUG is not set
+# CONFIG_DMA_MAP_BENCHMARK is not set
+CONFIG_SGL_ALLOC=y
+CONFIG_IOMMU_HELPER=y
+CONFIG_CHECK_SIGNATURE=y
+CONFIG_CPU_RMAP=y
+CONFIG_DQL=y
+CONFIG_GLOB=y
+# CONFIG_GLOB_SELFTEST is not set
+CONFIG_NLATTR=y
+CONFIG_CLZ_TAB=y
+CONFIG_IRQ_POLL=y
+CONFIG_MPILIB=y
+CONFIG_DIMLIB=y
+CONFIG_LIBFDT=y
+CONFIG_OID_REGISTRY=y
+CONFIG_UCS2_STRING=y
+CONFIG_HAVE_GENERIC_VDSO=y
+CONFIG_GENERIC_GETTIMEOFDAY=y
+CONFIG_GENERIC_VDSO_TIME_NS=y
+CONFIG_GENERIC_VDSO_OVERFLOW_PROTECT=y
+CONFIG_VDSO_GETRANDOM=y
+CONFIG_FONT_SUPPORT=y
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_SG_POOL=y
+CONFIG_ARCH_HAS_PMEM_API=y
+CONFIG_MEMREGION=y
+CONFIG_ARCH_HAS_CPU_CACHE_INVALIDATE_MEMREGION=y
+CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE=y
+CONFIG_ARCH_HAS_COPY_MC=y
+CONFIG_ARCH_STACKWALK=y
+CONFIG_STACKDEPOT=y
+CONFIG_STACKDEPOT_MAX_FRAMES=64
+CONFIG_SBITMAP=y
+# CONFIG_LWQ_TEST is not set
+# end of Library routines
+
+CONFIG_PLDMFW=y
+CONFIG_ASN1_ENCODER=y
+CONFIG_POLYNOMIAL=m
+CONFIG_FIRMWARE_TABLE=y
+CONFIG_UNION_FIND=y
+
+#
+# Kernel hacking
+#
+
+#
+# printk and dmesg options
+#
+CONFIG_PRINTK_TIME=y
+# CONFIG_PRINTK_CALLER is not set
+# CONFIG_STACKTRACE_BUILD_ID is not set
+CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7
+CONFIG_CONSOLE_LOGLEVEL_QUIET=4
+CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4
+CONFIG_BOOT_PRINTK_DELAY=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_DYNAMIC_DEBUG_CORE=y
+CONFIG_SYMBOLIC_ERRNAME=y
+CONFIG_DEBUG_BUGVERBOSE=y
+# end of printk and dmesg options
+
+CONFIG_DEBUG_KERNEL=y
+CONFIG_DEBUG_MISC=y
+
+#
+# Compile-time checks and compiler options
+#
+CONFIG_AS_HAS_NON_CONST_ULEB128=y
+CONFIG_DEBUG_INFO_NONE=y
+# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set
+# CONFIG_DEBUG_INFO_DWARF4 is not set
+# CONFIG_DEBUG_INFO_DWARF5 is not set
+CONFIG_FRAME_WARN=1024
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_READABLE_ASM is not set
+# CONFIG_HEADERS_INSTALL is not set
+# CONFIG_DEBUG_SECTION_MISMATCH is not set
+CONFIG_SECTION_MISMATCH_WARN_ONLY=y
+# CONFIG_DEBUG_FORCE_FUNCTION_ALIGN_64B is not set
+CONFIG_OBJTOOL=y
+# CONFIG_VMLINUX_MAP is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# end of Compile-time checks and compiler options
+
+#
+# Generic Kernel Debugging Instruments
+#
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1
+CONFIG_MAGIC_SYSRQ_SERIAL=y
+CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
+CONFIG_DEBUG_FS=y
+CONFIG_DEBUG_FS_ALLOW_ALL=y
+# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set
+# CONFIG_DEBUG_FS_ALLOW_NONE is not set
+CONFIG_HAVE_ARCH_KGDB=y
+CONFIG_KGDB=y
+CONFIG_KGDB_HONOUR_BLOCKLIST=y
+CONFIG_KGDB_SERIAL_CONSOLE=y
+# CONFIG_KGDB_TESTS is not set
+CONFIG_KGDB_LOW_LEVEL_TRAP=y
+CONFIG_KGDB_KDB=y
+CONFIG_KDB_DEFAULT_ENABLE=0x1
+CONFIG_KDB_KEYBOARD=y
+CONFIG_KDB_CONTINUE_CATASTROPHIC=0
+CONFIG_ARCH_HAS_EARLY_DEBUG=y
+CONFIG_ARCH_HAS_UBSAN=y
+# CONFIG_UBSAN is not set
+CONFIG_HAVE_ARCH_KCSAN=y
+CONFIG_HAVE_KCSAN_COMPILER=y
+# CONFIG_KCSAN is not set
+# end of Generic Kernel Debugging Instruments
+
+#
+# Networking Debugging
+#
+# CONFIG_NET_DEV_REFCNT_TRACKER is not set
+# CONFIG_NET_NS_REFCNT_TRACKER is not set
+# CONFIG_DEBUG_NET is not set
+# CONFIG_DEBUG_NET_SMALL_RTNL is not set
+# end of Networking Debugging
+
+#
+# Memory Debugging
+#
+# CONFIG_PAGE_EXTENSION is not set
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_SLUB_DEBUG=y
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_PAGE_OWNER is not set
+# CONFIG_PAGE_TABLE_CHECK is not set
+# CONFIG_PAGE_POISONING is not set
+# CONFIG_DEBUG_PAGE_REF is not set
+# CONFIG_DEBUG_RODATA_TEST is not set
+CONFIG_ARCH_HAS_DEBUG_WX=y
+# CONFIG_DEBUG_WX is not set
+CONFIG_GENERIC_PTDUMP=y
+# CONFIG_PTDUMP_DEBUGFS is not set
+CONFIG_HAVE_DEBUG_KMEMLEAK=y
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_PER_VMA_LOCK_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_SHRINKER_DEBUG is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_SCHED_STACK_END_CHECK=y
+CONFIG_ARCH_HAS_DEBUG_VM_PGTABLE=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_VM_PGTABLE is not set
+CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
+# CONFIG_DEBUG_VIRTUAL is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_PER_CPU_MAPS is not set
+CONFIG_ARCH_SUPPORTS_KMAP_LOCAL_FORCE_MAP=y
+# CONFIG_DEBUG_KMAP_LOCAL_FORCE_MAP is not set
+# CONFIG_MEM_ALLOC_PROFILING is not set
+CONFIG_HAVE_ARCH_KASAN=y
+CONFIG_HAVE_ARCH_KASAN_VMALLOC=y
+CONFIG_CC_HAS_KASAN_GENERIC=y
+CONFIG_CC_HAS_KASAN_SW_TAGS=y
+CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y
+# CONFIG_KASAN is not set
+CONFIG_HAVE_ARCH_KFENCE=y
+# CONFIG_KFENCE is not set
+CONFIG_HAVE_ARCH_KMSAN=y
+# end of Memory Debugging
+
+# CONFIG_DEBUG_SHIRQ is not set
+
+#
+# Debug Oops, Lockups and Hangs
+#
+# CONFIG_PANIC_ON_OOPS is not set
+CONFIG_PANIC_ON_OOPS_VALUE=0
+CONFIG_PANIC_TIMEOUT=0
+# CONFIG_SOFTLOCKUP_DETECTOR is not set
+CONFIG_HAVE_HARDLOCKUP_DETECTOR_BUDDY=y
+# CONFIG_HARDLOCKUP_DETECTOR is not set
+CONFIG_HARDLOCKUP_CHECK_TIMESTAMP=y
+# CONFIG_DETECT_HUNG_TASK is not set
+# CONFIG_WQ_WATCHDOG is not set
+# CONFIG_WQ_CPU_INTENSIVE_REPORT is not set
+# CONFIG_TEST_LOCKUP is not set
+# end of Debug Oops, Lockups and Hangs
+
+#
+# Scheduler Debugging
+#
+CONFIG_SCHED_DEBUG=y
+CONFIG_SCHED_INFO=y
+CONFIG_SCHEDSTATS=y
+# end of Scheduler Debugging
+
+# CONFIG_DEBUG_PREEMPT is not set
+
+#
+# Lock Debugging (spinlocks, mutexes, etc...)
+#
+CONFIG_LOCK_DEBUGGING_SUPPORT=y
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# 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_RWSEMS is not set
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_DEBUG_ATOMIC_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+CONFIG_LOCK_TORTURE_TEST=m
+# CONFIG_WW_MUTEX_SELFTEST is not set
+# CONFIG_SCF_TORTURE_TEST is not set
+# CONFIG_CSD_LOCK_WAIT_DEBUG is not set
+# end of Lock Debugging (spinlocks, mutexes, etc...)
+
+# CONFIG_NMI_CHECK_CPU is not set
+# CONFIG_DEBUG_IRQFLAGS is not set
+CONFIG_STACKTRACE=y
+# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set
+# CONFIG_DEBUG_KOBJECT is not set
+
+#
+# Debug kernel data structures
+#
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_PLIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_MAPLE_TREE is not set
+# end of Debug kernel data structures
+
+#
+# RCU Debugging
+#
+CONFIG_TORTURE_TEST=m
+# CONFIG_RCU_SCALE_TEST is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_REF_SCALE_TEST is not set
+CONFIG_RCU_CPU_STALL_TIMEOUT=60
+CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0
+# CONFIG_RCU_CPU_STALL_CPUTIME is not set
+# CONFIG_RCU_CPU_STALL_NOTIFIER is not set
+CONFIG_RCU_TRACE=y
+# CONFIG_RCU_EQS_DEBUG is not set
+# end of RCU Debugging
+
+# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set
+# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_DEBUG_CGROUP_REF is not set
+CONFIG_USER_STACKTRACE_SUPPORT=y
+CONFIG_NOP_TRACER=y
+CONFIG_HAVE_RETHOOK=y
+CONFIG_RETHOOK=y
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_FREGS=y
+CONFIG_HAVE_FTRACE_GRAPH_FUNC=y
+CONFIG_HAVE_DYNAMIC_FTRACE=y
+CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y
+CONFIG_HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
+CONFIG_HAVE_DYNAMIC_FTRACE_WITH_ARGS=y
+CONFIG_HAVE_FTRACE_REGS_HAVING_PT_REGS=y
+CONFIG_HAVE_DYNAMIC_FTRACE_NO_PATCHABLE=y
+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
+CONFIG_HAVE_SYSCALL_TRACEPOINTS=y
+CONFIG_HAVE_FENTRY=y
+CONFIG_HAVE_OBJTOOL_MCOUNT=y
+CONFIG_HAVE_OBJTOOL_NOP_MCOUNT=y
+CONFIG_HAVE_C_RECORDMCOUNT=y
+CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y
+CONFIG_BUILDTIME_MCOUNT_SORT=y
+CONFIG_TRACER_MAX_TRACE=y
+CONFIG_TRACE_CLOCK=y
+CONFIG_RING_BUFFER=y
+CONFIG_EVENT_TRACING=y
+CONFIG_CONTEXT_SWITCH_TRACER=y
+CONFIG_TRACING=y
+CONFIG_GENERIC_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_BOOTTIME_TRACING is not set
+CONFIG_FUNCTION_TRACER=y
+CONFIG_FUNCTION_GRAPH_TRACER=y
+# CONFIG_FUNCTION_GRAPH_RETVAL is not set
+# CONFIG_FUNCTION_GRAPH_RETADDR is not set
+CONFIG_DYNAMIC_FTRACE=y
+CONFIG_DYNAMIC_FTRACE_WITH_REGS=y
+CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS=y
+CONFIG_DYNAMIC_FTRACE_WITH_ARGS=y
+# CONFIG_FPROBE is not set
+CONFIG_FUNCTION_PROFILER=y
+CONFIG_STACK_TRACER=y
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_PREEMPT_TRACER is not set
+CONFIG_SCHED_TRACER=y
+# CONFIG_HWLAT_TRACER is not set
+# CONFIG_OSNOISE_TRACER is not set
+# CONFIG_TIMERLAT_TRACER is not set
+CONFIG_MMIOTRACE=y
+CONFIG_FTRACE_SYSCALLS=y
+CONFIG_TRACER_SNAPSHOT=y
+# CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_KPROBE_EVENTS=y
+# CONFIG_KPROBE_EVENTS_ON_NOTRACE is not set
+CONFIG_UPROBE_EVENTS=y
+CONFIG_DYNAMIC_EVENTS=y
+CONFIG_PROBE_EVENTS=y
+CONFIG_FTRACE_MCOUNT_RECORD=y
+CONFIG_FTRACE_MCOUNT_USE_CC=y
+# CONFIG_SYNTH_EVENTS is not set
+# CONFIG_USER_EVENTS is not set
+# CONFIG_HIST_TRIGGERS is not set
+# CONFIG_TRACE_EVENT_INJECT is not set
+# CONFIG_TRACEPOINT_BENCHMARK is not set
+# CONFIG_RING_BUFFER_BENCHMARK is not set
+# CONFIG_TRACE_EVAL_MAP_FILE is not set
+# CONFIG_FTRACE_RECORD_RECURSION is not set
+# CONFIG_FTRACE_VALIDATE_RCU_IS_WATCHING is not set
+# CONFIG_FTRACE_STARTUP_TEST is not set
+# CONFIG_FTRACE_SORT_STARTUP_TEST is not set
+# CONFIG_RING_BUFFER_STARTUP_TEST is not set
+# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set
+# CONFIG_MMIOTRACE_TEST is not set
+# CONFIG_PREEMPTIRQ_DELAY_TEST is not set
+# CONFIG_KPROBE_EVENT_GEN_TEST is not set
+# CONFIG_RV is not set
+# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_SAMPLE_FTRACE_DIRECT=y
+CONFIG_HAVE_SAMPLE_FTRACE_DIRECT_MULTI=y
+CONFIG_ARCH_HAS_DEVMEM_IS_ALLOWED=y
+CONFIG_STRICT_DEVMEM=y
+# CONFIG_IO_STRICT_DEVMEM is not set
+
+#
+# x86 Debugging
+#
+CONFIG_EARLY_PRINTK_USB=y
+# CONFIG_X86_VERBOSE_BOOTUP is not set
+CONFIG_EARLY_PRINTK=y
+CONFIG_EARLY_PRINTK_DBGP=y
+# CONFIG_EARLY_PRINTK_USB_XDBC is not set
+# CONFIG_EFI_PGT_DUMP is not set
+# CONFIG_DEBUG_TLBFLUSH is not set
+# CONFIG_IOMMU_DEBUG is not set
+CONFIG_HAVE_MMIOTRACE_SUPPORT=y
+# CONFIG_X86_DECODER_SELFTEST is not set
+# CONFIG_IO_DELAY_0X80 is not set
+CONFIG_IO_DELAY_0XED=y
+# CONFIG_IO_DELAY_UDELAY is not set
+# CONFIG_IO_DELAY_NONE is not set
+# CONFIG_DEBUG_BOOT_PARAMS is not set
+# CONFIG_CPA_DEBUG is not set
+# CONFIG_DEBUG_ENTRY is not set
+# CONFIG_DEBUG_NMI_SELFTEST is not set
+CONFIG_X86_DEBUG_FPU=y
+CONFIG_PUNIT_ATOM_DEBUG=m
+CONFIG_UNWINDER_ORC=y
+# CONFIG_UNWINDER_FRAME_POINTER is not set
+# end of x86 Debugging
+
+#
+# Kernel Testing and Coverage
+#
+# CONFIG_KUNIT is not set
+CONFIG_NOTIFIER_ERROR_INJECTION=m
+CONFIG_PM_NOTIFIER_ERROR_INJECT=m
+# CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT is not set
+# CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set
+# CONFIG_FUNCTION_ERROR_INJECTION is not set
+# CONFIG_FAULT_INJECTION is not set
+CONFIG_ARCH_HAS_KCOV=y
+CONFIG_CC_HAS_SANCOV_TRACE_PC=y
+# CONFIG_KCOV is not set
+CONFIG_RUNTIME_TESTING_MENU=y
+# CONFIG_TEST_DHRY is not set
+# CONFIG_LKDTM is not set
+# CONFIG_TEST_MIN_HEAP is not set
+# CONFIG_TEST_DIV64 is not set
+# CONFIG_TEST_MULDIV64 is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_TEST_REF_TRACKER is not set
+CONFIG_RBTREE_TEST=m
+# CONFIG_REED_SOLOMON_TEST is not set
+CONFIG_INTERVAL_TREE_TEST=m
+CONFIG_PERCPU_TEST=m
+# CONFIG_ATOMIC64_SELFTEST is not set
+CONFIG_TEST_HEXDUMP=m
+CONFIG_TEST_KSTRTOX=m
+CONFIG_TEST_PRINTF=m
+# CONFIG_TEST_SCANF is not set
+# CONFIG_TEST_BITMAP is not set
+# CONFIG_TEST_UUID is not set
+# CONFIG_TEST_XARRAY is not set
+# CONFIG_TEST_MAPLE_TREE is not set
+# CONFIG_TEST_RHASHTABLE is not set
+# CONFIG_TEST_IDA is not set
+CONFIG_TEST_LKM=m
+# CONFIG_TEST_BITOPS is not set
+# CONFIG_TEST_VMALLOC is not set
+CONFIG_TEST_BPF=m
+# CONFIG_TEST_BLACKHOLE_DEV is not set
+# CONFIG_FIND_BIT_BENCHMARK is not set
+CONFIG_TEST_FIRMWARE=m
+# CONFIG_TEST_SYSCTL is not set
+CONFIG_TEST_UDELAY=m
+CONFIG_TEST_STATIC_KEYS=m
+# CONFIG_TEST_DYNAMIC_DEBUG is not set
+# CONFIG_TEST_KMOD is not set
+# CONFIG_TEST_KALLSYMS is not set
+# CONFIG_TEST_MEMCAT_P is not set
+# CONFIG_TEST_MEMINIT is not set
+# CONFIG_TEST_FREE_PAGES is not set
+# CONFIG_TEST_FPU is not set
+# CONFIG_TEST_CLOCKSOURCE_WATCHDOG is not set
+# CONFIG_TEST_OBJPOOL is not set
+CONFIG_ARCH_USE_MEMTEST=y
+CONFIG_MEMTEST=y
+# end of Kernel Testing and Coverage
+
+#
+# Rust hacking
+#
+# end of Rust hacking
+# end of Kernel hacking
diff --git a/board/recalbox/x86/kernel-x86_64-4.14-defconfig.config b/board/recalbox/x86/kernel-x86_64-4.14-defconfig.config
deleted file mode 100644
index 412f953cd06a1d4504db1736b6682b821a901758..0000000000000000000000000000000000000000
--- a/board/recalbox/x86/kernel-x86_64-4.14-defconfig.config
+++ /dev/null
@@ -1,4145 +0,0 @@
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-CONFIG_TASK_XACCT=y
-CONFIG_TASK_IO_ACCOUNTING=y
-CONFIG_LOG_BUF_SHIFT=18
-CONFIG_NUMA_BALANCING=y
-CONFIG_MEMCG=y
-CONFIG_MEMCG_SWAP=y
-# CONFIG_MEMCG_SWAP_ENABLED is not set
-CONFIG_BLK_CGROUP=y
-CONFIG_CFS_BANDWIDTH=y
-CONFIG_CGROUP_PIDS=y
-CONFIG_CGROUP_FREEZER=y
-CONFIG_CGROUP_HUGETLB=y
-CONFIG_CPUSETS=y
-CONFIG_CGROUP_DEVICE=y
-CONFIG_CGROUP_CPUACCT=y
-CONFIG_CGROUP_PERF=y
-CONFIG_NAMESPACES=y
-CONFIG_USER_NS=y
-CONFIG_SCHED_AUTOGROUP=y
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_EXPERT=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_CHECKPOINT_RESTORE=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_BPF_SYSCALL=y
-CONFIG_USERFAULTFD=y
-# CONFIG_COMPAT_BRK is not set
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=m
-CONFIG_KPROBES=y
-CONFIG_JUMP_LABEL=y
-CONFIG_CC_STACKPROTECTOR_REGULAR=y
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SRCVERSION_ALL=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_SHA512=y
-CONFIG_BLK_DEV_THROTTLING=y
-CONFIG_PARTITION_ADVANCED=y
-CONFIG_AIX_PARTITION=y
-CONFIG_OSF_PARTITION=y
-CONFIG_AMIGA_PARTITION=y
-CONFIG_ATARI_PARTITION=y
-CONFIG_MAC_PARTITION=y
-CONFIG_BSD_DISKLABEL=y
-CONFIG_MINIX_SUBPARTITION=y
-CONFIG_SOLARIS_X86_PARTITION=y
-CONFIG_UNIXWARE_DISKLABEL=y
-CONFIG_LDM_PARTITION=y
-CONFIG_SGI_PARTITION=y
-CONFIG_ULTRIX_PARTITION=y
-CONFIG_SUN_PARTITION=y
-CONFIG_KARMA_PARTITION=y
-CONFIG_SYSV68_PARTITION=y
-CONFIG_CMDLINE_PARTITION=y
-CONFIG_CFQ_GROUP_IOSCHED=y
-CONFIG_DEFAULT_DEADLINE=y
-CONFIG_SMP=y
-CONFIG_X86_X2APIC=y
-CONFIG_X86_NUMACHIP=y
-CONFIG_X86_INTEL_LPSS=y
-CONFIG_X86_AMD_PLATFORM_DEVICE=y
-CONFIG_IOSF_MBI_DEBUG=y
-CONFIG_HYPERVISOR_GUEST=y
-CONFIG_PARAVIRT_SPINLOCKS=y
-CONFIG_XEN=y
-CONFIG_XEN_PVH=y
-CONFIG_KVM_DEBUG_FS=y
-CONFIG_PROCESSOR_SELECT=y
-CONFIG_GART_IOMMU=y
-CONFIG_CALGARY_IOMMU=y
-CONFIG_NR_CPUS=256
-CONFIG_SCHED_SMT=y
-CONFIG_PREEMPT_VOLUNTARY=y
-CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
-CONFIG_X86_MCE_INJECT=m
-CONFIG_I8K=m
-CONFIG_MICROCODE_AMD=y
-CONFIG_X86_MSR=m
-CONFIG_X86_CPUID=m
-CONFIG_NUMA=y
-CONFIG_ARCH_MEMORY_PROBE=y
-CONFIG_MEMORY_HOTPLUG=y
-CONFIG_MEMORY_HOTREMOVE=y
-CONFIG_KSM=y
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-CONFIG_MEMORY_FAILURE=y
-CONFIG_HWPOISON_INJECT=m
-CONFIG_TRANSPARENT_HUGEPAGE=y
-CONFIG_CLEANCACHE=y
-CONFIG_FRONTSWAP=y
-CONFIG_CMA=y
-CONFIG_MEM_SOFT_DIRTY=y
-CONFIG_ZSWAP=y
-CONFIG_ZBUD=y
-CONFIG_ZSMALLOC=y
-CONFIG_PGTABLE_MAPPING=y
-CONFIG_IDLE_PAGE_TRACKING=y
-CONFIG_X86_PMEM_LEGACY=y
-CONFIG_X86_CHECK_BIOS_CORRUPTION=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
-CONFIG_X86_INTEL_MPX=y
-CONFIG_EFI=y
-CONFIG_EFI_STUB=y
-CONFIG_EFI_MIXED=y
-CONFIG_KEXEC=y
-CONFIG_KEXEC_FILE=y
-CONFIG_KEXEC_VERIFY_SIG=y
-CONFIG_KEXEC_BZIMAGE_VERIFY_SIG=y
-CONFIG_CRASH_DUMP=y
-CONFIG_KEXEC_JUMP=y
-CONFIG_PHYSICAL_ALIGN=0x1000000
-CONFIG_LIVEPATCH=y
-CONFIG_HIBERNATION=y
-CONFIG_PM_WAKELOCKS=y
-CONFIG_PM_DEBUG=y
-CONFIG_PM_ADVANCED_DEBUG=y
-CONFIG_PM_TRACE_RTC=y
-CONFIG_WQ_POWER_EFFICIENT_DEFAULT=y
-CONFIG_ACPI_EC_DEBUGFS=m
-CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_IPMI=m
-CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
-CONFIG_ACPI_PCI_SLOT=y
-CONFIG_ACPI_HOTPLUG_MEMORY=y
-CONFIG_ACPI_SBS=m
-CONFIG_ACPI_BGRT=y
-CONFIG_ACPI_NFIT=m
-CONFIG_ACPI_APEI=y
-CONFIG_ACPI_APEI_GHES=y
-CONFIG_ACPI_APEI_PCIEAER=y
-CONFIG_ACPI_APEI_MEMORY_FAILURE=y
-CONFIG_ACPI_APEI_EINJ=m
-CONFIG_ACPI_EXTLOG=m
-CONFIG_SFI=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_X86_PCC_CPUFREQ=y
-CONFIG_X86_ACPI_CPUFREQ=y
-CONFIG_X86_POWERNOW_K8=y
-CONFIG_X86_AMD_FREQ_SENSITIVITY=m
-CONFIG_X86_SPEEDSTEP_CENTRINO=y
-CONFIG_X86_P4_CLOCKMOD=m
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_INTEL_IDLE=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_HOTPLUG_PCI_PCIE=y
-CONFIG_PCIEASPM_DEBUG=y
-CONFIG_PCI_REALLOC_ENABLE_AUTO=y
-CONFIG_PCI_STUB=m
-CONFIG_XEN_PCIDEV_FRONTEND=m
-CONFIG_HOTPLUG_PCI=y
-CONFIG_HOTPLUG_PCI_ACPI=y
-CONFIG_HOTPLUG_PCI_ACPI_IBM=m
-CONFIG_HOTPLUG_PCI_CPCI=y
-CONFIG_HOTPLUG_PCI_CPCI_ZT5550=m
-CONFIG_HOTPLUG_PCI_CPCI_GENERIC=m
-CONFIG_HOTPLUG_PCI_SHPC=m
-CONFIG_PCCARD=m
-CONFIG_YENTA=m
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_RAPIDIO=y
-CONFIG_RAPIDIO_TSI721=m
-CONFIG_RAPIDIO_DMA_ENGINE=y
-CONFIG_RAPIDIO_ENUM_BASIC=m
-CONFIG_RAPIDIO_TSI57X=m
-CONFIG_RAPIDIO_CPS_XX=m
-CONFIG_RAPIDIO_TSI568=m
-CONFIG_RAPIDIO_CPS_GEN2=m
-CONFIG_BINFMT_MISC=m
-CONFIG_IA32_EMULATION=y
-CONFIG_X86_X32=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_PACKET_DIAG=m
-CONFIG_UNIX=y
-CONFIG_UNIX_DIAG=m
-CONFIG_XFRM_USER=m
-CONFIG_XFRM_STATISTICS=y
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_FIB_TRIE_STATS=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_NET_IPIP=m
-CONFIG_NET_IPGRE_DEMUX=m
-CONFIG_NET_IPGRE=m
-CONFIG_NET_IPGRE_BROADCAST=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_NET_IPVTI=m
-CONFIG_NET_FOU_IP_TUNNELS=y
-CONFIG_INET_AH=m
-CONFIG_INET_ESP=m
-CONFIG_INET_IPCOMP=m
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-CONFIG_INET_DIAG=m
-CONFIG_INET_UDP_DIAG=m
-CONFIG_TCP_CONG_ADVANCED=y
-CONFIG_TCP_CONG_HSTCP=m
-CONFIG_TCP_CONG_HYBLA=m
-CONFIG_TCP_CONG_SCALABLE=m
-CONFIG_TCP_CONG_LP=m
-CONFIG_TCP_CONG_VENO=m
-CONFIG_TCP_CONG_YEAH=m
-CONFIG_TCP_CONG_ILLINOIS=m
-CONFIG_TCP_CONG_DCTCP=m
-CONFIG_TCP_CONG_CDG=m
-CONFIG_TCP_MD5SIG=y
-CONFIG_IPV6_ROUTER_PREF=y
-CONFIG_IPV6_ROUTE_INFO=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_IPCOMP=m
-CONFIG_IPV6_MIP6=m
-CONFIG_IPV6_ILA=m
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_IPV6_VTI=m
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_SIT_6RD=y
-CONFIG_IPV6_GRE=m
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
-CONFIG_NETFILTER=y
-CONFIG_NF_CONNTRACK=m
-CONFIG_NF_CONNTRACK_SECMARK=y
-CONFIG_NF_CONNTRACK_ZONES=y
-# CONFIG_NF_CONNTRACK_PROCFS is not set
-CONFIG_NF_CONNTRACK_EVENTS=y
-CONFIG_NF_CONNTRACK_TIMEOUT=y
-CONFIG_NF_CONNTRACK_TIMESTAMP=y
-CONFIG_NF_CONNTRACK_AMANDA=m
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_SNMP=m
-CONFIG_NF_CONNTRACK_PPTP=m
-CONFIG_NF_CONNTRACK_SANE=m
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NF_CT_NETLINK_TIMEOUT=m
-CONFIG_NF_CT_NETLINK_HELPER=m
-CONFIG_NETFILTER_NETLINK_GLUE_CT=y
-CONFIG_NF_TABLES=m
-CONFIG_NF_TABLES_INET=m
-CONFIG_NF_TABLES_NETDEV=m
-CONFIG_NFT_EXTHDR=m
-CONFIG_NFT_META=m
-CONFIG_NFT_CT=m
-CONFIG_NFT_COUNTER=m
-CONFIG_NFT_LOG=m
-CONFIG_NFT_LIMIT=m
-CONFIG_NFT_MASQ=m
-CONFIG_NFT_REDIR=m
-CONFIG_NFT_NAT=m
-CONFIG_NFT_QUEUE=m
-CONFIG_NFT_REJECT=m
-CONFIG_NFT_COMPAT=m
-CONFIG_NFT_HASH=m
-CONFIG_NETFILTER_XT_SET=m
-CONFIG_NETFILTER_XT_TARGET_AUDIT=m
-CONFIG_NETFILTER_XT_TARGET_CHECKSUM=m
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
-CONFIG_NETFILTER_XT_TARGET_CT=m
-CONFIG_NETFILTER_XT_TARGET_DSCP=m
-CONFIG_NETFILTER_XT_TARGET_HMARK=m
-CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m
-CONFIG_NETFILTER_XT_TARGET_LED=m
-CONFIG_NETFILTER_XT_TARGET_LOG=m
-CONFIG_NETFILTER_XT_TARGET_MARK=m
-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
-CONFIG_NETFILTER_XT_TARGET_TEE=m
-CONFIG_NETFILTER_XT_TARGET_TPROXY=m
-CONFIG_NETFILTER_XT_TARGET_TRACE=m
-CONFIG_NETFILTER_XT_TARGET_SECMARK=m
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
-CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=m
-CONFIG_NETFILTER_XT_MATCH_BPF=m
-CONFIG_NETFILTER_XT_MATCH_CGROUP=m
-CONFIG_NETFILTER_XT_MATCH_CLUSTER=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLABEL=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_CPU=m
-CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
-CONFIG_NETFILTER_XT_MATCH_DSCP=m
-CONFIG_NETFILTER_XT_MATCH_ESP=m
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_IPCOMP=m
-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_IPVS=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
-CONFIG_NETFILTER_XT_MATCH_MAC=m
-CONFIG_NETFILTER_XT_MATCH_MARK=m
-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
-CONFIG_NETFILTER_XT_MATCH_NFACCT=m
-CONFIG_NETFILTER_XT_MATCH_OSF=m
-CONFIG_NETFILTER_XT_MATCH_OWNER=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
-CONFIG_NETFILTER_XT_MATCH_REALM=m
-CONFIG_NETFILTER_XT_MATCH_RECENT=m
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=m
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
-CONFIG_NETFILTER_XT_MATCH_TIME=m
-CONFIG_NETFILTER_XT_MATCH_U32=m
-CONFIG_IP_SET=m
-CONFIG_IP_SET_BITMAP_IP=m
-CONFIG_IP_SET_BITMAP_IPMAC=m
-CONFIG_IP_SET_BITMAP_PORT=m
-CONFIG_IP_SET_HASH_IP=m
-CONFIG_IP_SET_HASH_IPMARK=m
-CONFIG_IP_SET_HASH_IPPORT=m
-CONFIG_IP_SET_HASH_IPPORTIP=m
-CONFIG_IP_SET_HASH_IPPORTNET=m
-CONFIG_IP_SET_HASH_MAC=m
-CONFIG_IP_SET_HASH_NETPORTNET=m
-CONFIG_IP_SET_HASH_NET=m
-CONFIG_IP_SET_HASH_NETNET=m
-CONFIG_IP_SET_HASH_NETPORT=m
-CONFIG_IP_SET_HASH_NETIFACE=m
-CONFIG_IP_SET_LIST_SET=m
-CONFIG_IP_VS=m
-CONFIG_IP_VS_IPV6=y
-CONFIG_IP_VS_PROTO_TCP=y
-CONFIG_IP_VS_PROTO_UDP=y
-CONFIG_IP_VS_PROTO_ESP=y
-CONFIG_IP_VS_PROTO_AH=y
-CONFIG_IP_VS_PROTO_SCTP=y
-CONFIG_IP_VS_RR=m
-CONFIG_IP_VS_WRR=m
-CONFIG_IP_VS_LC=m
-CONFIG_IP_VS_WLC=m
-CONFIG_IP_VS_FO=m
-CONFIG_IP_VS_OVF=m
-CONFIG_IP_VS_LBLC=m
-CONFIG_IP_VS_LBLCR=m
-CONFIG_IP_VS_DH=m
-CONFIG_IP_VS_SH=m
-CONFIG_IP_VS_SED=m
-CONFIG_IP_VS_NQ=m
-CONFIG_IP_VS_FTP=m
-CONFIG_IP_VS_PE_SIP=m
-CONFIG_NF_CONNTRACK_IPV4=m
-CONFIG_NFT_CHAIN_ROUTE_IPV4=m
-CONFIG_NFT_DUP_IPV4=m
-CONFIG_NF_TABLES_ARP=m
-CONFIG_NF_LOG_ARP=m
-CONFIG_NFT_CHAIN_NAT_IPV4=m
-CONFIG_NFT_MASQ_IPV4=m
-CONFIG_NFT_REDIR_IPV4=m
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_AH=m
-CONFIG_IP_NF_MATCH_ECN=m
-CONFIG_IP_NF_MATCH_RPFILTER=m
-CONFIG_IP_NF_MATCH_TTL=m
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=m
-CONFIG_IP_NF_TARGET_SYNPROXY=m
-CONFIG_IP_NF_NAT=m
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_MANGLE=m
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_TARGET_ECN=m
-CONFIG_IP_NF_TARGET_TTL=m
-CONFIG_IP_NF_RAW=m
-CONFIG_IP_NF_SECURITY=m
-CONFIG_IP_NF_ARPTABLES=m
-CONFIG_IP_NF_ARPFILTER=m
-CONFIG_IP_NF_ARP_MANGLE=m
-CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_NFT_CHAIN_ROUTE_IPV6=m
-CONFIG_NFT_DUP_IPV6=m
-CONFIG_NFT_CHAIN_NAT_IPV6=m
-CONFIG_NFT_MASQ_IPV6=m
-CONFIG_NFT_REDIR_IPV6=m
-CONFIG_IP6_NF_MATCH_AH=m
-CONFIG_IP6_NF_MATCH_EUI64=m
-CONFIG_IP6_NF_MATCH_FRAG=m
-CONFIG_IP6_NF_MATCH_OPTS=m
-CONFIG_IP6_NF_MATCH_HL=m
-CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-CONFIG_IP6_NF_MATCH_MH=m
-CONFIG_IP6_NF_MATCH_RPFILTER=m
-CONFIG_IP6_NF_MATCH_RT=m
-CONFIG_IP6_NF_TARGET_HL=m
-CONFIG_IP6_NF_FILTER=m
-CONFIG_IP6_NF_TARGET_REJECT=m
-CONFIG_IP6_NF_TARGET_SYNPROXY=m
-CONFIG_IP6_NF_MANGLE=m
-CONFIG_IP6_NF_RAW=m
-CONFIG_IP6_NF_SECURITY=m
-CONFIG_IP6_NF_NAT=m
-CONFIG_IP6_NF_TARGET_MASQUERADE=m
-CONFIG_IP6_NF_TARGET_NPT=m
-CONFIG_DECNET_NF_GRABULATOR=m
-CONFIG_NF_TABLES_BRIDGE=m
-CONFIG_NFT_BRIDGE_META=m
-CONFIG_NFT_BRIDGE_REJECT=m
-CONFIG_NF_LOG_BRIDGE=m
-CONFIG_BRIDGE_NF_EBTABLES=m
-CONFIG_BRIDGE_EBT_BROUTE=m
-CONFIG_BRIDGE_EBT_T_FILTER=m
-CONFIG_BRIDGE_EBT_T_NAT=m
-CONFIG_BRIDGE_EBT_802_3=m
-CONFIG_BRIDGE_EBT_AMONG=m
-CONFIG_BRIDGE_EBT_ARP=m
-CONFIG_BRIDGE_EBT_IP=m
-CONFIG_BRIDGE_EBT_IP6=m
-CONFIG_BRIDGE_EBT_LIMIT=m
-CONFIG_BRIDGE_EBT_MARK=m
-CONFIG_BRIDGE_EBT_PKTTYPE=m
-CONFIG_BRIDGE_EBT_STP=m
-CONFIG_BRIDGE_EBT_VLAN=m
-CONFIG_BRIDGE_EBT_ARPREPLY=m
-CONFIG_BRIDGE_EBT_DNAT=m
-CONFIG_BRIDGE_EBT_MARK_T=m
-CONFIG_BRIDGE_EBT_REDIRECT=m
-CONFIG_BRIDGE_EBT_SNAT=m
-CONFIG_BRIDGE_EBT_LOG=m
-CONFIG_BRIDGE_EBT_NFLOG=m
-CONFIG_IP_DCCP=m
-# CONFIG_IP_DCCP_CCID3 is not set
-CONFIG_NET_DCCPPROBE=m
-CONFIG_NET_SCTPPROBE=m
-CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
-CONFIG_SCTP_COOKIE_HMAC_MD5=y
-CONFIG_RDS=m
-CONFIG_RDS_RDMA=m
-CONFIG_RDS_TCP=m
-CONFIG_TIPC=m
-CONFIG_TIPC_MEDIA_IB=y
-CONFIG_ATM=m
-CONFIG_ATM_CLIP=m
-CONFIG_ATM_LANE=m
-CONFIG_ATM_MPOA=m
-CONFIG_ATM_BR2684=m
-CONFIG_L2TP=m
-CONFIG_L2TP_DEBUGFS=m
-CONFIG_L2TP_V3=y
-CONFIG_L2TP_IP=m
-CONFIG_L2TP_ETH=m
-CONFIG_BRIDGE=m
-CONFIG_BRIDGE_VLAN_FILTERING=y
-CONFIG_VLAN_8021Q=m
-CONFIG_VLAN_8021Q_GVRP=y
-CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_DECNET=m
-CONFIG_LLC2=m
-CONFIG_IPX=m
-CONFIG_ATALK=m
-CONFIG_DEV_APPLETALK=m
-CONFIG_IPDDP=m
-CONFIG_IPDDP_ENCAP=y
-CONFIG_X25=m
-CONFIG_LAPB=m
-CONFIG_PHONET=m
-CONFIG_6LOWPAN=m
-CONFIG_IEEE802154=m
-CONFIG_IEEE802154_NL802154_EXPERIMENTAL=y
-CONFIG_IEEE802154_6LOWPAN=m
-CONFIG_MAC802154=m
-CONFIG_NET_SCHED=y
-CONFIG_NET_SCH_CBQ=m
-CONFIG_NET_SCH_HTB=m
-CONFIG_NET_SCH_HFSC=m
-CONFIG_NET_SCH_ATM=m
-CONFIG_NET_SCH_PRIO=m
-CONFIG_NET_SCH_MULTIQ=m
-CONFIG_NET_SCH_RED=m
-CONFIG_NET_SCH_SFB=m
-CONFIG_NET_SCH_SFQ=m
-CONFIG_NET_SCH_TEQL=m
-CONFIG_NET_SCH_TBF=m
-CONFIG_NET_SCH_GRED=m
-CONFIG_NET_SCH_DSMARK=m
-CONFIG_NET_SCH_NETEM=m
-CONFIG_NET_SCH_DRR=m
-CONFIG_NET_SCH_MQPRIO=m
-CONFIG_NET_SCH_CHOKE=m
-CONFIG_NET_SCH_QFQ=m
-CONFIG_NET_SCH_CODEL=m
-CONFIG_NET_SCH_FQ_CODEL=m
-CONFIG_NET_SCH_FQ=m
-CONFIG_NET_SCH_HHF=m
-CONFIG_NET_SCH_PIE=m
-CONFIG_NET_SCH_INGRESS=m
-CONFIG_NET_SCH_PLUG=m
-CONFIG_NET_CLS_BASIC=m
-CONFIG_NET_CLS_TCINDEX=m
-CONFIG_NET_CLS_ROUTE4=m
-CONFIG_NET_CLS_FW=m
-CONFIG_NET_CLS_U32=m
-CONFIG_CLS_U32_MARK=y
-CONFIG_NET_CLS_RSVP=m
-CONFIG_NET_CLS_RSVP6=m
-CONFIG_NET_CLS_FLOW=m
-CONFIG_NET_CLS_CGROUP=m
-CONFIG_NET_CLS_BPF=m
-CONFIG_NET_CLS_FLOWER=m
-CONFIG_NET_EMATCH=y
-CONFIG_NET_EMATCH_CMP=m
-CONFIG_NET_EMATCH_NBYTE=m
-CONFIG_NET_EMATCH_U32=m
-CONFIG_NET_EMATCH_META=m
-CONFIG_NET_EMATCH_TEXT=m
-CONFIG_NET_EMATCH_CANID=m
-CONFIG_NET_EMATCH_IPSET=m
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_ACT_POLICE=m
-CONFIG_NET_ACT_GACT=m
-CONFIG_GACT_PROB=y
-CONFIG_NET_ACT_MIRRED=m
-CONFIG_NET_ACT_IPT=m
-CONFIG_NET_ACT_NAT=m
-CONFIG_NET_ACT_PEDIT=m
-CONFIG_NET_ACT_SIMP=m
-CONFIG_NET_ACT_SKBEDIT=m
-CONFIG_NET_ACT_CSUM=m
-CONFIG_NET_ACT_VLAN=m
-CONFIG_NET_ACT_BPF=m
-CONFIG_NET_ACT_CONNMARK=m
-CONFIG_DCB=y
-CONFIG_DNS_RESOLVER=y
-CONFIG_BATMAN_ADV=m
-CONFIG_BATMAN_ADV_DAT=y
-CONFIG_BATMAN_ADV_NC=y
-CONFIG_BATMAN_ADV_MCAST=y
-CONFIG_OPENVSWITCH=m
-CONFIG_VSOCKETS=m
-CONFIG_VMWARE_VMCI_VSOCKETS=m
-CONFIG_NETLINK_DIAG=m
-CONFIG_MPLS_ROUTING=m
-CONFIG_MPLS_IPTUNNEL=m
-CONFIG_HSR=m
-CONFIG_NET_L3_MASTER_DEV=y
-CONFIG_CGROUP_NET_PRIO=y
-CONFIG_BPF_JIT=y
-CONFIG_NET_PKTGEN=m
-CONFIG_NET_TCPPROBE=m
-CONFIG_HAMRADIO=y
-CONFIG_AX25=m
-CONFIG_NETROM=m
-CONFIG_ROSE=m
-CONFIG_MKISS=m
-CONFIG_6PACK=m
-CONFIG_BPQETHER=m
-CONFIG_BAYCOM_SER_FDX=m
-CONFIG_BAYCOM_SER_HDX=m
-CONFIG_BAYCOM_PAR=m
-CONFIG_YAM=m
-CONFIG_CAN=m
-CONFIG_CAN_VCAN=m
-CONFIG_CAN_SLCAN=m
-CONFIG_CAN_LEDS=y
-CONFIG_CAN_JANZ_ICAN3=m
-CONFIG_CAN_C_CAN=m
-CONFIG_CAN_C_CAN_PLATFORM=m
-CONFIG_CAN_C_CAN_PCI=m
-CONFIG_CAN_CC770=m
-CONFIG_CAN_CC770_ISA=m
-CONFIG_CAN_CC770_PLATFORM=m
-CONFIG_CAN_M_CAN=m
-CONFIG_CAN_SJA1000=m
-CONFIG_CAN_SJA1000_ISA=m
-CONFIG_CAN_SJA1000_PLATFORM=m
-CONFIG_CAN_EMS_PCMCIA=m
-CONFIG_CAN_EMS_PCI=m
-CONFIG_CAN_PEAK_PCMCIA=m
-CONFIG_CAN_PEAK_PCI=m
-CONFIG_CAN_KVASER_PCI=m
-CONFIG_CAN_PLX_PCI=m
-CONFIG_CAN_SOFTING=m
-CONFIG_CAN_SOFTING_CS=m
-CONFIG_CAN_MCP251X=m
-CONFIG_CAN_EMS_USB=m
-CONFIG_CAN_ESD_USB2=m
-CONFIG_CAN_GS_USB=m
-CONFIG_CAN_KVASER_USB=m
-CONFIG_CAN_PEAK_USB=m
-CONFIG_CAN_8DEV_USB=m
-CONFIG_BT=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_CMTP=m
-CONFIG_BT_HIDP=m
-CONFIG_BT_6LOWPAN=m
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTSDIO=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_ATH3K=y
-CONFIG_BT_HCIUART_3WIRE=y
-CONFIG_BT_HCIUART_INTEL=y
-CONFIG_BT_HCIUART_QCA=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIBTUART=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_BT_MRVL=m
-CONFIG_BT_MRVL_SDIO=m
-CONFIG_BT_ATH3K=m
-CONFIG_BT_WILINK=m
-CONFIG_CFG80211=m
-CONFIG_MAC80211=m
-CONFIG_WIMAX=m
-CONFIG_RFKILL=y
-CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_GPIO=m
-CONFIG_NET_9P=m
-CONFIG_NET_9P_VIRTIO=m
-CONFIG_NET_9P_RDMA=m
-CONFIG_CAIF=m
-CONFIG_CAIF_USB=m
-CONFIG_CEPH_LIB_USE_DNS_RESOLVER=y
-CONFIG_NFC=m
-CONFIG_NFC_DIGITAL=m
-CONFIG_NFC_NCI=m
-CONFIG_NFC_NCI_SPI=m
-CONFIG_NFC_NCI_UART=m
-CONFIG_NFC_HCI=m
-CONFIG_NFC_SHDLC=y
-CONFIG_NFC_TRF7970A=m
-CONFIG_NFC_MEI_PHY=m
-CONFIG_NFC_SIM=m
-CONFIG_NFC_PORT100=m
-CONFIG_NFC_FDP=m
-CONFIG_NFC_FDP_I2C=m
-CONFIG_NFC_PN544_I2C=m
-CONFIG_NFC_PN544_MEI=m
-CONFIG_NFC_MICROREAD_I2C=m
-CONFIG_NFC_MICROREAD_MEI=m
-CONFIG_NFC_MRVL_USB=m
-CONFIG_NFC_MRVL_UART=m
-CONFIG_NFC_MRVL_I2C=m
-CONFIG_NFC_MRVL_SPI=m
-CONFIG_NFC_ST21NFCA_I2C=m
-CONFIG_NFC_ST_NCI_I2C=m
-CONFIG_NFC_ST_NCI_SPI=m
-CONFIG_NFC_NXP_NCI=m
-CONFIG_NFC_NXP_NCI_I2C=m
-CONFIG_NFC_S3FWRN5_I2C=m
-CONFIG_DEVTMPFS=y
-CONFIG_DEVTMPFS_MOUNT=y
-# CONFIG_STANDALONE is not set
-CONFIG_CONNECTOR=y
-CONFIG_MTD=m
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_CMDLINE_PARTS=m
-CONFIG_MTD_AR7_PARTS=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-CONFIG_SSFDC=m
-CONFIG_SM_FTL=m
-CONFIG_MTD_OOPS=m
-CONFIG_MTD_SWAP=m
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=m
-CONFIG_MTD_SBC_GXX=m
-CONFIG_MTD_AMD76XROM=m
-CONFIG_MTD_ICHXROM=m
-CONFIG_MTD_ESB2ROM=m
-CONFIG_MTD_CK804XROM=m
-CONFIG_MTD_SCB2_FLASH=m
-CONFIG_MTD_NETtel=m
-CONFIG_MTD_L440GX=m
-CONFIG_MTD_PCI=m
-CONFIG_MTD_PCMCIA=m
-CONFIG_MTD_GPIO_ADDR=m
-CONFIG_MTD_INTEL_VR_NOR=m
-CONFIG_MTD_PLATRAM=m
-CONFIG_MTD_LATCH_ADDR=m
-CONFIG_MTD_PMC551=m
-CONFIG_MTD_DATAFLASH=m
-CONFIG_MTD_DATAFLASH_OTP=y
-CONFIG_MTD_M25P80=m
-CONFIG_MTD_SST25L=m
-CONFIG_MTD_SLRAM=m
-CONFIG_MTD_PHRAM=m
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTD_BLOCK2MTD=m
-CONFIG_MTD_DOCG3=m
-CONFIG_MTD_NAND=m
-CONFIG_MTD_NAND_ECC_BCH=y
-CONFIG_MTD_NAND_DENALI_PCI=m
-CONFIG_MTD_NAND_GPIO=m
-CONFIG_MTD_NAND_RICOH=m
-CONFIG_MTD_NAND_DISKONCHIP=m
-CONFIG_MTD_NAND_DOCG4=m
-CONFIG_MTD_NAND_CAFE=m
-CONFIG_MTD_NAND_NANDSIM=m
-CONFIG_MTD_NAND_PLATFORM=m
-CONFIG_MTD_ONENAND=m
-CONFIG_MTD_ONENAND_VERIFY_WRITE=y
-CONFIG_MTD_ONENAND_GENERIC=m
-CONFIG_MTD_ONENAND_2X_PROGRAM=y
-CONFIG_MTD_LPDDR=m
-CONFIG_MTD_SPI_NOR=m
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_FASTMAP=y
-CONFIG_MTD_UBI_GLUEBI=m
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_SERIAL=m
-CONFIG_PARPORT_PC_FIFO=y
-CONFIG_PARPORT_PC_PCMCIA=m
-CONFIG_PARPORT_AX88796=m
-CONFIG_PARPORT_1284=y
-# CONFIG_PNP_DEBUG_MESSAGES is not set
-CONFIG_BLK_DEV_NULL_BLK=m
-CONFIG_BLK_DEV_FD=m
-CONFIG_PARIDE=m
-CONFIG_PARIDE_PD=m
-CONFIG_PARIDE_PCD=m
-CONFIG_PARIDE_PF=m
-CONFIG_PARIDE_PT=m
-CONFIG_PARIDE_PG=m
-CONFIG_PARIDE_ATEN=m
-CONFIG_PARIDE_BPCK=m
-CONFIG_PARIDE_COMM=m
-CONFIG_PARIDE_DSTR=m
-CONFIG_PARIDE_FIT2=m
-CONFIG_PARIDE_FIT3=m
-CONFIG_PARIDE_EPAT=m
-CONFIG_PARIDE_EPATC8=y
-CONFIG_PARIDE_EPIA=m
-CONFIG_PARIDE_FRIQ=m
-CONFIG_PARIDE_FRPW=m
-CONFIG_PARIDE_KBIC=m
-CONFIG_PARIDE_KTTI=m
-CONFIG_PARIDE_ON20=m
-CONFIG_PARIDE_ON26=m
-CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
-CONFIG_ZRAM=m
-CONFIG_BLK_DEV_DAC960=m
-CONFIG_BLK_DEV_UMEM=m
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_CRYPTOLOOP=m
-CONFIG_BLK_DEV_DRBD=m
-CONFIG_BLK_DEV_NBD=m
-CONFIG_BLK_DEV_SKD=m
-CONFIG_BLK_DEV_SX8=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=65536
-CONFIG_CDROM_PKTCDVD=m
-CONFIG_ATA_OVER_ETH=m
-CONFIG_XEN_BLKDEV_BACKEND=m
-CONFIG_VIRTIO_BLK=y
-CONFIG_BLK_DEV_RBD=m
-CONFIG_BLK_DEV_RSXX=m
-CONFIG_AD525X_DPOT=m
-CONFIG_AD525X_DPOT_I2C=m
-CONFIG_AD525X_DPOT_SPI=m
-CONFIG_DUMMY_IRQ=m
-CONFIG_IBM_ASM=m
-CONFIG_PHANTOM=m
-CONFIG_SGI_IOC4=m
-CONFIG_ICS932S401=m
-CONFIG_ENCLOSURE_SERVICES=m
-CONFIG_HP_ILO=m
-CONFIG_APDS9802ALS=m
-CONFIG_ISL29003=m
-CONFIG_ISL29020=m
-CONFIG_SENSORS_TSL2550=m
-CONFIG_SENSORS_BH1770=m
-CONFIG_SENSORS_APDS990X=m
-CONFIG_HMC6352=m
-CONFIG_DS1682=m
-CONFIG_VMWARE_BALLOON=m
-CONFIG_USB_SWITCH_FSA9480=m
-CONFIG_LATTICE_ECP3_CONFIG=m
-CONFIG_SRAM=y
-CONFIG_C2PORT=m
-CONFIG_C2PORT_DURAMAR_2150=m
-CONFIG_EEPROM_AT24=m
-CONFIG_EEPROM_AT25=m
-CONFIG_EEPROM_LEGACY=m
-CONFIG_EEPROM_MAX6875=m
-CONFIG_EEPROM_93XX46=m
-CONFIG_TI_ST=m
-CONFIG_SENSORS_LIS3_I2C=m
-CONFIG_INTEL_MEI_ME=m
-CONFIG_INTEL_MEI_TXE=m
-CONFIG_VMWARE_VMCI=m
-CONFIG_INTEL_MIC_BUS=m
-CONFIG_SCIF_BUS=m
-CONFIG_SCIF=m
-CONFIG_MIC_COSM=m
-CONFIG_GENWQE=m
-CONFIG_ECHO=m
-CONFIG_BLK_DEV_SD=y
-CONFIG_CHR_DEV_ST=m
-CONFIG_CHR_DEV_OSST=m
-CONFIG_BLK_DEV_SR=y
-CONFIG_CHR_DEV_SG=y
-CONFIG_CHR_DEV_SCH=m
-CONFIG_SCSI_ENCLOSURE=m
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-CONFIG_SCSI_SCAN_ASYNC=y
-CONFIG_SCSI_FC_ATTRS=m
-CONFIG_SCSI_SAS_ATA=y
-CONFIG_ISCSI_TCP=m
-CONFIG_SCSI_CXGB3_ISCSI=m
-CONFIG_SCSI_CXGB4_ISCSI=m
-CONFIG_SCSI_BNX2_ISCSI=m
-CONFIG_SCSI_BNX2X_FCOE=m
-CONFIG_BE2ISCSI=m
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_HPSA=m
-CONFIG_SCSI_3W_9XXX=m
-CONFIG_SCSI_3W_SAS=m
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
-CONFIG_SCSI_AIC79XX=m
-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
-CONFIG_SCSI_AIC94XX=m
-# CONFIG_AIC94XX_DEBUG is not set
-CONFIG_SCSI_MVSAS=m
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-CONFIG_SCSI_MVUMI=m
-CONFIG_SCSI_DPT_I2O=m
-CONFIG_SCSI_ADVANSYS=m
-CONFIG_SCSI_ARCMSR=m
-CONFIG_SCSI_ESAS2R=m
-CONFIG_MEGARAID_NEWGEN=y
-CONFIG_MEGARAID_MM=m
-CONFIG_MEGARAID_MAILBOX=m
-CONFIG_MEGARAID_LEGACY=m
-CONFIG_MEGARAID_SAS=m
-CONFIG_SCSI_MPT2SAS=m
-CONFIG_SCSI_UFSHCD=m
-CONFIG_SCSI_UFSHCD_PCI=m
-CONFIG_SCSI_UFSHCD_PLATFORM=m
-CONFIG_SCSI_HPTIOP=m
-CONFIG_SCSI_BUSLOGIC=m
-CONFIG_SCSI_FLASHPOINT=y
-CONFIG_VMWARE_PVSCSI=m
-CONFIG_XEN_SCSI_FRONTEND=m
-CONFIG_LIBFC=m
-CONFIG_LIBFCOE=m
-CONFIG_FCOE=m
-CONFIG_FCOE_FNIC=m
-CONFIG_SCSI_SNIC=m
-CONFIG_SCSI_DMX3191D=m
-CONFIG_SCSI_EATA=m
-CONFIG_SCSI_EATA_TAGGED_QUEUE=y
-CONFIG_SCSI_EATA_LINKED_COMMANDS=y
-CONFIG_SCSI_FUTURE_DOMAIN=m
-CONFIG_SCSI_GDTH=m
-CONFIG_SCSI_ISCI=m
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INITIO=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-CONFIG_SCSI_STEX=m
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_IPR=m
-CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA_FC=m
-CONFIG_TCM_QLA2XXX=m
-CONFIG_SCSI_QLA_ISCSI=m
-CONFIG_SCSI_LPFC=m
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_AM53C974=m
-CONFIG_SCSI_WD719X=m
-CONFIG_SCSI_DEBUG=m
-CONFIG_SCSI_PMCRAID=m
-CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_BFA_FC=m
-CONFIG_SCSI_VIRTIO=m
-CONFIG_SCSI_CHELSIO_FCOE=m
-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
-CONFIG_SCSI_DH=y
-CONFIG_SCSI_DH_RDAC=m
-CONFIG_SCSI_DH_HP_SW=m
-CONFIG_SCSI_DH_EMC=m
-CONFIG_SCSI_DH_ALUA=m
-CONFIG_SCSI_OSD_INITIATOR=m
-CONFIG_SCSI_OSD_ULD=m
-CONFIG_ATA=y
-CONFIG_SATA_ZPODD=y
-CONFIG_SATA_AHCI=y
-CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_SATA_INIC162X=y
-CONFIG_SATA_ACARD_AHCI=y
-CONFIG_SATA_SIL24=y
-CONFIG_PDC_ADMA=y
-CONFIG_SATA_QSTOR=y
-CONFIG_SATA_SX4=y
-CONFIG_ATA_PIIX=y
-CONFIG_SATA_MV=y
-CONFIG_SATA_NV=y
-CONFIG_SATA_PROMISE=y
-CONFIG_SATA_SIL=y
-CONFIG_SATA_SIS=y
-CONFIG_SATA_SVW=y
-CONFIG_SATA_ULI=y
-CONFIG_SATA_VIA=y
-CONFIG_SATA_VITESSE=y
-CONFIG_PATA_ALI=y
-CONFIG_PATA_AMD=y
-CONFIG_PATA_ARTOP=y
-CONFIG_PATA_ATIIXP=y
-CONFIG_PATA_ATP867X=y
-CONFIG_PATA_CMD64X=y
-CONFIG_PATA_CYPRESS=y
-CONFIG_PATA_EFAR=y
-CONFIG_PATA_HPT366=y
-CONFIG_PATA_HPT37X=y
-CONFIG_PATA_HPT3X2N=y
-CONFIG_PATA_HPT3X3=y
-CONFIG_PATA_IT8213=y
-CONFIG_PATA_IT821X=y
-CONFIG_PATA_JMICRON=y
-CONFIG_PATA_MARVELL=y
-CONFIG_PATA_NETCELL=y
-CONFIG_PATA_NINJA32=y
-CONFIG_PATA_NS87415=y
-CONFIG_PATA_OLDPIIX=y
-CONFIG_PATA_OPTIDMA=y
-CONFIG_PATA_PDC2027X=y
-CONFIG_PATA_PDC_OLD=y
-CONFIG_PATA_RADISYS=y
-CONFIG_PATA_RDC=y
-CONFIG_PATA_SCH=y
-CONFIG_PATA_SERVERWORKS=y
-CONFIG_PATA_SIL680=y
-CONFIG_PATA_TOSHIBA=y
-CONFIG_PATA_TRIFLEX=y
-CONFIG_PATA_VIA=y
-CONFIG_PATA_WINBOND=y
-CONFIG_PATA_CMD640_PCI=y
-CONFIG_PATA_MPIIX=y
-CONFIG_PATA_NS87410=y
-CONFIG_PATA_OPTI=y
-CONFIG_PATA_PCMCIA=m
-CONFIG_PATA_PLATFORM=y
-CONFIG_PATA_RZ1000=y
-CONFIG_PATA_ACPI=y
-CONFIG_ATA_GENERIC=y
-CONFIG_PATA_LEGACY=y
-CONFIG_MD=y
-CONFIG_BLK_DEV_MD=y
-CONFIG_MD_LINEAR=m
-CONFIG_MD_MULTIPATH=m
-CONFIG_MD_FAULTY=m
-CONFIG_MD_CLUSTER=m
-CONFIG_BCACHE=m
-CONFIG_BLK_DEV_DM=y
-CONFIG_DM_CRYPT=m
-CONFIG_DM_SNAPSHOT=m
-CONFIG_DM_THIN_PROVISIONING=m
-CONFIG_DM_CACHE=m
-CONFIG_DM_ERA=m
-CONFIG_DM_MIRROR=m
-CONFIG_DM_LOG_USERSPACE=m
-CONFIG_DM_RAID=m
-CONFIG_DM_ZERO=m
-CONFIG_DM_MULTIPATH=m
-CONFIG_DM_MULTIPATH_QL=m
-CONFIG_DM_MULTIPATH_ST=m
-CONFIG_DM_DELAY=m
-CONFIG_DM_UEVENT=y
-CONFIG_DM_FLAKEY=m
-CONFIG_DM_VERITY=m
-CONFIG_DM_SWITCH=m
-CONFIG_DM_LOG_WRITES=m
-CONFIG_TARGET_CORE=m
-CONFIG_TCM_IBLOCK=m
-CONFIG_TCM_FILEIO=m
-CONFIG_TCM_PSCSI=m
-CONFIG_TCM_USER2=m
-CONFIG_LOOPBACK_TARGET=m
-CONFIG_TCM_FC=m
-CONFIG_ISCSI_TARGET=m
-CONFIG_SBP_TARGET=m
-CONFIG_FUSION=y
-CONFIG_FUSION_SPI=m
-CONFIG_FUSION_FC=m
-CONFIG_FUSION_SAS=m
-CONFIG_FUSION_CTL=m
-CONFIG_FUSION_LAN=m
-CONFIG_FUSION_LOGGING=y
-CONFIG_FIREWIRE=m
-CONFIG_FIREWIRE_OHCI=m
-CONFIG_FIREWIRE_SBP2=m
-CONFIG_FIREWIRE_NET=m
-CONFIG_FIREWIRE_NOSY=m
-CONFIG_MACINTOSH_DRIVERS=y
-CONFIG_MAC_EMUMOUSEBTN=m
-CONFIG_BONDING=m
-CONFIG_DUMMY=m
-CONFIG_EQUALIZER=m
-CONFIG_NET_FC=y
-CONFIG_IFB=m
-CONFIG_NET_TEAM=m
-CONFIG_NET_TEAM_MODE_BROADCAST=m
-CONFIG_NET_TEAM_MODE_ROUNDROBIN=m
-CONFIG_NET_TEAM_MODE_RANDOM=m
-CONFIG_NET_TEAM_MODE_ACTIVEBACKUP=m
-CONFIG_NET_TEAM_MODE_LOADBALANCE=m
-CONFIG_MACVLAN=m
-CONFIG_MACVTAP=m
-CONFIG_IPVLAN=m
-CONFIG_VXLAN=m
-CONFIG_GENEVE=m
-CONFIG_NETCONSOLE=m
-CONFIG_NETCONSOLE_DYNAMIC=y
-CONFIG_NTB_NETDEV=m
-CONFIG_RIONET=m
-CONFIG_TUN=y
-CONFIG_VETH=m
-CONFIG_VIRTIO_NET=y
-CONFIG_NLMON=m
-CONFIG_NET_VRF=m
-CONFIG_ARCNET=m
-CONFIG_ARCNET_1201=m
-CONFIG_ARCNET_1051=m
-CONFIG_ARCNET_RAW=m
-CONFIG_ARCNET_CAP=m
-CONFIG_ARCNET_COM90xx=m
-CONFIG_ARCNET_COM90xxIO=m
-CONFIG_ARCNET_RIM_I=m
-CONFIG_ARCNET_COM20020=m
-CONFIG_ARCNET_COM20020_PCI=m
-CONFIG_ARCNET_COM20020_CS=m
-CONFIG_ATM_DUMMY=m
-CONFIG_ATM_TCP=m
-CONFIG_ATM_LANAI=m
-CONFIG_ATM_ENI=m
-CONFIG_ATM_FIRESTREAM=m
-CONFIG_ATM_ZATM=m
-CONFIG_ATM_NICSTAR=m
-CONFIG_ATM_IDT77252=m
-CONFIG_ATM_AMBASSADOR=m
-CONFIG_ATM_HORIZON=m
-CONFIG_ATM_IA=m
-CONFIG_ATM_FORE200E=m
-CONFIG_ATM_HE=m
-CONFIG_ATM_HE_USE_SUNI=y
-CONFIG_ATM_SOLOS=m
-CONFIG_CAIF_TTY=m
-CONFIG_CAIF_SPI_SLAVE=m
-CONFIG_CAIF_HSI=m
-CONFIG_CAIF_VIRTIO=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_3C589=m
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ET131X=m
-CONFIG_SLICOSS=m
-CONFIG_ACENIC=m
-CONFIG_ALTERA_TSE=m
-CONFIG_AMD8111_ETH=m
-CONFIG_PCNET32=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_ATL2=m
-CONFIG_ATL1=m
-CONFIG_ATL1E=m
-CONFIG_ATL1C=m
-CONFIG_ALX=m
-CONFIG_NET_VENDOR_AURORA=y
-CONFIG_AURORA_NB8800=m
-CONFIG_MACB=m
-CONFIG_B44=m
-CONFIG_TIGON3=m
-CONFIG_BNX2X=m
-CONFIG_BNXT=m
-CONFIG_BNA=m
-CONFIG_THUNDER_NIC_PF=m
-CONFIG_THUNDER_NIC_VF=m
-CONFIG_LIQUIDIO=m
-CONFIG_CHELSIO_T1=m
-CONFIG_CHELSIO_T1_1G=y
-CONFIG_CHELSIO_T4_DCB=y
-CONFIG_CHELSIO_T4_FCOE=y
-CONFIG_CHELSIO_T4VF=m
-CONFIG_CX_ECAT=m
-CONFIG_DNET=m
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_PCMCIA_XIRCOM=m
-CONFIG_DL2K=m
-CONFIG_SUNDANCE=m
-CONFIG_S2IO=m
-CONFIG_VXGE=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_HP100=m
-CONFIG_E100=m
-CONFIG_E1000=m
-CONFIG_E1000E=m
-CONFIG_IGB=m
-CONFIG_IGBVF=m
-CONFIG_IXGB=m
-CONFIG_IXGBE=m
-CONFIG_IXGBE_DCB=y
-CONFIG_IXGBEVF=m
-CONFIG_I40E=m
-CONFIG_I40E_DCB=y
-CONFIG_I40EVF=m
-CONFIG_FM10K=m
-CONFIG_JME=m
-CONFIG_MVMDIO=m
-CONFIG_SKGE=m
-CONFIG_SKGE_GENESIS=y
-CONFIG_SKY2=m
-CONFIG_MLX4_EN=m
-CONFIG_MLX5_CORE=m
-CONFIG_MLX5_CORE_EN=y
-CONFIG_MLXSW_CORE=m
-CONFIG_KS8842=m
-CONFIG_KS8851=m
-CONFIG_KS8851_MLL=m
-CONFIG_KSZ884X_PCI=m
-CONFIG_ENC28J60=m
-CONFIG_ENCX24J600=m
-CONFIG_MYRI10GE=m
-CONFIG_FEALNX=m
-CONFIG_NATSEMI=m
-CONFIG_NS83820=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_NE2K_PCI=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_FORCEDETH=m
-CONFIG_ETHOC=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_QLA3XXX=m
-CONFIG_QLCNIC=m
-CONFIG_QLGE=m
-CONFIG_NETXEN_NIC=m
-CONFIG_QED=m
-CONFIG_QEDE=m
-CONFIG_ATP=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_8129=y
-CONFIG_R8169=m
-CONFIG_R6040=m
-CONFIG_SXGBE_ETH=m
-CONFIG_SC92031=m
-CONFIG_SIS900=m
-CONFIG_SIS190=m
-CONFIG_SFC=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_EPIC100=m
-CONFIG_SMSC911X=m
-CONFIG_SMSC9420=m
-CONFIG_STMMAC_ETH=m
-CONFIG_HAPPYMEAL=m
-CONFIG_SUNGEM=m
-CONFIG_CASSINI=m
-CONFIG_NIU=m
-CONFIG_TEHUTI=m
-CONFIG_TI_CPSW_ALE=m
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_VELOCITY=m
-CONFIG_WIZNET_W5100=m
-CONFIG_WIZNET_W5300=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_FDDI=y
-CONFIG_DEFXX=m
-CONFIG_SKFP=m
-CONFIG_NET_SB1000=m
-CONFIG_MDIO_BITBANG=m
-CONFIG_MDIO_GPIO=m
-CONFIG_PHYLIB=y
-CONFIG_AMD_PHY=m
-CONFIG_AQUANTIA_PHY=m
-CONFIG_AT803X_PHY=m
-CONFIG_BCM87XX_PHY=m
-CONFIG_BROADCOM_PHY=m
-CONFIG_CICADA_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_DP83848_PHY=m
-CONFIG_DP83867_PHY=m
-CONFIG_FIXED_PHY=y
-CONFIG_ICPLUS_PHY=m
-CONFIG_LSI_ET1011C_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_MARVELL_PHY=m
-CONFIG_MICREL_PHY=m
-CONFIG_NATIONAL_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_REALTEK_PHY=m
-CONFIG_STE10XP=m
-CONFIG_TERANETICS_PHY=m
-CONFIG_VITESSE_PHY=m
-CONFIG_MICREL_KS8995MA=m
-CONFIG_PLIP=m
-CONFIG_PPP=y
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_FILTER=y
-CONFIG_PPP_MPPE=m
-CONFIG_PPP_MULTILINK=y
-CONFIG_PPPOATM=m
-CONFIG_PPPOE=m
-CONFIG_PPTP=m
-CONFIG_PPPOL2TP=m
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_SLIP=m
-CONFIG_SLIP_COMPRESSED=y
-CONFIG_SLIP_SMART=y
-CONFIG_SLIP_MODE_SLIP6=y
-CONFIG_USB_NET_DRIVERS=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
-CONFIG_USB_LAN78XX=m
-CONFIG_USB_HSO=m
-CONFIG_USB_IPHETH=m
-CONFIG_B43=m
-CONFIG_B43_SDIO=y
-CONFIG_IPW2100=m
-CONFIG_IPW2200=m
-CONFIG_IWL4965=m
-CONFIG_IWL3945=m
-CONFIG_IWLWIFI=m
-CONFIG_IWLDVM=m
-CONFIG_IWLMVM=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
-CONFIG_HOSTAP_PLX=m
-CONFIG_HOSTAP_PCI=m
-CONFIG_HOSTAP_CS=m
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_WIMAX_I2400M_USB=m
-CONFIG_WAN=y
-CONFIG_LANMEDIA=m
-CONFIG_HDLC=m
-CONFIG_HDLC_RAW=m
-CONFIG_HDLC_RAW_ETH=m
-CONFIG_HDLC_CISCO=m
-CONFIG_HDLC_FR=m
-CONFIG_HDLC_PPP=m
-CONFIG_HDLC_X25=m
-CONFIG_PCI200SYN=m
-CONFIG_WANXL=m
-CONFIG_PC300TOO=m
-CONFIG_FARSYNC=m
-CONFIG_DSCC4=m
-CONFIG_DSCC4_PCISYNC=y
-CONFIG_DSCC4_PCI_RST=y
-CONFIG_DLCI=m
-CONFIG_LAPBETHER=m
-CONFIG_X25_ASY=m
-CONFIG_SBNI=m
-CONFIG_IEEE802154_FAKELB=m
-CONFIG_IEEE802154_AT86RF230=m
-CONFIG_IEEE802154_AT86RF230_DEBUGFS=y
-CONFIG_IEEE802154_MRF24J40=m
-CONFIG_IEEE802154_CC2520=m
-CONFIG_IEEE802154_ATUSB=m
-CONFIG_XEN_NETDEV_BACKEND=m
-CONFIG_VMXNET3=m
-CONFIG_FUJITSU_ES=m
-CONFIG_HYPERV_NET=m
-CONFIG_ISDN=y
-CONFIG_ISDN_PPP=y
-CONFIG_ISDN_PPP_VJ=y
-CONFIG_ISDN_MPP=y
-CONFIG_IPPP_FILTER=y
-CONFIG_ISDN_PPP_BSDCOMP=m
-CONFIG_ISDN_AUDIO=y
-CONFIG_ISDN_TTY_FAX=y
-CONFIG_ISDN_X25=y
-CONFIG_ISDN_DIVERSION=m
-CONFIG_ISDN_DRV_HISAX=m
-CONFIG_HISAX_EURO=y
-CONFIG_DE_AOC=y
-CONFIG_HISAX_1TR6=y
-CONFIG_HISAX_NI1=y
-CONFIG_HISAX_16_3=y
-CONFIG_HISAX_TELESPCI=y
-CONFIG_HISAX_S0BOX=y
-CONFIG_HISAX_FRITZPCI=y
-CONFIG_HISAX_AVM_A1_PCMCIA=y
-CONFIG_HISAX_ELSA=y
-CONFIG_HISAX_DIEHLDIVA=y
-CONFIG_HISAX_SEDLBAUER=y
-CONFIG_HISAX_NETJET=y
-CONFIG_HISAX_NETJET_U=y
-CONFIG_HISAX_NICCY=y
-CONFIG_HISAX_BKM_A4T=y
-CONFIG_HISAX_SCT_QUADRO=y
-CONFIG_HISAX_GAZEL=y
-CONFIG_HISAX_HFC_PCI=y
-CONFIG_HISAX_W6692=y
-CONFIG_HISAX_HFC_SX=y
-CONFIG_HISAX_ENTERNOW_PCI=y
-CONFIG_HISAX_SEDLBAUER_CS=m
-CONFIG_HISAX_ELSA_CS=m
-CONFIG_HISAX_AVM_A1_CS=m
-CONFIG_HISAX_TELES_CS=m
-CONFIG_HISAX_ST5481=m
-CONFIG_HISAX_HFCUSB=m
-CONFIG_HISAX_HFC4S8S=m
-CONFIG_HISAX_FRITZ_PCIPNP=m
-CONFIG_ISDN_CAPI=m
-CONFIG_ISDN_CAPI_CAPI20=m
-CONFIG_ISDN_CAPI_MIDDLEWARE=y
-CONFIG_ISDN_CAPI_CAPIDRV=m
-CONFIG_CAPI_AVM=y
-CONFIG_ISDN_DRV_AVMB1_B1PCI=m
-CONFIG_ISDN_DRV_AVMB1_B1PCIV4=y
-CONFIG_ISDN_DRV_AVMB1_B1PCMCIA=m
-CONFIG_ISDN_DRV_AVMB1_AVM_CS=m
-CONFIG_ISDN_DRV_AVMB1_T1PCI=m
-CONFIG_ISDN_DRV_AVMB1_C4=m
-CONFIG_CAPI_EICON=y
-CONFIG_ISDN_DIVAS=m
-CONFIG_ISDN_DIVAS_BRIPCI=y
-CONFIG_ISDN_DIVAS_PRIPCI=y
-CONFIG_ISDN_DIVAS_DIVACAPI=m
-CONFIG_ISDN_DIVAS_USERIDI=m
-CONFIG_ISDN_DIVAS_MAINT=m
-CONFIG_ISDN_DRV_GIGASET=m
-# CONFIG_GIGASET_CAPI is not set
-CONFIG_GIGASET_BASE=m
-CONFIG_GIGASET_M105=m
-CONFIG_GIGASET_M101=m
-CONFIG_HYSDN=m
-CONFIG_HYSDN_CAPI=y
-CONFIG_MISDN=m
-CONFIG_MISDN_DSP=m
-CONFIG_MISDN_L1OIP=m
-CONFIG_MISDN_HFCPCI=m
-CONFIG_MISDN_HFCMULTI=m
-CONFIG_MISDN_HFCUSB=m
-CONFIG_MISDN_AVMFRITZ=m
-CONFIG_MISDN_SPEEDFAX=m
-CONFIG_MISDN_INFINEON=m
-CONFIG_MISDN_W6692=m
-CONFIG_MISDN_NETJET=m
-CONFIG_NVM=y
-CONFIG_NVM_RRPC=m
-CONFIG_INPUT_LEDS=m
-CONFIG_INPUT_JOYDEV=m
-CONFIG_INPUT_EVDEV=y
-CONFIG_KEYBOARD_ADP5520=m
-CONFIG_KEYBOARD_ADP5588=m
-CONFIG_KEYBOARD_ADP5589=m
-CONFIG_KEYBOARD_QT1070=m
-CONFIG_KEYBOARD_QT2160=m
-CONFIG_KEYBOARD_LKKBD=m
-CONFIG_KEYBOARD_GPIO=m
-CONFIG_KEYBOARD_GPIO_POLLED=m
-CONFIG_KEYBOARD_TCA6416=m
-CONFIG_KEYBOARD_TCA8418=m
-CONFIG_KEYBOARD_MATRIX=m
-CONFIG_KEYBOARD_LM8323=m
-CONFIG_KEYBOARD_LM8333=m
-CONFIG_KEYBOARD_MAX7359=m
-CONFIG_KEYBOARD_MCS=m
-CONFIG_KEYBOARD_MPR121=m
-CONFIG_KEYBOARD_NEWTON=m
-CONFIG_KEYBOARD_OPENCORES=m
-CONFIG_KEYBOARD_SAMSUNG=m
-CONFIG_KEYBOARD_STOWAWAY=m
-CONFIG_KEYBOARD_SUNKBD=m
-CONFIG_KEYBOARD_TWL4030=m
-CONFIG_KEYBOARD_XTKBD=m
-CONFIG_KEYBOARD_CROS_EC=m
-CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_PS2_ELANTECH=y
-CONFIG_MOUSE_PS2_SENTELIC=y
-CONFIG_MOUSE_PS2_TOUCHKIT=y
-CONFIG_MOUSE_PS2_VMMOUSE=y
-CONFIG_MOUSE_SERIAL=m
-CONFIG_MOUSE_APPLETOUCH=m
-CONFIG_MOUSE_BCM5974=m
-CONFIG_MOUSE_CYAPA=m
-CONFIG_MOUSE_ELAN_I2C=m
-CONFIG_MOUSE_ELAN_I2C_SMBUS=y
-CONFIG_MOUSE_VSXXXAA=m
-CONFIG_MOUSE_GPIO=m
-CONFIG_MOUSE_SYNAPTICS_I2C=m
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_A3D=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_COBRA=m
-CONFIG_JOYSTICK_GF2K=m
-CONFIG_JOYSTICK_GRIP=m
-CONFIG_JOYSTICK_GRIP_MP=m
-CONFIG_JOYSTICK_GUILLEMOT=m
-CONFIG_JOYSTICK_INTERACT=m
-CONFIG_JOYSTICK_SIDEWINDER=m
-CONFIG_JOYSTICK_TMDC=m
-CONFIG_JOYSTICK_IFORCE=m
-CONFIG_JOYSTICK_IFORCE_USB=y
-CONFIG_JOYSTICK_IFORCE_232=y
-CONFIG_JOYSTICK_WARRIOR=m
-CONFIG_JOYSTICK_MAGELLAN=m
-CONFIG_JOYSTICK_SPACEORB=m
-CONFIG_JOYSTICK_SPACEBALL=m
-CONFIG_JOYSTICK_STINGER=m
-CONFIG_JOYSTICK_TWIDJOY=m
-CONFIG_JOYSTICK_ZHENHUA=m
-CONFIG_JOYSTICK_DB9=m
-CONFIG_JOYSTICK_GAMECON=m
-CONFIG_JOYSTICK_TURBOGRAFX=m
-CONFIG_JOYSTICK_AS5011=m
-CONFIG_JOYSTICK_JOYDUMP=m
-CONFIG_JOYSTICK_XPAD=m
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_JOYSTICK_WALKERA0701=m
-CONFIG_INPUT_TABLET=y
-CONFIG_TABLET_USB_ACECAD=m
-CONFIG_TABLET_USB_AIPTEK=m
-CONFIG_TABLET_USB_GTCO=m
-CONFIG_TABLET_USB_HANWANG=m
-CONFIG_TABLET_USB_KBTAB=m
-CONFIG_TABLET_SERIAL_WACOM4=m
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_88PM860X=m
-CONFIG_TOUCHSCREEN_ADS7846=m
-CONFIG_TOUCHSCREEN_AD7877=m
-CONFIG_TOUCHSCREEN_AD7879=m
-CONFIG_TOUCHSCREEN_AD7879_I2C=m
-CONFIG_TOUCHSCREEN_AD7879_SPI=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
-CONFIG_TOUCHSCREEN_DA9034=m
-CONFIG_TOUCHSCREEN_DA9052=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_GOODIX=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_ELAN=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_WACOM_I2C=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MMS114=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_INEXIO=m
-CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_EDT_FT5X06=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
-CONFIG_TOUCHSCREEN_UCB1400=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
-CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
-CONFIG_TOUCHSCREEN_WM831X=m
-CONFIG_TOUCHSCREEN_WM97XX=m
-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-CONFIG_TOUCHSCREEN_MC13783=m
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC2004=m
-CONFIG_TOUCHSCREEN_TSC2005=m
-CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_PCAP=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_SUR40=m
-CONFIG_TOUCHSCREEN_SX8654=m
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_ZFORCE=m
-CONFIG_TOUCHSCREEN_ROHM_BU21023=m
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_88PM860X_ONKEY=m
-CONFIG_INPUT_88PM80X_ONKEY=m
-CONFIG_INPUT_AD714X=m
-CONFIG_INPUT_ARIZONA_HAPTICS=m
-CONFIG_INPUT_BMA150=m
-CONFIG_INPUT_E3X0_BUTTON=m
-CONFIG_INPUT_PCSPKR=m
-CONFIG_INPUT_MAX77693_HAPTIC=m
-CONFIG_INPUT_MAX8925_ONKEY=m
-CONFIG_INPUT_MAX8997_HAPTIC=m
-CONFIG_INPUT_MC13783_PWRBUTTON=m
-CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_APANEL=m
-CONFIG_INPUT_GP2A=m
-CONFIG_INPUT_GPIO_BEEPER=m
-CONFIG_INPUT_GPIO_TILT_POLLED=m
-CONFIG_INPUT_ATLAS_BTNS=m
-CONFIG_INPUT_ATI_REMOTE2=m
-CONFIG_INPUT_KEYSPAN_REMOTE=m
-CONFIG_INPUT_KXTJ9=m
-CONFIG_INPUT_POWERMATE=m
-CONFIG_INPUT_YEALINK=m
-CONFIG_INPUT_CM109=m
-CONFIG_INPUT_REGULATOR_HAPTIC=m
-CONFIG_INPUT_RETU_PWRBUTTON=m
-CONFIG_INPUT_TWL4030_PWRBUTTON=m
-CONFIG_INPUT_TWL4030_VIBRA=m
-CONFIG_INPUT_TWL6040_VIBRA=m
-CONFIG_INPUT_UINPUT=y
-CONFIG_INPUT_PALMAS_PWRBUTTON=m
-CONFIG_INPUT_PCF50633_PMU=m
-CONFIG_INPUT_PCF8574=m
-CONFIG_INPUT_PWM_BEEPER=m
-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
-CONFIG_INPUT_DA9052_ONKEY=m
-CONFIG_INPUT_DA9055_ONKEY=m
-CONFIG_INPUT_DA9063_ONKEY=m
-CONFIG_INPUT_WM831X_ON=m
-CONFIG_INPUT_PCAP=m
-CONFIG_INPUT_ADXL34X=m
-CONFIG_INPUT_IMS_PCU=m
-CONFIG_INPUT_CMA3000=m
-CONFIG_INPUT_CMA3000_I2C=m
-CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
-CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
-CONFIG_INPUT_SOC_BUTTON_ARRAY=m
-CONFIG_INPUT_DRV260X_HAPTICS=m
-CONFIG_INPUT_DRV2665_HAPTICS=m
-CONFIG_INPUT_DRV2667_HAPTICS=m
-CONFIG_SERIO_SERPORT=m
-CONFIG_SERIO_CT82C710=m
-CONFIG_SERIO_PARKBD=m
-CONFIG_SERIO_PCIPS2=m
-CONFIG_SERIO_RAW=m
-CONFIG_SERIO_ALTERA_PS2=m
-CONFIG_SERIO_PS2MULT=m
-CONFIG_SERIO_ARC_PS2=m
-CONFIG_USERIO=m
-CONFIG_GAMEPORT_NS558=m
-CONFIG_GAMEPORT_L4=m
-CONFIG_GAMEPORT_EMU10K1=m
-CONFIG_GAMEPORT_FM801=m
-CONFIG_LEGACY_PTY_COUNT=0
-CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_ROCKETPORT=m
-CONFIG_CYCLADES=m
-CONFIG_MOXA_INTELLIO=m
-CONFIG_MOXA_SMARTIO=m
-CONFIG_SYNCLINK=m
-CONFIG_SYNCLINKMP=m
-CONFIG_SYNCLINK_GT=m
-CONFIG_NOZOMI=m
-CONFIG_ISI=m
-CONFIG_N_HDLC=m
-CONFIG_N_GSM=m
-CONFIG_TRACE_ROUTER=m
-CONFIG_TRACE_SINK=m
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=48
-CONFIG_SERIAL_8250_RUNTIME_UARTS=32
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_RSA=y
-CONFIG_SERIAL_8250_DW=m
-CONFIG_SERIAL_8250_RT288X=y
-CONFIG_SERIAL_8250_MID=m
-CONFIG_SERIAL_KGDB_NMI=y
-CONFIG_SERIAL_MAX3100=m
-CONFIG_SERIAL_MAX310X=y
-CONFIG_SERIAL_UARTLITE=m
-CONFIG_SERIAL_JSM=m
-CONFIG_SERIAL_SCCNXP=y
-CONFIG_SERIAL_SCCNXP_CONSOLE=y
-CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
-CONFIG_SERIAL_ALTERA_JTAGUART=m
-CONFIG_SERIAL_ALTERA_UART=m
-CONFIG_SERIAL_ARC=m
-CONFIG_SERIAL_RP2=m
-CONFIG_SERIAL_FSL_LPUART=m
-CONFIG_SERIAL_MEN_Z135=m
-CONFIG_TTY_PRINTK=y
-CONFIG_PRINTER=m
-CONFIG_PPDEV=m
-CONFIG_VIRTIO_CONSOLE=y
-CONFIG_IPMI_HANDLER=m
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SSIF=m
-CONFIG_IPMI_WATCHDOG=m
-CONFIG_IPMI_POWEROFF=m
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_TIMERIOMEM=m
-CONFIG_HW_RANDOM_INTEL=m
-CONFIG_HW_RANDOM_AMD=m
-CONFIG_HW_RANDOM_VIA=m
-CONFIG_HW_RANDOM_VIRTIO=m
-CONFIG_HW_RANDOM_TPM=m
-CONFIG_R3964=m
-CONFIG_APPLICOM=m
-CONFIG_SYNCLINK_CS=m
-CONFIG_CARDMAN_4000=m
-CONFIG_CARDMAN_4040=m
-CONFIG_IPWIRELESS=m
-CONFIG_MWAVE=m
-CONFIG_RAW_DRIVER=m
-CONFIG_HPET=y
-CONFIG_HANGCHECK_TIMER=m
-CONFIG_TCG_TIS_I2C_ATMEL=m
-CONFIG_TCG_TIS_I2C_INFINEON=m
-CONFIG_TCG_TIS_I2C_NUVOTON=m
-CONFIG_TCG_NSC=m
-CONFIG_TCG_ATMEL=m
-CONFIG_TCG_INFINEON=m
-CONFIG_TCG_XEN=m
-CONFIG_TCG_CRB=m
-CONFIG_TCG_TIS_ST33ZP24_I2C=m
-CONFIG_TCG_TIS_ST33ZP24_SPI=m
-CONFIG_TELCLOCK=m
-CONFIG_XILLYBUS=m
-CONFIG_XILLYBUS_PCIE=m
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_MUX_GPIO=m
-CONFIG_I2C_MUX_PCA9541=m
-CONFIG_I2C_MUX_PCA954x=m
-CONFIG_I2C_MUX_REG=m
-CONFIG_I2C_ALI1535=m
-CONFIG_I2C_ALI1563=m
-CONFIG_I2C_ALI15X3=m
-CONFIG_I2C_AMD756=m
-CONFIG_I2C_AMD756_S4882=m
-CONFIG_I2C_AMD8111=m
-CONFIG_I2C_I801=m
-CONFIG_I2C_ISCH=m
-CONFIG_I2C_ISMT=m
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_NFORCE2=m
-CONFIG_I2C_NFORCE2_S4985=m
-CONFIG_I2C_SIS5595=m
-CONFIG_I2C_SIS630=m
-CONFIG_I2C_SIS96X=m
-CONFIG_I2C_VIA=m
-CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_SCMI=m
-CONFIG_I2C_CBUS_GPIO=m
-CONFIG_I2C_DESIGNWARE_PCI=m
-CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
-CONFIG_I2C_EMEV2=m
-CONFIG_I2C_GPIO=m
-CONFIG_I2C_KEMPLD=m
-CONFIG_I2C_OCORES=m
-CONFIG_I2C_PCA_PLATFORM=m
-CONFIG_I2C_SIMTEC=m
-CONFIG_I2C_XILINX=m
-CONFIG_I2C_DIOLAN_U2C=m
-CONFIG_I2C_DLN2=m
-CONFIG_I2C_PARPORT=m
-CONFIG_I2C_PARPORT_LIGHT=m
-CONFIG_I2C_ROBOTFUZZ_OSIF=m
-CONFIG_I2C_TAOS_EVM=m
-CONFIG_I2C_TINY_USB=m
-CONFIG_I2C_VIPERBOARD=m
-CONFIG_I2C_CROS_EC_TUNNEL=m
-CONFIG_I2C_STUB=m
-CONFIG_SPI=y
-CONFIG_SPI_ALTERA=m
-CONFIG_SPI_BUTTERFLY=m
-CONFIG_SPI_CADENCE=m
-CONFIG_SPI_DESIGNWARE=m
-CONFIG_SPI_DW_PCI=m
-CONFIG_SPI_DW_MID_DMA=y
-CONFIG_SPI_DW_MMIO=m
-CONFIG_SPI_DLN2=m
-CONFIG_SPI_GPIO=m
-CONFIG_SPI_LM70_LLP=m
-CONFIG_SPI_OC_TINY=m
-CONFIG_SPI_PXA2XX=m
-CONFIG_SPI_SC18IS602=m
-CONFIG_SPI_XCOMM=m
-CONFIG_SPI_ZYNQMP_GQSPI=m
-CONFIG_SPI_SPIDEV=m
-CONFIG_SPI_TLE62X0=m
-CONFIG_SPMI=m
-CONFIG_HSI=m
-CONFIG_HSI_CHAR=m
-CONFIG_PPS_CLIENT_LDISC=m
-CONFIG_PPS_CLIENT_PARPORT=m
-CONFIG_PPS_CLIENT_GPIO=m
-CONFIG_PINCTRL_AMD=y
-CONFIG_PINCTRL_BAYTRAIL=y
-CONFIG_PINCTRL_CHERRYVIEW=m
-CONFIG_PINCTRL_BROXTON=m
-CONFIG_PINCTRL_SUNRISEPOINT=m
-CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_AMDPT=m
-CONFIG_GPIO_DWAPB=m
-CONFIG_GPIO_GENERIC_PLATFORM=m
-CONFIG_GPIO_ICH=m
-CONFIG_GPIO_LYNXPOINT=y
-CONFIG_GPIO_VX855=m
-CONFIG_GPIO_F7188X=m
-CONFIG_GPIO_IT87=m
-CONFIG_GPIO_SCH=m
-CONFIG_GPIO_SCH311X=m
-CONFIG_GPIO_ADP5588=m
-CONFIG_GPIO_MAX7300=m
-CONFIG_GPIO_MAX732X=m
-CONFIG_GPIO_PCA953X=m
-CONFIG_GPIO_PCF857X=m
-CONFIG_GPIO_ADP5520=m
-CONFIG_GPIO_ARIZONA=m
-CONFIG_GPIO_CRYSTAL_COVE=m
-CONFIG_GPIO_DA9052=m
-CONFIG_GPIO_DA9055=m
-CONFIG_GPIO_DLN2=m
-CONFIG_GPIO_JANZ_TTL=m
-CONFIG_GPIO_KEMPLD=m
-CONFIG_GPIO_LP3943=m
-CONFIG_GPIO_PALMAS=y
-CONFIG_GPIO_RC5T583=y
-CONFIG_GPIO_TPS6586X=y
-CONFIG_GPIO_TPS65910=y
-CONFIG_GPIO_TPS65912=m
-CONFIG_GPIO_TWL4030=m
-CONFIG_GPIO_TWL6040=m
-CONFIG_GPIO_UCB1400=m
-CONFIG_GPIO_WM831X=m
-CONFIG_GPIO_WM8350=m
-CONFIG_GPIO_WM8994=m
-CONFIG_GPIO_AMD8111=m
-CONFIG_GPIO_ML_IOH=m
-CONFIG_GPIO_RDC321X=m
-CONFIG_GPIO_MAX7301=m
-CONFIG_GPIO_MC33880=m
-CONFIG_GPIO_VIPERBOARD=m
-CONFIG_W1_MASTER_MATROX=m
-CONFIG_W1_MASTER_DS2490=m
-CONFIG_W1_MASTER_DS2482=m
-CONFIG_W1_MASTER_DS1WM=m
-CONFIG_W1_MASTER_GPIO=m
-CONFIG_W1_SLAVE_THERM=m
-CONFIG_W1_SLAVE_SMEM=m
-CONFIG_W1_SLAVE_DS2408=m
-CONFIG_W1_SLAVE_DS2413=m
-CONFIG_W1_SLAVE_DS2406=m
-CONFIG_W1_SLAVE_DS2423=m
-CONFIG_W1_SLAVE_DS2431=m
-CONFIG_W1_SLAVE_DS2433=m
-CONFIG_W1_SLAVE_DS2760=m
-CONFIG_W1_SLAVE_DS28E04=m
-CONFIG_POWER_AVS=y
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_RESTART=y
-CONFIG_PDA_POWER=m
-CONFIG_GENERIC_ADC_BATTERY=m
-CONFIG_MAX8925_POWER=m
-CONFIG_WM831X_BACKUP=m
-CONFIG_WM831X_POWER=m
-CONFIG_WM8350_POWER=m
-CONFIG_TEST_POWER=m
-CONFIG_BATTERY_88PM860X=m
-CONFIG_BATTERY_DS2760=m
-CONFIG_BATTERY_DS2780=m
-CONFIG_BATTERY_DS2781=m
-CONFIG_BATTERY_DS2782=m
-CONFIG_BATTERY_SBS=m
-CONFIG_BATTERY_BQ27XXX=m
-CONFIG_BATTERY_DA9030=m
-CONFIG_BATTERY_DA9052=m
-CONFIG_CHARGER_DA9150=m
-CONFIG_BATTERY_DA9150=m
-CONFIG_BATTERY_MAX17040=m
-CONFIG_BATTERY_MAX17042=m
-CONFIG_BATTERY_TWL4030_MADC=m
-CONFIG_CHARGER_88PM860X=m
-CONFIG_CHARGER_PCF50633=m
-CONFIG_BATTERY_RX51=m
-CONFIG_CHARGER_ISP1704=m
-CONFIG_CHARGER_MAX8903=m
-CONFIG_CHARGER_TWL4030=m
-CONFIG_CHARGER_LP8727=m
-CONFIG_CHARGER_LP8788=m
-CONFIG_CHARGER_GPIO=m
-CONFIG_CHARGER_MANAGER=y
-CONFIG_CHARGER_MAX14577=m
-CONFIG_CHARGER_MAX77693=m
-CONFIG_CHARGER_MAX8997=m
-CONFIG_CHARGER_MAX8998=m
-CONFIG_CHARGER_BQ2415X=m
-CONFIG_CHARGER_BQ24190=m
-CONFIG_CHARGER_BQ24257=m
-CONFIG_CHARGER_BQ24735=m
-CONFIG_CHARGER_BQ25890=m
-CONFIG_CHARGER_SMB347=m
-CONFIG_CHARGER_TPS65090=m
-CONFIG_BATTERY_GAUGE_LTC2941=m
-CONFIG_BATTERY_RT5033=m
-CONFIG_CHARGER_RT9455=m
-CONFIG_SENSORS_ABITUGURU=m
-CONFIG_SENSORS_ABITUGURU3=m
-CONFIG_SENSORS_AD7314=m
-CONFIG_SENSORS_AD7414=m
-CONFIG_SENSORS_AD7418=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1029=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ADM9240=m
-CONFIG_SENSORS_ADT7310=m
-CONFIG_SENSORS_ADT7410=m
-CONFIG_SENSORS_ADT7411=m
-CONFIG_SENSORS_ADT7462=m
-CONFIG_SENSORS_ADT7470=m
-CONFIG_SENSORS_ADT7475=m
-CONFIG_SENSORS_ASC7621=m
-CONFIG_SENSORS_K8TEMP=m
-CONFIG_SENSORS_K10TEMP=m
-CONFIG_SENSORS_FAM15H_POWER=m
-CONFIG_SENSORS_APPLESMC=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_ATXP1=m
-CONFIG_SENSORS_DS620=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_DA9052_ADC=m
-CONFIG_SENSORS_DA9055=m
-CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
-CONFIG_SENSORS_F75375S=m
-CONFIG_SENSORS_MC13783_ADC=m
-CONFIG_SENSORS_FSCHMD=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
-CONFIG_SENSORS_G760A=m
-CONFIG_SENSORS_G762=m
-CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_IBMAEM=m
-CONFIG_SENSORS_IBMPEX=m
-CONFIG_SENSORS_IIO_HWMON=m
-CONFIG_SENSORS_I5500=m
-CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_JC42=m
-CONFIG_SENSORS_POWR1220=m
-CONFIG_SENSORS_LINEAGE=m
-CONFIG_SENSORS_LTC2945=m
-CONFIG_SENSORS_LTC4151=m
-CONFIG_SENSORS_LTC4215=m
-CONFIG_SENSORS_LTC4222=m
-CONFIG_SENSORS_LTC4245=m
-CONFIG_SENSORS_LTC4260=m
-CONFIG_SENSORS_LTC4261=m
-CONFIG_SENSORS_MAX1111=m
-CONFIG_SENSORS_MAX16065=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_MAX1668=m
-CONFIG_SENSORS_MAX197=m
-CONFIG_SENSORS_MAX6639=m
-CONFIG_SENSORS_MAX6642=m
-CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6697=m
-CONFIG_SENSORS_MAX31790=m
-CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_MENF21BMC_HWMON=m
-CONFIG_SENSORS_ADCXX=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM70=m
-CONFIG_SENSORS_LM73=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_LM93=m
-CONFIG_SENSORS_LM95234=m
-CONFIG_SENSORS_LM95241=m
-CONFIG_SENSORS_LM95245=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_NCT6683=m
-CONFIG_SENSORS_NCT6775=m
-CONFIG_SENSORS_NCT7802=m
-CONFIG_SENSORS_NCT7904=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_PMBUS=m
-CONFIG_SENSORS_ADM1275=m
-CONFIG_SENSORS_LM25066=m
-CONFIG_SENSORS_LTC2978=m
-CONFIG_SENSORS_LTC2978_REGULATOR=y
-CONFIG_SENSORS_MAX16064=m
-CONFIG_SENSORS_MAX20751=m
-CONFIG_SENSORS_MAX34440=m
-CONFIG_SENSORS_MAX8688=m
-CONFIG_SENSORS_TPS40422=m
-CONFIG_SENSORS_UCD9000=m
-CONFIG_SENSORS_UCD9200=m
-CONFIG_SENSORS_ZL6100=m
-CONFIG_SENSORS_SHT15=m
-CONFIG_SENSORS_SHT21=m
-CONFIG_SENSORS_SHTC1=m
-CONFIG_SENSORS_SIS5595=m
-CONFIG_SENSORS_DME1737=m
-CONFIG_SENSORS_EMC1403=m
-CONFIG_SENSORS_EMC2103=m
-CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
-CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_ADC128D818=m
-CONFIG_SENSORS_ADS1015=m
-CONFIG_SENSORS_ADS7828=m
-CONFIG_SENSORS_ADS7871=m
-CONFIG_SENSORS_AMC6821=m
-CONFIG_SENSORS_INA209=m
-CONFIG_SENSORS_INA2XX=m
-CONFIG_SENSORS_TC74=m
-CONFIG_SENSORS_THMC50=m
-CONFIG_SENSORS_TMP102=m
-CONFIG_SENSORS_TMP103=m
-CONFIG_SENSORS_TMP401=m
-CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VIA_CPUTEMP=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
-CONFIG_SENSORS_VT8231=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83791D=m
-CONFIG_SENSORS_W83792D=m
-CONFIG_SENSORS_W83793=m
-CONFIG_SENSORS_W83795=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
-CONFIG_SENSORS_WM831X=m
-CONFIG_SENSORS_WM8350=m
-CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_SENSORS_ATK0110=m
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
-CONFIG_THERMAL_GOV_POWER_ALLOCATOR=y
-CONFIG_THERMAL_EMULATION=y
-CONFIG_INTEL_POWERCLAMP=m
-CONFIG_INTEL_SOC_DTS_THERMAL=m
-CONFIG_INT340X_THERMAL=m
-CONFIG_INTEL_PCH_THERMAL=m
-CONFIG_WATCHDOG=y
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_DA9052_WATCHDOG=m
-CONFIG_DA9055_WATCHDOG=m
-CONFIG_DA9063_WATCHDOG=m
-CONFIG_DA9062_WATCHDOG=m
-CONFIG_MENF21BMC_WATCHDOG=m
-CONFIG_WM831X_WATCHDOG=m
-CONFIG_WM8350_WATCHDOG=m
-CONFIG_XILINX_WATCHDOG=m
-CONFIG_CADENCE_WATCHDOG=m
-CONFIG_DW_WATCHDOG=m
-CONFIG_TWL4030_WATCHDOG=m
-CONFIG_MAX63XX_WATCHDOG=m
-CONFIG_RETU_WATCHDOG=m
-CONFIG_ACQUIRE_WDT=m
-CONFIG_ADVANTECH_WDT=m
-CONFIG_ALIM1535_WDT=m
-CONFIG_ALIM7101_WDT=m
-CONFIG_F71808E_WDT=m
-CONFIG_SP5100_TCO=m
-CONFIG_SBC_FITPC2_WATCHDOG=m
-CONFIG_EUROTECH_WDT=m
-CONFIG_IB700_WDT=m
-CONFIG_IBMASR=m
-CONFIG_WAFER_WDT=m
-CONFIG_I6300ESB_WDT=m
-CONFIG_IE6XX_WDT=m
-CONFIG_ITCO_WDT=m
-CONFIG_ITCO_VENDOR_SUPPORT=y
-CONFIG_IT8712F_WDT=m
-CONFIG_IT87_WDT=m
-CONFIG_HP_WATCHDOG=m
-CONFIG_KEMPLD_WDT=m
-CONFIG_SC1200_WDT=m
-CONFIG_PC87413_WDT=m
-CONFIG_NV_TCO=m
-CONFIG_60XX_WDT=m
-CONFIG_CPU5_WDT=m
-CONFIG_SMSC_SCH311X_WDT=m
-CONFIG_SMSC37B787_WDT=m
-CONFIG_VIA_WDT=m
-CONFIG_W83627HF_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_W83977F_WDT=m
-CONFIG_MACHZ_WDT=m
-CONFIG_SBC_EPX_C3_WATCHDOG=m
-CONFIG_MEN_A21_WDT=m
-CONFIG_XEN_WDT=m
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-CONFIG_USBPCWATCHDOG=m
-CONFIG_SSB_DRIVER_GPIO=y
-CONFIG_MFD_AS3711=y
-CONFIG_PMIC_ADP5520=y
-CONFIG_MFD_AAT2870_CORE=y
-CONFIG_MFD_BCM590XX=m
-CONFIG_MFD_CROS_EC=m
-CONFIG_MFD_CROS_EC_I2C=m
-CONFIG_MFD_CROS_EC_SPI=m
-CONFIG_PMIC_DA903X=y
-CONFIG_MFD_DA9052_SPI=y
-CONFIG_MFD_DA9052_I2C=y
-CONFIG_MFD_DA9055=y
-CONFIG_MFD_DA9062=m
-CONFIG_MFD_DA9063=y
-CONFIG_MFD_DA9150=m
-CONFIG_MFD_DLN2=m
-CONFIG_MFD_MC13XXX_SPI=m
-CONFIG_MFD_MC13XXX_I2C=m
-CONFIG_HTC_PASIC3=m
-CONFIG_HTC_I2CPLD=y
-CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m
-CONFIG_INTEL_SOC_PMIC=y
-CONFIG_MFD_INTEL_LPSS_ACPI=m
-CONFIG_MFD_INTEL_LPSS_PCI=m
-CONFIG_MFD_JANZ_CMODIO=m
-CONFIG_MFD_KEMPLD=m
-CONFIG_MFD_88PM800=m
-CONFIG_MFD_88PM805=m
-CONFIG_MFD_88PM860X=y
-CONFIG_MFD_MAX14577=y
-CONFIG_MFD_MAX77693=y
-CONFIG_MFD_MAX77843=y
-CONFIG_MFD_MAX8907=m
-CONFIG_MFD_MAX8925=y
-CONFIG_MFD_MAX8997=y
-CONFIG_MFD_MAX8998=y
-CONFIG_MFD_MT6397=m
-CONFIG_MFD_MENF21BMC=m
-CONFIG_EZX_PCAP=y
-CONFIG_MFD_VIPERBOARD=m
-CONFIG_MFD_RETU=m
-CONFIG_MFD_PCF50633=m
-CONFIG_PCF50633_ADC=m
-CONFIG_PCF50633_GPIO=m
-CONFIG_UCB1400_CORE=m
-CONFIG_MFD_RTSX_PCI=m
-CONFIG_MFD_RT5033=m
-CONFIG_MFD_RTSX_USB=m
-CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
-CONFIG_MFD_SI476X_CORE=m
-CONFIG_MFD_SM501=m
-CONFIG_MFD_SM501_GPIO=y
-CONFIG_MFD_SKY81452=m
-CONFIG_MFD_SMSC=y
-CONFIG_ABX500_CORE=y
-CONFIG_AB3100_CORE=y
-CONFIG_AB3100_OTP=m
-CONFIG_MFD_TI_AM335X_TSCADC=m
-CONFIG_MFD_LP3943=m
-CONFIG_MFD_LP8788=y
-CONFIG_MFD_PALMAS=y
-CONFIG_TPS6105X=m
-CONFIG_TPS65010=m
-CONFIG_TPS6507X=m
-CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS6586X=y
-CONFIG_MFD_TPS65910=y
-CONFIG_MFD_TPS65912_I2C=y
-CONFIG_MFD_TPS65912_SPI=y
-CONFIG_MFD_TPS80031=y
-CONFIG_TWL4030_CORE=y
-CONFIG_TWL6040_CORE=y
-CONFIG_MFD_LM3533=m
-CONFIG_MFD_ARIZONA_I2C=m
-CONFIG_MFD_ARIZONA_SPI=m
-CONFIG_MFD_WM5102=y
-CONFIG_MFD_WM5110=y
-CONFIG_MFD_WM8997=y
-CONFIG_MFD_WM8998=y
-CONFIG_MFD_WM8400=y
-CONFIG_MFD_WM831X_I2C=y
-CONFIG_MFD_WM831X_SPI=y
-CONFIG_MFD_WM8350_I2C=y
-CONFIG_MFD_WM8994=m
-CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
-CONFIG_REGULATOR_USERSPACE_CONSUMER=m
-CONFIG_REGULATOR_88PM800=m
-CONFIG_REGULATOR_88PM8607=m
-CONFIG_REGULATOR_ACT8865=m
-CONFIG_REGULATOR_AD5398=m
-CONFIG_REGULATOR_ANATOP=m
-CONFIG_REGULATOR_AAT2870=m
-CONFIG_REGULATOR_AB3100=m
-CONFIG_REGULATOR_AS3711=m
-CONFIG_REGULATOR_BCM590XX=m
-CONFIG_REGULATOR_DA903X=m
-CONFIG_REGULATOR_DA9052=m
-CONFIG_REGULATOR_DA9055=m
-CONFIG_REGULATOR_DA9062=m
-CONFIG_REGULATOR_DA9063=m
-CONFIG_REGULATOR_DA9210=m
-CONFIG_REGULATOR_DA9211=m
-CONFIG_REGULATOR_FAN53555=m
-CONFIG_REGULATOR_GPIO=m
-CONFIG_REGULATOR_ISL9305=m
-CONFIG_REGULATOR_ISL6271A=m
-CONFIG_REGULATOR_LP3971=m
-CONFIG_REGULATOR_LP3972=m
-CONFIG_REGULATOR_LP872X=m
-CONFIG_REGULATOR_LP8755=m
-CONFIG_REGULATOR_LP8788=m
-CONFIG_REGULATOR_LTC3589=m
-CONFIG_REGULATOR_MAX14577=m
-CONFIG_REGULATOR_MAX1586=m
-CONFIG_REGULATOR_MAX8649=m
-CONFIG_REGULATOR_MAX8660=m
-CONFIG_REGULATOR_MAX8907=m
-CONFIG_REGULATOR_MAX8925=m
-CONFIG_REGULATOR_MAX8952=m
-CONFIG_REGULATOR_MAX8997=m
-CONFIG_REGULATOR_MAX8998=m
-CONFIG_REGULATOR_MAX77693=m
-CONFIG_REGULATOR_MC13783=m
-CONFIG_REGULATOR_MC13892=m
-CONFIG_REGULATOR_MT6311=m
-CONFIG_REGULATOR_MT6397=m
-CONFIG_REGULATOR_PALMAS=m
-CONFIG_REGULATOR_PCAP=m
-CONFIG_REGULATOR_PCF50633=m
-CONFIG_REGULATOR_PFUZE100=m
-CONFIG_REGULATOR_PWM=m
-CONFIG_REGULATOR_QCOM_SPMI=m
-CONFIG_REGULATOR_RC5T583=m
-CONFIG_REGULATOR_RT5033=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
-CONFIG_REGULATOR_SKY81452=m
-CONFIG_REGULATOR_TPS51632=m
-CONFIG_REGULATOR_TPS62360=m
-CONFIG_REGULATOR_TPS65023=m
-CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_TPS65090=m
-CONFIG_REGULATOR_TPS6524X=m
-CONFIG_REGULATOR_TPS6586X=m
-CONFIG_REGULATOR_TPS65910=m
-CONFIG_REGULATOR_TPS65912=m
-CONFIG_REGULATOR_TPS80031=m
-CONFIG_REGULATOR_TWL4030=m
-CONFIG_REGULATOR_WM831X=m
-CONFIG_REGULATOR_WM8350=m
-CONFIG_REGULATOR_WM8400=m
-CONFIG_REGULATOR_WM8994=m
-CONFIG_MEDIA_SUPPORT=m
-CONFIG_MEDIA_CAMERA_SUPPORT=y
-CONFIG_MEDIA_ANALOG_TV_SUPPORT=y
-CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y
-CONFIG_MEDIA_RADIO_SUPPORT=y
-CONFIG_MEDIA_SDR_SUPPORT=y
-CONFIG_MEDIA_CONTROLLER=y
-CONFIG_VIDEO_V4L2_SUBDEV_API=y
-CONFIG_V4L2_FLASH_LED_CLASS=m
-CONFIG_DVB_DYNAMIC_MINORS=y
-CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_M5602=m
-CONFIG_USB_STV06XX=m
-CONFIG_USB_GL860=m
-CONFIG_USB_GSPCA_BENQ=m
-CONFIG_USB_GSPCA_CONEX=m
-CONFIG_USB_GSPCA_CPIA1=m
-CONFIG_USB_GSPCA_DTCS033=m
-CONFIG_USB_GSPCA_ETOMS=m
-CONFIG_USB_GSPCA_FINEPIX=m
-CONFIG_USB_GSPCA_JEILINJ=m
-CONFIG_USB_GSPCA_JL2005BCD=m
-CONFIG_USB_GSPCA_KINECT=m
-CONFIG_USB_GSPCA_KONICA=m
-CONFIG_USB_GSPCA_MARS=m
-CONFIG_USB_GSPCA_MR97310A=m
-CONFIG_USB_GSPCA_NW80X=m
-CONFIG_USB_GSPCA_OV519=m
-CONFIG_USB_GSPCA_OV534=m
-CONFIG_USB_GSPCA_OV534_9=m
-CONFIG_USB_GSPCA_PAC207=m
-CONFIG_USB_GSPCA_PAC7302=m
-CONFIG_USB_GSPCA_PAC7311=m
-CONFIG_USB_GSPCA_SE401=m
-CONFIG_USB_GSPCA_SN9C2028=m
-CONFIG_USB_GSPCA_SN9C20X=m
-CONFIG_USB_GSPCA_SONIXB=m
-CONFIG_USB_GSPCA_SONIXJ=m
-CONFIG_USB_GSPCA_SPCA500=m
-CONFIG_USB_GSPCA_SPCA501=m
-CONFIG_USB_GSPCA_SPCA505=m
-CONFIG_USB_GSPCA_SPCA506=m
-CONFIG_USB_GSPCA_SPCA508=m
-CONFIG_USB_GSPCA_SPCA561=m
-CONFIG_USB_GSPCA_SPCA1528=m
-CONFIG_USB_GSPCA_SQ905=m
-CONFIG_USB_GSPCA_SQ905C=m
-CONFIG_USB_GSPCA_SQ930X=m
-CONFIG_USB_GSPCA_STK014=m
-CONFIG_USB_GSPCA_STK1135=m
-CONFIG_USB_GSPCA_STV0680=m
-CONFIG_USB_GSPCA_SUNPLUS=m
-CONFIG_USB_GSPCA_T613=m
-CONFIG_USB_GSPCA_TOPRO=m
-CONFIG_USB_GSPCA_TOUPTEK=m
-CONFIG_USB_GSPCA_TV8532=m
-CONFIG_USB_GSPCA_VC032X=m
-CONFIG_USB_GSPCA_VICAM=m
-CONFIG_USB_GSPCA_XIRLINK_CIT=m
-CONFIG_USB_GSPCA_ZC3XX=m
-CONFIG_USB_PWC=m
-CONFIG_VIDEO_CPIA2=m
-CONFIG_USB_ZR364XX=m
-CONFIG_USB_STKWEBCAM=m
-CONFIG_USB_S2255=m
-CONFIG_VIDEO_USBTV=m
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_USBVISION=m
-CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
-CONFIG_VIDEO_AU0828=m
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_AF9015=m
-CONFIG_DVB_USB_AF9035=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_DVB_USB_RTL28XXU=m
-CONFIG_DVB_USB_DVBSKY=m
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_SMS_USB_DRV=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-CONFIG_DVB_AS102=m
-CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_EM28XX_V4L2=m
-CONFIG_VIDEO_EM28XX_ALSA=m
-CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_USB_AIRSPY=m
-CONFIG_USB_HACKRF=m
-CONFIG_USB_MSI2500=m
-CONFIG_MEDIA_PCI_SUPPORT=y
-CONFIG_VIDEO_MEYE=m
-CONFIG_VIDEO_SOLO6X10=m
-CONFIG_VIDEO_TW68=m
-CONFIG_VIDEO_ZORAN=m
-CONFIG_VIDEO_ZORAN_DC30=m
-CONFIG_VIDEO_ZORAN_ZR36060=m
-CONFIG_VIDEO_ZORAN_BUZ=m
-CONFIG_VIDEO_ZORAN_DC10=m
-CONFIG_VIDEO_ZORAN_LML33=m
-CONFIG_VIDEO_ZORAN_LML33R10=m
-CONFIG_VIDEO_ZORAN_AVS6EYES=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DT3155=m
-CONFIG_VIDEO_CX25821=m
-CONFIG_VIDEO_CX25821_ALSA=m
-CONFIG_VIDEO_SAA7134=m
-CONFIG_VIDEO_SAA7134_ALSA=m
-CONFIG_VIDEO_SAA7134_DVB=m
-CONFIG_VIDEO_SAA7134_GO7007=m
-CONFIG_VIDEO_SAA7164=m
-CONFIG_VIDEO_COBALT=m
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_BUDGET_CORE=m
-CONFIG_DVB_BUDGET=m
-CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_BUDGET_PATCH=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_PT1=m
-CONFIG_DVB_PT3=m
-CONFIG_DVB_NGENE=m
-CONFIG_DVB_DDBRIDGE=m
-CONFIG_DVB_NETUP_UNIDVB=m
-CONFIG_V4L_PLATFORM_DRIVERS=y
-CONFIG_VIDEO_CAFE_CCIC=m
-CONFIG_VIDEO_VIA_CAMERA=m
-CONFIG_SOC_CAMERA=m
-CONFIG_SOC_CAMERA_PLATFORM=m
-CONFIG_V4L_MEM2MEM_DRIVERS=y
-CONFIG_VIDEO_MEM2MEM_DEINTERLACE=m
-CONFIG_VIDEO_SH_VEU=m
-CONFIG_V4L_TEST_DRIVERS=y
-CONFIG_VIDEO_VIVID=m
-CONFIG_VIDEO_VIM2M=m
-CONFIG_DVB_PLATFORM_DRIVERS=y
-CONFIG_SMS_SDIO_DRV=m
-CONFIG_RADIO_SI470X=y
-CONFIG_USB_SI470X=m
-CONFIG_I2C_SI470X=m
-CONFIG_RADIO_SI4713=m
-CONFIG_USB_SI4713=m
-CONFIG_PLATFORM_SI4713=m
-CONFIG_RADIO_SI476X=m
-CONFIG_USB_MR800=m
-CONFIG_USB_DSBR=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_SHARK=m
-CONFIG_RADIO_SHARK2=m
-CONFIG_USB_KEENE=m
-CONFIG_USB_RAREMONO=m
-CONFIG_USB_MA901=m
-CONFIG_RADIO_TEA5764=m
-CONFIG_RADIO_SAA7706H=m
-CONFIG_RADIO_TEF6862=m
-CONFIG_RADIO_WL1273=m
-CONFIG_RADIO_WL128X=m
-CONFIG_DVB_FIREDTV=m
-CONFIG_SMS_SIANO_DEBUGFS=y
-CONFIG_SOC_CAMERA_IMX074=m
-CONFIG_SOC_CAMERA_MT9M001=m
-CONFIG_SOC_CAMERA_MT9M111=m
-CONFIG_SOC_CAMERA_MT9T031=m
-CONFIG_SOC_CAMERA_MT9T112=m
-CONFIG_SOC_CAMERA_MT9V022=m
-CONFIG_SOC_CAMERA_OV5642=m
-CONFIG_SOC_CAMERA_OV772X=m
-CONFIG_SOC_CAMERA_OV9640=m
-CONFIG_SOC_CAMERA_OV9740=m
-CONFIG_SOC_CAMERA_RJ54N1=m
-CONFIG_SOC_CAMERA_TW9910=m
-CONFIG_AGP=y
-CONFIG_AGP_AMD64=y
-CONFIG_AGP_INTEL=y
-CONFIG_AGP_SIS=m
-CONFIG_AGP_VIA=y
-CONFIG_VGA_SWITCHEROO=y
-CONFIG_DRM=y
-CONFIG_DRM_LOAD_EDID_FIRMWARE=y
-CONFIG_DRM_I2C_NXP_TDA998X=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_AMDGPU=m
-CONFIG_DRM_AMDGPU_USERPTR=y
-CONFIG_DRM_NOUVEAU=m
-CONFIG_DRM_I915=m
-CONFIG_DRM_VGEM=m
-CONFIG_DRM_VMWGFX=m
-CONFIG_DRM_VMWGFX_FBCON=y
-CONFIG_DRM_GMA500=m
-CONFIG_DRM_GMA600=y
-CONFIG_DRM_GMA3600=y
-CONFIG_DRM_UDL=m
-CONFIG_DRM_AST=m
-CONFIG_DRM_CIRRUS_QEMU=m
-CONFIG_DRM_QXL=m
-CONFIG_DRM_VIRTIO_GPU=m
-CONFIG_HSA_AMD=m
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB_CIRRUS=m
-CONFIG_FB_PM2=m
-CONFIG_FB_PM2_FIFO_DISCONNECT=y
-CONFIG_FB_CYBER2000=m
-CONFIG_FB_ARC=m
-CONFIG_FB_ASILIANT=y
-CONFIG_FB_IMSTT=y
-CONFIG_FB_VGA16=m
-CONFIG_FB_UVESA=m
-CONFIG_FB_VESA=y
-CONFIG_FB_EFI=y
-CONFIG_FB_N411=m
-CONFIG_FB_HGA=m
-CONFIG_FB_OPENCORES=m
-CONFIG_FB_S1D13XXX=m
-CONFIG_FB_NVIDIA=m
-CONFIG_FB_NVIDIA_I2C=y
-CONFIG_FB_RIVA=m
-CONFIG_FB_RIVA_I2C=y
-CONFIG_FB_I740=m
-CONFIG_FB_LE80578=m
-CONFIG_FB_CARILLO_RANCH=m
-CONFIG_FB_INTEL=m
-CONFIG_FB_MATROX=m
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G=y
-CONFIG_FB_MATROX_I2C=m
-CONFIG_FB_MATROX_MAVEN=m
-CONFIG_FB_RADEON=m
-CONFIG_FB_ATY128=m
-CONFIG_FB_ATY=m
-CONFIG_FB_ATY_CT=y
-CONFIG_FB_ATY_GX=y
-CONFIG_FB_S3=m
-CONFIG_FB_SAVAGE=m
-CONFIG_FB_SAVAGE_I2C=y
-CONFIG_FB_SIS=m
-CONFIG_FB_SIS_300=y
-CONFIG_FB_SIS_315=y
-CONFIG_FB_VIA=m
-CONFIG_FB_VIA_X_COMPATIBILITY=y
-CONFIG_FB_NEOMAGIC=m
-CONFIG_FB_KYRO=m
-CONFIG_FB_3DFX=m
-# CONFIG_FB_3DFX_I2C is not set
-CONFIG_FB_VOODOO1=m
-CONFIG_FB_VT8623=m
-CONFIG_FB_TRIDENT=m
-CONFIG_FB_ARK=m
-CONFIG_FB_PM3=m
-CONFIG_FB_CARMINE=m
-CONFIG_FB_SM501=m
-CONFIG_FB_SMSCUFX=m
-CONFIG_FB_UDL=m
-CONFIG_FB_IBM_GXT4500=m
-CONFIG_XEN_FBDEV_FRONTEND=m
-CONFIG_FB_METRONOME=m
-CONFIG_FB_MB862XX=m
-CONFIG_FB_BROADSHEET=m
-CONFIG_FB_AUO_K190X=m
-CONFIG_FB_AUO_K1900=m
-CONFIG_FB_AUO_K1901=m
-CONFIG_FB_HYPERV=m
-CONFIG_FB_SIMPLE=y
-CONFIG_FB_SM712=m
-CONFIG_LCD_L4F00242T03=m
-CONFIG_LCD_LMS283GF05=m
-CONFIG_LCD_LTV350QV=m
-CONFIG_LCD_ILI922X=m
-CONFIG_LCD_TDO24M=m
-CONFIG_LCD_VGG2432A4=m
-CONFIG_LCD_PLATFORM=m
-CONFIG_LCD_S6E63M0=m
-CONFIG_LCD_LD9040=m
-CONFIG_LCD_AMS369FG06=m
-CONFIG_LCD_LMS501KF03=m
-CONFIG_LCD_HX8357=m
-CONFIG_BACKLIGHT_GENERIC=m
-CONFIG_BACKLIGHT_LM3533=m
-CONFIG_BACKLIGHT_CARILLO_RANCH=m
-CONFIG_BACKLIGHT_PWM=m
-CONFIG_BACKLIGHT_DA903X=m
-CONFIG_BACKLIGHT_DA9052=m
-CONFIG_BACKLIGHT_MAX8925=m
-CONFIG_BACKLIGHT_APPLE=m
-CONFIG_BACKLIGHT_PM8941_WLED=m
-CONFIG_BACKLIGHT_SAHARA=m
-CONFIG_BACKLIGHT_WM831X=m
-CONFIG_BACKLIGHT_ADP5520=m
-CONFIG_BACKLIGHT_ADP8860=m
-CONFIG_BACKLIGHT_ADP8870=m
-CONFIG_BACKLIGHT_88PM860X=m
-CONFIG_BACKLIGHT_PCF50633=m
-CONFIG_BACKLIGHT_AAT2870=m
-CONFIG_BACKLIGHT_LM3630A=m
-CONFIG_BACKLIGHT_LM3639=m
-CONFIG_BACKLIGHT_LP855X=m
-CONFIG_BACKLIGHT_LP8788=m
-CONFIG_BACKLIGHT_PANDORA=m
-CONFIG_BACKLIGHT_SKY81452=m
-CONFIG_BACKLIGHT_AS3711=m
-CONFIG_BACKLIGHT_GPIO=m
-CONFIG_BACKLIGHT_LV5207LP=m
-CONFIG_BACKLIGHT_BD6107=m
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_SOUND=m
-CONFIG_SND=m
-CONFIG_SND_HRTIMER=m
-CONFIG_SND_DYNAMIC_MINORS=y
-CONFIG_SND_SEQUENCER=m
-CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_PCSP=m
-CONFIG_SND_DUMMY=m
-CONFIG_SND_ALOOP=m
-CONFIG_SND_VIRMIDI=m
-CONFIG_SND_MTPAV=m
-CONFIG_SND_MTS64=m
-CONFIG_SND_SERIAL_U16550=m
-CONFIG_SND_MPU401=m
-CONFIG_SND_PORTMAN2X4=m
-CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AD1889=m
-CONFIG_SND_ALS300=m
-CONFIG_SND_ALS4000=m
-CONFIG_SND_ALI5451=m
-CONFIG_SND_ASIHPI=m
-CONFIG_SND_ATIIXP=m
-CONFIG_SND_ATIIXP_MODEM=m
-CONFIG_SND_AU8810=m
-CONFIG_SND_AU8820=m
-CONFIG_SND_AU8830=m
-CONFIG_SND_AW2=m
-CONFIG_SND_AZT3328=m
-CONFIG_SND_BT87X=m
-CONFIG_SND_CA0106=m
-CONFIG_SND_CMIPCI=m
-CONFIG_SND_OXYGEN=m
-CONFIG_SND_CS4281=m
-CONFIG_SND_CS46XX=m
-CONFIG_SND_CTXFI=m
-CONFIG_SND_DARLA20=m
-CONFIG_SND_GINA20=m
-CONFIG_SND_LAYLA20=m
-CONFIG_SND_DARLA24=m
-CONFIG_SND_GINA24=m
-CONFIG_SND_LAYLA24=m
-CONFIG_SND_MONA=m
-CONFIG_SND_MIA=m
-CONFIG_SND_ECHO3G=m
-CONFIG_SND_INDIGO=m
-CONFIG_SND_INDIGOIO=m
-CONFIG_SND_INDIGODJ=m
-CONFIG_SND_INDIGOIOX=m
-CONFIG_SND_INDIGODJX=m
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_EMU10K1X=m
-CONFIG_SND_ENS1370=m
-CONFIG_SND_ENS1371=m
-CONFIG_SND_ES1938=m
-CONFIG_SND_ES1968=m
-CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
-CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
-CONFIG_SND_HDSP=m
-CONFIG_SND_HDSPM=m
-CONFIG_SND_ICE1712=m
-CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
-CONFIG_SND_KORG1212=m
-CONFIG_SND_LOLA=m
-CONFIG_SND_LX6464ES=m
-CONFIG_SND_MAESTRO3=m
-CONFIG_SND_MAESTRO3_INPUT=y
-CONFIG_SND_MIXART=m
-CONFIG_SND_NM256=m
-CONFIG_SND_PCXHR=m
-CONFIG_SND_RIPTIDE=m
-CONFIG_SND_RME32=m
-CONFIG_SND_RME96=m
-CONFIG_SND_RME9652=m
-CONFIG_SND_SONICVIBES=m
-CONFIG_SND_TRIDENT=m
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VIA82XX_MODEM=m
-CONFIG_SND_VIRTUOSO=m
-CONFIG_SND_VX222=m
-CONFIG_SND_YMFPCI=m
-CONFIG_SND_HDA_INTEL=m
-CONFIG_SND_HDA_HWDEP=y
-CONFIG_SND_HDA_INPUT_BEEP=y
-CONFIG_SND_HDA_INPUT_BEEP_MODE=0
-CONFIG_SND_HDA_PATCH_LOADER=y
-CONFIG_SND_HDA_CODEC_REALTEK=m
-CONFIG_SND_HDA_CODEC_ANALOG=m
-CONFIG_SND_HDA_CODEC_SIGMATEL=m
-CONFIG_SND_HDA_CODEC_VIA=m
-CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_CODEC_CIRRUS=m
-CONFIG_SND_HDA_CODEC_CONEXANT=m
-CONFIG_SND_HDA_CODEC_CA0110=m
-CONFIG_SND_HDA_CODEC_CA0132=m
-CONFIG_SND_HDA_CODEC_CA0132_DSP=y
-CONFIG_SND_HDA_CODEC_CMEDIA=m
-CONFIG_SND_HDA_CODEC_SI3054=m
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_USB_UA101=m
-CONFIG_SND_USB_USX2Y=m
-CONFIG_SND_USB_CAIAQ=m
-CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_SND_USB_US122L=m
-CONFIG_SND_USB_6FIRE=m
-CONFIG_SND_USB_HIFACE=m
-CONFIG_SND_BCD2000=m
-CONFIG_SND_USB_POD=m
-CONFIG_SND_USB_PODHD=m
-CONFIG_SND_USB_TONEPORT=m
-CONFIG_SND_USB_VARIAX=m
-CONFIG_SND_DICE=m
-CONFIG_SND_OXFW=m
-CONFIG_SND_ISIGHT=m
-CONFIG_SND_FIREWORKS=m
-CONFIG_SND_BEBOB=m
-CONFIG_SND_FIREWIRE_DIGI00X=m
-CONFIG_SND_FIREWIRE_TASCAM=m
-CONFIG_SND_VXPOCKET=m
-CONFIG_SND_PDAUDIOCF=m
-CONFIG_SND_SOC=m
-CONFIG_SND_ATMEL_SOC=m
-CONFIG_SND_DESIGNWARE_I2S=m
-CONFIG_SND_SOC_FSL_ASRC=m
-CONFIG_SND_SOC_FSL_SAI=m
-CONFIG_SND_SOC_FSL_SSI=m
-CONFIG_SND_SOC_FSL_SPDIF=m
-CONFIG_SND_SOC_FSL_ESAI=m
-CONFIG_SND_SOC_IMX_AUDMUX=m
-CONFIG_SND_SOC_INTEL_SST_TOPLEVEL=m
-CONFIG_SND_SOC_INTEL_HASWELL=m
-CONFIG_SND_SOC_INTEL_BAYTRAIL=m
-CONFIG_SND_SST_ATOM_HIFI2_PLATFORM=m
-CONFIG_SND_SOC_INTEL_SKYLAKE=m
-CONFIG_SND_SOC_INTEL_HASWELL_MACH=m
-CONFIG_SND_SOC_INTEL_BDW_RT5677_MACH=m
-CONFIG_SND_SOC_INTEL_BROADWELL_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
-CONFIG_SND_SOC_XTFPGA_I2S=m
-CONFIG_SND_SOC_AC97_CODEC=m
-CONFIG_SND_SOC_ADAU1701=m
-CONFIG_SND_SOC_AK4104=m
-CONFIG_SND_SOC_AK4554=m
-CONFIG_SND_SOC_AK4613=m
-CONFIG_SND_SOC_AK4642=m
-CONFIG_SND_SOC_AK5386=m
-CONFIG_SND_SOC_ALC5623=m
-CONFIG_SND_SOC_CS35L32=m
-CONFIG_SND_SOC_CS42L51_I2C=m
-CONFIG_SND_SOC_CS42L52=m
-CONFIG_SND_SOC_CS42L56=m
-CONFIG_SND_SOC_CS42L73=m
-CONFIG_SND_SOC_CS4265=m
-CONFIG_SND_SOC_CS4270=m
-CONFIG_SND_SOC_CS4271_I2C=m
-CONFIG_SND_SOC_CS4271_SPI=m
-CONFIG_SND_SOC_CS42XX8_I2C=m
-CONFIG_SND_SOC_CS4349=m
-CONFIG_SND_SOC_GTM601=m
-CONFIG_SND_SOC_PCM1681=m
-CONFIG_SND_SOC_PCM512x_I2C=m
-CONFIG_SND_SOC_PCM512x_SPI=m
-CONFIG_SND_SOC_RT5631=m
-CONFIG_SND_SOC_SGTL5000=m
-CONFIG_SND_SOC_SIRF_AUDIO_CODEC=m
-CONFIG_SND_SOC_SPDIF=m
-CONFIG_SND_SOC_SSM2602_SPI=m
-CONFIG_SND_SOC_SSM2602_I2C=m
-CONFIG_SND_SOC_STA32X=m
-CONFIG_SND_SOC_STA350=m
-CONFIG_SND_SOC_STI_SAS=m
-CONFIG_SND_SOC_TAS2552=m
-CONFIG_SND_SOC_TAS5086=m
-CONFIG_SND_SOC_TAS571X=m
-CONFIG_SND_SOC_TFA9879=m
-CONFIG_SND_SOC_TLV320AIC23_I2C=m
-CONFIG_SND_SOC_TLV320AIC23_SPI=m
-CONFIG_SND_SOC_TLV320AIC31XX=m
-CONFIG_SND_SOC_TLV320AIC3X=m
-CONFIG_SND_SOC_WM8510=m
-CONFIG_SND_SOC_WM8523=m
-CONFIG_SND_SOC_WM8580=m
-CONFIG_SND_SOC_WM8711=m
-CONFIG_SND_SOC_WM8728=m
-CONFIG_SND_SOC_WM8731=m
-CONFIG_SND_SOC_WM8737=m
-CONFIG_SND_SOC_WM8741=m
-CONFIG_SND_SOC_WM8750=m
-CONFIG_SND_SOC_WM8753=m
-CONFIG_SND_SOC_WM8770=m
-CONFIG_SND_SOC_WM8776=m
-CONFIG_SND_SOC_WM8804_I2C=m
-CONFIG_SND_SOC_WM8804_SPI=m
-CONFIG_SND_SOC_WM8903=m
-CONFIG_SND_SOC_WM8962=m
-CONFIG_SND_SOC_WM8978=m
-CONFIG_SND_SOC_TPA6130A2=m
-CONFIG_SND_SIMPLE_CARD=m
-CONFIG_HDMI_LPE_AUDIO=m
-CONFIG_HID=m
-CONFIG_HID_BATTERY_STRENGTH=y
-CONFIG_HIDRAW=y
-CONFIG_UHID=m
-CONFIG_HID_A4TECH=m
-CONFIG_HID_ACRUX=m
-CONFIG_HID_ACRUX_FF=y
-CONFIG_HID_APPLE=m
-CONFIG_HID_APPLEIR=m
-CONFIG_HID_AUREAL=m
-CONFIG_HID_BELKIN=m
-CONFIG_HID_BETOP_FF=m
-CONFIG_HID_CHERRY=m
-CONFIG_HID_CHICONY=m
-CONFIG_HID_CORSAIR=m
-CONFIG_HID_PRODIKEYS=m
-CONFIG_HID_CP2112=m
-CONFIG_HID_CYPRESS=m
-CONFIG_HID_DRAGONRISE=m
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=m
-CONFIG_HID_ELECOM=m
-CONFIG_HID_ELO=m
-CONFIG_HID_EZKEY=m
-CONFIG_HID_GEMBIRD=m
-CONFIG_HID_GFRM=m
-CONFIG_HID_HOLTEK=m
-CONFIG_HOLTEK_FF=y
-CONFIG_HID_GT683R=m
-CONFIG_HID_KEYTOUCH=m
-CONFIG_HID_KYE=m
-CONFIG_HID_UCLOGIC=m
-CONFIG_HID_WALTOP=m
-CONFIG_HID_GYRATION=m
-CONFIG_HID_ICADE=m
-CONFIG_HID_TWINHAN=m
-CONFIG_HID_KENSINGTON=m
-CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO=m
-CONFIG_HID_LOGITECH=m
-CONFIG_HID_LOGITECH_DJ=m
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
-CONFIG_HID_MAGICMOUSE=m
-CONFIG_HID_MICROSOFT=m
-CONFIG_HID_MONTEREY=m
-CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_NTRIG=m
-CONFIG_HID_ORTEK=m
-CONFIG_HID_PANTHERLORD=m
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PENMOUNT=m
-CONFIG_HID_PETALYNX=m
-CONFIG_HID_PICOLCD=m
-CONFIG_HID_PICOLCD_FB=y
-CONFIG_HID_PICOLCD_BACKLIGHT=y
-CONFIG_HID_PICOLCD_LCD=y
-CONFIG_HID_PICOLCD_LEDS=y
-CONFIG_HID_PLANTRONICS=m
-CONFIG_HID_PRIMAX=m
-CONFIG_HID_ROCCAT=m
-CONFIG_HID_SAITEK=m
-CONFIG_HID_SAMSUNG=m
-CONFIG_HID_SONY=m
-CONFIG_SONY_FF=y
-CONFIG_HID_SPEEDLINK=m
-CONFIG_HID_STEELSERIES=m
-CONFIG_HID_SUNPLUS=m
-CONFIG_HID_RMI=m
-CONFIG_HID_GREENASIA=m
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_HYPERV_MOUSE=m
-CONFIG_HID_SMARTJOYPLUS=m
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=m
-CONFIG_HID_TOPSEED=m
-CONFIG_HID_THINGM=m
-CONFIG_HID_THRUSTMASTER=m
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_HID_WACOM=m
-CONFIG_HID_WIIMOTE=m
-CONFIG_HID_XINMO=m
-CONFIG_HID_ZEROPLUS=m
-CONFIG_ZEROPLUS_FF=y
-CONFIG_HID_ZYDACRON=m
-CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
-CONFIG_USB_HID=m
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_I2C_HID=m
-CONFIG_USB=y
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-CONFIG_USB_DYNAMIC_MINORS=y
-CONFIG_USB_MON=m
-CONFIG_USB_WUSB_CBAF=m
-CONFIG_USB_C67X00_HCD=m
-CONFIG_USB_XHCI_HCD=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_HCD_PLATFORM=y
-CONFIG_USB_OXU210HP_HCD=m
-CONFIG_USB_ISP116X_HCD=m
-CONFIG_USB_ISP1362_HCD=m
-CONFIG_USB_FOTG210_HCD=m
-CONFIG_USB_MAX3421_HCD=m
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_OHCI_HCD_PLATFORM=y
-CONFIG_USB_UHCI_HCD=y
-CONFIG_USB_U132_HCD=m
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_HCD_ISO=y
-CONFIG_USB_SL811_CS=m
-CONFIG_USB_R8A66597_HCD=m
-CONFIG_USB_WHCI_HCD=m
-CONFIG_USB_HWA_HCD=m
-CONFIG_USB_HCD_SSB=m
-CONFIG_USB_PRINTER=m
-CONFIG_USB_TMC=m
-CONFIG_USB_ACM=y
-CONFIG_USB_STORAGE=y
-CONFIG_USB_STORAGE_REALTEK=y
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_STORAGE_ONETOUCH=y
-CONFIG_USB_STORAGE_KARMA=y
-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
-CONFIG_USB_STORAGE_ENE_UB6250=y
-CONFIG_USB_UAS=y
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-CONFIG_USB_MUSB_HDRC=m
-CONFIG_MUSB_PIO_ONLY=y
-CONFIG_USB_DWC3=m
-CONFIG_USB_DWC3_ULPI=y
-CONFIG_USB_DWC2=y
-CONFIG_USB_DWC2_PCI=m
-CONFIG_USB_CHIPIDEA=m
-CONFIG_USB_CHIPIDEA_UDC=y
-CONFIG_USB_CHIPIDEA_HOST=y
-CONFIG_USB_ISP1760=m
-CONFIG_USB_USS720=m
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_SIMPLE=m
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_CH341=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP210X=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_F81232=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_IUU=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_METRO=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7715_PARPORT=y
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MXUPORT=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_OTI6858=m
-CONFIG_USB_SERIAL_QCAUX=m
-CONFIG_USB_SERIAL_QUALCOMM=m
-CONFIG_USB_SERIAL_SPCP8X5=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_SYMBOL=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_XIRCOM=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_OPTICON=m
-CONFIG_USB_SERIAL_XSENS_MT=m
-CONFIG_USB_SERIAL_WISHBONE=m
-CONFIG_USB_SERIAL_SSU100=m
-CONFIG_USB_SERIAL_QT2=m
-CONFIG_USB_SERIAL_DEBUG=m
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_ADUTUX=m
-CONFIG_USB_SEVSEG=m
-CONFIG_USB_RIO500=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_CYPRESS_CY7C63=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
-CONFIG_USB_SISUSBVGA=m
-CONFIG_USB_LD=m
-CONFIG_USB_TRANCEVIBRATOR=m
-CONFIG_USB_IOWARRIOR=m
-CONFIG_USB_TEST=m
-CONFIG_USB_EHSET_TEST_FIXTURE=m
-CONFIG_USB_ISIGHTFW=m
-CONFIG_USB_YUREX=m
-CONFIG_USB_HSIC_USB3503=m
-CONFIG_USB_LINK_LAYER_TEST=m
-CONFIG_USB_CHAOSKEY=m
-CONFIG_USB_ATM=m
-CONFIG_USB_SPEEDTOUCH=m
-CONFIG_USB_CXACRU=m
-CONFIG_USB_UEAGLEATM=m
-CONFIG_USB_XUSBATM=m
-CONFIG_USB_GPIO_VBUS=m
-CONFIG_TAHVO_USB=m
-CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
-CONFIG_USB_ISP1301=m
-CONFIG_USB_GADGET=m
-CONFIG_USB_FOTG210_UDC=m
-CONFIG_USB_GR_UDC=m
-CONFIG_USB_R8A66597=m
-CONFIG_USB_PXA27X=m
-CONFIG_USB_MV_UDC=m
-CONFIG_USB_MV_U3D=m
-CONFIG_USB_BDC_UDC=m
-CONFIG_USB_AMD5536UDC=m
-CONFIG_USB_NET2272=m
-CONFIG_USB_NET2272_DMA=y
-CONFIG_USB_NET2280=m
-CONFIG_USB_GOKU=m
-CONFIG_USB_EG20T=m
-CONFIG_USB_CONFIGFS=m
-CONFIG_USB_CONFIGFS_SERIAL=y
-CONFIG_USB_CONFIGFS_ACM=y
-CONFIG_USB_CONFIGFS_OBEX=y
-CONFIG_USB_CONFIGFS_NCM=y
-CONFIG_USB_CONFIGFS_ECM=y
-CONFIG_USB_CONFIGFS_ECM_SUBSET=y
-CONFIG_USB_CONFIGFS_RNDIS=y
-CONFIG_USB_CONFIGFS_EEM=y
-CONFIG_USB_CONFIGFS_PHONET=y
-CONFIG_USB_CONFIGFS_MASS_STORAGE=y
-CONFIG_USB_CONFIGFS_F_LB_SS=y
-CONFIG_USB_CONFIGFS_F_FS=y
-CONFIG_USB_CONFIGFS_F_UAC1=y
-CONFIG_USB_CONFIGFS_F_UAC2=y
-CONFIG_USB_CONFIGFS_F_MIDI=y
-CONFIG_USB_CONFIGFS_F_HID=y
-CONFIG_USB_CONFIGFS_F_UVC=y
-CONFIG_USB_CONFIGFS_F_PRINTER=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_AUDIO=m
-CONFIG_GADGET_UAC1=y
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_EEM=y
-CONFIG_USB_G_NCM=m
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FUNCTIONFS=m
-CONFIG_USB_FUNCTIONFS_ETH=y
-CONFIG_USB_FUNCTIONFS_RNDIS=y
-CONFIG_USB_FUNCTIONFS_GENERIC=y
-CONFIG_USB_MASS_STORAGE=m
-CONFIG_USB_GADGET_TARGET=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_USB_MIDI_GADGET=m
-CONFIG_USB_G_PRINTER=m
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_USB_G_NOKIA=m
-CONFIG_USB_G_ACM_MS=m
-CONFIG_USB_G_HID=m
-CONFIG_USB_G_DBGP=m
-CONFIG_USB_G_WEBCAM=m
-CONFIG_USB_LED_TRIG=y
-CONFIG_USB_ULPI_BUS=m
-CONFIG_UWB=m
-CONFIG_UWB_I1480U=m
-CONFIG_MMC=y
-CONFIG_MMC_BLOCK=m
-CONFIG_SDIO_UART=m
-CONFIG_MMC_SDHCI=m
-CONFIG_MMC_SDHCI_PCI=m
-CONFIG_MMC_SDHCI_ACPI=m
-CONFIG_MMC_SDHCI_PLTFM=m
-CONFIG_MMC_WBSD=m
-CONFIG_MMC_TIFM_SD=m
-CONFIG_MMC_SPI=m
-CONFIG_MMC_SDRICOH_CS=m
-CONFIG_MMC_CB710=m
-CONFIG_MMC_VIA_SDMMC=m
-CONFIG_MMC_VUB300=m
-CONFIG_MMC_USHC=m
-CONFIG_MMC_USDHI6ROL0=m
-CONFIG_MMC_REALTEK_PCI=m
-CONFIG_MMC_REALTEK_USB=m
-CONFIG_MMC_TOSHIBA_PCI=m
-CONFIG_MMC_MTK=m
-CONFIG_MEMSTICK=m
-CONFIG_MSPRO_BLOCK=m
-CONFIG_MS_BLOCK=m
-CONFIG_MEMSTICK_TIFM_MS=m
-CONFIG_MEMSTICK_JMICRON_38X=m
-CONFIG_MEMSTICK_R592=m
-CONFIG_MEMSTICK_REALTEK_PCI=m
-CONFIG_MEMSTICK_REALTEK_USB=m
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_CLASS_FLASH=m
-CONFIG_LEDS_88PM860X=m
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3533=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-CONFIG_LEDS_PCA9532_GPIO=y
-CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP5521=m
-CONFIG_LEDS_LP5523=m
-CONFIG_LEDS_LP5562=m
-CONFIG_LEDS_LP8501=m
-CONFIG_LEDS_LP8788=m
-CONFIG_LEDS_LP8860=m
-CONFIG_LEDS_CLEVO_MAIL=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA963X=m
-CONFIG_LEDS_WM831X_STATUS=m
-CONFIG_LEDS_WM8350=m
-CONFIG_LEDS_DA903X=m
-CONFIG_LEDS_DA9052=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_PWM=m
-CONFIG_LEDS_REGULATOR=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_INTEL_SS4200=m
-CONFIG_LEDS_LT3593=m
-CONFIG_LEDS_ADP5520=m
-CONFIG_LEDS_MC13783=m
-CONFIG_LEDS_TCA6507=m
-CONFIG_LEDS_TLC591XX=m
-CONFIG_LEDS_MAX8997=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_MENF21BMC=m
-CONFIG_LEDS_BLINKM=m
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-CONFIG_LEDS_TRIGGER_TRANSIENT=m
-CONFIG_LEDS_TRIGGER_CAMERA=m
-CONFIG_INFINIBAND=m
-CONFIG_INFINIBAND_USER_MAD=m
-CONFIG_INFINIBAND_MTHCA=m
-# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
-CONFIG_INFINIBAND_CXGB3=m
-CONFIG_INFINIBAND_CXGB4=m
-CONFIG_MLX4_INFINIBAND=m
-CONFIG_MLX5_INFINIBAND=m
-CONFIG_INFINIBAND_NES=m
-CONFIG_INFINIBAND_OCRDMA=m
-CONFIG_INFINIBAND_USNIC=m
-CONFIG_INFINIBAND_IPOIB=m
-CONFIG_INFINIBAND_IPOIB_CM=y
-# CONFIG_INFINIBAND_IPOIB_DEBUG is not set
-CONFIG_INFINIBAND_SRP=m
-CONFIG_INFINIBAND_SRPT=m
-CONFIG_INFINIBAND_ISER=m
-CONFIG_INFINIBAND_ISERT=m
-CONFIG_EDAC=y
-# CONFIG_EDAC_LEGACY_SYSFS is not set
-CONFIG_EDAC_DECODE_MCE=m
-CONFIG_EDAC_AMD64=m
-CONFIG_EDAC_E752X=m
-CONFIG_EDAC_I82975X=m
-CONFIG_EDAC_I3000=m
-CONFIG_EDAC_I3200=m
-CONFIG_EDAC_IE31200=m
-CONFIG_EDAC_X38=m
-CONFIG_EDAC_I5400=m
-CONFIG_EDAC_I7CORE=m
-CONFIG_EDAC_I5000=m
-CONFIG_EDAC_I5100=m
-CONFIG_EDAC_I7300=m
-CONFIG_EDAC_SBRIDGE=m
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_DRV_88PM860X=m
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_ABB5ZES3=m
-CONFIG_RTC_DRV_ABX80X=m
-CONFIG_RTC_DRV_DS1307=m
-CONFIG_RTC_DRV_DS1374=m
-CONFIG_RTC_DRV_DS1374_WDT=y
-CONFIG_RTC_DRV_DS1672=m
-CONFIG_RTC_DRV_LP8788=m
-CONFIG_RTC_DRV_MAX6900=m
-CONFIG_RTC_DRV_MAX8907=m
-CONFIG_RTC_DRV_MAX8925=m
-CONFIG_RTC_DRV_MAX8998=m
-CONFIG_RTC_DRV_MAX8997=m
-CONFIG_RTC_DRV_RS5C372=m
-CONFIG_RTC_DRV_ISL1208=m
-CONFIG_RTC_DRV_ISL12022=m
-CONFIG_RTC_DRV_X1205=m
-CONFIG_RTC_DRV_PCF8523=m
-CONFIG_RTC_DRV_PCF85063=m
-CONFIG_RTC_DRV_PCF8563=m
-CONFIG_RTC_DRV_PCF8583=m
-CONFIG_RTC_DRV_M41T80=m
-CONFIG_RTC_DRV_M41T80_WDT=y
-CONFIG_RTC_DRV_BQ32K=m
-CONFIG_RTC_DRV_PALMAS=m
-CONFIG_RTC_DRV_TPS6586X=m
-CONFIG_RTC_DRV_TPS65910=m
-CONFIG_RTC_DRV_TPS80031=m
-CONFIG_RTC_DRV_RC5T583=m
-CONFIG_RTC_DRV_S35390A=m
-CONFIG_RTC_DRV_FM3130=m
-CONFIG_RTC_DRV_RX8581=m
-CONFIG_RTC_DRV_RX8025=m
-CONFIG_RTC_DRV_EM3027=m
-CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
-CONFIG_RTC_DRV_M41T93=m
-CONFIG_RTC_DRV_M41T94=m
-CONFIG_RTC_DRV_DS1305=m
-CONFIG_RTC_DRV_DS1343=m
-CONFIG_RTC_DRV_DS1347=m
-CONFIG_RTC_DRV_DS1390=m
-CONFIG_RTC_DRV_R9701=m
-CONFIG_RTC_DRV_RX4581=m
-CONFIG_RTC_DRV_RS5C348=m
-CONFIG_RTC_DRV_MAX6902=m
-CONFIG_RTC_DRV_PCF2123=m
-CONFIG_RTC_DRV_MCP795=m
-CONFIG_RTC_DRV_DS3232=m
-CONFIG_RTC_DRV_PCF2127=m
-CONFIG_RTC_DRV_RV3029C2=m
-CONFIG_RTC_DRV_DS1286=m
-CONFIG_RTC_DRV_DS1511=m
-CONFIG_RTC_DRV_DS1553=m
-CONFIG_RTC_DRV_DS1685_FAMILY=m
-CONFIG_RTC_DRV_DS1742=m
-CONFIG_RTC_DRV_DS2404=m
-CONFIG_RTC_DRV_DA9052=m
-CONFIG_RTC_DRV_DA9055=m
-CONFIG_RTC_DRV_DA9063=m
-CONFIG_RTC_DRV_STK17TA8=m
-CONFIG_RTC_DRV_M48T86=m
-CONFIG_RTC_DRV_M48T35=m
-CONFIG_RTC_DRV_M48T59=m
-CONFIG_RTC_DRV_MSM6242=m
-CONFIG_RTC_DRV_BQ4802=m
-CONFIG_RTC_DRV_RP5C01=m
-CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_WM831X=m
-CONFIG_RTC_DRV_WM8350=m
-CONFIG_RTC_DRV_PCF50633=m
-CONFIG_RTC_DRV_AB3100=m
-CONFIG_RTC_DRV_PCAP=m
-CONFIG_RTC_DRV_MC13XXX=m
-CONFIG_RTC_DRV_MT6397=m
-CONFIG_RTC_DRV_HID_SENSOR_TIME=m
-CONFIG_INTEL_IDMA64=m
-CONFIG_INTEL_IOATDMA=m
-CONFIG_INTEL_MIC_X100_DMA=m
-CONFIG_DW_DMAC=m
-CONFIG_ASYNC_TX_DMA=y
-CONFIG_AUXDISPLAY=y
-CONFIG_KS0108=m
-CONFIG_CFAG12864B=m
-CONFIG_PANEL=m
-CONFIG_UIO_CIF=m
-CONFIG_UIO_PDRV_GENIRQ=m
-CONFIG_UIO_DMEM_GENIRQ=m
-CONFIG_UIO_AEC=m
-CONFIG_UIO_SERCOS3=m
-CONFIG_UIO_PCI_GENERIC=m
-CONFIG_UIO_NETX=m
-CONFIG_UIO_PRUSS=m
-CONFIG_UIO_MF624=m
-CONFIG_VFIO=m
-CONFIG_VFIO_PCI=m
-CONFIG_VFIO_PCI_VGA=y
-CONFIG_VIRT_DRIVERS=y
-CONFIG_VIRTIO_PCI=y
-CONFIG_VIRTIO_BALLOON=y
-CONFIG_VIRTIO_INPUT=m
-CONFIG_VIRTIO_MMIO=y
-CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y
-CONFIG_HYPERV=m
-CONFIG_HYPERV_UTILS=m
-CONFIG_HYPERV_BALLOON=m
-CONFIG_XEN_SELFBALLOONING=y
-CONFIG_XEN_BALLOON_MEMORY_HOTPLUG=y
-CONFIG_XEN_DEV_EVTCHN=m
-CONFIG_XENFS=m
-CONFIG_XEN_SCSI_BACKEND=m
-CONFIG_XEN_ACPI_PROCESSOR=y
-CONFIG_XEN_MCE_LOG=y
-CONFIG_STAGING=y
-CONFIG_IRDA=m
-CONFIG_IRLAN=m
-CONFIG_IRNET=m
-CONFIG_IRCOMM=m
-CONFIG_IRDA_ULTRA=y
-CONFIG_IRDA_CACHE_LAST_LSAP=y
-CONFIG_IRDA_FAST_RR=y
-CONFIG_IRTTY_SIR=m
-CONFIG_DONGLE=y
-CONFIG_ESI_DONGLE=m
-CONFIG_ACTISYS_DONGLE=m
-CONFIG_TEKRAM_DONGLE=m
-CONFIG_TOIM3232_DONGLE=m
-CONFIG_LITELINK_DONGLE=m
-CONFIG_MA600_DONGLE=m
-CONFIG_GIRBIL_DONGLE=m
-CONFIG_MCP2120_DONGLE=m
-CONFIG_OLD_BELKIN_DONGLE=m
-CONFIG_ACT200L_DONGLE=m
-CONFIG_KINGSUN_DONGLE=m
-CONFIG_KSDAZZLE_DONGLE=m
-CONFIG_KS959_DONGLE=m
-CONFIG_USB_IRDA=m
-CONFIG_SIGMATEL_FIR=m
-CONFIG_NSC_FIR=m
-CONFIG_WINBOND_FIR=m
-CONFIG_SMC_IRCC_FIR=m
-CONFIG_ALI_FIR=m
-CONFIG_VLSI_FIR=m
-CONFIG_VIA_FIR=m
-CONFIG_MCS_FIR=m
-CONFIG_COMEDI=m
-CONFIG_COMEDI_MISC_DRIVERS=y
-CONFIG_COMEDI_BOND=m
-CONFIG_COMEDI_TEST=m
-CONFIG_COMEDI_PARPORT=m
-CONFIG_COMEDI_SERIAL2002=m
-CONFIG_COMEDI_ISA_DRIVERS=y
-CONFIG_COMEDI_PCL711=m
-CONFIG_COMEDI_PCL724=m
-CONFIG_COMEDI_PCL726=m
-CONFIG_COMEDI_PCL730=m
-CONFIG_COMEDI_PCL812=m
-CONFIG_COMEDI_PCL816=m
-CONFIG_COMEDI_PCL818=m
-CONFIG_COMEDI_PCM3724=m
-CONFIG_COMEDI_AMPLC_DIO200_ISA=m
-CONFIG_COMEDI_AMPLC_PC236_ISA=m
-CONFIG_COMEDI_AMPLC_PC263_ISA=m
-CONFIG_COMEDI_RTI800=m
-CONFIG_COMEDI_RTI802=m
-CONFIG_COMEDI_DAC02=m
-CONFIG_COMEDI_DAS16M1=m
-CONFIG_COMEDI_DAS08_ISA=m
-CONFIG_COMEDI_DAS16=m
-CONFIG_COMEDI_DAS800=m
-CONFIG_COMEDI_DAS1800=m
-CONFIG_COMEDI_DAS6402=m
-CONFIG_COMEDI_DT2801=m
-CONFIG_COMEDI_DT2811=m
-CONFIG_COMEDI_DT2814=m
-CONFIG_COMEDI_DT2815=m
-CONFIG_COMEDI_DT2817=m
-CONFIG_COMEDI_DT282X=m
-CONFIG_COMEDI_DMM32AT=m
-CONFIG_COMEDI_FL512=m
-CONFIG_COMEDI_AIO_AIO12_8=m
-CONFIG_COMEDI_AIO_IIRO_16=m
-CONFIG_COMEDI_II_PCI20KC=m
-CONFIG_COMEDI_C6XDIGIO=m
-CONFIG_COMEDI_MPC624=m
-CONFIG_COMEDI_ADQ12B=m
-CONFIG_COMEDI_NI_AT_A2150=m
-CONFIG_COMEDI_NI_AT_AO=m
-CONFIG_COMEDI_NI_ATMIO=m
-CONFIG_COMEDI_NI_ATMIO16D=m
-CONFIG_COMEDI_NI_LABPC_ISA=m
-CONFIG_COMEDI_PCMAD=m
-CONFIG_COMEDI_PCMDA12=m
-CONFIG_COMEDI_PCMMIO=m
-CONFIG_COMEDI_PCMUIO=m
-CONFIG_COMEDI_MULTIQ3=m
-CONFIG_COMEDI_S526=m
-CONFIG_COMEDI_PCI_DRIVERS=m
-CONFIG_COMEDI_8255_PCI=m
-CONFIG_COMEDI_ADDI_APCI_1032=m
-CONFIG_COMEDI_ADDI_APCI_1500=m
-CONFIG_COMEDI_ADDI_APCI_1516=m
-CONFIG_COMEDI_ADDI_APCI_1564=m
-CONFIG_COMEDI_ADDI_APCI_16XX=m
-CONFIG_COMEDI_ADDI_APCI_2032=m
-CONFIG_COMEDI_ADDI_APCI_2200=m
-CONFIG_COMEDI_ADDI_APCI_3120=m
-CONFIG_COMEDI_ADDI_APCI_3501=m
-CONFIG_COMEDI_ADDI_APCI_3XXX=m
-CONFIG_COMEDI_ADL_PCI6208=m
-CONFIG_COMEDI_ADL_PCI7X3X=m
-CONFIG_COMEDI_ADL_PCI8164=m
-CONFIG_COMEDI_ADL_PCI9111=m
-CONFIG_COMEDI_ADL_PCI9118=m
-CONFIG_COMEDI_ADV_PCI1710=m
-CONFIG_COMEDI_ADV_PCI1723=m
-CONFIG_COMEDI_ADV_PCI1724=m
-CONFIG_COMEDI_ADV_PCI_DIO=m
-CONFIG_COMEDI_AMPLC_DIO200_PCI=m
-CONFIG_COMEDI_AMPLC_PC236_PCI=m
-CONFIG_COMEDI_AMPLC_PC263_PCI=m
-CONFIG_COMEDI_AMPLC_PCI224=m
-CONFIG_COMEDI_AMPLC_PCI230=m
-CONFIG_COMEDI_CONTEC_PCI_DIO=m
-CONFIG_COMEDI_DAS08_PCI=m
-CONFIG_COMEDI_DT3000=m
-CONFIG_COMEDI_DYNA_PCI10XX=m
-CONFIG_COMEDI_GSC_HPDI=m
-CONFIG_COMEDI_MF6X4=m
-CONFIG_COMEDI_ICP_MULTI=m
-CONFIG_COMEDI_DAQBOARD2000=m
-CONFIG_COMEDI_JR3_PCI=m
-CONFIG_COMEDI_KE_COUNTER=m
-CONFIG_COMEDI_CB_PCIDAS64=m
-CONFIG_COMEDI_CB_PCIDAS=m
-CONFIG_COMEDI_CB_PCIDDA=m
-CONFIG_COMEDI_CB_PCIMDAS=m
-CONFIG_COMEDI_CB_PCIMDDA=m
-CONFIG_COMEDI_ME4000=m
-CONFIG_COMEDI_ME_DAQ=m
-CONFIG_COMEDI_NI_6527=m
-CONFIG_COMEDI_NI_65XX=m
-CONFIG_COMEDI_NI_660X=m
-CONFIG_COMEDI_NI_670X=m
-CONFIG_COMEDI_NI_LABPC_PCI=m
-CONFIG_COMEDI_NI_PCIDIO=m
-CONFIG_COMEDI_NI_PCIMIO=m
-CONFIG_COMEDI_RTD520=m
-CONFIG_COMEDI_S626=m
-CONFIG_COMEDI_PCMCIA_DRIVERS=m
-CONFIG_COMEDI_CB_DAS16_CS=m
-CONFIG_COMEDI_DAS08_CS=m
-CONFIG_COMEDI_NI_DAQ_700_CS=m
-CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
-CONFIG_COMEDI_NI_LABPC_CS=m
-CONFIG_COMEDI_NI_MIO_CS=m
-CONFIG_COMEDI_QUATECH_DAQP_CS=m
-CONFIG_COMEDI_USB_DRIVERS=m
-CONFIG_COMEDI_DT9812=m
-CONFIG_COMEDI_NI_USB6501=m
-CONFIG_COMEDI_USBDUX=m
-CONFIG_COMEDI_USBDUXFAST=m
-CONFIG_COMEDI_USBDUXSIGMA=m
-CONFIG_COMEDI_VMK80XX=m
-CONFIG_COMEDI_8255_SA=m
-CONFIG_RTL8192U=m
-CONFIG_RTLLIB=m
-CONFIG_RTL8192E=m
-CONFIG_R8712U=m
-CONFIG_RTS5208=m
-CONFIG_ADIS16201=m
-CONFIG_ADIS16203=m
-CONFIG_ADIS16209=m
-CONFIG_ADIS16240=m
-CONFIG_AD7606=m
-CONFIG_AD7606_IFACE_PARALLEL=m
-CONFIG_AD7606_IFACE_SPI=m
-CONFIG_AD7780=m
-CONFIG_AD7816=m
-CONFIG_AD7192=m
-CONFIG_AD7280=m
-CONFIG_ADT7316=m
-CONFIG_ADT7316_I2C=m
-CONFIG_AD7150=m
-CONFIG_AD7152=m
-CONFIG_AD7746=m
-CONFIG_AD9832=m
-CONFIG_AD9834=m
-CONFIG_ADIS16060=m
-CONFIG_AD5933=m
-CONFIG_TSL2x7x=m
-CONFIG_ADE7753=m
-CONFIG_ADE7754=m
-CONFIG_ADE7758=m
-CONFIG_ADE7759=m
-CONFIG_ADE7854=m
-CONFIG_AD2S90=m
-CONFIG_AD2S1200=m
-CONFIG_AD2S1210=m
-CONFIG_FB_SM750=m
-CONFIG_FB_XGI=m
-CONFIG_SPEAKUP=m
-CONFIG_SPEAKUP_SYNTH_ACNTSA=m
-CONFIG_SPEAKUP_SYNTH_APOLLO=m
-CONFIG_SPEAKUP_SYNTH_AUDPTR=m
-CONFIG_SPEAKUP_SYNTH_BNS=m
-CONFIG_SPEAKUP_SYNTH_DECTLK=m
-CONFIG_SPEAKUP_SYNTH_DECEXT=m
-CONFIG_SPEAKUP_SYNTH_LTLK=m
-CONFIG_SPEAKUP_SYNTH_SOFT=m
-CONFIG_SPEAKUP_SYNTH_SPKOUT=m
-CONFIG_SPEAKUP_SYNTH_TXPRT=m
-CONFIG_SPEAKUP_SYNTH_DUMMY=m
-CONFIG_STAGING_MEDIA=y
-CONFIG_I2C_BCM2048=m
-CONFIG_DVB_CXD2099=m
-CONFIG_LTE_GDM724X=m
-CONFIG_FIREWIRE_SERIAL=m
-CONFIG_MTD_SPINAND_MT29F=m
-CONFIG_MTD_SPINAND_ONDIEECC=y
-CONFIG_DGNC=m
-CONFIG_GS_FPGABOOT=m
-CONFIG_CRYPTO_SKEIN=y
-CONFIG_UNISYSSPAR=y
-CONFIG_UNISYS_VISORBUS=m
-CONFIG_UNISYS_VISORNIC=m
-CONFIG_UNISYS_VISORINPUT=m
-CONFIG_UNISYS_VISORHBA=m
-CONFIG_FB_TFT=m
-CONFIG_FB_TFT_AGM1264K_FL=m
-CONFIG_FB_TFT_BD663474=m
-CONFIG_FB_TFT_HX8340BN=m
-CONFIG_FB_TFT_HX8347D=m
-CONFIG_FB_TFT_HX8353D=m
-CONFIG_FB_TFT_HX8357D=m
-CONFIG_FB_TFT_ILI9163=m
-CONFIG_FB_TFT_ILI9320=m
-CONFIG_FB_TFT_ILI9325=m
-CONFIG_FB_TFT_ILI9340=m
-CONFIG_FB_TFT_ILI9341=m
-CONFIG_FB_TFT_ILI9481=m
-CONFIG_FB_TFT_ILI9486=m
-CONFIG_FB_TFT_PCD8544=m
-CONFIG_FB_TFT_RA8875=m
-CONFIG_FB_TFT_S6D02A1=m
-CONFIG_FB_TFT_S6D1121=m
-CONFIG_FB_TFT_SSD1289=m
-CONFIG_FB_TFT_SSD1306=m
-CONFIG_FB_TFT_SSD1331=m
-CONFIG_FB_TFT_SSD1351=m
-CONFIG_FB_TFT_ST7735R=m
-CONFIG_FB_TFT_ST7789V=m
-CONFIG_FB_TFT_TINYLCD=m
-CONFIG_FB_TFT_TLS8204=m
-CONFIG_FB_TFT_UC1611=m
-CONFIG_FB_TFT_UC1701=m
-CONFIG_FB_TFT_UPD161704=m
-CONFIG_FB_TFT_WATTEROTT=m
-CONFIG_FB_FLEX=m
-CONFIG_FB_TFT_FBTFT_DEVICE=m
-CONFIG_MOST=m
-CONFIG_AIM_CDEV=m
-CONFIG_AIM_SOUND=m
-CONFIG_AIM_V4L2=m
-CONFIG_HDM_DIM2=m
-CONFIG_HDM_I2C=m
-CONFIG_HDM_USB=m
-CONFIG_ACER_WMI=m
-CONFIG_ACERHDF=m
-CONFIG_ALIENWARE_WMI=m
-CONFIG_ASUS_LAPTOP=m
-CONFIG_DELL_LAPTOP=m
-CONFIG_DELL_WMI=m
-CONFIG_DELL_WMI_AIO=m
-CONFIG_DELL_SMO8800=m
-CONFIG_DELL_RBTN=m
-CONFIG_FUJITSU_LAPTOP=m
-CONFIG_FUJITSU_TABLET=m
-CONFIG_AMILO_RFKILL=m
-CONFIG_HP_ACCEL=m
-CONFIG_HP_WIRELESS=m
-CONFIG_HP_WMI=m
-CONFIG_MSI_LAPTOP=m
-CONFIG_PANASONIC_LAPTOP=m
-CONFIG_COMPAL_LAPTOP=m
-CONFIG_SONY_LAPTOP=m
-CONFIG_SONYPI_COMPAT=y
-CONFIG_IDEAPAD_LAPTOP=m
-CONFIG_THINKPAD_ACPI=m
-CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
-CONFIG_SENSORS_HDAPS=m
-CONFIG_INTEL_MENLOW=m
-CONFIG_EEEPC_LAPTOP=m
-CONFIG_ASUS_WMI=m
-CONFIG_ASUS_NB_WMI=m
-CONFIG_EEEPC_WMI=m
-CONFIG_MSI_WMI=m
-CONFIG_TOPSTAR_LAPTOP=m
-CONFIG_ACPI_TOSHIBA=m
-CONFIG_TOSHIBA_BT_RFKILL=m
-CONFIG_TOSHIBA_HAPS=m
-CONFIG_TOSHIBA_WMI=m
-CONFIG_ACPI_CMPC=m
-CONFIG_INTEL_HID_EVENT=m
-CONFIG_INTEL_IPS=m
-CONFIG_IBM_RTL=m
-CONFIG_SAMSUNG_LAPTOP=m
-CONFIG_INTEL_OAKTRAIL=m
-CONFIG_SAMSUNG_Q10=m
-CONFIG_APPLE_GMUX=m
-CONFIG_INTEL_RST=m
-CONFIG_INTEL_SMARTCONNECT=m
-CONFIG_PVPANIC=m
-CONFIG_INTEL_PMC_IPC=m
-CONFIG_SURFACE_PRO3_BUTTON=m
-CONFIG_INTEL_PUNIT_IPC=m
-CONFIG_INTEL_TELEMETRY=m
-CONFIG_CHROMEOS_LAPTOP=m
-CONFIG_CHROMEOS_PSTORE=m
-CONFIG_CROS_EC_CHARDEV=m
-CONFIG_CROS_EC_LPC=m
-CONFIG_COMMON_CLK_WM831X=m
-CONFIG_COMMON_CLK_SI5351=m
-CONFIG_COMMON_CLK_CDCE706=m
-CONFIG_COMMON_CLK_S2MPS11=m
-CONFIG_CLK_TWL6040=m
-CONFIG_COMMON_CLK_PALMAS=m
-CONFIG_COMMON_CLK_PWM=m
-CONFIG_ALTERA_MBOX=m
-CONFIG_AMD_IOMMU=y
-CONFIG_AMD_IOMMU_V2=m
-CONFIG_INTEL_IOMMU=y
-CONFIG_INTEL_IOMMU_SVM=y
-# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
-CONFIG_IRQ_REMAP=y
-CONFIG_SOC_TI=y
-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
-CONFIG_DEVFREQ_GOV_PERFORMANCE=y
-CONFIG_DEVFREQ_GOV_POWERSAVE=y
-CONFIG_DEVFREQ_GOV_USERSPACE=y
-CONFIG_PM_DEVFREQ_EVENT=y
-CONFIG_EXTCON_ADC_JACK=m
-CONFIG_EXTCON_ARIZONA=m
-CONFIG_EXTCON_GPIO=m
-CONFIG_EXTCON_MAX14577=m
-CONFIG_EXTCON_MAX77693=m
-CONFIG_EXTCON_MAX77843=m
-CONFIG_EXTCON_MAX8997=m
-CONFIG_EXTCON_PALMAS=m
-CONFIG_EXTCON_RT8973A=m
-CONFIG_EXTCON_SM5502=m
-CONFIG_EXTCON_USB_GPIO=m
-CONFIG_MEMORY=y
-CONFIG_IIO_BUFFER_CB=m
-CONFIG_BMA180=m
-CONFIG_BMC150_ACCEL=m
-CONFIG_HID_SENSOR_ACCEL_3D=m
-CONFIG_IIO_ST_ACCEL_3AXIS=m
-CONFIG_KXSD9=m
-CONFIG_KXCJK1013=m
-CONFIG_MMA8452=m
-CONFIG_MMA9551=m
-CONFIG_MMA9553=m
-CONFIG_MXC4005=m
-CONFIG_SCA3000=m
-CONFIG_STK8312=m
-CONFIG_STK8BA50=m
-CONFIG_AD7266=m
-CONFIG_AD7291=m
-CONFIG_AD7298=m
-CONFIG_AD7476=m
-CONFIG_AD7791=m
-CONFIG_AD7793=m
-CONFIG_AD7887=m
-CONFIG_AD7923=m
-CONFIG_AD799X=m
-CONFIG_CC10001_ADC=m
-CONFIG_DA9150_GPADC=m
-CONFIG_HI8435=m
-CONFIG_LP8788_ADC=m
-CONFIG_MAX1027=m
-CONFIG_MAX1363=m
-CONFIG_MCP320X=m
-CONFIG_MCP3422=m
-CONFIG_MEN_Z188_ADC=m
-CONFIG_NAU7802=m
-CONFIG_QCOM_SPMI_IADC=m
-CONFIG_QCOM_SPMI_VADC=m
-CONFIG_TI_ADC081C=m
-CONFIG_TI_ADC128S052=m
-CONFIG_TI_AM335X_ADC=m
-CONFIG_TWL4030_MADC=m
-CONFIG_TWL6030_GPADC=m
-CONFIG_VIPERBOARD_ADC=m
-CONFIG_AD8366=m
-CONFIG_VZ89X=m
-CONFIG_IIO_SSP_SENSORS_COMMONS=m
-CONFIG_IIO_SSP_SENSORHUB=m
-CONFIG_AD5064=m
-CONFIG_AD5360=m
-CONFIG_AD5380=m
-CONFIG_AD5421=m
-CONFIG_AD5446=m
-CONFIG_AD5449=m
-CONFIG_AD5504=m
-CONFIG_AD5624R_SPI=m
-CONFIG_AD5686=m
-CONFIG_AD5755=m
-CONFIG_AD5764=m
-CONFIG_AD5791=m
-CONFIG_AD7303=m
-CONFIG_M62332=m
-CONFIG_MAX517=m
-CONFIG_MCP4725=m
-CONFIG_MCP4922=m
-CONFIG_AD9523=m
-CONFIG_ADF4350=m
-CONFIG_ADIS16080=m
-CONFIG_ADIS16130=m
-CONFIG_ADIS16136=m
-CONFIG_ADIS16260=m
-CONFIG_ADXRS450=m
-CONFIG_BMG160=m
-CONFIG_HID_SENSOR_GYRO_3D=m
-CONFIG_IIO_ST_GYRO_3AXIS=m
-CONFIG_ITG3200=m
-CONFIG_DHT11=m
-CONFIG_HDC100X=m
-CONFIG_HTU21=m
-CONFIG_SI7005=m
-CONFIG_SI7020=m
-CONFIG_ADIS16400=m
-CONFIG_ADIS16480=m
-CONFIG_KMX61=m
-CONFIG_ACPI_ALS=m
-CONFIG_ADJD_S311=m
-CONFIG_AL3320A=m
-CONFIG_APDS9300=m
-CONFIG_APDS9960=m
-CONFIG_BH1750=m
-CONFIG_CM32181=m
-CONFIG_CM3232=m
-CONFIG_CM3323=m
-CONFIG_CM36651=m
-CONFIG_GP2AP020A00F=m
-CONFIG_SENSORS_ISL29018=m
-CONFIG_SENSORS_ISL29028=m
-CONFIG_ISL29125=m
-CONFIG_HID_SENSOR_ALS=m
-CONFIG_HID_SENSOR_PROX=m
-CONFIG_JSA1212=m
-CONFIG_RPR0521=m
-CONFIG_SENSORS_LM3533=m
-CONFIG_LTR501=m
-CONFIG_OPT3001=m
-CONFIG_PA12203001=m
-CONFIG_STK3310=m
-CONFIG_TCS3414=m
-CONFIG_TCS3472=m
-CONFIG_SENSORS_TSL2563=m
-CONFIG_TSL2583=m
-CONFIG_TSL4531=m
-CONFIG_US5182D=m
-CONFIG_VCNL4000=m
-CONFIG_AK09911=m
-CONFIG_MAG3110=m
-CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
-CONFIG_MMC35240=m
-CONFIG_IIO_ST_MAGN_3AXIS=m
-CONFIG_SENSORS_HMC5843_I2C=m
-CONFIG_SENSORS_HMC5843_SPI=m
-CONFIG_HID_SENSOR_INCLINOMETER_3D=m
-CONFIG_HID_SENSOR_DEVICE_ROTATION=m
-CONFIG_IIO_INTERRUPT_TRIGGER=m
-CONFIG_IIO_SYSFS_TRIGGER=m
-CONFIG_MCP4531=m
-CONFIG_BMP280=m
-CONFIG_HID_SENSOR_PRESS=m
-CONFIG_MPL3115=m
-CONFIG_MS5611=m
-CONFIG_MS5611_I2C=m
-CONFIG_MS5611_SPI=m
-CONFIG_MS5637=m
-CONFIG_IIO_ST_PRESS=m
-CONFIG_T5403=m
-CONFIG_AS3935=m
-CONFIG_LIDAR_LITE_V2=m
-CONFIG_SX9500=m
-CONFIG_MLX90614=m
-CONFIG_TMP006=m
-CONFIG_TSYS01=m
-CONFIG_TSYS02D=m
-CONFIG_NTB=m
-CONFIG_NTB_AMD=m
-CONFIG_NTB_INTEL=m
-CONFIG_NTB_PINGPONG=m
-CONFIG_NTB_TOOL=m
-CONFIG_NTB_TRANSPORT=m
-CONFIG_VME_BUS=y
-CONFIG_VME_CA91CX42=m
-CONFIG_VME_TSI148=m
-CONFIG_VMIVME_7805=m
-CONFIG_VME_USER=m
-CONFIG_PWM=y
-CONFIG_PWM_CRC=y
-CONFIG_PWM_LP3943=m
-CONFIG_PWM_LPSS_PCI=m
-CONFIG_PWM_LPSS_PLATFORM=m
-CONFIG_PWM_PCA9685=m
-CONFIG_PWM_TWL=m
-CONFIG_PWM_TWL_LED=m
-CONFIG_IPACK_BUS=m
-CONFIG_BOARD_TPCI200=m
-CONFIG_SERIAL_IPOCTAL=m
-CONFIG_FMC=m
-CONFIG_FMC_FAKEDEV=m
-CONFIG_FMC_TRIVIAL=m
-CONFIG_FMC_WRITE_EEPROM=m
-CONFIG_FMC_CHARDEV=m
-CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_PXA_28NM_HSIC=m
-CONFIG_PHY_PXA_28NM_USB2=m
-CONFIG_PHY_SAMSUNG_USB2=m
-CONFIG_PHY_TUSB1210=m
-CONFIG_POWERCAP=y
-CONFIG_INTEL_RAPL=m
-CONFIG_MCB=m
-CONFIG_MCB_PCI=m
-CONFIG_THUNDERBOLT=m
-CONFIG_BLK_DEV_PMEM=m
-CONFIG_ND_BLK=m
-CONFIG_STM=m
-CONFIG_STM_DUMMY=m
-CONFIG_STM_SOURCE_CONSOLE=m
-CONFIG_INTEL_TH=m
-CONFIG_INTEL_TH_PCI=m
-CONFIG_INTEL_TH_GTH=m
-CONFIG_INTEL_TH_STH=m
-CONFIG_INTEL_TH_MSU=m
-CONFIG_INTEL_TH_PTI=m
-CONFIG_FPGA=m
-CONFIG_EDD=y
-CONFIG_EDD_OFF=y
-CONFIG_DELL_RBU=m
-CONFIG_DMI_SYSFS=m
-CONFIG_ISCSI_IBFT_FIND=y
-CONFIG_ISCSI_IBFT=m
-CONFIG_EFI_VARS=y
-CONFIG_EFI_VARS_PSTORE=m
-CONFIG_EXT4_FS=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_REISERFS_FS=m
-CONFIG_REISERFS_FS_XATTR=y
-CONFIG_REISERFS_FS_POSIX_ACL=y
-CONFIG_REISERFS_FS_SECURITY=y
-CONFIG_JFS_FS=m
-CONFIG_JFS_POSIX_ACL=y
-CONFIG_JFS_SECURITY=y
-CONFIG_JFS_STATISTICS=y
-CONFIG_XFS_FS=m
-CONFIG_XFS_QUOTA=y
-CONFIG_XFS_POSIX_ACL=y
-CONFIG_XFS_RT=y
-CONFIG_GFS2_FS=m
-CONFIG_GFS2_FS_LOCKING_DLM=y
-CONFIG_OCFS2_FS=m
-CONFIG_BTRFS_FS=m
-CONFIG_BTRFS_FS_POSIX_ACL=y
-CONFIG_NILFS2_FS=m
-CONFIG_F2FS_FS=m
-CONFIG_F2FS_FS_SECURITY=y
-CONFIG_F2FS_FS_ENCRYPTION=y
-CONFIG_FS_DAX=y
-CONFIG_FANOTIFY=y
-CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
-CONFIG_QUOTA_NETLINK_INTERFACE=y
-# CONFIG_PRINT_QUOTA_WARNING is not set
-CONFIG_QFMT_V1=m
-CONFIG_QFMT_V2=m
-CONFIG_AUTOFS4_FS=m
-CONFIG_FUSE_FS=y
-CONFIG_CUSE=m
-CONFIG_OVERLAY_FS=y
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=y
-CONFIG_NTFS_FS=m
-CONFIG_PROC_KCORE=y
-CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_HUGETLBFS=y
-CONFIG_EFIVAR_FS=y
-CONFIG_ADFS_FS=m
-CONFIG_AFFS_FS=m
-CONFIG_ECRYPT_FS=y
-CONFIG_ECRYPT_FS_MESSAGING=y
-CONFIG_HFS_FS=m
-CONFIG_HFSPLUS_FS=m
-CONFIG_HFSPLUS_FS_POSIX_ACL=y
-CONFIG_BEFS_FS=m
-CONFIG_BFS_FS=m
-CONFIG_EFS_FS=m
-CONFIG_JFFS2_FS=m
-CONFIG_JFFS2_FS_XATTR=y
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_LZO=y
-CONFIG_JFFS2_CMODE_FAVOURLZO=y
-CONFIG_UBIFS_FS=m
-CONFIG_UBIFS_ATIME_SUPPORT=y
-CONFIG_CRAMFS=m
-CONFIG_SQUASHFS=y
-CONFIG_SQUASHFS_FILE_DIRECT=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SQUASHFS_XATTR=y
-CONFIG_SQUASHFS_LZ4=y
-CONFIG_SQUASHFS_LZO=y
-CONFIG_SQUASHFS_XZ=y
-CONFIG_VXFS_FS=m
-CONFIG_MINIX_FS=m
-CONFIG_OMFS_FS=m
-CONFIG_HPFS_FS=m
-CONFIG_QNX4FS_FS=m
-CONFIG_QNX6FS_FS=m
-CONFIG_ROMFS_FS=m
-CONFIG_PSTORE_RAM=m
-CONFIG_SYSV_FS=m
-CONFIG_UFS_FS=m
-CONFIG_EXOFS_FS=m
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=m
-CONFIG_NFS_SWAP=y
-CONFIG_NFS_V4_1=y
-CONFIG_NFS_V4_2=y
-CONFIG_NFS_V4_1_MIGRATION=y
-CONFIG_NFSD=m
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_NFSD_V4_SECURITY_LABEL=y
-CONFIG_SUNRPC_DEBUG=y
-CONFIG_CEPH_FS=m
-CONFIG_CEPH_FS_POSIX_ACL=y
-CONFIG_CIFS=m
-CONFIG_CIFS_STATS=y
-CONFIG_CIFS_WEAK_PW_HASH=y
-CONFIG_CIFS_UPCALL=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_ACL=y
-CONFIG_CIFS_DFS_UPCALL=y
-CONFIG_CIFS_SMB311=y
-CONFIG_NCP_FS=m
-CONFIG_NCPFS_PACKET_SIGNING=y
-CONFIG_NCPFS_IOCTL_LOCKING=y
-CONFIG_NCPFS_STRONG=y
-CONFIG_NCPFS_NFS_NS=y
-CONFIG_NCPFS_OS2_NS=y
-CONFIG_NCPFS_NLS=y
-CONFIG_NCPFS_EXTRAS=y
-CONFIG_CODA_FS=m
-CONFIG_AFS_FS=m
-CONFIG_9P_FS=m
-CONFIG_9P_FS_POSIX_ACL=y
-CONFIG_9P_FS_SECURITY=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_MAC_ROMAN=m
-CONFIG_NLS_MAC_CELTIC=m
-CONFIG_NLS_MAC_CENTEURO=m
-CONFIG_NLS_MAC_CROATIAN=m
-CONFIG_NLS_MAC_CYRILLIC=m
-CONFIG_NLS_MAC_GAELIC=m
-CONFIG_NLS_MAC_GREEK=m
-CONFIG_NLS_MAC_ICELAND=m
-CONFIG_NLS_MAC_INUIT=m
-CONFIG_NLS_MAC_ROMANIAN=m
-CONFIG_NLS_MAC_TURKISH=m
-CONFIG_DLM=m
-CONFIG_PRINTK_TIME=y
-CONFIG_BOOT_PRINTK_DELAY=y
-CONFIG_DYNAMIC_DEBUG=y
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_FRAME_WARN=1024
-CONFIG_MEMORY_NOTIFIER_ERROR_INJECT=m
-CONFIG_SCHEDSTATS=y
-CONFIG_SCHED_STACK_END_CHECK=y
-CONFIG_LOCK_TORTURE_TEST=m
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_NOTIFIER_ERROR_INJECTION=m
-CONFIG_SCHED_TRACER=y
-CONFIG_FTRACE_SYSCALLS=y
-CONFIG_STACK_TRACER=y
-CONFIG_BLK_DEV_IO_TRACE=y
-CONFIG_FUNCTION_PROFILER=y
-CONFIG_MMIOTRACE=y
-CONFIG_RBTREE_TEST=m
-CONFIG_INTERVAL_TREE_TEST=m
-CONFIG_PERCPU_TEST=m
-CONFIG_ASYNC_RAID6_TEST=m
-CONFIG_TEST_HEXDUMP=m
-CONFIG_TEST_STRING_HELPERS=m
-CONFIG_TEST_KSTRTOX=m
-CONFIG_TEST_PRINTF=m
-CONFIG_TEST_LKM=m
-CONFIG_TEST_USER_COPY=m
-CONFIG_TEST_BPF=m
-CONFIG_TEST_FIRMWARE=m
-CONFIG_TEST_UDELAY=m
-CONFIG_TEST_STATIC_KEYS=m
-CONFIG_MEMTEST=y
-CONFIG_KGDB=y
-CONFIG_KGDB_LOW_LEVEL_TRAP=y
-CONFIG_KGDB_KDB=y
-CONFIG_KDB_KEYBOARD=y
-CONFIG_STRICT_DEVMEM=y
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-CONFIG_EARLY_PRINTK_DBGP=y
-CONFIG_EARLY_PRINTK_EFI=y
-CONFIG_IO_DELAY_0XED=y
-CONFIG_OPTIMIZE_INLINING=y
-CONFIG_PUNIT_ATOM_DEBUG=m
-CONFIG_PERSISTENT_KEYRINGS=y
-CONFIG_BIG_KEYS=y
-CONFIG_TRUSTED_KEYS=y
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK_XFRM=y
-CONFIG_INTEL_TXT=y
-CONFIG_LSM_MMAP_MIN_ADDR=0
-CONFIG_SECURITY_SELINUX=y
-CONFIG_SECURITY_SELINUX_BOOTPARAM=y
-CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
-CONFIG_SECURITY_SELINUX_DISABLE=y
-CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
-CONFIG_SECURITY_SMACK=y
-CONFIG_SECURITY_SMACK_NETFILTER=y
-CONFIG_SECURITY_TOMOYO=y
-CONFIG_SECURITY_APPARMOR=y
-CONFIG_SECURITY_YAMA=y
-CONFIG_INTEGRITY_SIGNATURE=y
-CONFIG_INTEGRITY_ASYMMETRIC_KEYS=y
-CONFIG_IMA=y
-CONFIG_IMA_APPRAISE=y
-CONFIG_EVM=y
-CONFIG_EVM_EXTRA_SMACK_XATTRS=y
-CONFIG_DEFAULT_SECURITY_APPARMOR=y
-CONFIG_CRYPTO_USER=m
-CONFIG_CRYPTO_PCRYPT=m
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_CHACHA20POLY1305=m
-CONFIG_CRYPTO_KEYWRAP=m
-CONFIG_CRYPTO_XCBC=m
-CONFIG_CRYPTO_VMAC=m
-CONFIG_CRYPTO_CRC32C_INTEL=y
-CONFIG_CRYPTO_CRC32_PCLMUL=m
-CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
-CONFIG_CRYPTO_POLY1305_X86_64=m
-CONFIG_CRYPTO_RMD128=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_RMD256=m
-CONFIG_CRYPTO_RMD320=m
-CONFIG_CRYPTO_SHA1_SSSE3=m
-CONFIG_CRYPTO_SHA256_SSSE3=m
-CONFIG_CRYPTO_SHA512_SSSE3=m
-CONFIG_CRYPTO_SHA1_MB=m
-CONFIG_CRYPTO_TGR192=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_BLOWFISH_X86_64=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m
-CONFIG_CRYPTO_CAST5_AVX_X86_64=m
-CONFIG_CRYPTO_CAST6_AVX_X86_64=m
-CONFIG_CRYPTO_DES3_EDE_X86_64=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_SALSA20=m
-CONFIG_CRYPTO_SALSA20_X86_64=m
-CONFIG_CRYPTO_CHACHA20_X86_64=m
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
-CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
-CONFIG_CRYPTO_842=m
-CONFIG_CRYPTO_LZ4=m
-CONFIG_CRYPTO_LZ4HC=m
-CONFIG_CRYPTO_ANSI_CPRNG=m
-CONFIG_CRYPTO_DRBG_HASH=y
-CONFIG_CRYPTO_DRBG_CTR=y
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_CRYPTO_USER_API_RNG=m
-CONFIG_CRYPTO_USER_API_AEAD=m
-CONFIG_CRYPTO_DEV_PADLOCK=y
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_CCP=y
-CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
-CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
-CONFIG_PKCS7_TEST_KEY=m
-CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-CONFIG_KVM=m
-CONFIG_KVM_INTEL=m
-CONFIG_KVM_AMD=m
-CONFIG_VHOST_NET=m
-CONFIG_VHOST_SCSI=m
-CONFIG_CRC8=m
-CONFIG_XZ_DEC_TEST=m
-CONFIG_DDR=y
diff --git a/board/recalbox/x86/kernel-x86_64-5.17-defconfig.config b/board/recalbox/x86/kernel-x86_64-5.17-defconfig.config
deleted file mode 100644
index ee66dba27561d55d61fa803a7fd7fd8de8d9cbf7..0000000000000000000000000000000000000000
--- a/board/recalbox/x86/kernel-x86_64-5.17-defconfig.config
+++ /dev/null
@@ -1,3337 +0,0 @@
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_AUDIT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-CONFIG_LOG_BUF_SHIFT=18
-CONFIG_NUMA_BALANCING=y
-CONFIG_MEMCG=y
-CONFIG_BLK_CGROUP=y
-CONFIG_CFS_BANDWIDTH=y
-CONFIG_CGROUP_PIDS=y
-CONFIG_CGROUP_FREEZER=y
-CONFIG_CGROUP_HUGETLB=y
-CONFIG_CPUSETS=y
-CONFIG_CGROUP_DEVICE=y
-CONFIG_CGROUP_CPUACCT=y
-CONFIG_CGROUP_PERF=y
-CONFIG_NAMESPACES=y
-CONFIG_USER_NS=y
-CONFIG_CHECKPOINT_RESTORE=y
-CONFIG_SCHED_AUTOGROUP=y
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_EXPERT=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_USERFAULTFD=y
-# CONFIG_COMPAT_BRK is not set
-CONFIG_PROFILING=y
-CONFIG_SMP=y
-CONFIG_X86_NUMACHIP=y
-CONFIG_X86_INTEL_LPSS=y
-CONFIG_X86_AMD_PLATFORM_DEVICE=y
-CONFIG_IOSF_MBI_DEBUG=y
-CONFIG_HYPERVISOR_GUEST=y
-CONFIG_PARAVIRT=y
-CONFIG_PARAVIRT_SPINLOCKS=y
-CONFIG_XEN=y
-CONFIG_XEN_PVH=y
-CONFIG_PROCESSOR_SELECT=y
-CONFIG_GART_IOMMU=y
-CONFIG_NR_CPUS=256
-CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
-CONFIG_X86_MCE_INJECT=m
-CONFIG_PERF_EVENTS_AMD_POWER=y
-CONFIG_I8K=m
-CONFIG_MICROCODE_AMD=y
-CONFIG_MICROCODE_OLD_INTERFACE=y
-CONFIG_X86_MSR=m
-CONFIG_X86_CPUID=m
-CONFIG_NUMA=y
-CONFIG_X86_PMEM_LEGACY=y
-CONFIG_X86_CHECK_BIOS_CORRUPTION=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
-CONFIG_EFI=y
-CONFIG_EFI_STUB=y
-CONFIG_EFI_MIXED=y
-CONFIG_HZ_1000=y
-CONFIG_KEXEC=y
-CONFIG_KEXEC_FILE=y
-CONFIG_CRASH_DUMP=y
-CONFIG_PHYSICAL_ALIGN=0x1000000
-CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa
-CONFIG_LEGACY_VSYSCALL_EMULATE=y
-CONFIG_LIVEPATCH=y
-# CONFIG_SUSPEND is not set
-CONFIG_PM_DEBUG=y
-CONFIG_PM_ADVANCED_DEBUG=y
-CONFIG_ACPI_EC_DEBUGFS=m
-CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_IPMI=m
-CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
-CONFIG_ACPI_PCI_SLOT=y
-CONFIG_ACPI_SBS=m
-CONFIG_ACPI_BGRT=y
-CONFIG_ACPI_NFIT=m
-CONFIG_ACPI_APEI=y
-CONFIG_ACPI_APEI_GHES=y
-CONFIG_ACPI_APEI_MEMORY_FAILURE=y
-CONFIG_ACPI_APEI_EINJ=m
-CONFIG_ACPI_EXTLOG=m
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_X86_PCC_CPUFREQ=y
-CONFIG_X86_AMD_PSTATE=y
-CONFIG_X86_ACPI_CPUFREQ=y
-CONFIG_X86_POWERNOW_K8=y
-CONFIG_X86_AMD_FREQ_SENSITIVITY=m
-CONFIG_X86_SPEEDSTEP_CENTRINO=y
-CONFIG_X86_P4_CLOCKMOD=m
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_INTEL_IDLE=y
-CONFIG_IA32_EMULATION=y
-CONFIG_X86_X32=y
-CONFIG_KVM=m
-CONFIG_KVM_INTEL=m
-CONFIG_KVM_AMD=m
-CONFIG_JUMP_LABEL=y
-# CONFIG_GCC_PLUGINS is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SRCVERSION_ALL=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_SHA512=y
-CONFIG_BLK_DEV_THROTTLING=y
-CONFIG_PARTITION_ADVANCED=y
-CONFIG_CMDLINE_PARTITION=y
-CONFIG_BINFMT_MISC=m
-CONFIG_PAGE_REPORTING=y
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-CONFIG_MEMORY_FAILURE=y
-CONFIG_HWPOISON_INJECT=m
-CONFIG_CMA=y
-CONFIG_MEM_SOFT_DIRTY=y
-CONFIG_ZSWAP=y
-CONFIG_ZSMALLOC=y
-CONFIG_IDLE_PAGE_TRACKING=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_PACKET_DIAG=m
-CONFIG_UNIX=y
-CONFIG_UNIX_DIAG=m
-CONFIG_TLS=m
-CONFIG_TLS_DEVICE=y
-CONFIG_XFRM_USER=m
-CONFIG_XFRM_STATISTICS=y
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_FIB_TRIE_STATS=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_SYN_COOKIES=y
-CONFIG_NET_IPVTI=m
-CONFIG_NET_FOU=m
-# CONFIG_INET_DIAG is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_WESTWOOD is not set
-# CONFIG_TCP_CONG_HTCP is not set
-CONFIG_TCP_MD5SIG=y
-CONFIG_IPV6=m
-CONFIG_IPV6_ROUTER_PREF=y
-CONFIG_IPV6_ROUTE_INFO=y
-CONFIG_IPV6_OPTIMISTIC_DAD=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_ESP_OFFLOAD=m
-CONFIG_INET6_ESPINTCP=y
-CONFIG_INET6_IPCOMP=m
-CONFIG_IPV6_MIP6=m
-CONFIG_IPV6_VTI=m
-CONFIG_IPV6_SIT_6RD=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
-CONFIG_MPTCP=y
-CONFIG_NETWORK_SECMARK=y
-CONFIG_IP_DCCP=m
-# CONFIG_IP_DCCP_CCID3 is not set
-CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
-CONFIG_SCTP_COOKIE_HMAC_MD5=y
-CONFIG_VLAN_8021Q=m
-CONFIG_VLAN_8021Q_GVRP=y
-CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_DNS_RESOLVER=y
-CONFIG_NETLINK_DIAG=m
-CONFIG_NET_PKTGEN=m
-CONFIG_BT=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-CONFIG_BT_HS=y
-CONFIG_BT_LEDS=y
-CONFIG_BT_MSFTEXT=y
-CONFIG_BT_AOSPEXT=y
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
-CONFIG_BT_HCIBTUSB_MTK=y
-CONFIG_BT_HCIBTSDIO=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_ATH3K=y
-CONFIG_BT_HCIUART_INTEL=y
-CONFIG_BT_HCIUART_AG6XX=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_BT_MRVL=m
-CONFIG_BT_MRVL_SDIO=m
-CONFIG_BT_ATH3K=m
-CONFIG_BT_MTKSDIO=m
-CONFIG_AF_RXRPC=y
-CONFIG_CFG80211=y
-CONFIG_MAC80211=y
-CONFIG_RFKILL=y
-CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_GPIO=m
-CONFIG_PCI=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIEAER=y
-CONFIG_PCI_REALLOC_ENABLE_AUTO=y
-CONFIG_PCI_STUB=m
-CONFIG_XEN_PCIDEV_FRONTEND=m
-CONFIG_PCCARD=m
-CONFIG_YENTA=m
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_RAPIDIO=m
-CONFIG_RAPIDIO_TSI721=m
-CONFIG_RAPIDIO_ENUM_BASIC=m
-CONFIG_RAPIDIO_CPS_XX=m
-CONFIG_RAPIDIO_CPS_GEN2=m
-CONFIG_RAPIDIO_RXS_GEN3=m
-CONFIG_UEVENT_HELPER=y
-CONFIG_DEVTMPFS=y
-CONFIG_DEVTMPFS_MOUNT=y
-# CONFIG_STANDALONE is not set
-CONFIG_CONNECTOR=y
-CONFIG_EDD=y
-CONFIG_EDD_OFF=y
-CONFIG_DMI_SYSFS=m
-CONFIG_ISCSI_IBFT=m
-CONFIG_EFI_VARS=y
-CONFIG_EFI_VARS_PSTORE=m
-CONFIG_EFI_BOOTLOADER_CONTROL=y
-CONFIG_APPLE_PROPERTIES=y
-CONFIG_MTD=m
-CONFIG_MTD_AR7_PARTS=m
-CONFIG_MTD_CMDLINE_PARTS=m
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-CONFIG_SSFDC=m
-CONFIG_SM_FTL=m
-CONFIG_MTD_OOPS=m
-CONFIG_MTD_SWAP=m
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=m
-CONFIG_MTD_SBC_GXX=m
-CONFIG_MTD_AMD76XROM=m
-CONFIG_MTD_ICHXROM=m
-CONFIG_MTD_ESB2ROM=m
-CONFIG_MTD_CK804XROM=m
-CONFIG_MTD_SCB2_FLASH=m
-CONFIG_MTD_NETtel=m
-CONFIG_MTD_L440GX=m
-CONFIG_MTD_PCI=m
-CONFIG_MTD_PCMCIA=m
-CONFIG_MTD_INTEL_VR_NOR=m
-CONFIG_MTD_PLATRAM=m
-CONFIG_MTD_PMC551=m
-CONFIG_MTD_DATAFLASH=m
-CONFIG_MTD_DATAFLASH_OTP=y
-CONFIG_MTD_SST25L=m
-CONFIG_MTD_SLRAM=m
-CONFIG_MTD_PHRAM=m
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTD_BLOCK2MTD=m
-CONFIG_MTD_DOCG3=m
-CONFIG_MTD_ONENAND=m
-CONFIG_MTD_ONENAND_VERIFY_WRITE=y
-CONFIG_MTD_ONENAND_GENERIC=m
-CONFIG_MTD_ONENAND_2X_PROGRAM=y
-CONFIG_MTD_LPDDR=m
-CONFIG_MTD_SPI_NOR=m
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_FASTMAP=y
-CONFIG_MTD_UBI_GLUEBI=m
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_OF=y
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_SERIAL=m
-CONFIG_PARPORT_PC_FIFO=y
-CONFIG_PARPORT_PC_PCMCIA=m
-CONFIG_PARPORT_AX88796=m
-CONFIG_PARPORT_1284=y
-# CONFIG_PNP_DEBUG_MESSAGES is not set
-CONFIG_BLK_DEV_NULL_BLK=m
-CONFIG_BLK_DEV_FD=m
-CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
-CONFIG_ZRAM=m
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_SX8=m
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=65536
-# CONFIG_XEN_BLKDEV_FRONTEND is not set
-CONFIG_BLK_DEV_RBD=m
-CONFIG_BLK_DEV_NVME=y
-CONFIG_AD525X_DPOT=m
-CONFIG_AD525X_DPOT_I2C=m
-CONFIG_AD525X_DPOT_SPI=m
-CONFIG_DUMMY_IRQ=m
-CONFIG_IBM_ASM=m
-CONFIG_PHANTOM=m
-CONFIG_TIFM_7XX1=m
-CONFIG_ICS932S401=m
-CONFIG_ENCLOSURE_SERVICES=m
-CONFIG_HP_ILO=m
-CONFIG_APDS9802ALS=m
-CONFIG_ISL29003=m
-CONFIG_ISL29020=m
-CONFIG_SENSORS_TSL2550=m
-CONFIG_SENSORS_BH1770=m
-CONFIG_SENSORS_APDS990X=m
-CONFIG_HMC6352=m
-CONFIG_DS1682=m
-CONFIG_LATTICE_ECP3_CONFIG=m
-CONFIG_SRAM=y
-CONFIG_C2PORT=m
-CONFIG_C2PORT_DURAMAR_2150=m
-CONFIG_EEPROM_AT24=m
-CONFIG_EEPROM_AT25=m
-CONFIG_EEPROM_LEGACY=m
-CONFIG_EEPROM_MAX6875=m
-CONFIG_EEPROM_93XX46=m
-CONFIG_TI_ST=m
-CONFIG_SENSORS_LIS3_I2C=m
-CONFIG_INTEL_MEI_TXE=m
-CONFIG_INTEL_MEI_HDCP=m
-CONFIG_INTEL_MEI_PXP=m
-CONFIG_GENWQE=m
-CONFIG_ECHO=m
-CONFIG_BLK_DEV_SD=y
-CONFIG_BLK_DEV_SR=y
-CONFIG_CHR_DEV_SG=y
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-CONFIG_SCSI_SCAN_ASYNC=y
-CONFIG_SCSI_FC_ATTRS=m
-CONFIG_SCSI_SAS_ATA=y
-CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_ISCSI_TCP=m
-CONFIG_SCSI_CXGB3_ISCSI=m
-CONFIG_SCSI_CXGB4_ISCSI=m
-CONFIG_SCSI_BNX2_ISCSI=m
-CONFIG_SCSI_BNX2X_FCOE=m
-CONFIG_BE2ISCSI=m
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_HPSA=m
-CONFIG_SCSI_3W_9XXX=m
-CONFIG_SCSI_3W_SAS=m
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
-CONFIG_SCSI_AIC79XX=m
-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
-CONFIG_SCSI_AIC94XX=m
-# CONFIG_AIC94XX_DEBUG is not set
-CONFIG_SCSI_MVSAS=m
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-CONFIG_SCSI_MVUMI=m
-CONFIG_SCSI_DPT_I2O=m
-CONFIG_SCSI_ADVANSYS=m
-CONFIG_SCSI_ARCMSR=m
-CONFIG_SCSI_ESAS2R=m
-CONFIG_MEGARAID_NEWGEN=y
-CONFIG_MEGARAID_MM=m
-CONFIG_MEGARAID_MAILBOX=m
-CONFIG_MEGARAID_LEGACY=m
-CONFIG_MEGARAID_SAS=m
-CONFIG_SCSI_MPT2SAS=m
-CONFIG_SCSI_UFSHCD=m
-CONFIG_SCSI_UFSHCD_PCI=m
-CONFIG_SCSI_UFSHCD_PLATFORM=m
-CONFIG_SCSI_HPTIOP=m
-CONFIG_SCSI_BUSLOGIC=m
-CONFIG_SCSI_FLASHPOINT=y
-CONFIG_VMWARE_PVSCSI=m
-CONFIG_XEN_SCSI_FRONTEND=m
-CONFIG_LIBFC=m
-CONFIG_LIBFCOE=m
-CONFIG_FCOE=m
-CONFIG_FCOE_FNIC=m
-CONFIG_SCSI_SNIC=m
-CONFIG_SCSI_DMX3191D=m
-CONFIG_SCSI_ISCI=m
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INITIO=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-CONFIG_SCSI_STEX=m
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_IPR=m
-CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA_FC=m
-CONFIG_TCM_QLA2XXX=m
-CONFIG_SCSI_QLA_ISCSI=m
-CONFIG_SCSI_LPFC=m
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_AM53C974=m
-CONFIG_SCSI_WD719X=m
-CONFIG_SCSI_DEBUG=m
-CONFIG_SCSI_PMCRAID=m
-CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_BFA_FC=m
-CONFIG_SCSI_CHELSIO_FCOE=m
-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
-CONFIG_SCSI_DH=y
-CONFIG_SCSI_DH_RDAC=m
-CONFIG_SCSI_DH_HP_SW=m
-CONFIG_SCSI_DH_EMC=m
-CONFIG_SCSI_DH_ALUA=m
-CONFIG_ATA=y
-CONFIG_SATA_ZPODD=y
-CONFIG_SATA_AHCI=y
-CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_SATA_INIC162X=y
-CONFIG_SATA_ACARD_AHCI=y
-CONFIG_SATA_SIL24=y
-CONFIG_PDC_ADMA=y
-CONFIG_SATA_QSTOR=y
-CONFIG_SATA_SX4=y
-CONFIG_ATA_PIIX=y
-CONFIG_SATA_MV=y
-CONFIG_SATA_NV=y
-CONFIG_SATA_PROMISE=y
-CONFIG_SATA_SIL=y
-CONFIG_SATA_SIS=y
-CONFIG_SATA_SVW=y
-CONFIG_SATA_ULI=y
-CONFIG_SATA_VIA=y
-CONFIG_SATA_VITESSE=y
-CONFIG_PATA_ALI=y
-CONFIG_PATA_AMD=y
-CONFIG_PATA_ARTOP=y
-CONFIG_PATA_ATIIXP=y
-CONFIG_PATA_ATP867X=y
-CONFIG_PATA_CMD64X=y
-CONFIG_PATA_CYPRESS=y
-CONFIG_PATA_EFAR=y
-CONFIG_PATA_HPT366=y
-CONFIG_PATA_HPT37X=y
-CONFIG_PATA_HPT3X2N=y
-CONFIG_PATA_HPT3X3=y
-CONFIG_PATA_HPT3X3_DMA=y
-CONFIG_PATA_IT8213=y
-CONFIG_PATA_IT821X=y
-CONFIG_PATA_JMICRON=y
-CONFIG_PATA_MARVELL=y
-CONFIG_PATA_NETCELL=y
-CONFIG_PATA_NINJA32=y
-CONFIG_PATA_NS87415=y
-CONFIG_PATA_OLDPIIX=y
-CONFIG_PATA_OPTIDMA=y
-CONFIG_PATA_PDC2027X=y
-CONFIG_PATA_PDC_OLD=y
-CONFIG_PATA_RADISYS=y
-CONFIG_PATA_RDC=y
-CONFIG_PATA_SCH=y
-CONFIG_PATA_SERVERWORKS=y
-CONFIG_PATA_SIL680=y
-CONFIG_PATA_TOSHIBA=y
-CONFIG_PATA_TRIFLEX=y
-CONFIG_PATA_VIA=y
-CONFIG_PATA_WINBOND=y
-CONFIG_PATA_CMD640_PCI=y
-CONFIG_PATA_MPIIX=y
-CONFIG_PATA_NS87410=y
-CONFIG_PATA_OPTI=y
-CONFIG_PATA_PCMCIA=m
-CONFIG_PATA_PLATFORM=y
-CONFIG_PATA_RZ1000=y
-CONFIG_PATA_ACPI=y
-CONFIG_ATA_GENERIC=y
-CONFIG_PATA_LEGACY=y
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_UEVENT=y
-CONFIG_TARGET_CORE=m
-CONFIG_TCM_IBLOCK=m
-CONFIG_TCM_FILEIO=m
-CONFIG_TCM_PSCSI=m
-CONFIG_TCM_USER2=m
-CONFIG_LOOPBACK_TARGET=m
-CONFIG_TCM_FC=m
-CONFIG_ISCSI_TARGET=m
-CONFIG_SBP_TARGET=m
-CONFIG_FUSION=y
-CONFIG_FUSION_SPI=m
-CONFIG_FUSION_FC=m
-CONFIG_FUSION_SAS=m
-CONFIG_FUSION_CTL=m
-CONFIG_FUSION_LOGGING=y
-CONFIG_FIREWIRE=m
-CONFIG_FIREWIRE_OHCI=m
-CONFIG_FIREWIRE_SBP2=m
-CONFIG_FIREWIRE_NET=m
-CONFIG_FIREWIRE_NOSY=m
-CONFIG_MACINTOSH_DRIVERS=y
-CONFIG_MAC_EMUMOUSEBTN=m
-CONFIG_DUMMY=m
-CONFIG_MACVLAN=m
-CONFIG_MACVTAP=m
-CONFIG_IPVLAN=m
-CONFIG_NETCONSOLE=m
-CONFIG_NETCONSOLE_DYNAMIC=y
-CONFIG_TUN=y
-CONFIG_VETH=m
-CONFIG_NLMON=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_3C589=m
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ET131X=m
-CONFIG_SLICOSS=m
-CONFIG_ACENIC=m
-CONFIG_ALTERA_TSE=m
-CONFIG_ENA_ETHERNET=m
-CONFIG_AMD8111_ETH=m
-CONFIG_PCNET32=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_AMD_XGBE=m
-CONFIG_AQTION=m
-CONFIG_ATL2=m
-CONFIG_ATL1=m
-CONFIG_ATL1E=m
-CONFIG_ATL1C=m
-CONFIG_ALX=m
-CONFIG_CX_ECAT=m
-CONFIG_B44=m
-CONFIG_BCMGENET=m
-CONFIG_TIGON3=m
-CONFIG_BNX2X=m
-CONFIG_SYSTEMPORT=m
-CONFIG_BNXT=m
-CONFIG_MACB=m
-CONFIG_MACB_PCI=m
-CONFIG_THUNDER_NIC_PF=m
-CONFIG_THUNDER_NIC_VF=m
-CONFIG_LIQUIDIO=m
-CONFIG_LIQUIDIO_VF=m
-CONFIG_CHELSIO_T1=m
-CONFIG_CHELSIO_T1_1G=y
-CONFIG_CHELSIO_T4VF=m
-CONFIG_ENIC=m
-CONFIG_GEMINI_ETHERNET=m
-CONFIG_DNET=m
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-CONFIG_TULIP_MWI=y
-CONFIG_TULIP_MMIO=y
-CONFIG_TULIP_NAPI=y
-CONFIG_TULIP_NAPI_HW_MITIGATION=y
-CONFIG_DE4X5=m
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_PCMCIA_XIRCOM=m
-CONFIG_DL2K=m
-CONFIG_SUNDANCE=m
-CONFIG_BE2NET=m
-CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_GVE=m
-CONFIG_HINIC=m
-CONFIG_E100=m
-CONFIG_E1000=m
-CONFIG_E1000E=m
-CONFIG_IGB=m
-CONFIG_IGBVF=m
-CONFIG_IXGB=m
-CONFIG_IXGBE=m
-CONFIG_IXGBEVF=m
-CONFIG_I40E=m
-CONFIG_I40EVF=m
-CONFIG_ICE=m
-CONFIG_FM10K=m
-CONFIG_IGC=m
-CONFIG_JME=m
-CONFIG_MVMDIO=m
-CONFIG_SKGE=m
-CONFIG_SKGE_GENESIS=y
-CONFIG_SKY2=m
-CONFIG_MLX4_EN=m
-CONFIG_MLX5_CORE=m
-CONFIG_MLX5_FPGA=y
-CONFIG_MLX5_CORE_EN=y
-CONFIG_MLX5_CORE_IPOIB=y
-CONFIG_MLX5_FPGA_IPSEC=y
-CONFIG_MLX5_FPGA_TLS=y
-CONFIG_MLX5_TLS=y
-CONFIG_MLXSW_CORE=m
-CONFIG_KS8851=m
-CONFIG_KS8851_MLL=m
-CONFIG_KSZ884X_PCI=m
-CONFIG_ENC28J60=m
-CONFIG_ENCX24J600=m
-CONFIG_LAN743X=m
-CONFIG_MYRI10GE=m
-CONFIG_FEALNX=m
-CONFIG_NI_XGE_MANAGEMENT_ENET=m
-CONFIG_NATSEMI=m
-CONFIG_NS83820=m
-CONFIG_S2IO=m
-CONFIG_VXGE=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_NE2K_PCI=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_FORCEDETH=m
-CONFIG_ETHOC=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_IONIC=m
-CONFIG_QLA3XXX=m
-CONFIG_QLCNIC=m
-CONFIG_NETXEN_NIC=m
-CONFIG_QED=m
-CONFIG_QEDE=m
-CONFIG_BNA=m
-CONFIG_QCA7000_SPI=m
-CONFIG_QCOM_EMAC=m
-CONFIG_RMNET=m
-CONFIG_R6040=m
-CONFIG_ATP=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-CONFIG_R8169=m
-CONFIG_SXGBE_ETH=m
-CONFIG_SC92031=m
-CONFIG_SIS900=m
-CONFIG_SIS190=m
-CONFIG_SFC=m
-CONFIG_SFC_FALCON=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_EPIC100=m
-CONFIG_SMSC911X=m
-CONFIG_SMSC9420=m
-CONFIG_STMMAC_ETH=m
-CONFIG_STMMAC_PCI=m
-CONFIG_HAPPYMEAL=m
-CONFIG_SUNGEM=m
-CONFIG_CASSINI=m
-CONFIG_NIU=m
-CONFIG_DWC_XLGMAC=m
-CONFIG_DWC_XLGMAC_PCI=m
-CONFIG_TEHUTI=m
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_VELOCITY=m
-CONFIG_WIZNET_W5100=m
-CONFIG_WIZNET_W5300=m
-CONFIG_XILINX_AXI_EMAC=m
-CONFIG_XILINX_LL_TEMAC=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PHYLIB=y
-CONFIG_AMD_PHY=m
-CONFIG_AQUANTIA_PHY=m
-CONFIG_BROADCOM_PHY=m
-CONFIG_BCM87XX_PHY=m
-CONFIG_CICADA_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_ICPLUS_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_INTEL_XWAY_PHY=m
-CONFIG_LSI_ET1011C_PHY=m
-CONFIG_MARVELL_PHY=m
-CONFIG_MICROCHIP_T1_PHY=m
-CONFIG_MICROSEMI_PHY=m
-CONFIG_NATIONAL_PHY=m
-CONFIG_AT803X_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_RENESAS_PHY=m
-CONFIG_STE10XP=m
-CONFIG_TERANETICS_PHY=m
-CONFIG_DP83822_PHY=m
-CONFIG_DP83TC811_PHY=m
-CONFIG_DP83848_PHY=m
-CONFIG_DP83867_PHY=m
-CONFIG_VITESSE_PHY=m
-CONFIG_MICREL_KS8995MA=m
-CONFIG_MDIO_BITBANG=m
-CONFIG_MDIO_GPIO=m
-CONFIG_USB_NET_DRIVERS=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
-CONFIG_USB_LAN78XX=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_CDC_EEM=m
-CONFIG_USB_NET_HUAWEI_CDC_NCM=m
-CONFIG_USB_NET_CDC_MBIM=m
-CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_SR9700=m
-CONFIG_USB_NET_SR9800=m
-CONFIG_USB_NET_SMSC75XX=m
-CONFIG_USB_NET_SMSC95XX=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_KC2190=y
-CONFIG_USB_NET_CX82310_ETH=m
-CONFIG_USB_NET_KALMIA=m
-CONFIG_USB_NET_QMI_WWAN=m
-CONFIG_USB_HSO=m
-CONFIG_USB_NET_INT51X1=m
-CONFIG_USB_IPHETH=m
-CONFIG_USB_SIERRA_NET=m
-CONFIG_USB_VL600=m
-CONFIG_USB_NET_CH9200=m
-CONFIG_USB_NET_AQC111=m
-CONFIG_ADM8211=m
-CONFIG_ATH5K=m
-CONFIG_ATH9K=m
-CONFIG_ATH9K_AHB=y
-CONFIG_ATH9K_DYNACK=y
-CONFIG_ATH9K_PCI_NO_EEPROM=m
-CONFIG_ATH9K_HTC=m
-CONFIG_ATH9K_HWRNG=y
-CONFIG_CARL9170=m
-CONFIG_ATH6KL=m
-CONFIG_ATH6KL_SDIO=m
-CONFIG_ATH6KL_USB=m
-CONFIG_AR5523=m
-CONFIG_WIL6210=m
-CONFIG_ATH10K=m
-CONFIG_ATH10K_PCI=m
-CONFIG_ATH10K_AHB=y
-CONFIG_ATH10K_SDIO=m
-CONFIG_ATH10K_USB=m
-CONFIG_WCN36XX=m
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_AT76C50X_USB=m
-CONFIG_B43=m
-CONFIG_B43_SDIO=y
-CONFIG_BRCMSMAC=m
-CONFIG_BRCMFMAC=m
-CONFIG_BRCMFMAC_USB=y
-CONFIG_BRCMFMAC_PCIE=y
-CONFIG_AIRO=m
-CONFIG_AIRO_CS=m
-CONFIG_IPW2100=m
-CONFIG_IPW2200=m
-CONFIG_IWL4965=m
-CONFIG_IWL3945=m
-CONFIG_IWLWIFI=m
-CONFIG_IWLDVM=m
-CONFIG_IWLMVM=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
-CONFIG_HOSTAP_PLX=m
-CONFIG_HOSTAP_PCI=m
-CONFIG_HOSTAP_CS=m
-CONFIG_HERMES=m
-CONFIG_HERMES_PRISM=y
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_NORTEL_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_ORINOCO_USB=m
-CONFIG_P54_COMMON=m
-CONFIG_P54_USB=m
-CONFIG_P54_PCI=m
-CONFIG_P54_SPI=m
-CONFIG_P54_SPI_DEFAULT_EEPROM=y
-CONFIG_LIBERTAS=m
-CONFIG_LIBERTAS_USB=m
-CONFIG_LIBERTAS_CS=m
-CONFIG_LIBERTAS_SDIO=m
-CONFIG_LIBERTAS_SPI=m
-CONFIG_LIBERTAS_THINFIRM=m
-CONFIG_LIBERTAS_THINFIRM_USB=m
-CONFIG_MWIFIEX=m
-CONFIG_MWIFIEX_SDIO=m
-CONFIG_MWIFIEX_PCIE=m
-CONFIG_MWIFIEX_USB=m
-CONFIG_MWL8K=m
-CONFIG_MT7601U=m
-CONFIG_MT76x0U=m
-CONFIG_MT76x0E=m
-CONFIG_MT76x2E=m
-CONFIG_MT76x2U=m
-CONFIG_MT7603E=m
-CONFIG_MT7615E=m
-CONFIG_MT7663U=m
-CONFIG_MT7663S=m
-CONFIG_MT7915E=m
-CONFIG_MT7921E=m
-CONFIG_WILC1000_SDIO=m
-CONFIG_WILC1000_SPI=m
-CONFIG_WILC1000_HW_OOB_INTR=y
-CONFIG_RT2X00=m
-CONFIG_RT2400PCI=m
-CONFIG_RT2500PCI=m
-CONFIG_RT61PCI=m
-CONFIG_RT2800PCI=m
-CONFIG_RT2500USB=m
-CONFIG_RT73USB=m
-CONFIG_RT2800USB=m
-CONFIG_RT2800USB_RT3573=y
-CONFIG_RT2800USB_RT53XX=y
-CONFIG_RT2800USB_RT55XX=y
-CONFIG_RT2800USB_UNKNOWN=y
-CONFIG_RTL8180=m
-CONFIG_RTL8187=m
-CONFIG_RTL_CARDS=m
-CONFIG_RTL8192CE=m
-CONFIG_RTL8192SE=m
-CONFIG_RTL8192DE=m
-CONFIG_RTL8723AE=m
-CONFIG_RTL8723BE=m
-CONFIG_RTL8188EE=m
-CONFIG_RTL8192EE=m
-CONFIG_RTL8821AE=m
-CONFIG_RTL8192CU=m
-CONFIG_RTL8XXXU=m
-CONFIG_RTL8XXXU_UNTESTED=y
-CONFIG_RTW88=m
-CONFIG_RTW88_8822BE=m
-CONFIG_RTW88_8822CE=m
-CONFIG_RTW88_8723DE=m
-CONFIG_RTW88_8821CE=m
-CONFIG_RTW89=m
-CONFIG_RTW89_8852AE=m
-CONFIG_RSI_91X=m
-CONFIG_CW1200=m
-CONFIG_CW1200_WLAN_SDIO=m
-CONFIG_CW1200_WLAN_SPI=m
-CONFIG_WL1251=m
-CONFIG_WL1251_SPI=m
-CONFIG_WL1251_SDIO=m
-CONFIG_WL12XX=m
-CONFIG_WL18XX=m
-CONFIG_WLCORE_SPI=m
-CONFIG_WLCORE_SDIO=m
-CONFIG_USB_ZD1201=m
-CONFIG_ZD1211RW=m
-CONFIG_QTNFMAC_PCIE=m
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_MAC80211_HWSIM=m
-# CONFIG_XEN_NETDEV_FRONTEND is not set
-CONFIG_VMXNET3=m
-CONFIG_FUJITSU_ES=m
-CONFIG_NET_FAILOVER=y
-CONFIG_INPUT_LEDS=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_JOYDEV=y
-CONFIG_INPUT_EVDEV=y
-CONFIG_KEYBOARD_ADP5520=m
-CONFIG_KEYBOARD_ADP5588=m
-CONFIG_KEYBOARD_ADP5589=m
-CONFIG_KEYBOARD_QT1070=m
-CONFIG_KEYBOARD_QT2160=m
-CONFIG_KEYBOARD_LKKBD=m
-CONFIG_KEYBOARD_GPIO=m
-CONFIG_KEYBOARD_GPIO_POLLED=m
-CONFIG_KEYBOARD_TCA6416=m
-CONFIG_KEYBOARD_TCA8418=m
-CONFIG_KEYBOARD_MATRIX=m
-CONFIG_KEYBOARD_LM8323=m
-CONFIG_KEYBOARD_LM8333=m
-CONFIG_KEYBOARD_MAX7359=m
-CONFIG_KEYBOARD_MCS=m
-CONFIG_KEYBOARD_MPR121=m
-CONFIG_KEYBOARD_NEWTON=m
-CONFIG_KEYBOARD_OPENCORES=m
-CONFIG_KEYBOARD_SAMSUNG=m
-CONFIG_KEYBOARD_STOWAWAY=m
-CONFIG_KEYBOARD_SUNKBD=m
-CONFIG_KEYBOARD_TWL4030=m
-CONFIG_KEYBOARD_XTKBD=m
-CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_PS2_ELANTECH=y
-CONFIG_MOUSE_PS2_SENTELIC=y
-CONFIG_MOUSE_PS2_TOUCHKIT=y
-CONFIG_MOUSE_PS2_VMMOUSE=y
-CONFIG_MOUSE_SERIAL=m
-CONFIG_MOUSE_APPLETOUCH=m
-CONFIG_MOUSE_BCM5974=m
-CONFIG_MOUSE_CYAPA=m
-CONFIG_MOUSE_ELAN_I2C=m
-CONFIG_MOUSE_ELAN_I2C_SMBUS=y
-CONFIG_MOUSE_VSXXXAA=m
-CONFIG_MOUSE_GPIO=m
-CONFIG_MOUSE_SYNAPTICS_I2C=m
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_A3D=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_COBRA=m
-CONFIG_JOYSTICK_GF2K=m
-CONFIG_JOYSTICK_GRIP=m
-CONFIG_JOYSTICK_GRIP_MP=m
-CONFIG_JOYSTICK_GUILLEMOT=m
-CONFIG_JOYSTICK_INTERACT=m
-CONFIG_JOYSTICK_SIDEWINDER=m
-CONFIG_JOYSTICK_TMDC=m
-CONFIG_JOYSTICK_IFORCE=m
-CONFIG_JOYSTICK_IFORCE_USB=m
-CONFIG_JOYSTICK_IFORCE_232=m
-CONFIG_JOYSTICK_WARRIOR=m
-CONFIG_JOYSTICK_MAGELLAN=m
-CONFIG_JOYSTICK_SPACEORB=m
-CONFIG_JOYSTICK_SPACEBALL=m
-CONFIG_JOYSTICK_STINGER=m
-CONFIG_JOYSTICK_TWIDJOY=m
-CONFIG_JOYSTICK_ZHENHUA=m
-CONFIG_JOYSTICK_DB9=m
-CONFIG_JOYSTICK_GAMECON=m
-CONFIG_JOYSTICK_TURBOGRAFX=m
-CONFIG_JOYSTICK_AS5011=m
-CONFIG_JOYSTICK_JOYDUMP=m
-CONFIG_JOYSTICK_XPAD=m
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_JOYSTICK_WALKERA0701=m
-CONFIG_JOYSTICK_PSXPAD_SPI=m
-CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
-CONFIG_JOYSTICK_PXRC=m
-CONFIG_JOYSTICK_QWIIC=m
-CONFIG_JOYSTICK_FSIA6B=m
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_88PM860X=m
-CONFIG_TOUCHSCREEN_ADS7846=m
-CONFIG_TOUCHSCREEN_AD7877=m
-CONFIG_TOUCHSCREEN_AD7879=m
-CONFIG_TOUCHSCREEN_AD7879_I2C=m
-CONFIG_TOUCHSCREEN_AD7879_SPI=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
-CONFIG_TOUCHSCREEN_DA9034=m
-CONFIG_TOUCHSCREEN_DA9052=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_GOODIX=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_ELAN=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_WACOM_I2C=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MMS114=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_INEXIO=m
-CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_EDT_FT5X06=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
-CONFIG_TOUCHSCREEN_UCB1400=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
-CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
-CONFIG_TOUCHSCREEN_WM831X=m
-CONFIG_TOUCHSCREEN_WM97XX=m
-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-CONFIG_TOUCHSCREEN_MC13783=m
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC2004=m
-CONFIG_TOUCHSCREEN_TSC2005=m
-CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_PCAP=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_SUR40=m
-CONFIG_TOUCHSCREEN_SX8654=m
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_ZFORCE=m
-CONFIG_TOUCHSCREEN_ROHM_BU21023=m
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_88PM860X_ONKEY=m
-CONFIG_INPUT_88PM80X_ONKEY=m
-CONFIG_INPUT_AD714X=m
-CONFIG_INPUT_ARIZONA_HAPTICS=m
-CONFIG_INPUT_BMA150=m
-CONFIG_INPUT_E3X0_BUTTON=m
-CONFIG_INPUT_PCSPKR=m
-CONFIG_INPUT_MAX77693_HAPTIC=m
-CONFIG_INPUT_MAX8925_ONKEY=m
-CONFIG_INPUT_MAX8997_HAPTIC=m
-CONFIG_INPUT_MC13783_PWRBUTTON=m
-CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_APANEL=m
-CONFIG_INPUT_GPIO_BEEPER=m
-CONFIG_INPUT_ATLAS_BTNS=m
-CONFIG_INPUT_ATI_REMOTE2=m
-CONFIG_INPUT_KEYSPAN_REMOTE=m
-CONFIG_INPUT_KXTJ9=m
-CONFIG_INPUT_POWERMATE=m
-CONFIG_INPUT_YEALINK=m
-CONFIG_INPUT_CM109=m
-CONFIG_INPUT_REGULATOR_HAPTIC=m
-CONFIG_INPUT_RETU_PWRBUTTON=m
-CONFIG_INPUT_TWL4030_PWRBUTTON=m
-CONFIG_INPUT_TWL4030_VIBRA=m
-CONFIG_INPUT_TWL6040_VIBRA=m
-CONFIG_INPUT_UINPUT=y
-CONFIG_INPUT_PALMAS_PWRBUTTON=m
-CONFIG_INPUT_PCF50633_PMU=m
-CONFIG_INPUT_PCF8574=m
-CONFIG_INPUT_PWM_BEEPER=m
-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
-CONFIG_INPUT_DA9052_ONKEY=m
-CONFIG_INPUT_DA9055_ONKEY=m
-CONFIG_INPUT_DA9063_ONKEY=m
-CONFIG_INPUT_WM831X_ON=m
-CONFIG_INPUT_PCAP=m
-CONFIG_INPUT_ADXL34X=m
-CONFIG_INPUT_IMS_PCU=m
-CONFIG_INPUT_CMA3000=m
-CONFIG_INPUT_CMA3000_I2C=m
-CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
-CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
-CONFIG_INPUT_SOC_BUTTON_ARRAY=m
-CONFIG_INPUT_DRV260X_HAPTICS=m
-CONFIG_INPUT_DRV2665_HAPTICS=m
-CONFIG_INPUT_DRV2667_HAPTICS=m
-CONFIG_SERIO_SERPORT=m
-CONFIG_SERIO_CT82C710=m
-CONFIG_SERIO_PARKBD=m
-CONFIG_SERIO_PCIPS2=m
-CONFIG_SERIO_RAW=m
-CONFIG_SERIO_ALTERA_PS2=m
-CONFIG_SERIO_PS2MULT=m
-CONFIG_SERIO_ARC_PS2=m
-CONFIG_USERIO=m
-CONFIG_GAMEPORT_NS558=m
-CONFIG_GAMEPORT_L4=m
-CONFIG_GAMEPORT_EMU10K1=m
-CONFIG_GAMEPORT_FM801=m
-CONFIG_LEGACY_PTY_COUNT=0
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=48
-CONFIG_SERIAL_8250_RUNTIME_UARTS=32
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_RSA=y
-CONFIG_SERIAL_8250_DW=m
-CONFIG_SERIAL_8250_RT288X=y
-CONFIG_SERIAL_8250_MID=m
-CONFIG_SERIAL_KGDB_NMI=y
-CONFIG_SERIAL_MAX3100=m
-CONFIG_SERIAL_MAX310X=y
-CONFIG_SERIAL_UARTLITE=m
-CONFIG_SERIAL_JSM=m
-CONFIG_SERIAL_SCCNXP=y
-CONFIG_SERIAL_SCCNXP_CONSOLE=y
-CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
-CONFIG_SERIAL_ALTERA_JTAGUART=m
-CONFIG_SERIAL_ALTERA_UART=m
-CONFIG_SERIAL_ARC=m
-CONFIG_SERIAL_RP2=m
-CONFIG_SERIAL_FSL_LPUART=m
-CONFIG_SERIAL_MEN_Z135=m
-CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_MOXA_INTELLIO=m
-CONFIG_MOXA_SMARTIO=m
-CONFIG_SYNCLINK_GT=m
-CONFIG_N_HDLC=m
-CONFIG_N_GSM=m
-CONFIG_NOZOMI=m
-CONFIG_TTY_PRINTK=y
-CONFIG_PRINTER=m
-CONFIG_PPDEV=m
-CONFIG_IPMI_HANDLER=m
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SSIF=m
-CONFIG_IPMI_WATCHDOG=m
-CONFIG_IPMI_POWEROFF=m
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_TIMERIOMEM=m
-CONFIG_HW_RANDOM_INTEL=m
-CONFIG_HW_RANDOM_AMD=m
-CONFIG_HW_RANDOM_VIA=m
-CONFIG_APPLICOM=m
-CONFIG_SYNCLINK_CS=m
-CONFIG_CARDMAN_4000=m
-CONFIG_CARDMAN_4040=m
-CONFIG_IPWIRELESS=m
-CONFIG_MWAVE=m
-CONFIG_HPET=y
-CONFIG_HANGCHECK_TIMER=m
-CONFIG_TCG_TPM=y
-CONFIG_TCG_TIS=y
-CONFIG_TCG_TIS_I2C_ATMEL=m
-CONFIG_TCG_TIS_I2C_INFINEON=m
-CONFIG_TCG_TIS_I2C_NUVOTON=m
-CONFIG_TCG_NSC=m
-CONFIG_TCG_ATMEL=m
-CONFIG_TCG_INFINEON=m
-CONFIG_TCG_XEN=m
-CONFIG_TCG_CRB=y
-CONFIG_TCG_TIS_ST33ZP24_I2C=m
-CONFIG_TCG_TIS_ST33ZP24_SPI=m
-CONFIG_TELCLOCK=m
-CONFIG_XILLYBUS=m
-CONFIG_XILLYBUS_PCIE=m
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_ALI1535=m
-CONFIG_I2C_ALI1563=m
-CONFIG_I2C_ALI15X3=m
-CONFIG_I2C_AMD756=m
-CONFIG_I2C_AMD756_S4882=m
-CONFIG_I2C_AMD8111=m
-CONFIG_I2C_I801=m
-CONFIG_I2C_ISCH=m
-CONFIG_I2C_ISMT=m
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_NFORCE2=m
-CONFIG_I2C_NFORCE2_S4985=m
-CONFIG_I2C_SIS5595=m
-CONFIG_I2C_SIS630=m
-CONFIG_I2C_SIS96X=m
-CONFIG_I2C_VIA=m
-CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_SCMI=m
-CONFIG_I2C_CBUS_GPIO=m
-CONFIG_I2C_DESIGNWARE_PLATFORM=y
-CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
-CONFIG_I2C_DESIGNWARE_PCI=m
-CONFIG_I2C_EMEV2=m
-CONFIG_I2C_GPIO=m
-CONFIG_I2C_KEMPLD=m
-CONFIG_I2C_OCORES=m
-CONFIG_I2C_PCA_PLATFORM=m
-CONFIG_I2C_SIMTEC=m
-CONFIG_I2C_XILINX=m
-CONFIG_I2C_DIOLAN_U2C=m
-CONFIG_I2C_DLN2=m
-CONFIG_I2C_PARPORT=m
-CONFIG_I2C_ROBOTFUZZ_OSIF=m
-CONFIG_I2C_TAOS_EVM=m
-CONFIG_I2C_TINY_USB=m
-CONFIG_I2C_VIPERBOARD=m
-CONFIG_I2C_STUB=m
-CONFIG_SPI=y
-CONFIG_SPI_ALTERA=m
-CONFIG_SPI_BUTTERFLY=m
-CONFIG_SPI_CADENCE=m
-CONFIG_SPI_DESIGNWARE=m
-CONFIG_SPI_DW_PCI=m
-CONFIG_SPI_DW_MMIO=m
-CONFIG_SPI_DLN2=m
-CONFIG_SPI_GPIO=m
-CONFIG_SPI_LM70_LLP=m
-CONFIG_SPI_OC_TINY=m
-CONFIG_SPI_SC18IS602=m
-CONFIG_SPI_XCOMM=m
-CONFIG_SPI_ZYNQMP_GQSPI=m
-CONFIG_SPI_SPIDEV=m
-CONFIG_SPI_TLE62X0=m
-CONFIG_SPMI=m
-CONFIG_HSI=m
-CONFIG_HSI_CHAR=m
-CONFIG_PPS_CLIENT_LDISC=m
-CONFIG_PPS_CLIENT_PARPORT=m
-CONFIG_PPS_CLIENT_GPIO=m
-CONFIG_PINCTRL_AMD=y
-CONFIG_PINCTRL_BAYTRAIL=y
-CONFIG_PINCTRL_CHERRYVIEW=m
-CONFIG_PINCTRL_BROXTON=m
-CONFIG_PINCTRL_SUNRISEPOINT=m
-CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_AMDPT=m
-CONFIG_GPIO_DWAPB=m
-CONFIG_GPIO_GENERIC_PLATFORM=m
-CONFIG_GPIO_VX855=m
-CONFIG_GPIO_F7188X=m
-CONFIG_GPIO_IT87=m
-CONFIG_GPIO_SCH=m
-CONFIG_GPIO_SCH311X=m
-CONFIG_GPIO_ADP5588=m
-CONFIG_GPIO_MAX7300=m
-CONFIG_GPIO_MAX732X=m
-CONFIG_GPIO_PCA953X=m
-CONFIG_GPIO_PCF857X=m
-CONFIG_GPIO_ADP5520=m
-CONFIG_GPIO_ARIZONA=m
-CONFIG_GPIO_CRYSTAL_COVE=m
-CONFIG_GPIO_DA9052=m
-CONFIG_GPIO_DA9055=m
-CONFIG_GPIO_DLN2=m
-CONFIG_GPIO_JANZ_TTL=m
-CONFIG_GPIO_KEMPLD=m
-CONFIG_GPIO_LP3943=m
-CONFIG_GPIO_PALMAS=y
-CONFIG_GPIO_RC5T583=y
-CONFIG_GPIO_TPS6586X=y
-CONFIG_GPIO_TPS65910=y
-CONFIG_GPIO_TPS65912=m
-CONFIG_GPIO_TWL4030=m
-CONFIG_GPIO_TWL6040=m
-CONFIG_GPIO_UCB1400=m
-CONFIG_GPIO_WM831X=m
-CONFIG_GPIO_WM8350=m
-CONFIG_GPIO_WM8994=m
-CONFIG_GPIO_AMD8111=m
-CONFIG_GPIO_ML_IOH=m
-CONFIG_GPIO_RDC321X=m
-CONFIG_GPIO_MAX7301=m
-CONFIG_GPIO_MC33880=m
-CONFIG_GPIO_VIPERBOARD=m
-CONFIG_W1_MASTER_MATROX=m
-CONFIG_W1_MASTER_DS2490=m
-CONFIG_W1_MASTER_DS2482=m
-CONFIG_W1_MASTER_DS1WM=m
-CONFIG_W1_MASTER_GPIO=m
-CONFIG_W1_SLAVE_THERM=m
-CONFIG_W1_SLAVE_SMEM=m
-CONFIG_W1_SLAVE_DS2408=m
-CONFIG_W1_SLAVE_DS2413=m
-CONFIG_W1_SLAVE_DS2406=m
-CONFIG_W1_SLAVE_DS2423=m
-CONFIG_W1_SLAVE_DS2431=m
-CONFIG_W1_SLAVE_DS2433=m
-CONFIG_W1_SLAVE_DS28E04=m
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_RESTART=y
-CONFIG_PDA_POWER=m
-CONFIG_GENERIC_ADC_BATTERY=m
-CONFIG_MAX8925_POWER=m
-CONFIG_WM831X_BACKUP=m
-CONFIG_WM831X_POWER=m
-CONFIG_WM8350_POWER=m
-CONFIG_TEST_POWER=m
-CONFIG_BATTERY_88PM860X=m
-CONFIG_BATTERY_DS2760=m
-CONFIG_BATTERY_DS2780=m
-CONFIG_BATTERY_DS2781=m
-CONFIG_BATTERY_DS2782=m
-CONFIG_BATTERY_SBS=m
-CONFIG_BATTERY_BQ27XXX=m
-CONFIG_BATTERY_DA9030=m
-CONFIG_BATTERY_DA9052=m
-CONFIG_CHARGER_DA9150=m
-CONFIG_BATTERY_DA9150=m
-CONFIG_BATTERY_MAX17040=m
-CONFIG_BATTERY_MAX17042=m
-CONFIG_BATTERY_TWL4030_MADC=m
-CONFIG_CHARGER_88PM860X=m
-CONFIG_CHARGER_PCF50633=m
-CONFIG_BATTERY_RX51=m
-CONFIG_CHARGER_ISP1704=m
-CONFIG_CHARGER_MAX8903=m
-CONFIG_CHARGER_TWL4030=m
-CONFIG_CHARGER_LP8727=m
-CONFIG_CHARGER_LP8788=m
-CONFIG_CHARGER_GPIO=m
-CONFIG_CHARGER_MANAGER=y
-CONFIG_CHARGER_MAX14577=m
-CONFIG_CHARGER_MAX77693=m
-CONFIG_CHARGER_MAX8997=m
-CONFIG_CHARGER_MAX8998=m
-CONFIG_CHARGER_BQ2415X=m
-CONFIG_CHARGER_BQ24190=m
-CONFIG_CHARGER_BQ24257=m
-CONFIG_CHARGER_BQ24735=m
-CONFIG_CHARGER_BQ25890=m
-CONFIG_CHARGER_SMB347=m
-CONFIG_CHARGER_TPS65090=m
-CONFIG_BATTERY_GAUGE_LTC2941=m
-CONFIG_BATTERY_RT5033=m
-CONFIG_CHARGER_RT9455=m
-CONFIG_SENSORS_ABITUGURU=m
-CONFIG_SENSORS_ABITUGURU3=m
-CONFIG_SENSORS_AD7314=m
-CONFIG_SENSORS_AD7414=m
-CONFIG_SENSORS_AD7418=m
-CONFIG_SENSORS_ADM1021=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1029=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ADM9240=m
-CONFIG_SENSORS_ADT7310=m
-CONFIG_SENSORS_ADT7410=m
-CONFIG_SENSORS_ADT7411=m
-CONFIG_SENSORS_ADT7462=m
-CONFIG_SENSORS_ADT7470=m
-CONFIG_SENSORS_ADT7475=m
-CONFIG_SENSORS_ASC7621=m
-CONFIG_SENSORS_K8TEMP=m
-CONFIG_SENSORS_K10TEMP=m
-CONFIG_SENSORS_FAM15H_POWER=m
-CONFIG_SENSORS_APPLESMC=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_ATXP1=m
-CONFIG_SENSORS_DS620=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_DA9052_ADC=m
-CONFIG_SENSORS_DA9055=m
-CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
-CONFIG_SENSORS_F75375S=m
-CONFIG_SENSORS_MC13783_ADC=m
-CONFIG_SENSORS_FSCHMD=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
-CONFIG_SENSORS_G760A=m
-CONFIG_SENSORS_G762=m
-CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_IBMAEM=m
-CONFIG_SENSORS_IBMPEX=m
-CONFIG_SENSORS_IIO_HWMON=m
-CONFIG_SENSORS_I5500=m
-CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_JC42=m
-CONFIG_SENSORS_POWR1220=m
-CONFIG_SENSORS_LINEAGE=m
-CONFIG_SENSORS_LTC2945=m
-CONFIG_SENSORS_LTC4151=m
-CONFIG_SENSORS_LTC4215=m
-CONFIG_SENSORS_LTC4222=m
-CONFIG_SENSORS_LTC4245=m
-CONFIG_SENSORS_LTC4260=m
-CONFIG_SENSORS_LTC4261=m
-CONFIG_SENSORS_MAX1111=m
-CONFIG_SENSORS_MAX16065=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_MAX1668=m
-CONFIG_SENSORS_MAX197=m
-CONFIG_SENSORS_MAX6639=m
-CONFIG_SENSORS_MAX6642=m
-CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6697=m
-CONFIG_SENSORS_MAX31790=m
-CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_MENF21BMC_HWMON=m
-CONFIG_SENSORS_ADCXX=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM70=m
-CONFIG_SENSORS_LM73=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_LM93=m
-CONFIG_SENSORS_LM95234=m
-CONFIG_SENSORS_LM95241=m
-CONFIG_SENSORS_LM95245=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_NCT6683=m
-CONFIG_SENSORS_NCT6775=m
-CONFIG_SENSORS_NCT7802=m
-CONFIG_SENSORS_NCT7904=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_PMBUS=m
-CONFIG_SENSORS_ADM1275=m
-CONFIG_SENSORS_LM25066=m
-CONFIG_SENSORS_LTC2978=m
-CONFIG_SENSORS_LTC2978_REGULATOR=y
-CONFIG_SENSORS_MAX16064=m
-CONFIG_SENSORS_MAX20751=m
-CONFIG_SENSORS_MAX34440=m
-CONFIG_SENSORS_MAX8688=m
-CONFIG_SENSORS_TPS40422=m
-CONFIG_SENSORS_UCD9000=m
-CONFIG_SENSORS_UCD9200=m
-CONFIG_SENSORS_ZL6100=m
-CONFIG_SENSORS_SHT15=m
-CONFIG_SENSORS_SHT21=m
-CONFIG_SENSORS_SHTC1=m
-CONFIG_SENSORS_SIS5595=m
-CONFIG_SENSORS_DME1737=m
-CONFIG_SENSORS_EMC1403=m
-CONFIG_SENSORS_EMC2103=m
-CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
-CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_ADC128D818=m
-CONFIG_SENSORS_ADS7828=m
-CONFIG_SENSORS_ADS7871=m
-CONFIG_SENSORS_AMC6821=m
-CONFIG_SENSORS_INA209=m
-CONFIG_SENSORS_INA2XX=m
-CONFIG_SENSORS_TC74=m
-CONFIG_SENSORS_THMC50=m
-CONFIG_SENSORS_TMP102=m
-CONFIG_SENSORS_TMP103=m
-CONFIG_SENSORS_TMP401=m
-CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VIA_CPUTEMP=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
-CONFIG_SENSORS_VT8231=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83791D=m
-CONFIG_SENSORS_W83792D=m
-CONFIG_SENSORS_W83793=m
-CONFIG_SENSORS_W83795=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
-CONFIG_SENSORS_WM831X=m
-CONFIG_SENSORS_WM8350=m
-CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_SENSORS_ATK0110=m
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
-CONFIG_THERMAL_EMULATION=y
-CONFIG_INTEL_POWERCLAMP=m
-CONFIG_INTEL_SOC_DTS_THERMAL=m
-CONFIG_INT340X_THERMAL=m
-CONFIG_INTEL_PCH_THERMAL=m
-CONFIG_INTEL_MENLOW=m
-CONFIG_WATCHDOG=y
-CONFIG_WATCHDOG_CORE=y
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_DA9052_WATCHDOG=m
-CONFIG_DA9055_WATCHDOG=m
-CONFIG_DA9063_WATCHDOG=m
-CONFIG_DA9062_WATCHDOG=m
-CONFIG_MENF21BMC_WATCHDOG=m
-CONFIG_WM831X_WATCHDOG=m
-CONFIG_WM8350_WATCHDOG=m
-CONFIG_XILINX_WATCHDOG=m
-CONFIG_CADENCE_WATCHDOG=m
-CONFIG_DW_WATCHDOG=m
-CONFIG_TWL4030_WATCHDOG=m
-CONFIG_MAX63XX_WATCHDOG=m
-CONFIG_RETU_WATCHDOG=m
-CONFIG_ACQUIRE_WDT=m
-CONFIG_ADVANTECH_WDT=m
-CONFIG_ALIM1535_WDT=m
-CONFIG_ALIM7101_WDT=m
-CONFIG_F71808E_WDT=m
-CONFIG_SP5100_TCO=m
-CONFIG_SBC_FITPC2_WATCHDOG=m
-CONFIG_EUROTECH_WDT=m
-CONFIG_IB700_WDT=m
-CONFIG_IBMASR=m
-CONFIG_WAFER_WDT=m
-CONFIG_I6300ESB_WDT=m
-CONFIG_IE6XX_WDT=m
-CONFIG_ITCO_WDT=m
-CONFIG_ITCO_VENDOR_SUPPORT=y
-CONFIG_IT8712F_WDT=m
-CONFIG_IT87_WDT=m
-CONFIG_HP_WATCHDOG=m
-CONFIG_KEMPLD_WDT=m
-CONFIG_SC1200_WDT=m
-CONFIG_PC87413_WDT=m
-CONFIG_NV_TCO=m
-CONFIG_60XX_WDT=m
-CONFIG_CPU5_WDT=m
-CONFIG_SMSC_SCH311X_WDT=m
-CONFIG_SMSC37B787_WDT=m
-CONFIG_VIA_WDT=m
-CONFIG_W83627HF_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_W83977F_WDT=m
-CONFIG_MACHZ_WDT=m
-CONFIG_SBC_EPX_C3_WATCHDOG=m
-CONFIG_MEN_A21_WDT=m
-CONFIG_XEN_WDT=m
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-CONFIG_USBPCWATCHDOG=m
-CONFIG_SSB_DRIVER_GPIO=y
-CONFIG_MFD_AS3711=y
-CONFIG_PMIC_ADP5520=y
-CONFIG_MFD_AAT2870_CORE=y
-CONFIG_MFD_BCM590XX=m
-CONFIG_PMIC_DA903X=y
-CONFIG_MFD_DA9052_SPI=y
-CONFIG_MFD_DA9052_I2C=y
-CONFIG_MFD_DA9055=y
-CONFIG_MFD_DA9062=m
-CONFIG_MFD_DA9063=y
-CONFIG_MFD_DA9150=m
-CONFIG_MFD_DLN2=m
-CONFIG_MFD_MC13XXX_SPI=m
-CONFIG_MFD_MC13XXX_I2C=m
-CONFIG_HTC_PASIC3=m
-CONFIG_HTC_I2CPLD=y
-CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m
-CONFIG_INTEL_SOC_PMIC=y
-CONFIG_MFD_INTEL_LPSS_ACPI=m
-CONFIG_MFD_INTEL_LPSS_PCI=m
-CONFIG_MFD_JANZ_CMODIO=m
-CONFIG_MFD_KEMPLD=m
-CONFIG_MFD_88PM800=m
-CONFIG_MFD_88PM805=m
-CONFIG_MFD_88PM860X=y
-CONFIG_MFD_MAX14577=y
-CONFIG_MFD_MAX77693=y
-CONFIG_MFD_MAX77843=y
-CONFIG_MFD_MAX8907=m
-CONFIG_MFD_MAX8925=y
-CONFIG_MFD_MAX8997=y
-CONFIG_MFD_MAX8998=y
-CONFIG_MFD_MT6397=m
-CONFIG_MFD_MENF21BMC=m
-CONFIG_EZX_PCAP=y
-CONFIG_MFD_VIPERBOARD=m
-CONFIG_MFD_RETU=m
-CONFIG_MFD_PCF50633=m
-CONFIG_PCF50633_ADC=m
-CONFIG_PCF50633_GPIO=m
-CONFIG_UCB1400_CORE=m
-CONFIG_MFD_RT5033=m
-CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
-CONFIG_MFD_SI476X_CORE=m
-CONFIG_MFD_SM501=m
-CONFIG_MFD_SM501_GPIO=y
-CONFIG_MFD_SKY81452=m
-CONFIG_MFD_TI_AM335X_TSCADC=m
-CONFIG_MFD_LP3943=m
-CONFIG_MFD_LP8788=y
-CONFIG_MFD_PALMAS=y
-CONFIG_TPS6105X=m
-CONFIG_TPS65010=m
-CONFIG_TPS6507X=m
-CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS6586X=y
-CONFIG_MFD_TPS65910=y
-CONFIG_MFD_TPS65912_I2C=y
-CONFIG_MFD_TPS65912_SPI=y
-CONFIG_TWL4030_CORE=y
-CONFIG_TWL6040_CORE=y
-CONFIG_MFD_LM3533=m
-CONFIG_MFD_ARIZONA_I2C=m
-CONFIG_MFD_ARIZONA_SPI=m
-CONFIG_MFD_WM5102=y
-CONFIG_MFD_WM5110=y
-CONFIG_MFD_WM8997=y
-CONFIG_MFD_WM8998=y
-CONFIG_MFD_WM8400=y
-CONFIG_MFD_WM831X_I2C=y
-CONFIG_MFD_WM831X_SPI=y
-CONFIG_MFD_WM8350_I2C=y
-CONFIG_MFD_WM8994=m
-CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
-CONFIG_REGULATOR_USERSPACE_CONSUMER=m
-CONFIG_REGULATOR_88PM800=m
-CONFIG_REGULATOR_88PM8607=m
-CONFIG_REGULATOR_ACT8865=m
-CONFIG_REGULATOR_AD5398=m
-CONFIG_REGULATOR_AAT2870=m
-CONFIG_REGULATOR_AS3711=m
-CONFIG_REGULATOR_BCM590XX=m
-CONFIG_REGULATOR_DA903X=m
-CONFIG_REGULATOR_DA9052=m
-CONFIG_REGULATOR_DA9055=m
-CONFIG_REGULATOR_DA9062=m
-CONFIG_REGULATOR_DA9210=m
-CONFIG_REGULATOR_DA9211=m
-CONFIG_REGULATOR_FAN53555=m
-CONFIG_REGULATOR_GPIO=m
-CONFIG_REGULATOR_ISL9305=m
-CONFIG_REGULATOR_ISL6271A=m
-CONFIG_REGULATOR_LP3971=m
-CONFIG_REGULATOR_LP3972=m
-CONFIG_REGULATOR_LP872X=m
-CONFIG_REGULATOR_LP8755=m
-CONFIG_REGULATOR_LP8788=m
-CONFIG_REGULATOR_LTC3589=m
-CONFIG_REGULATOR_MAX14577=m
-CONFIG_REGULATOR_MAX1586=m
-CONFIG_REGULATOR_MAX8649=m
-CONFIG_REGULATOR_MAX8660=m
-CONFIG_REGULATOR_MAX8907=m
-CONFIG_REGULATOR_MAX8925=m
-CONFIG_REGULATOR_MAX8952=m
-CONFIG_REGULATOR_MAX8997=m
-CONFIG_REGULATOR_MAX8998=m
-CONFIG_REGULATOR_MAX77693=m
-CONFIG_REGULATOR_MC13783=m
-CONFIG_REGULATOR_MC13892=m
-CONFIG_REGULATOR_MT6311=m
-CONFIG_REGULATOR_MT6397=m
-CONFIG_REGULATOR_PALMAS=m
-CONFIG_REGULATOR_PCAP=m
-CONFIG_REGULATOR_PCF50633=m
-CONFIG_REGULATOR_PFUZE100=m
-CONFIG_REGULATOR_PWM=m
-CONFIG_REGULATOR_QCOM_SPMI=m
-CONFIG_REGULATOR_RC5T583=m
-CONFIG_REGULATOR_RT5033=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
-CONFIG_REGULATOR_SKY81452=m
-CONFIG_REGULATOR_TPS51632=m
-CONFIG_REGULATOR_TPS62360=m
-CONFIG_REGULATOR_TPS65023=m
-CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_TPS65090=m
-CONFIG_REGULATOR_TPS6524X=m
-CONFIG_REGULATOR_TPS6586X=m
-CONFIG_REGULATOR_TPS65910=m
-CONFIG_REGULATOR_TPS65912=m
-CONFIG_REGULATOR_TWL4030=m
-CONFIG_REGULATOR_WM831X=m
-CONFIG_REGULATOR_WM8350=m
-CONFIG_REGULATOR_WM8400=m
-CONFIG_REGULATOR_WM8994=m
-CONFIG_CEC_CH7322=m
-CONFIG_CEC_GPIO=m
-CONFIG_CEC_SECO=m
-CONFIG_USB_PULSE8_CEC=m
-CONFIG_USB_RAINSHADOW_CEC=m
-CONFIG_MEDIA_SUPPORT=m
-CONFIG_V4L2_FLASH_LED_CLASS=m
-CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
-CONFIG_VIDEO_AU0828=m
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_AF9035=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_DVB_USB_DVBSKY=m
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_SMS_USB_DRV=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-CONFIG_DVB_AS102=m
-CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_EM28XX_V4L2=m
-CONFIG_VIDEO_EM28XX_ALSA=m
-CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_USB_AIRSPY=m
-CONFIG_USB_HACKRF=m
-CONFIG_USB_MSI2500=m
-CONFIG_MEDIA_PCI_SUPPORT=y
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_MXB=m
-CONFIG_VIDEO_DT3155=m
-CONFIG_VIDEO_CX25821=m
-CONFIG_VIDEO_CX25821_ALSA=m
-CONFIG_VIDEO_SAA7134=m
-CONFIG_VIDEO_SAA7134_ALSA=m
-CONFIG_VIDEO_SAA7134_DVB=m
-CONFIG_VIDEO_SAA7134_GO7007=m
-CONFIG_VIDEO_SAA7164=m
-CONFIG_VIDEO_COBALT=m
-CONFIG_DVB_BUDGET_CORE=m
-CONFIG_DVB_BUDGET=m
-CONFIG_DVB_BUDGET_AV=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_PT1=m
-CONFIG_DVB_PT3=m
-CONFIG_DVB_NGENE=m
-CONFIG_DVB_DDBRIDGE=m
-CONFIG_DVB_NETUP_UNIDVB=m
-CONFIG_RADIO_SI470X=m
-CONFIG_USB_SI470X=m
-CONFIG_I2C_SI470X=m
-CONFIG_RADIO_SI4713=m
-CONFIG_USB_SI4713=m
-CONFIG_PLATFORM_SI4713=m
-CONFIG_RADIO_SI476X=m
-CONFIG_USB_MR800=m
-CONFIG_USB_DSBR=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_SHARK=m
-CONFIG_RADIO_SHARK2=m
-CONFIG_USB_KEENE=m
-CONFIG_USB_RAREMONO=m
-CONFIG_USB_MA901=m
-CONFIG_RADIO_TEA5764=m
-CONFIG_RADIO_SAA7706H=m
-CONFIG_RADIO_TEF6862=m
-CONFIG_RADIO_WL1273=m
-CONFIG_RADIO_WL128X=m
-CONFIG_SMS_SIANO_DEBUGFS=y
-CONFIG_DVB_PLATFORM_DRIVERS=y
-CONFIG_SMS_SDIO_DRV=m
-CONFIG_DVB_FIREDTV=m
-CONFIG_VIDEO_BT819=m
-CONFIG_VIDEO_BT856=m
-CONFIG_VIDEO_BT866=m
-CONFIG_VIDEO_KS0127=m
-CONFIG_VIDEO_SAA7110=m
-CONFIG_VIDEO_VPX3220=m
-CONFIG_VIDEO_SAA7185=m
-CONFIG_VIDEO_ADV7170=m
-CONFIG_VIDEO_ADV7175=m
-CONFIG_VIDEO_MT9M111=m
-CONFIG_AGP=y
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_VIA=m
-CONFIG_DRM=y
-CONFIG_DRM_LOAD_EDID_FIRMWARE=y
-CONFIG_DRM_DP_CEC=y
-CONFIG_DRM_I2C_NXP_TDA998X=m
-CONFIG_DRM_I2C_NXP_TDA9950=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_AMDGPU=m
-CONFIG_DRM_AMDGPU_SI=y
-CONFIG_DRM_AMDGPU_CIK=y
-CONFIG_DRM_AMD_ACP=y
-CONFIG_DRM_AMD_DC_HDCP=y
-CONFIG_HSA_AMD=y
-CONFIG_DRM_NOUVEAU=m
-CONFIG_DRM_I915=m
-CONFIG_DRM_VGEM=m
-CONFIG_DRM_VMWGFX=m
-CONFIG_DRM_GMA500=m
-CONFIG_DRM_UDL=m
-CONFIG_DRM_AST=m
-CONFIG_DRM_QXL=m
-CONFIG_DRM_CIRRUS_QEMU=m
-CONFIG_FB=m
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB_CIRRUS=m
-CONFIG_FB_PM2=m
-CONFIG_FB_PM2_FIFO_DISCONNECT=y
-CONFIG_FB_CYBER2000=m
-CONFIG_FB_ARC=m
-CONFIG_FB_VGA16=m
-CONFIG_FB_UVESA=m
-CONFIG_FB_N411=m
-CONFIG_FB_HGA=m
-CONFIG_FB_OPENCORES=m
-CONFIG_FB_S1D13XXX=m
-CONFIG_FB_NVIDIA=m
-CONFIG_FB_NVIDIA_I2C=y
-CONFIG_FB_RIVA=m
-CONFIG_FB_RIVA_I2C=y
-CONFIG_FB_I740=m
-CONFIG_FB_LE80578=m
-CONFIG_FB_CARILLO_RANCH=m
-CONFIG_FB_INTEL=m
-CONFIG_FB_MATROX=m
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G=y
-CONFIG_FB_MATROX_I2C=m
-CONFIG_FB_MATROX_MAVEN=m
-CONFIG_FB_RADEON=m
-CONFIG_FB_ATY128=m
-CONFIG_FB_ATY=m
-CONFIG_FB_ATY_CT=y
-CONFIG_FB_ATY_GENERIC_LCD=y
-CONFIG_FB_ATY_GX=y
-CONFIG_FB_S3=m
-CONFIG_FB_SAVAGE=m
-CONFIG_FB_SAVAGE_I2C=y
-CONFIG_FB_SAVAGE_ACCEL=y
-CONFIG_FB_SIS=m
-CONFIG_FB_SIS_300=y
-CONFIG_FB_SIS_315=y
-CONFIG_FB_VIA=m
-CONFIG_FB_VIA_DIRECT_PROCFS=y
-CONFIG_FB_VIA_X_COMPATIBILITY=y
-CONFIG_FB_NEOMAGIC=m
-CONFIG_FB_KYRO=m
-CONFIG_FB_3DFX=m
-CONFIG_FB_3DFX_ACCEL=y
-CONFIG_FB_VOODOO1=m
-CONFIG_FB_VT8623=m
-CONFIG_FB_TRIDENT=m
-CONFIG_FB_ARK=m
-CONFIG_FB_PM3=m
-CONFIG_FB_CARMINE=m
-CONFIG_FB_SM501=m
-CONFIG_FB_SMSCUFX=m
-CONFIG_FB_UDL=m
-CONFIG_FB_IBM_GXT4500=m
-CONFIG_FB_METRONOME=m
-CONFIG_FB_MB862XX=m
-CONFIG_FB_SIMPLE=m
-CONFIG_FB_SSD1307=m
-CONFIG_FB_SM712=m
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_L4F00242T03=m
-CONFIG_LCD_LMS283GF05=m
-CONFIG_LCD_LTV350QV=m
-CONFIG_LCD_ILI922X=m
-CONFIG_LCD_TDO24M=m
-CONFIG_LCD_VGG2432A4=m
-CONFIG_LCD_PLATFORM=m
-CONFIG_LCD_AMS369FG06=m
-CONFIG_LCD_LMS501KF03=m
-CONFIG_LCD_HX8357=m
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_KTD253=m
-CONFIG_BACKLIGHT_LM3533=m
-CONFIG_BACKLIGHT_PWM=m
-CONFIG_BACKLIGHT_DA903X=m
-CONFIG_BACKLIGHT_DA9052=m
-CONFIG_BACKLIGHT_MAX8925=m
-CONFIG_BACKLIGHT_APPLE=m
-CONFIG_BACKLIGHT_SAHARA=m
-CONFIG_BACKLIGHT_WM831X=m
-CONFIG_BACKLIGHT_ADP5520=m
-CONFIG_BACKLIGHT_ADP8860=m
-CONFIG_BACKLIGHT_ADP8870=m
-CONFIG_BACKLIGHT_88PM860X=m
-CONFIG_BACKLIGHT_PCF50633=m
-CONFIG_BACKLIGHT_AAT2870=m
-CONFIG_BACKLIGHT_LM3630A=m
-CONFIG_BACKLIGHT_LM3639=m
-CONFIG_BACKLIGHT_LP855X=m
-CONFIG_BACKLIGHT_LP8788=m
-CONFIG_BACKLIGHT_PANDORA=m
-CONFIG_BACKLIGHT_SKY81452=m
-CONFIG_BACKLIGHT_AS3711=m
-CONFIG_BACKLIGHT_GPIO=m
-CONFIG_BACKLIGHT_LV5207LP=m
-CONFIG_BACKLIGHT_BD6107=m
-CONFIG_BACKLIGHT_LED=m
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_SOUND=m
-CONFIG_SND=m
-CONFIG_SND_HRTIMER=m
-CONFIG_SND_SEQUENCER=m
-CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_PCSP=m
-CONFIG_SND_DUMMY=m
-CONFIG_SND_ALOOP=m
-CONFIG_SND_VIRMIDI=m
-CONFIG_SND_MTPAV=m
-CONFIG_SND_MTS64=m
-CONFIG_SND_SERIAL_U16550=m
-CONFIG_SND_MPU401=m
-CONFIG_SND_PORTMAN2X4=m
-CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AD1889=m
-CONFIG_SND_ALS300=m
-CONFIG_SND_ALS4000=m
-CONFIG_SND_ALI5451=m
-CONFIG_SND_ASIHPI=m
-CONFIG_SND_ATIIXP=m
-CONFIG_SND_ATIIXP_MODEM=m
-CONFIG_SND_AU8810=m
-CONFIG_SND_AU8820=m
-CONFIG_SND_AU8830=m
-CONFIG_SND_AW2=m
-CONFIG_SND_AZT3328=m
-CONFIG_SND_BT87X=m
-CONFIG_SND_CA0106=m
-CONFIG_SND_CMIPCI=m
-CONFIG_SND_OXYGEN=m
-CONFIG_SND_CS4281=m
-CONFIG_SND_CS46XX=m
-CONFIG_SND_CTXFI=m
-CONFIG_SND_DARLA20=m
-CONFIG_SND_GINA20=m
-CONFIG_SND_LAYLA20=m
-CONFIG_SND_DARLA24=m
-CONFIG_SND_GINA24=m
-CONFIG_SND_LAYLA24=m
-CONFIG_SND_MONA=m
-CONFIG_SND_MIA=m
-CONFIG_SND_ECHO3G=m
-CONFIG_SND_INDIGO=m
-CONFIG_SND_INDIGOIO=m
-CONFIG_SND_INDIGODJ=m
-CONFIG_SND_INDIGOIOX=m
-CONFIG_SND_INDIGODJX=m
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_EMU10K1X=m
-CONFIG_SND_ENS1370=m
-CONFIG_SND_ENS1371=m
-CONFIG_SND_ES1938=m
-CONFIG_SND_ES1968=m
-CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
-CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
-CONFIG_SND_HDSP=m
-CONFIG_SND_HDSPM=m
-CONFIG_SND_ICE1712=m
-CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
-CONFIG_SND_KORG1212=m
-CONFIG_SND_LOLA=m
-CONFIG_SND_LX6464ES=m
-CONFIG_SND_MAESTRO3=m
-CONFIG_SND_MAESTRO3_INPUT=y
-CONFIG_SND_MIXART=m
-CONFIG_SND_NM256=m
-CONFIG_SND_PCXHR=m
-CONFIG_SND_RIPTIDE=m
-CONFIG_SND_RME32=m
-CONFIG_SND_RME96=m
-CONFIG_SND_RME9652=m
-CONFIG_SND_SONICVIBES=m
-CONFIG_SND_TRIDENT=m
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VIA82XX_MODEM=m
-CONFIG_SND_VIRTUOSO=m
-CONFIG_SND_VX222=m
-CONFIG_SND_YMFPCI=m
-CONFIG_SND_HDA_INTEL=m
-CONFIG_SND_HDA_HWDEP=y
-CONFIG_SND_HDA_INPUT_BEEP=y
-CONFIG_SND_HDA_INPUT_BEEP_MODE=0
-CONFIG_SND_HDA_PATCH_LOADER=y
-CONFIG_SND_HDA_CODEC_REALTEK=m
-CONFIG_SND_HDA_CODEC_ANALOG=m
-CONFIG_SND_HDA_CODEC_SIGMATEL=m
-CONFIG_SND_HDA_CODEC_VIA=m
-CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_CODEC_CIRRUS=m
-CONFIG_SND_HDA_CODEC_CS8409=m
-CONFIG_SND_HDA_CODEC_CONEXANT=m
-CONFIG_SND_HDA_CODEC_CA0110=m
-CONFIG_SND_HDA_CODEC_CA0132=m
-CONFIG_SND_HDA_CODEC_CMEDIA=m
-CONFIG_SND_HDA_CODEC_SI3054=m
-CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_USB_UA101=m
-CONFIG_SND_USB_USX2Y=m
-CONFIG_SND_USB_CAIAQ=m
-CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_SND_USB_US122L=m
-CONFIG_SND_USB_6FIRE=m
-CONFIG_SND_USB_HIFACE=m
-CONFIG_SND_BCD2000=m
-CONFIG_SND_USB_POD=m
-CONFIG_SND_USB_PODHD=m
-CONFIG_SND_USB_TONEPORT=m
-CONFIG_SND_USB_VARIAX=m
-CONFIG_SND_DICE=m
-CONFIG_SND_OXFW=m
-CONFIG_SND_ISIGHT=m
-CONFIG_SND_FIREWORKS=m
-CONFIG_SND_BEBOB=m
-CONFIG_SND_FIREWIRE_DIGI00X=m
-CONFIG_SND_FIREWIRE_TASCAM=m
-CONFIG_SND_FIREWIRE_MOTU=m
-CONFIG_SND_FIREFACE=m
-CONFIG_SND_VXPOCKET=m
-CONFIG_SND_PDAUDIOCF=m
-CONFIG_SND_SOC=m
-CONFIG_SND_SOC_AMD_ACP=m
-CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m
-CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
-CONFIG_SND_SOC_AMD_ACP3x=m
-CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m
-CONFIG_SND_SOC_AMD_RENOIR=m
-CONFIG_SND_SOC_AMD_RENOIR_MACH=m
-CONFIG_SND_SOC_AMD_ACP5x=m
-CONFIG_SND_SOC_AMD_VANGOGH_MACH=m
-CONFIG_SND_SOC_AMD_ACP6x=m
-CONFIG_SND_SOC_AMD_YC_MACH=m
-CONFIG_SND_SOC_AMD_ACP_COMMON=m
-CONFIG_SND_AMD_ASOC_RENOIR=m
-CONFIG_SND_SOC_AMD_LEGACY_MACH=m
-CONFIG_SND_ATMEL_SOC=m
-CONFIG_SND_SOC_MIKROE_PROTO=m
-CONFIG_SND_BCM63XX_I2S_WHISTLER=m
-CONFIG_SND_DESIGNWARE_I2S=m
-CONFIG_SND_DESIGNWARE_PCM=y
-CONFIG_SND_SOC_FSL_ASRC=m
-CONFIG_SND_SOC_FSL_SAI=m
-CONFIG_SND_SOC_FSL_SSI=m
-CONFIG_SND_SOC_FSL_SPDIF=m
-CONFIG_SND_SOC_FSL_ESAI=m
-CONFIG_SND_SOC_IMX_AUDMUX=m
-CONFIG_SND_I2S_HI6210_I2S=m
-CONFIG_SND_SOC_IMG=y
-CONFIG_SND_SOC_IMG_I2S_IN=m
-CONFIG_SND_SOC_IMG_I2S_OUT=m
-CONFIG_SND_SOC_IMG_PARALLEL_OUT=m
-CONFIG_SND_SOC_IMG_SPDIF_IN=m
-CONFIG_SND_SOC_IMG_SPDIF_OUT=m
-CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m
-CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m
-CONFIG_SND_SOC_INTEL_SKYLAKE=m
-CONFIG_SND_SOC_INTEL_CML_H=m
-CONFIG_SND_SOC_INTEL_CML_LP=m
-CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC=y
-CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
-CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_WM5102_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
-CONFIG_SND_SOC_MTK_BTCVSD=m
-CONFIG_SND_SOC_XILINX_I2S=m
-CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
-CONFIG_SND_SOC_XILINX_SPDIF=m
-CONFIG_SND_SOC_XTFPGA_I2S=m
-CONFIG_SND_SOC_AC97_CODEC=m
-CONFIG_SND_SOC_ADAU1701=m
-CONFIG_SND_SOC_ADAU1761_I2C=m
-CONFIG_SND_SOC_ADAU1761_SPI=m
-CONFIG_SND_SOC_ADAU7118_HW=m
-CONFIG_SND_SOC_ADAU7118_I2C=m
-CONFIG_SND_SOC_AK4104=m
-CONFIG_SND_SOC_AK4118=m
-CONFIG_SND_SOC_AK4458=m
-CONFIG_SND_SOC_AK4554=m
-CONFIG_SND_SOC_AK4613=m
-CONFIG_SND_SOC_AK4642=m
-CONFIG_SND_SOC_AK5386=m
-CONFIG_SND_SOC_AK5558=m
-CONFIG_SND_SOC_ALC5623=m
-CONFIG_SND_SOC_BD28623=m
-CONFIG_SND_SOC_BT_SCO=m
-CONFIG_SND_SOC_CS35L32=m
-CONFIG_SND_SOC_CS35L33=m
-CONFIG_SND_SOC_CS35L34=m
-CONFIG_SND_SOC_CS35L35=m
-CONFIG_SND_SOC_CS35L36=m
-CONFIG_SND_SOC_CS42L42=m
-CONFIG_SND_SOC_CS42L51_I2C=m
-CONFIG_SND_SOC_CS42L52=m
-CONFIG_SND_SOC_CS42L56=m
-CONFIG_SND_SOC_CS42L73=m
-CONFIG_SND_SOC_CS4234=m
-CONFIG_SND_SOC_CS4265=m
-CONFIG_SND_SOC_CS4270=m
-CONFIG_SND_SOC_CS4271_I2C=m
-CONFIG_SND_SOC_CS4271_SPI=m
-CONFIG_SND_SOC_CS42XX8_I2C=m
-CONFIG_SND_SOC_CS43130=m
-CONFIG_SND_SOC_CS4341=m
-CONFIG_SND_SOC_CS4349=m
-CONFIG_SND_SOC_CS53L30=m
-CONFIG_SND_SOC_ES7134=m
-CONFIG_SND_SOC_ES7241=m
-CONFIG_SND_SOC_ES8328_I2C=m
-CONFIG_SND_SOC_ES8328_SPI=m
-CONFIG_SND_SOC_GTM601=m
-CONFIG_SND_SOC_INNO_RK3036=m
-CONFIG_SND_SOC_MAX98088=m
-CONFIG_SND_SOC_MAX98504=m
-CONFIG_SND_SOC_MAX9867=m
-CONFIG_SND_SOC_MAX9860=m
-CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
-CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
-CONFIG_SND_SOC_PCM1681=m
-CONFIG_SND_SOC_PCM1789_I2C=m
-CONFIG_SND_SOC_PCM179X_I2C=m
-CONFIG_SND_SOC_PCM179X_SPI=m
-CONFIG_SND_SOC_PCM186X_I2C=m
-CONFIG_SND_SOC_PCM186X_SPI=m
-CONFIG_SND_SOC_PCM3060_I2C=m
-CONFIG_SND_SOC_PCM3060_SPI=m
-CONFIG_SND_SOC_PCM3168A_I2C=m
-CONFIG_SND_SOC_PCM3168A_SPI=m
-CONFIG_SND_SOC_PCM5102A=m
-CONFIG_SND_SOC_PCM512x_SPI=m
-CONFIG_SND_SOC_RK3328=m
-CONFIG_SND_SOC_RT5616=m
-CONFIG_SND_SOC_RT5631=m
-CONFIG_SND_SOC_RT5659=m
-CONFIG_SND_SOC_SGTL5000=m
-CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
-CONFIG_SND_SOC_SIMPLE_MUX=m
-CONFIG_SND_SOC_SPDIF=m
-CONFIG_SND_SOC_SSM2305=m
-CONFIG_SND_SOC_SSM2602_SPI=m
-CONFIG_SND_SOC_SSM2602_I2C=m
-CONFIG_SND_SOC_STA32X=m
-CONFIG_SND_SOC_STA350=m
-CONFIG_SND_SOC_STI_SAS=m
-CONFIG_SND_SOC_TAS2552=m
-CONFIG_SND_SOC_TAS2562=m
-CONFIG_SND_SOC_TAS2764=m
-CONFIG_SND_SOC_TAS2770=m
-CONFIG_SND_SOC_TAS5086=m
-CONFIG_SND_SOC_TAS571X=m
-CONFIG_SND_SOC_TAS5720=m
-CONFIG_SND_SOC_TAS6424=m
-CONFIG_SND_SOC_TDA7419=m
-CONFIG_SND_SOC_TFA9879=m
-CONFIG_SND_SOC_TLV320AIC23_I2C=m
-CONFIG_SND_SOC_TLV320AIC23_SPI=m
-CONFIG_SND_SOC_TLV320AIC31XX=m
-CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
-CONFIG_SND_SOC_TLV320AIC32X4_SPI=m
-CONFIG_SND_SOC_TLV320ADCX140=m
-CONFIG_SND_SOC_TSCS42XX=m
-CONFIG_SND_SOC_TSCS454=m
-CONFIG_SND_SOC_UDA1334=m
-CONFIG_SND_SOC_WM8510=m
-CONFIG_SND_SOC_WM8523=m
-CONFIG_SND_SOC_WM8524=m
-CONFIG_SND_SOC_WM8580=m
-CONFIG_SND_SOC_WM8711=m
-CONFIG_SND_SOC_WM8728=m
-CONFIG_SND_SOC_WM8737=m
-CONFIG_SND_SOC_WM8741=m
-CONFIG_SND_SOC_WM8750=m
-CONFIG_SND_SOC_WM8753=m
-CONFIG_SND_SOC_WM8770=m
-CONFIG_SND_SOC_WM8776=m
-CONFIG_SND_SOC_WM8782=m
-CONFIG_SND_SOC_WM8804_SPI=m
-CONFIG_SND_SOC_WM8903=m
-CONFIG_SND_SOC_WM8904=m
-CONFIG_SND_SOC_WM8960=m
-CONFIG_SND_SOC_WM8962=m
-CONFIG_SND_SOC_WM8974=m
-CONFIG_SND_SOC_WM8978=m
-CONFIG_SND_SOC_WM8985=m
-CONFIG_SND_SOC_ZL38060=m
-CONFIG_SND_SOC_MAX9759=m
-CONFIG_SND_SOC_MT6351=m
-CONFIG_SND_SOC_MT6358=m
-CONFIG_SND_SOC_MT6660=m
-CONFIG_SND_SOC_NAU8315=m
-CONFIG_SND_SOC_NAU8540=m
-CONFIG_SND_SOC_NAU8810=m
-CONFIG_SND_SOC_NAU8822=m
-CONFIG_SND_SOC_TPA6130A2=m
-CONFIG_SND_SIMPLE_CARD=m
-CONFIG_SND_AUDIO_GRAPH_CARD=m
-CONFIG_SND_AUDIO_GRAPH_CARD2=m
-CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=m
-CONFIG_HDMI_LPE_AUDIO=m
-CONFIG_HID=m
-CONFIG_HID_BATTERY_STRENGTH=y
-CONFIG_HIDRAW=y
-CONFIG_UHID=m
-CONFIG_HID_A4TECH=m
-CONFIG_HID_ACRUX=m
-CONFIG_HID_ACRUX_FF=y
-CONFIG_HID_APPLE=m
-CONFIG_HID_APPLEIR=m
-CONFIG_HID_ASUS=m
-CONFIG_HID_AUREAL=m
-CONFIG_HID_BELKIN=m
-CONFIG_HID_BETOP_FF=m
-CONFIG_HID_BIGBEN_FF=m
-CONFIG_HID_CHERRY=m
-CONFIG_HID_CHICONY=m
-CONFIG_HID_CORSAIR=m
-CONFIG_HID_PRODIKEYS=m
-CONFIG_HID_CP2112=m
-CONFIG_HID_CYPRESS=m
-CONFIG_HID_DRAGONRISE=m
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=m
-CONFIG_HID_ELECOM=m
-CONFIG_HID_ELO=m
-CONFIG_HID_EZKEY=m
-CONFIG_HID_GEMBIRD=m
-CONFIG_HID_GFRM=m
-CONFIG_HID_HOLTEK=m
-CONFIG_HOLTEK_FF=y
-CONFIG_HID_GT683R=m
-CONFIG_HID_KEYTOUCH=m
-CONFIG_HID_KYE=m
-CONFIG_HID_UCLOGIC=m
-CONFIG_HID_WALTOP=m
-CONFIG_HID_GYRATION=m
-CONFIG_HID_ICADE=m
-CONFIG_HID_JABRA=m
-CONFIG_HID_TWINHAN=m
-CONFIG_HID_KENSINGTON=m
-CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO=m
-CONFIG_HID_LOGITECH=m
-CONFIG_HID_LOGITECH_DJ=m
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
-CONFIG_HID_MAGICMOUSE=m
-CONFIG_HID_MAYFLASH=m
-CONFIG_HID_MICROSOFT=m
-CONFIG_HID_MONTEREY=m
-CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_NTRIG=m
-CONFIG_HID_ORTEK=m
-CONFIG_HID_PANTHERLORD=m
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PENMOUNT=m
-CONFIG_HID_PETALYNX=m
-CONFIG_HID_PICOLCD=m
-CONFIG_HID_PICOLCD_BACKLIGHT=y
-CONFIG_HID_PICOLCD_LCD=y
-CONFIG_HID_PICOLCD_LEDS=y
-CONFIG_HID_PLANTRONICS=m
-CONFIG_HID_PRIMAX=m
-CONFIG_HID_RETRODE=m
-CONFIG_HID_ROCCAT=m
-CONFIG_HID_SAITEK=m
-CONFIG_HID_SAMSUNG=m
-CONFIG_HID_SONY=m
-CONFIG_SONY_FF=y
-CONFIG_HID_SPEEDLINK=m
-CONFIG_HID_STEAM=m
-CONFIG_HID_STEELSERIES=m
-CONFIG_HID_SUNPLUS=m
-CONFIG_HID_RMI=m
-CONFIG_HID_GREENASIA=m
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_SMARTJOYPLUS=m
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=m
-CONFIG_HID_TOPSEED=m
-CONFIG_HID_THINGM=m
-CONFIG_HID_THRUSTMASTER=m
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_HID_WACOM=m
-CONFIG_HID_WIIMOTE=m
-CONFIG_HID_XINMO=m
-CONFIG_HID_ZEROPLUS=m
-CONFIG_ZEROPLUS_FF=y
-CONFIG_HID_ZYDACRON=m
-CONFIG_HID_SENSOR_HUB=m
-CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
-CONFIG_HID_ALPS=m
-CONFIG_USB_HID=m
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_INTEL_ISH_HID=m
-CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
-CONFIG_USB_LED_TRIG=y
-CONFIG_USB=y
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-CONFIG_USB_DYNAMIC_MINORS=y
-CONFIG_USB_MON=m
-CONFIG_USB_C67X00_HCD=m
-CONFIG_USB_XHCI_HCD=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_FSL=m
-CONFIG_USB_EHCI_HCD_PLATFORM=y
-CONFIG_USB_OXU210HP_HCD=m
-CONFIG_USB_ISP116X_HCD=m
-CONFIG_USB_FOTG210_HCD=m
-CONFIG_USB_MAX3421_HCD=m
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_OHCI_HCD_PLATFORM=y
-CONFIG_USB_UHCI_HCD=y
-CONFIG_USB_U132_HCD=m
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_HCD_ISO=y
-CONFIG_USB_SL811_CS=m
-CONFIG_USB_R8A66597_HCD=m
-CONFIG_USB_HCD_SSB=m
-CONFIG_USB_ACM=y
-CONFIG_USB_PRINTER=m
-CONFIG_USB_TMC=m
-CONFIG_USB_STORAGE=y
-CONFIG_USB_STORAGE_REALTEK=y
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_STORAGE_ONETOUCH=y
-CONFIG_USB_STORAGE_KARMA=y
-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
-CONFIG_USB_STORAGE_ENE_UB6250=y
-CONFIG_USB_UAS=y
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-CONFIG_USB_MUSB_HDRC=m
-CONFIG_MUSB_PIO_ONLY=y
-CONFIG_USB_DWC3=m
-CONFIG_USB_DWC3_ULPI=y
-CONFIG_USB_DWC2=y
-CONFIG_USB_DWC2_PCI=m
-CONFIG_USB_CHIPIDEA=m
-CONFIG_USB_CHIPIDEA_UDC=y
-CONFIG_USB_CHIPIDEA_HOST=y
-CONFIG_USB_ISP1760=m
-CONFIG_USB_USS720=m
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_SIMPLE=m
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_CH341=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP210X=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_F81232=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_IUU=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_METRO=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7715_PARPORT=y
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MXUPORT=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_OTI6858=m
-CONFIG_USB_SERIAL_QCAUX=m
-CONFIG_USB_SERIAL_QUALCOMM=m
-CONFIG_USB_SERIAL_SPCP8X5=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_SYMBOL=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_OPTICON=m
-CONFIG_USB_SERIAL_XSENS_MT=m
-CONFIG_USB_SERIAL_WISHBONE=m
-CONFIG_USB_SERIAL_SSU100=m
-CONFIG_USB_SERIAL_QT2=m
-CONFIG_USB_SERIAL_DEBUG=m
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_ADUTUX=m
-CONFIG_USB_SEVSEG=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_CYPRESS_CY7C63=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
-CONFIG_USB_SISUSBVGA=m
-CONFIG_USB_LD=m
-CONFIG_USB_TRANCEVIBRATOR=m
-CONFIG_USB_IOWARRIOR=m
-CONFIG_USB_TEST=m
-CONFIG_USB_EHSET_TEST_FIXTURE=m
-CONFIG_USB_ISIGHTFW=m
-CONFIG_USB_YUREX=m
-CONFIG_USB_HUB_USB251XB=m
-CONFIG_USB_HSIC_USB3503=m
-CONFIG_USB_HSIC_USB4604=m
-CONFIG_USB_LINK_LAYER_TEST=m
-CONFIG_USB_CHAOSKEY=m
-CONFIG_USB_GPIO_VBUS=m
-CONFIG_TAHVO_USB=m
-CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
-CONFIG_USB_ISP1301=m
-CONFIG_USB_GADGET=m
-CONFIG_USB_FOTG210_UDC=m
-CONFIG_USB_GR_UDC=m
-CONFIG_USB_R8A66597=m
-CONFIG_USB_PXA27X=m
-CONFIG_USB_MV_UDC=m
-CONFIG_USB_MV_U3D=m
-CONFIG_USB_BDC_UDC=m
-CONFIG_USB_AMD5536UDC=m
-CONFIG_USB_NET2272=m
-CONFIG_USB_NET2272_DMA=y
-CONFIG_USB_NET2280=m
-CONFIG_USB_GOKU=m
-CONFIG_USB_EG20T=m
-CONFIG_USB_CONFIGFS=m
-CONFIG_USB_CONFIGFS_SERIAL=y
-CONFIG_USB_CONFIGFS_ACM=y
-CONFIG_USB_CONFIGFS_OBEX=y
-CONFIG_USB_CONFIGFS_NCM=y
-CONFIG_USB_CONFIGFS_ECM=y
-CONFIG_USB_CONFIGFS_ECM_SUBSET=y
-CONFIG_USB_CONFIGFS_RNDIS=y
-CONFIG_USB_CONFIGFS_EEM=y
-CONFIG_USB_CONFIGFS_MASS_STORAGE=y
-CONFIG_USB_CONFIGFS_F_LB_SS=y
-CONFIG_USB_CONFIGFS_F_FS=y
-CONFIG_USB_CONFIGFS_F_UAC1=y
-CONFIG_USB_CONFIGFS_F_UAC2=y
-CONFIG_USB_CONFIGFS_F_MIDI=y
-CONFIG_USB_CONFIGFS_F_HID=y
-CONFIG_USB_CONFIGFS_F_UVC=y
-CONFIG_USB_CONFIGFS_F_PRINTER=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_AUDIO=m
-CONFIG_GADGET_UAC1=y
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_EEM=y
-CONFIG_USB_G_NCM=m
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FUNCTIONFS=m
-CONFIG_USB_FUNCTIONFS_ETH=y
-CONFIG_USB_FUNCTIONFS_RNDIS=y
-CONFIG_USB_FUNCTIONFS_GENERIC=y
-CONFIG_USB_MASS_STORAGE=m
-CONFIG_USB_GADGET_TARGET=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_USB_MIDI_GADGET=m
-CONFIG_USB_G_PRINTER=m
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_USB_G_ACM_MS=m
-CONFIG_USB_G_HID=m
-CONFIG_USB_G_DBGP=m
-CONFIG_USB_G_WEBCAM=m
-CONFIG_TYPEC=m
-CONFIG_MMC=y
-CONFIG_PWRSEQ_SD8787=m
-CONFIG_SDIO_UART=y
-CONFIG_MMC_SDHCI=y
-CONFIG_MMC_SDHCI_PCI=y
-CONFIG_MMC_SDHCI_ACPI=y
-CONFIG_MMC_SDHCI_PLTFM=y
-CONFIG_MMC_SDHCI_OF_ARASAN=y
-CONFIG_MMC_SDHCI_OF_ASPEED=y
-CONFIG_MMC_SDHCI_OF_AT91=y
-CONFIG_MMC_SDHCI_OF_DWCMSHC=y
-CONFIG_MMC_SDHCI_CADENCE=y
-CONFIG_MMC_SDHCI_F_SDH30=y
-CONFIG_MMC_SDHCI_MILBEAUT=y
-CONFIG_MMC_WBSD=y
-CONFIG_MMC_TIFM_SD=y
-CONFIG_MMC_SPI=y
-CONFIG_MMC_SDRICOH_CS=m
-CONFIG_MMC_CB710=y
-CONFIG_MMC_VIA_SDMMC=y
-CONFIG_MMC_VUB300=y
-CONFIG_MMC_USHC=y
-CONFIG_MMC_USDHI6ROL0=y
-CONFIG_MMC_HSQ=y
-CONFIG_MMC_TOSHIBA_PCI=y
-CONFIG_MMC_MTK=y
-CONFIG_MMC_SDHCI_XENON=y
-CONFIG_MMC_SDHCI_OMAP=y
-CONFIG_MMC_SDHCI_AM654=y
-CONFIG_MEMSTICK=m
-CONFIG_MSPRO_BLOCK=m
-CONFIG_MS_BLOCK=m
-CONFIG_MEMSTICK_TIFM_MS=m
-CONFIG_MEMSTICK_JMICRON_38X=m
-CONFIG_MEMSTICK_R592=m
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_CLASS_FLASH=m
-CONFIG_LEDS_88PM860X=m
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3533=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-CONFIG_LEDS_PCA9532_GPIO=y
-CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP8788=m
-CONFIG_LEDS_CLEVO_MAIL=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA963X=m
-CONFIG_LEDS_WM831X_STATUS=m
-CONFIG_LEDS_WM8350=m
-CONFIG_LEDS_DA903X=m
-CONFIG_LEDS_DA9052=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_PWM=m
-CONFIG_LEDS_REGULATOR=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_INTEL_SS4200=m
-CONFIG_LEDS_ADP5520=m
-CONFIG_LEDS_MC13783=m
-CONFIG_LEDS_TCA6507=m
-CONFIG_LEDS_TLC591XX=m
-CONFIG_LEDS_MAX8997=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_MENF21BMC=m
-CONFIG_LEDS_BLINKM=m
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-CONFIG_LEDS_TRIGGER_TRANSIENT=m
-CONFIG_LEDS_TRIGGER_CAMERA=m
-CONFIG_EDAC=y
-# CONFIG_EDAC_LEGACY_SYSFS is not set
-CONFIG_EDAC_DECODE_MCE=m
-CONFIG_EDAC_AMD64=m
-CONFIG_EDAC_E752X=m
-CONFIG_EDAC_I82975X=m
-CONFIG_EDAC_I3000=m
-CONFIG_EDAC_I3200=m
-CONFIG_EDAC_IE31200=m
-CONFIG_EDAC_X38=m
-CONFIG_EDAC_I5400=m
-CONFIG_EDAC_I7CORE=m
-CONFIG_EDAC_I5000=m
-CONFIG_EDAC_I5100=m
-CONFIG_EDAC_I7300=m
-CONFIG_EDAC_SBRIDGE=m
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_DRV_88PM860X=m
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_ABB5ZES3=m
-CONFIG_RTC_DRV_ABX80X=m
-CONFIG_RTC_DRV_DS1307=m
-CONFIG_RTC_DRV_DS1374=m
-CONFIG_RTC_DRV_DS1374_WDT=y
-CONFIG_RTC_DRV_DS1672=m
-CONFIG_RTC_DRV_LP8788=m
-CONFIG_RTC_DRV_MAX6900=m
-CONFIG_RTC_DRV_MAX8907=m
-CONFIG_RTC_DRV_MAX8925=m
-CONFIG_RTC_DRV_MAX8998=m
-CONFIG_RTC_DRV_MAX8997=m
-CONFIG_RTC_DRV_RS5C372=m
-CONFIG_RTC_DRV_ISL1208=m
-CONFIG_RTC_DRV_ISL12022=m
-CONFIG_RTC_DRV_X1205=m
-CONFIG_RTC_DRV_PCF8523=m
-CONFIG_RTC_DRV_PCF85063=m
-CONFIG_RTC_DRV_PCF8563=m
-CONFIG_RTC_DRV_PCF8583=m
-CONFIG_RTC_DRV_M41T80=m
-CONFIG_RTC_DRV_M41T80_WDT=y
-CONFIG_RTC_DRV_BQ32K=m
-CONFIG_RTC_DRV_PALMAS=m
-CONFIG_RTC_DRV_TPS6586X=m
-CONFIG_RTC_DRV_TPS65910=m
-CONFIG_RTC_DRV_RC5T583=m
-CONFIG_RTC_DRV_S35390A=m
-CONFIG_RTC_DRV_FM3130=m
-CONFIG_RTC_DRV_RX8581=m
-CONFIG_RTC_DRV_RX8025=m
-CONFIG_RTC_DRV_EM3027=m
-CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
-CONFIG_RTC_DRV_M41T93=m
-CONFIG_RTC_DRV_M41T94=m
-CONFIG_RTC_DRV_DS1305=m
-CONFIG_RTC_DRV_DS1343=m
-CONFIG_RTC_DRV_DS1347=m
-CONFIG_RTC_DRV_DS1390=m
-CONFIG_RTC_DRV_R9701=m
-CONFIG_RTC_DRV_RX4581=m
-CONFIG_RTC_DRV_RS5C348=m
-CONFIG_RTC_DRV_MAX6902=m
-CONFIG_RTC_DRV_PCF2123=m
-CONFIG_RTC_DRV_MCP795=m
-CONFIG_RTC_DRV_DS3232=m
-CONFIG_RTC_DRV_PCF2127=m
-CONFIG_RTC_DRV_RV3029C2=m
-CONFIG_RTC_DRV_DS1286=m
-CONFIG_RTC_DRV_DS1511=m
-CONFIG_RTC_DRV_DS1553=m
-CONFIG_RTC_DRV_DS1685_FAMILY=m
-CONFIG_RTC_DRV_DS1742=m
-CONFIG_RTC_DRV_DS2404=m
-CONFIG_RTC_DRV_DA9052=m
-CONFIG_RTC_DRV_DA9055=m
-CONFIG_RTC_DRV_DA9063=m
-CONFIG_RTC_DRV_STK17TA8=m
-CONFIG_RTC_DRV_M48T86=m
-CONFIG_RTC_DRV_M48T35=m
-CONFIG_RTC_DRV_M48T59=m
-CONFIG_RTC_DRV_MSM6242=m
-CONFIG_RTC_DRV_BQ4802=m
-CONFIG_RTC_DRV_RP5C01=m
-CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_WM831X=m
-CONFIG_RTC_DRV_WM8350=m
-CONFIG_RTC_DRV_PCF50633=m
-CONFIG_RTC_DRV_PCAP=m
-CONFIG_RTC_DRV_MC13XXX=m
-CONFIG_RTC_DRV_MT6397=m
-CONFIG_RTC_DRV_HID_SENSOR_TIME=m
-CONFIG_KS0108=m
-CONFIG_PANEL=m
-CONFIG_UIO_CIF=m
-CONFIG_UIO_PDRV_GENIRQ=m
-CONFIG_UIO_DMEM_GENIRQ=m
-CONFIG_UIO_AEC=m
-CONFIG_UIO_SERCOS3=m
-CONFIG_UIO_PCI_GENERIC=m
-CONFIG_UIO_NETX=m
-CONFIG_UIO_PRUSS=m
-CONFIG_UIO_MF624=m
-CONFIG_VFIO=m
-CONFIG_VFIO_PCI=m
-CONFIG_VFIO_PCI_VGA=y
-# CONFIG_VIRTIO_MENU is not set
-CONFIG_VHOST_NET=m
-CONFIG_VHOST_SCSI=m
-# CONFIG_XEN_BALLOON is not set
-# CONFIG_XEN_DEV_EVTCHN is not set
-# CONFIG_XEN_BACKEND is not set
-# CONFIG_XENFS is not set
-# CONFIG_XEN_SYS_HYPERVISOR is not set
-# CONFIG_XEN_GNTDEV is not set
-# CONFIG_XEN_GRANT_DEV_ALLOC is not set
-# CONFIG_XEN_ACPI_PROCESSOR is not set
-CONFIG_COMEDI=m
-CONFIG_COMEDI_MISC_DRIVERS=y
-CONFIG_COMEDI_BOND=m
-CONFIG_COMEDI_TEST=m
-CONFIG_COMEDI_PARPORT=m
-CONFIG_COMEDI_ISA_DRIVERS=y
-CONFIG_COMEDI_PCL711=m
-CONFIG_COMEDI_PCL724=m
-CONFIG_COMEDI_PCL726=m
-CONFIG_COMEDI_PCL730=m
-CONFIG_COMEDI_PCL812=m
-CONFIG_COMEDI_PCL816=m
-CONFIG_COMEDI_PCL818=m
-CONFIG_COMEDI_PCM3724=m
-CONFIG_COMEDI_AMPLC_DIO200_ISA=m
-CONFIG_COMEDI_AMPLC_PC236_ISA=m
-CONFIG_COMEDI_AMPLC_PC263_ISA=m
-CONFIG_COMEDI_RTI800=m
-CONFIG_COMEDI_RTI802=m
-CONFIG_COMEDI_DAC02=m
-CONFIG_COMEDI_DAS16M1=m
-CONFIG_COMEDI_DAS08_ISA=m
-CONFIG_COMEDI_DAS16=m
-CONFIG_COMEDI_DAS800=m
-CONFIG_COMEDI_DAS1800=m
-CONFIG_COMEDI_DAS6402=m
-CONFIG_COMEDI_DT2801=m
-CONFIG_COMEDI_DT2811=m
-CONFIG_COMEDI_DT2814=m
-CONFIG_COMEDI_DT2815=m
-CONFIG_COMEDI_DT2817=m
-CONFIG_COMEDI_DT282X=m
-CONFIG_COMEDI_DMM32AT=m
-CONFIG_COMEDI_FL512=m
-CONFIG_COMEDI_AIO_AIO12_8=m
-CONFIG_COMEDI_AIO_IIRO_16=m
-CONFIG_COMEDI_II_PCI20KC=m
-CONFIG_COMEDI_C6XDIGIO=m
-CONFIG_COMEDI_MPC624=m
-CONFIG_COMEDI_ADQ12B=m
-CONFIG_COMEDI_NI_AT_A2150=m
-CONFIG_COMEDI_NI_AT_AO=m
-CONFIG_COMEDI_NI_ATMIO=m
-CONFIG_COMEDI_NI_ATMIO16D=m
-CONFIG_COMEDI_NI_LABPC_ISA=m
-CONFIG_COMEDI_PCMAD=m
-CONFIG_COMEDI_PCMDA12=m
-CONFIG_COMEDI_PCMMIO=m
-CONFIG_COMEDI_PCMUIO=m
-CONFIG_COMEDI_MULTIQ3=m
-CONFIG_COMEDI_S526=m
-CONFIG_COMEDI_PCI_DRIVERS=m
-CONFIG_COMEDI_8255_PCI=m
-CONFIG_COMEDI_ADDI_APCI_1032=m
-CONFIG_COMEDI_ADDI_APCI_1500=m
-CONFIG_COMEDI_ADDI_APCI_1516=m
-CONFIG_COMEDI_ADDI_APCI_1564=m
-CONFIG_COMEDI_ADDI_APCI_16XX=m
-CONFIG_COMEDI_ADDI_APCI_2032=m
-CONFIG_COMEDI_ADDI_APCI_2200=m
-CONFIG_COMEDI_ADDI_APCI_3120=m
-CONFIG_COMEDI_ADDI_APCI_3501=m
-CONFIG_COMEDI_ADDI_APCI_3XXX=m
-CONFIG_COMEDI_ADL_PCI6208=m
-CONFIG_COMEDI_ADL_PCI7X3X=m
-CONFIG_COMEDI_ADL_PCI8164=m
-CONFIG_COMEDI_ADL_PCI9111=m
-CONFIG_COMEDI_ADL_PCI9118=m
-CONFIG_COMEDI_ADV_PCI1710=m
-CONFIG_COMEDI_ADV_PCI1723=m
-CONFIG_COMEDI_ADV_PCI1724=m
-CONFIG_COMEDI_ADV_PCI_DIO=m
-CONFIG_COMEDI_AMPLC_DIO200_PCI=m
-CONFIG_COMEDI_AMPLC_PC236_PCI=m
-CONFIG_COMEDI_AMPLC_PC263_PCI=m
-CONFIG_COMEDI_AMPLC_PCI224=m
-CONFIG_COMEDI_AMPLC_PCI230=m
-CONFIG_COMEDI_CONTEC_PCI_DIO=m
-CONFIG_COMEDI_DAS08_PCI=m
-CONFIG_COMEDI_DT3000=m
-CONFIG_COMEDI_DYNA_PCI10XX=m
-CONFIG_COMEDI_GSC_HPDI=m
-CONFIG_COMEDI_MF6X4=m
-CONFIG_COMEDI_ICP_MULTI=m
-CONFIG_COMEDI_DAQBOARD2000=m
-CONFIG_COMEDI_JR3_PCI=m
-CONFIG_COMEDI_KE_COUNTER=m
-CONFIG_COMEDI_CB_PCIDAS64=m
-CONFIG_COMEDI_CB_PCIDAS=m
-CONFIG_COMEDI_CB_PCIDDA=m
-CONFIG_COMEDI_CB_PCIMDAS=m
-CONFIG_COMEDI_CB_PCIMDDA=m
-CONFIG_COMEDI_ME4000=m
-CONFIG_COMEDI_ME_DAQ=m
-CONFIG_COMEDI_NI_6527=m
-CONFIG_COMEDI_NI_65XX=m
-CONFIG_COMEDI_NI_660X=m
-CONFIG_COMEDI_NI_670X=m
-CONFIG_COMEDI_NI_LABPC_PCI=m
-CONFIG_COMEDI_NI_PCIDIO=m
-CONFIG_COMEDI_NI_PCIMIO=m
-CONFIG_COMEDI_RTD520=m
-CONFIG_COMEDI_S626=m
-CONFIG_COMEDI_PCMCIA_DRIVERS=m
-CONFIG_COMEDI_CB_DAS16_CS=m
-CONFIG_COMEDI_DAS08_CS=m
-CONFIG_COMEDI_NI_DAQ_700_CS=m
-CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
-CONFIG_COMEDI_NI_LABPC_CS=m
-CONFIG_COMEDI_NI_MIO_CS=m
-CONFIG_COMEDI_QUATECH_DAQP_CS=m
-CONFIG_COMEDI_USB_DRIVERS=m
-CONFIG_COMEDI_DT9812=m
-CONFIG_COMEDI_NI_USB6501=m
-CONFIG_COMEDI_USBDUX=m
-CONFIG_COMEDI_USBDUXFAST=m
-CONFIG_COMEDI_USBDUXSIGMA=m
-CONFIG_COMEDI_VMK80XX=m
-CONFIG_COMEDI_8255_SA=m
-CONFIG_STAGING=y
-CONFIG_PRISM2_USB=m
-CONFIG_RTL8192U=m
-CONFIG_RTLLIB=m
-CONFIG_RTL8192E=m
-CONFIG_RTL8723BS=m
-CONFIG_R8712U=m
-CONFIG_R8188EU=m
-CONFIG_RTS5208=m
-CONFIG_VT6655=m
-CONFIG_VT6656=m
-CONFIG_ADIS16203=m
-CONFIG_ADIS16240=m
-CONFIG_AD7816=m
-CONFIG_AD7280=m
-CONFIG_ADT7316=m
-CONFIG_ADT7316_I2C=m
-CONFIG_AD7746=m
-CONFIG_AD9832=m
-CONFIG_AD9834=m
-CONFIG_AD5933=m
-CONFIG_ADE7854=m
-CONFIG_AD2S1210=m
-CONFIG_STAGING_MEDIA=y
-CONFIG_DVB_AV7110=m
-CONFIG_DVB_BUDGET_PATCH=m
-CONFIG_LTE_GDM724X=m
-CONFIG_FIREWIRE_SERIAL=m
-CONFIG_GS_FPGABOOT=m
-CONFIG_UNISYSSPAR=y
-CONFIG_UNISYS_VISORNIC=m
-CONFIG_UNISYS_VISORINPUT=m
-CONFIG_UNISYS_VISORHBA=m
-CONFIG_ACERHDF=m
-CONFIG_ACER_WIRELESS=m
-CONFIG_ACER_WMI=m
-CONFIG_APPLE_GMUX=m
-CONFIG_ASUS_LAPTOP=m
-CONFIG_ASUS_WIRELESS=m
-CONFIG_AMILO_RFKILL=m
-CONFIG_FUJITSU_LAPTOP=m
-CONFIG_FUJITSU_TABLET=m
-CONFIG_GPD_POCKET_FAN=m
-CONFIG_HP_ACCEL=m
-CONFIG_HP_WMI=m
-CONFIG_IBM_RTL=m
-CONFIG_IDEAPAD_LAPTOP=m
-CONFIG_SENSORS_HDAPS=m
-CONFIG_THINKPAD_ACPI=m
-CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
-CONFIG_INTEL_SPEED_SELECT_INTERFACE=m
-CONFIG_INTEL_HID_EVENT=m
-CONFIG_INTEL_OAKTRAIL=m
-CONFIG_INTEL_PUNIT_IPC=m
-CONFIG_INTEL_RST=m
-CONFIG_INTEL_SMARTCONNECT=m
-CONFIG_INTEL_TURBO_MAX_3=y
-CONFIG_MSI_LAPTOP=m
-CONFIG_MSI_WMI=m
-CONFIG_SAMSUNG_LAPTOP=m
-CONFIG_SAMSUNG_Q10=m
-CONFIG_ACPI_TOSHIBA=m
-CONFIG_TOSHIBA_BT_RFKILL=m
-CONFIG_TOSHIBA_HAPS=m
-CONFIG_TOSHIBA_WMI=m
-CONFIG_ACPI_CMPC=m
-CONFIG_COMPAL_LAPTOP=m
-CONFIG_LG_LAPTOP=m
-CONFIG_PANASONIC_LAPTOP=m
-CONFIG_SONY_LAPTOP=m
-CONFIG_SONYPI_COMPAT=y
-CONFIG_TOPSTAR_LAPTOP=m
-CONFIG_INTEL_IPS=m
-CONFIG_CHROME_PLATFORMS=y
-CONFIG_CHROMEOS_LAPTOP=m
-CONFIG_CHROMEOS_PSTORE=m
-CONFIG_CHROMEOS_TBMC=m
-CONFIG_CROS_EC=m
-CONFIG_CROS_EC_I2C=m
-CONFIG_CROS_EC_ISHTP=m
-CONFIG_CROS_EC_SPI=m
-CONFIG_CROS_EC_LPC=m
-CONFIG_CROS_KBD_LED_BACKLIGHT=m
-CONFIG_WILCO_EC=m
-CONFIG_WILCO_EC_EVENTS=m
-CONFIG_WILCO_EC_TELEMETRY=m
-CONFIG_SURFACE3_WMI=m
-CONFIG_SURFACE_PRO3_BUTTON=m
-CONFIG_COMMON_CLK_WM831X=m
-CONFIG_COMMON_CLK_SI5351=m
-CONFIG_COMMON_CLK_CDCE706=m
-CONFIG_COMMON_CLK_S2MPS11=m
-CONFIG_CLK_TWL6040=m
-CONFIG_COMMON_CLK_PALMAS=m
-CONFIG_COMMON_CLK_PWM=m
-CONFIG_ALTERA_MBOX=m
-CONFIG_AMD_IOMMU=y
-CONFIG_INTEL_IOMMU=y
-CONFIG_INTEL_IOMMU_SVM=y
-# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
-CONFIG_IRQ_REMAP=y
-CONFIG_SOUNDWIRE=y
-CONFIG_SOC_TI=y
-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
-CONFIG_DEVFREQ_GOV_PERFORMANCE=y
-CONFIG_DEVFREQ_GOV_POWERSAVE=y
-CONFIG_DEVFREQ_GOV_USERSPACE=y
-CONFIG_PM_DEVFREQ_EVENT=y
-CONFIG_EXTCON_ADC_JACK=m
-CONFIG_EXTCON_GPIO=m
-CONFIG_EXTCON_MAX14577=m
-CONFIG_EXTCON_MAX77693=m
-CONFIG_EXTCON_MAX77843=m
-CONFIG_EXTCON_MAX8997=m
-CONFIG_EXTCON_PALMAS=m
-CONFIG_EXTCON_RT8973A=m
-CONFIG_EXTCON_SM5502=m
-CONFIG_EXTCON_USB_GPIO=m
-CONFIG_MEMORY=y
-CONFIG_IIO=m
-CONFIG_IIO_BUFFER_CB=m
-CONFIG_ADIS16201=m
-CONFIG_ADIS16209=m
-CONFIG_BMC150_ACCEL=m
-CONFIG_HID_SENSOR_ACCEL_3D=m
-CONFIG_IIO_ST_ACCEL_3AXIS=m
-CONFIG_KXSD9=m
-CONFIG_KXCJK1013=m
-CONFIG_MMA8452=m
-CONFIG_MMA9551=m
-CONFIG_MMA9553=m
-CONFIG_MXC4005=m
-CONFIG_SCA3000=m
-CONFIG_STK8312=m
-CONFIG_STK8BA50=m
-CONFIG_AD7192=m
-CONFIG_AD7266=m
-CONFIG_AD7291=m
-CONFIG_AD7298=m
-CONFIG_AD7476=m
-CONFIG_AD7606_IFACE_PARALLEL=m
-CONFIG_AD7606_IFACE_SPI=m
-CONFIG_AD7780=m
-CONFIG_AD7791=m
-CONFIG_AD7793=m
-CONFIG_AD7887=m
-CONFIG_AD7923=m
-CONFIG_AD799X=m
-CONFIG_CC10001_ADC=m
-CONFIG_DA9150_GPADC=m
-CONFIG_HI8435=m
-CONFIG_LP8788_ADC=m
-CONFIG_MAX1027=m
-CONFIG_MAX1363=m
-CONFIG_MCP320X=m
-CONFIG_MCP3422=m
-CONFIG_MEN_Z188_ADC=m
-CONFIG_NAU7802=m
-CONFIG_QCOM_SPMI_IADC=m
-CONFIG_QCOM_SPMI_VADC=m
-CONFIG_TI_ADC081C=m
-CONFIG_TI_ADC128S052=m
-CONFIG_TI_AM335X_ADC=m
-CONFIG_TWL4030_MADC=m
-CONFIG_TWL6030_GPADC=m
-CONFIG_VIPERBOARD_ADC=m
-CONFIG_AD8366=m
-CONFIG_AD7150=m
-CONFIG_VZ89X=m
-CONFIG_IIO_SSP_SENSORS_COMMONS=m
-CONFIG_IIO_SSP_SENSORHUB=m
-CONFIG_AD5064=m
-CONFIG_AD5360=m
-CONFIG_AD5380=m
-CONFIG_AD5421=m
-CONFIG_AD5446=m
-CONFIG_AD5449=m
-CONFIG_AD5504=m
-CONFIG_AD5624R_SPI=m
-CONFIG_AD5755=m
-CONFIG_AD5764=m
-CONFIG_AD5791=m
-CONFIG_AD7303=m
-CONFIG_M62332=m
-CONFIG_MAX517=m
-CONFIG_MCP4725=m
-CONFIG_MCP4922=m
-CONFIG_AD9523=m
-CONFIG_ADF4350=m
-CONFIG_ADIS16080=m
-CONFIG_ADIS16130=m
-CONFIG_ADIS16136=m
-CONFIG_ADIS16260=m
-CONFIG_ADXRS450=m
-CONFIG_BMG160=m
-CONFIG_HID_SENSOR_GYRO_3D=m
-CONFIG_IIO_ST_GYRO_3AXIS=m
-CONFIG_ITG3200=m
-CONFIG_DHT11=m
-CONFIG_HDC100X=m
-CONFIG_HTU21=m
-CONFIG_SI7005=m
-CONFIG_SI7020=m
-CONFIG_ADIS16400=m
-CONFIG_ADIS16480=m
-CONFIG_KMX61=m
-CONFIG_ACPI_ALS=m
-CONFIG_ADJD_S311=m
-CONFIG_AL3320A=m
-CONFIG_APDS9300=m
-CONFIG_APDS9960=m
-CONFIG_BH1750=m
-CONFIG_CM32181=m
-CONFIG_CM3232=m
-CONFIG_CM3323=m
-CONFIG_CM36651=m
-CONFIG_GP2AP020A00F=m
-CONFIG_SENSORS_ISL29018=m
-CONFIG_SENSORS_ISL29028=m
-CONFIG_ISL29125=m
-CONFIG_HID_SENSOR_ALS=m
-CONFIG_HID_SENSOR_PROX=m
-CONFIG_JSA1212=m
-CONFIG_RPR0521=m
-CONFIG_SENSORS_LM3533=m
-CONFIG_LTR501=m
-CONFIG_OPT3001=m
-CONFIG_PA12203001=m
-CONFIG_STK3310=m
-CONFIG_TCS3414=m
-CONFIG_TCS3472=m
-CONFIG_SENSORS_TSL2563=m
-CONFIG_TSL2583=m
-CONFIG_TSL4531=m
-CONFIG_US5182D=m
-CONFIG_VCNL4000=m
-CONFIG_AK09911=m
-CONFIG_MAG3110=m
-CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
-CONFIG_MMC35240=m
-CONFIG_IIO_ST_MAGN_3AXIS=m
-CONFIG_SENSORS_HMC5843_I2C=m
-CONFIG_SENSORS_HMC5843_SPI=m
-CONFIG_HID_SENSOR_INCLINOMETER_3D=m
-CONFIG_HID_SENSOR_DEVICE_ROTATION=m
-CONFIG_IIO_INTERRUPT_TRIGGER=m
-CONFIG_IIO_SYSFS_TRIGGER=m
-CONFIG_MCP4531=m
-CONFIG_BMP280=m
-CONFIG_HID_SENSOR_PRESS=m
-CONFIG_MPL3115=m
-CONFIG_MS5611=m
-CONFIG_MS5611_I2C=m
-CONFIG_MS5611_SPI=m
-CONFIG_MS5637=m
-CONFIG_IIO_ST_PRESS=m
-CONFIG_T5403=m
-CONFIG_AS3935=m
-CONFIG_LIDAR_LITE_V2=m
-CONFIG_SX9500=m
-CONFIG_AD2S90=m
-CONFIG_AD2S1200=m
-CONFIG_MLX90614=m
-CONFIG_TMP006=m
-CONFIG_TSYS01=m
-CONFIG_TSYS02D=m
-CONFIG_NTB=m
-CONFIG_NTB_AMD=m
-CONFIG_NTB_INTEL=m
-CONFIG_NTB_PINGPONG=m
-CONFIG_NTB_TOOL=m
-CONFIG_NTB_TRANSPORT=m
-CONFIG_PWM_CRC=y
-CONFIG_PWM_LP3943=m
-CONFIG_PWM_LPSS_PCI=m
-CONFIG_PWM_LPSS_PLATFORM=m
-CONFIG_PWM_PCA9685=m
-CONFIG_PWM_TWL=m
-CONFIG_PWM_TWL_LED=m
-CONFIG_IPACK_BUS=m
-CONFIG_BOARD_TPCI200=m
-CONFIG_SERIAL_IPOCTAL=m
-CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_PXA_28NM_HSIC=m
-CONFIG_PHY_PXA_28NM_USB2=m
-CONFIG_PHY_SAMSUNG_USB2=m
-CONFIG_PHY_TUSB1210=m
-CONFIG_POWERCAP=y
-CONFIG_INTEL_RAPL=m
-CONFIG_MCB=m
-CONFIG_MCB_PCI=m
-CONFIG_BLK_DEV_PMEM=m
-CONFIG_ND_BLK=m
-CONFIG_STM=m
-CONFIG_STM_DUMMY=m
-CONFIG_STM_SOURCE_CONSOLE=m
-CONFIG_INTEL_TH=m
-CONFIG_INTEL_TH_PCI=m
-CONFIG_INTEL_TH_GTH=m
-CONFIG_INTEL_TH_STH=m
-CONFIG_INTEL_TH_MSU=m
-CONFIG_INTEL_TH_PTI=m
-CONFIG_FPGA=m
-CONFIG_UNISYS_VISORBUS=m
-CONFIG_MOST=m
-CONFIG_EXT4_FS=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_FS_DAX=y
-CONFIG_FANOTIFY=y
-CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
-CONFIG_QUOTA=y
-CONFIG_QUOTA_NETLINK_INTERFACE=y
-# CONFIG_PRINT_QUOTA_WARNING is not set
-CONFIG_QFMT_V1=m
-CONFIG_QFMT_V2=m
-CONFIG_AUTOFS4_FS=m
-CONFIG_FUSE_FS=y
-CONFIG_CUSE=m
-CONFIG_OVERLAY_FS=y
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=y
-CONFIG_EXFAT_FS=m
-CONFIG_NTFS_FS=m
-CONFIG_NTFS_RW=y
-CONFIG_NTFS3_FS=m
-CONFIG_NTFS3_LZX_XPRESS=y
-CONFIG_NTFS3_FS_POSIX_ACL=y
-CONFIG_PROC_KCORE=y
-CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_HUGETLBFS=y
-CONFIG_EFIVAR_FS=y
-CONFIG_SQUASHFS=y
-CONFIG_SQUASHFS_FILE_DIRECT=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SQUASHFS_XATTR=y
-CONFIG_SQUASHFS_LZ4=y
-CONFIG_SQUASHFS_LZO=y
-CONFIG_SQUASHFS_XZ=y
-CONFIG_PSTORE_RAM=m
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=m
-CONFIG_NFS_SWAP=y
-CONFIG_NFS_V4_1=y
-CONFIG_NFS_V4_2=y
-CONFIG_NFS_V4_1_MIGRATION=y
-CONFIG_SUNRPC_DEBUG=y
-CONFIG_CIFS=m
-CONFIG_CIFS_UPCALL=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_DFS_UPCALL=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_MAC_ROMAN=m
-CONFIG_NLS_MAC_CELTIC=m
-CONFIG_NLS_MAC_CENTEURO=m
-CONFIG_NLS_MAC_CROATIAN=m
-CONFIG_NLS_MAC_CYRILLIC=m
-CONFIG_NLS_MAC_GAELIC=m
-CONFIG_NLS_MAC_GREEK=m
-CONFIG_NLS_MAC_ICELAND=m
-CONFIG_NLS_MAC_INUIT=m
-CONFIG_NLS_MAC_ROMANIAN=m
-CONFIG_NLS_MAC_TURKISH=m
-CONFIG_NLS_UTF8=m
-CONFIG_DLM=m
-CONFIG_PERSISTENT_KEYRINGS=y
-CONFIG_TRUSTED_KEYS=y
-CONFIG_ENCRYPTED_KEYS=y
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK_XFRM=y
-CONFIG_SECURITY_PATH=y
-CONFIG_INTEL_TXT=y
-CONFIG_SECURITY_SMACK=y
-CONFIG_SECURITY_YAMA=y
-# CONFIG_INTEGRITY is not set
-CONFIG_LSM="lockdown,yama"
-CONFIG_CRYPTO_USER=m
-CONFIG_CRYPTO_PCRYPT=m
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_CHACHA20POLY1305=m
-CONFIG_CRYPTO_CTS=m
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_KEYWRAP=m
-CONFIG_CRYPTO_ESSIV=m
-CONFIG_CRYPTO_XCBC=m
-CONFIG_CRYPTO_VMAC=m
-CONFIG_CRYPTO_CRC32C_INTEL=y
-CONFIG_CRYPTO_CRC32=m
-CONFIG_CRYPTO_CRC32_PCLMUL=m
-CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
-CONFIG_CRYPTO_POLY1305_X86_64=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_SHA1_SSSE3=m
-CONFIG_CRYPTO_SHA256_SSSE3=m
-CONFIG_CRYPTO_SHA512_SSSE3=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_BLOWFISH_X86_64=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m
-CONFIG_CRYPTO_CAST5_AVX_X86_64=m
-CONFIG_CRYPTO_CAST6_AVX_X86_64=m
-CONFIG_CRYPTO_DES3_EDE_X86_64=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_CHACHA20_X86_64=m
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
-CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
-CONFIG_CRYPTO_842=m
-CONFIG_CRYPTO_LZ4=m
-CONFIG_CRYPTO_LZ4HC=m
-CONFIG_CRYPTO_ZSTD=m
-CONFIG_CRYPTO_ANSI_CPRNG=m
-CONFIG_CRYPTO_DRBG_HASH=y
-CONFIG_CRYPTO_DRBG_CTR=y
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_CRYPTO_USER_API_RNG=m
-CONFIG_CRYPTO_USER_API_AEAD=m
-CONFIG_CRYPTO_DEV_PADLOCK=y
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_CCP=y
-CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
-CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
-CONFIG_PKCS7_TEST_KEY=m
-CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-CONFIG_CRC_CCITT=y
-CONFIG_CRC64=m
-CONFIG_XZ_DEC_TEST=m
-CONFIG_PRINTK_TIME=y
-CONFIG_BOOT_PRINTK_DELAY=y
-CONFIG_DYNAMIC_DEBUG=y
-CONFIG_FRAME_WARN=1024
-CONFIG_KGDB=y
-CONFIG_KGDB_LOW_LEVEL_TRAP=y
-CONFIG_KGDB_KDB=y
-CONFIG_KDB_KEYBOARD=y
-CONFIG_SCHED_STACK_END_CHECK=y
-CONFIG_SCHEDSTATS=y
-CONFIG_LOCK_TORTURE_TEST=m
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_FUNCTION_PROFILER=y
-CONFIG_STACK_TRACER=y
-CONFIG_SCHED_TRACER=y
-CONFIG_MMIOTRACE=y
-CONFIG_FTRACE_SYSCALLS=y
-CONFIG_BLK_DEV_IO_TRACE=y
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-CONFIG_EARLY_PRINTK_DBGP=y
-CONFIG_IO_DELAY_0XED=y
-CONFIG_PUNIT_ATOM_DEBUG=m
-CONFIG_NOTIFIER_ERROR_INJECTION=m
-CONFIG_RBTREE_TEST=m
-CONFIG_INTERVAL_TREE_TEST=m
-CONFIG_PERCPU_TEST=m
-CONFIG_TEST_HEXDUMP=m
-CONFIG_TEST_STRING_HELPERS=m
-CONFIG_TEST_KSTRTOX=m
-CONFIG_TEST_PRINTF=m
-CONFIG_TEST_LKM=m
-CONFIG_TEST_USER_COPY=m
-CONFIG_TEST_BPF=m
-CONFIG_TEST_FIRMWARE=m
-CONFIG_TEST_UDELAY=m
-CONFIG_TEST_STATIC_KEYS=m
-CONFIG_MEMTEST=y
diff --git a/board/recalbox/x86/kernel-x86_64-6.1-defconfig.config b/board/recalbox/x86/kernel-x86_64-6.1-defconfig.config
deleted file mode 100644
index a79d1de03aa538d5c7088c75eff1e23661ef954b..0000000000000000000000000000000000000000
--- a/board/recalbox/x86/kernel-x86_64-6.1-defconfig.config
+++ /dev/null
@@ -1,3297 +0,0 @@
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_SYSVIPC=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_AUDIT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_PREEMPT=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-CONFIG_LOG_BUF_SHIFT=18
-CONFIG_NUMA_BALANCING=y
-CONFIG_MEMCG=y
-CONFIG_BLK_CGROUP=y
-CONFIG_CFS_BANDWIDTH=y
-CONFIG_CGROUP_PIDS=y
-CONFIG_CGROUP_FREEZER=y
-CONFIG_CGROUP_HUGETLB=y
-CONFIG_CPUSETS=y
-CONFIG_CGROUP_DEVICE=y
-CONFIG_CGROUP_CPUACCT=y
-CONFIG_CGROUP_PERF=y
-CONFIG_NAMESPACES=y
-CONFIG_USER_NS=y
-CONFIG_CHECKPOINT_RESTORE=y
-CONFIG_SCHED_AUTOGROUP=y
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_EXPERT=y
-CONFIG_KALLSYMS_ALL=y
-CONFIG_PROFILING=y
-CONFIG_SMP=y
-CONFIG_X86_NUMACHIP=y
-CONFIG_X86_INTEL_LPSS=y
-CONFIG_X86_AMD_PLATFORM_DEVICE=y
-CONFIG_IOSF_MBI_DEBUG=y
-CONFIG_HYPERVISOR_GUEST=y
-CONFIG_PARAVIRT=y
-CONFIG_PARAVIRT_SPINLOCKS=y
-CONFIG_XEN=y
-CONFIG_XEN_PVH=y
-CONFIG_PROCESSOR_SELECT=y
-CONFIG_GART_IOMMU=y
-CONFIG_NR_CPUS=256
-CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS=y
-CONFIG_X86_MCE_INJECT=m
-CONFIG_PERF_EVENTS_AMD_POWER=y
-CONFIG_MICROCODE_AMD=y
-CONFIG_X86_MSR=m
-CONFIG_X86_CPUID=m
-CONFIG_NUMA=y
-CONFIG_X86_PMEM_LEGACY=y
-CONFIG_X86_CHECK_BIOS_CORRUPTION=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=1
-CONFIG_EFI=y
-CONFIG_EFI_STUB=y
-CONFIG_EFI_MIXED=y
-CONFIG_HZ_1000=y
-CONFIG_KEXEC=y
-CONFIG_KEXEC_FILE=y
-CONFIG_CRASH_DUMP=y
-CONFIG_PHYSICAL_ALIGN=0x1000000
-CONFIG_RANDOMIZE_MEMORY_PHYSICAL_PADDING=0xa
-CONFIG_LIVEPATCH=y
-# CONFIG_SUSPEND is not set
-CONFIG_PM_DEBUG=y
-CONFIG_PM_ADVANCED_DEBUG=y
-CONFIG_ACPI_EC_DEBUGFS=m
-CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_IPMI=m
-CONFIG_ACPI_PROCESSOR_AGGREGATOR=m
-CONFIG_ACPI_PCI_SLOT=y
-CONFIG_ACPI_SBS=m
-CONFIG_ACPI_BGRT=y
-CONFIG_ACPI_NFIT=m
-CONFIG_ACPI_APEI=y
-CONFIG_ACPI_APEI_GHES=y
-CONFIG_ACPI_APEI_MEMORY_FAILURE=y
-CONFIG_ACPI_APEI_EINJ=m
-CONFIG_ACPI_EXTLOG=m
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-CONFIG_X86_PCC_CPUFREQ=y
-CONFIG_X86_AMD_PSTATE=y
-CONFIG_X86_ACPI_CPUFREQ=y
-CONFIG_X86_POWERNOW_K8=y
-CONFIG_X86_AMD_FREQ_SENSITIVITY=m
-CONFIG_X86_SPEEDSTEP_CENTRINO=y
-CONFIG_X86_P4_CLOCKMOD=m
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_INTEL_IDLE=y
-CONFIG_IA32_EMULATION=y
-CONFIG_KVM=m
-CONFIG_KVM_INTEL=m
-CONFIG_KVM_AMD=m
-CONFIG_JUMP_LABEL=y
-# CONFIG_GCC_PLUGINS is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODVERSIONS=y
-CONFIG_MODULE_SRCVERSION_ALL=y
-CONFIG_MODULE_SIG=y
-CONFIG_MODULE_SIG_SHA512=y
-CONFIG_BLK_DEV_THROTTLING=y
-CONFIG_PARTITION_ADVANCED=y
-CONFIG_CMDLINE_PARTITION=y
-CONFIG_BINFMT_MISC=m
-CONFIG_ZSWAP=y
-CONFIG_ZSMALLOC=y
-# CONFIG_COMPAT_BRK is not set
-CONFIG_PAGE_REPORTING=y
-CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
-CONFIG_MEMORY_FAILURE=y
-CONFIG_HWPOISON_INJECT=m
-CONFIG_CMA=y
-CONFIG_MEM_SOFT_DIRTY=y
-CONFIG_IDLE_PAGE_TRACKING=y
-CONFIG_USERFAULTFD=y
-CONFIG_NET=y
-CONFIG_PACKET=y
-CONFIG_PACKET_DIAG=m
-CONFIG_UNIX=y
-CONFIG_UNIX_DIAG=m
-CONFIG_TLS=m
-CONFIG_TLS_DEVICE=y
-CONFIG_XFRM_USER=m
-CONFIG_XFRM_STATISTICS=y
-CONFIG_NET_KEY=m
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_IP_FIB_TRIE_STATS=y
-CONFIG_IP_MULTIPLE_TABLES=y
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-CONFIG_IP_MROUTE=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_SYN_COOKIES=y
-CONFIG_NET_IPVTI=m
-CONFIG_NET_FOU=m
-# CONFIG_INET_DIAG is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_WESTWOOD is not set
-# CONFIG_TCP_CONG_HTCP is not set
-CONFIG_TCP_MD5SIG=y
-CONFIG_IPV6=m
-CONFIG_IPV6_ROUTER_PREF=y
-CONFIG_IPV6_ROUTE_INFO=y
-CONFIG_IPV6_OPTIMISTIC_DAD=y
-CONFIG_INET6_AH=m
-CONFIG_INET6_ESP=m
-CONFIG_INET6_ESP_OFFLOAD=m
-CONFIG_INET6_ESPINTCP=y
-CONFIG_INET6_IPCOMP=m
-CONFIG_IPV6_MIP6=m
-CONFIG_IPV6_VTI=m
-CONFIG_IPV6_SIT_6RD=y
-CONFIG_IPV6_MULTIPLE_TABLES=y
-CONFIG_IPV6_SUBTREES=y
-CONFIG_IPV6_MROUTE=y
-CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y
-CONFIG_IPV6_PIMSM_V2=y
-CONFIG_MPTCP=y
-CONFIG_NETWORK_SECMARK=y
-CONFIG_IP_DCCP=m
-# CONFIG_IP_DCCP_CCID3 is not set
-CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y
-CONFIG_SCTP_COOKIE_HMAC_MD5=y
-CONFIG_VLAN_8021Q=m
-CONFIG_VLAN_8021Q_GVRP=y
-CONFIG_VLAN_8021Q_MVRP=y
-CONFIG_DNS_RESOLVER=y
-CONFIG_NETLINK_DIAG=m
-CONFIG_NET_PKTGEN=m
-CONFIG_BT=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-CONFIG_BT_BNEP=m
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-CONFIG_BT_HIDP=m
-CONFIG_BT_HS=y
-CONFIG_BT_LEDS=y
-CONFIG_BT_MSFTEXT=y
-CONFIG_BT_AOSPEXT=y
-CONFIG_BT_HCIBTUSB=m
-CONFIG_BT_HCIBTUSB_AUTOSUSPEND=y
-CONFIG_BT_HCIBTUSB_MTK=y
-CONFIG_BT_HCIBTSDIO=m
-CONFIG_BT_HCIUART=m
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_ATH3K=y
-CONFIG_BT_HCIUART_INTEL=y
-CONFIG_BT_HCIUART_AG6XX=y
-CONFIG_BT_HCIBCM203X=m
-CONFIG_BT_HCIBPA10X=m
-CONFIG_BT_HCIBFUSB=m
-CONFIG_BT_HCIDTL1=m
-CONFIG_BT_HCIBT3C=m
-CONFIG_BT_HCIBLUECARD=m
-CONFIG_BT_HCIVHCI=m
-CONFIG_BT_MRVL=m
-CONFIG_BT_MRVL_SDIO=m
-CONFIG_BT_ATH3K=m
-CONFIG_BT_MTKSDIO=m
-CONFIG_AF_RXRPC=y
-CONFIG_CFG80211=y
-CONFIG_MAC80211=y
-CONFIG_RFKILL=y
-CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_GPIO=m
-CONFIG_PCI=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_PCIEAER=y
-CONFIG_PCI_REALLOC_ENABLE_AUTO=y
-CONFIG_PCI_STUB=m
-CONFIG_XEN_PCIDEV_FRONTEND=m
-CONFIG_PCCARD=m
-CONFIG_YENTA=m
-CONFIG_PD6729=m
-CONFIG_I82092=m
-CONFIG_RAPIDIO=m
-CONFIG_RAPIDIO_TSI721=m
-CONFIG_RAPIDIO_ENUM_BASIC=m
-CONFIG_RAPIDIO_CPS_XX=m
-CONFIG_RAPIDIO_CPS_GEN2=m
-CONFIG_RAPIDIO_RXS_GEN3=m
-CONFIG_UEVENT_HELPER=y
-CONFIG_DEVTMPFS=y
-CONFIG_DEVTMPFS_MOUNT=y
-# CONFIG_STANDALONE is not set
-CONFIG_CONNECTOR=y
-CONFIG_EDD=y
-CONFIG_EDD_OFF=y
-CONFIG_DMI_SYSFS=m
-CONFIG_ISCSI_IBFT=m
-CONFIG_EFI_VARS_PSTORE=m
-CONFIG_EFI_BOOTLOADER_CONTROL=y
-CONFIG_APPLE_PROPERTIES=y
-CONFIG_MTD=m
-CONFIG_MTD_AR7_PARTS=m
-CONFIG_MTD_CMDLINE_PARTS=m
-CONFIG_MTD_REDBOOT_PARTS=m
-CONFIG_MTD_BLOCK=m
-CONFIG_MTD_BLOCK_RO=m
-CONFIG_FTL=m
-CONFIG_NFTL=m
-CONFIG_NFTL_RW=y
-CONFIG_INFTL=m
-CONFIG_RFD_FTL=m
-CONFIG_SSFDC=m
-CONFIG_SM_FTL=m
-CONFIG_MTD_OOPS=m
-CONFIG_MTD_SWAP=m
-CONFIG_MTD_CFI=m
-CONFIG_MTD_JEDECPROBE=m
-CONFIG_MTD_CFI_INTELEXT=m
-CONFIG_MTD_CFI_AMDSTD=m
-CONFIG_MTD_CFI_STAA=m
-CONFIG_MTD_ROM=m
-CONFIG_MTD_ABSENT=m
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-CONFIG_MTD_PHYSMAP=m
-CONFIG_MTD_SBC_GXX=m
-CONFIG_MTD_AMD76XROM=m
-CONFIG_MTD_ICHXROM=m
-CONFIG_MTD_ESB2ROM=m
-CONFIG_MTD_CK804XROM=m
-CONFIG_MTD_SCB2_FLASH=m
-CONFIG_MTD_NETtel=m
-CONFIG_MTD_L440GX=m
-CONFIG_MTD_PCI=m
-CONFIG_MTD_PCMCIA=m
-CONFIG_MTD_INTEL_VR_NOR=m
-CONFIG_MTD_PLATRAM=m
-CONFIG_MTD_PMC551=m
-CONFIG_MTD_DATAFLASH=m
-CONFIG_MTD_DATAFLASH_OTP=y
-CONFIG_MTD_SST25L=m
-CONFIG_MTD_SLRAM=m
-CONFIG_MTD_PHRAM=m
-CONFIG_MTD_MTDRAM=m
-CONFIG_MTD_BLOCK2MTD=m
-CONFIG_MTD_DOCG3=m
-CONFIG_MTD_ONENAND=m
-CONFIG_MTD_ONENAND_VERIFY_WRITE=y
-CONFIG_MTD_ONENAND_GENERIC=m
-CONFIG_MTD_ONENAND_2X_PROGRAM=y
-CONFIG_MTD_LPDDR=m
-CONFIG_MTD_SPI_NOR=m
-CONFIG_MTD_UBI=m
-CONFIG_MTD_UBI_FASTMAP=y
-CONFIG_MTD_UBI_GLUEBI=m
-CONFIG_MTD_UBI_BLOCK=y
-CONFIG_OF=y
-CONFIG_PARPORT=m
-CONFIG_PARPORT_PC=m
-CONFIG_PARPORT_SERIAL=m
-CONFIG_PARPORT_PC_FIFO=y
-CONFIG_PARPORT_PC_PCMCIA=m
-CONFIG_PARPORT_AX88796=m
-CONFIG_PARPORT_1284=y
-# CONFIG_PNP_DEBUG_MESSAGES is not set
-CONFIG_BLK_DEV_NULL_BLK=m
-CONFIG_BLK_DEV_FD=m
-CONFIG_BLK_DEV_PCIESSD_MTIP32XX=m
-CONFIG_ZRAM=m
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_RAM=y
-CONFIG_BLK_DEV_RAM_SIZE=65536
-# CONFIG_XEN_BLKDEV_FRONTEND is not set
-CONFIG_BLK_DEV_RBD=m
-CONFIG_BLK_DEV_NVME=y
-CONFIG_NVME_HWMON=y
-CONFIG_AD525X_DPOT=m
-CONFIG_AD525X_DPOT_I2C=m
-CONFIG_AD525X_DPOT_SPI=m
-CONFIG_DUMMY_IRQ=m
-CONFIG_IBM_ASM=m
-CONFIG_PHANTOM=m
-CONFIG_TIFM_7XX1=m
-CONFIG_ICS932S401=m
-CONFIG_ENCLOSURE_SERVICES=m
-CONFIG_HI6421V600_IRQ=m
-CONFIG_HP_ILO=m
-CONFIG_APDS9802ALS=m
-CONFIG_ISL29003=m
-CONFIG_ISL29020=m
-CONFIG_SENSORS_TSL2550=m
-CONFIG_SENSORS_BH1770=m
-CONFIG_SENSORS_APDS990X=m
-CONFIG_HMC6352=m
-CONFIG_DS1682=m
-CONFIG_LATTICE_ECP3_CONFIG=m
-CONFIG_SRAM=y
-CONFIG_C2PORT=m
-CONFIG_C2PORT_DURAMAR_2150=m
-CONFIG_EEPROM_AT24=m
-CONFIG_EEPROM_AT25=m
-CONFIG_EEPROM_LEGACY=m
-CONFIG_EEPROM_MAX6875=m
-CONFIG_EEPROM_93XX46=m
-CONFIG_TI_ST=m
-CONFIG_SENSORS_LIS3_I2C=m
-CONFIG_INTEL_MEI_TXE=m
-CONFIG_INTEL_MEI_HDCP=m
-CONFIG_INTEL_MEI_PXP=m
-CONFIG_GENWQE=m
-CONFIG_ECHO=m
-CONFIG_BLK_DEV_SD=y
-CONFIG_BLK_DEV_SR=y
-CONFIG_CHR_DEV_SG=y
-CONFIG_SCSI_CONSTANTS=y
-CONFIG_SCSI_LOGGING=y
-CONFIG_SCSI_SCAN_ASYNC=y
-CONFIG_SCSI_FC_ATTRS=m
-CONFIG_SCSI_SAS_ATA=y
-CONFIG_SCSI_SRP_ATTRS=m
-CONFIG_ISCSI_TCP=m
-CONFIG_SCSI_CXGB3_ISCSI=m
-CONFIG_SCSI_CXGB4_ISCSI=m
-CONFIG_SCSI_BNX2_ISCSI=m
-CONFIG_SCSI_BNX2X_FCOE=m
-CONFIG_BE2ISCSI=m
-CONFIG_BLK_DEV_3W_XXXX_RAID=m
-CONFIG_SCSI_HPSA=m
-CONFIG_SCSI_3W_9XXX=m
-CONFIG_SCSI_3W_SAS=m
-CONFIG_SCSI_ACARD=m
-CONFIG_SCSI_AACRAID=m
-CONFIG_SCSI_AIC7XXX=m
-CONFIG_AIC7XXX_CMDS_PER_DEVICE=8
-# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
-CONFIG_SCSI_AIC79XX=m
-# CONFIG_AIC79XX_DEBUG_ENABLE is not set
-CONFIG_SCSI_AIC94XX=m
-# CONFIG_AIC94XX_DEBUG is not set
-CONFIG_SCSI_MVSAS=m
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-CONFIG_SCSI_MVUMI=m
-CONFIG_SCSI_ADVANSYS=m
-CONFIG_SCSI_ARCMSR=m
-CONFIG_SCSI_ESAS2R=m
-CONFIG_MEGARAID_NEWGEN=y
-CONFIG_MEGARAID_MM=m
-CONFIG_MEGARAID_MAILBOX=m
-CONFIG_MEGARAID_LEGACY=m
-CONFIG_MEGARAID_SAS=m
-CONFIG_SCSI_MPT2SAS=m
-CONFIG_SCSI_HPTIOP=m
-CONFIG_SCSI_BUSLOGIC=m
-CONFIG_SCSI_FLASHPOINT=y
-CONFIG_VMWARE_PVSCSI=m
-CONFIG_XEN_SCSI_FRONTEND=m
-CONFIG_LIBFC=m
-CONFIG_LIBFCOE=m
-CONFIG_FCOE=m
-CONFIG_FCOE_FNIC=m
-CONFIG_SCSI_SNIC=m
-CONFIG_SCSI_DMX3191D=m
-CONFIG_SCSI_ISCI=m
-CONFIG_SCSI_IPS=m
-CONFIG_SCSI_INITIO=m
-CONFIG_SCSI_INIA100=m
-CONFIG_SCSI_PPA=m
-CONFIG_SCSI_IMM=m
-CONFIG_SCSI_STEX=m
-CONFIG_SCSI_SYM53C8XX_2=m
-CONFIG_SCSI_IPR=m
-CONFIG_SCSI_QLOGIC_1280=m
-CONFIG_SCSI_QLA_FC=m
-CONFIG_TCM_QLA2XXX=m
-CONFIG_SCSI_QLA_ISCSI=m
-CONFIG_SCSI_LPFC=m
-CONFIG_SCSI_DC395x=m
-CONFIG_SCSI_AM53C974=m
-CONFIG_SCSI_WD719X=m
-CONFIG_SCSI_DEBUG=m
-CONFIG_SCSI_PMCRAID=m
-CONFIG_SCSI_PM8001=m
-CONFIG_SCSI_BFA_FC=m
-CONFIG_SCSI_CHELSIO_FCOE=m
-CONFIG_SCSI_LOWLEVEL_PCMCIA=y
-CONFIG_PCMCIA_AHA152X=m
-CONFIG_PCMCIA_FDOMAIN=m
-CONFIG_PCMCIA_QLOGIC=m
-CONFIG_PCMCIA_SYM53C500=m
-CONFIG_SCSI_DH=y
-CONFIG_SCSI_DH_RDAC=m
-CONFIG_SCSI_DH_HP_SW=m
-CONFIG_SCSI_DH_EMC=m
-CONFIG_SCSI_DH_ALUA=m
-CONFIG_ATA=y
-CONFIG_SATA_ZPODD=y
-CONFIG_SATA_AHCI=y
-CONFIG_SATA_AHCI_PLATFORM=y
-CONFIG_SATA_INIC162X=y
-CONFIG_SATA_ACARD_AHCI=y
-CONFIG_SATA_SIL24=y
-CONFIG_PDC_ADMA=y
-CONFIG_SATA_QSTOR=y
-CONFIG_SATA_SX4=y
-CONFIG_ATA_PIIX=y
-CONFIG_SATA_MV=y
-CONFIG_SATA_NV=y
-CONFIG_SATA_PROMISE=y
-CONFIG_SATA_SIL=y
-CONFIG_SATA_SIS=y
-CONFIG_SATA_SVW=y
-CONFIG_SATA_ULI=y
-CONFIG_SATA_VIA=y
-CONFIG_SATA_VITESSE=y
-CONFIG_PATA_ALI=y
-CONFIG_PATA_AMD=y
-CONFIG_PATA_ARTOP=y
-CONFIG_PATA_ATIIXP=y
-CONFIG_PATA_ATP867X=y
-CONFIG_PATA_CMD64X=y
-CONFIG_PATA_CYPRESS=y
-CONFIG_PATA_EFAR=y
-CONFIG_PATA_HPT366=y
-CONFIG_PATA_HPT37X=y
-CONFIG_PATA_HPT3X2N=y
-CONFIG_PATA_HPT3X3=y
-CONFIG_PATA_HPT3X3_DMA=y
-CONFIG_PATA_IT8213=y
-CONFIG_PATA_IT821X=y
-CONFIG_PATA_JMICRON=y
-CONFIG_PATA_MARVELL=y
-CONFIG_PATA_NETCELL=y
-CONFIG_PATA_NINJA32=y
-CONFIG_PATA_NS87415=y
-CONFIG_PATA_OLDPIIX=y
-CONFIG_PATA_OPTIDMA=y
-CONFIG_PATA_PDC2027X=y
-CONFIG_PATA_PDC_OLD=y
-CONFIG_PATA_RADISYS=y
-CONFIG_PATA_RDC=y
-CONFIG_PATA_SCH=y
-CONFIG_PATA_SERVERWORKS=y
-CONFIG_PATA_SIL680=y
-CONFIG_PATA_TOSHIBA=y
-CONFIG_PATA_TRIFLEX=y
-CONFIG_PATA_VIA=y
-CONFIG_PATA_WINBOND=y
-CONFIG_PATA_CMD640_PCI=y
-CONFIG_PATA_MPIIX=y
-CONFIG_PATA_NS87410=y
-CONFIG_PATA_OPTI=y
-CONFIG_PATA_PCMCIA=m
-CONFIG_PATA_RZ1000=y
-CONFIG_PATA_ACPI=y
-CONFIG_ATA_GENERIC=y
-CONFIG_PATA_LEGACY=y
-CONFIG_MD=y
-CONFIG_BLK_DEV_DM=m
-CONFIG_DM_UEVENT=y
-CONFIG_TARGET_CORE=m
-CONFIG_TCM_IBLOCK=m
-CONFIG_TCM_FILEIO=m
-CONFIG_TCM_PSCSI=m
-CONFIG_TCM_USER2=m
-CONFIG_LOOPBACK_TARGET=m
-CONFIG_TCM_FC=m
-CONFIG_ISCSI_TARGET=m
-CONFIG_SBP_TARGET=m
-CONFIG_FUSION=y
-CONFIG_FUSION_SPI=m
-CONFIG_FUSION_FC=m
-CONFIG_FUSION_SAS=m
-CONFIG_FUSION_CTL=m
-CONFIG_FUSION_LOGGING=y
-CONFIG_FIREWIRE=m
-CONFIG_FIREWIRE_OHCI=m
-CONFIG_FIREWIRE_SBP2=m
-CONFIG_FIREWIRE_NET=m
-CONFIG_FIREWIRE_NOSY=m
-CONFIG_MACINTOSH_DRIVERS=y
-CONFIG_MAC_EMUMOUSEBTN=m
-CONFIG_DUMMY=m
-CONFIG_MACVLAN=m
-CONFIG_MACVTAP=m
-CONFIG_IPVLAN=m
-CONFIG_NETCONSOLE=m
-CONFIG_NETCONSOLE_DYNAMIC=y
-CONFIG_TUN=y
-CONFIG_VETH=m
-CONFIG_NLMON=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_3C589=m
-CONFIG_VORTEX=m
-CONFIG_TYPHOON=m
-CONFIG_ADAPTEC_STARFIRE=m
-CONFIG_ET131X=m
-CONFIG_SLICOSS=m
-CONFIG_ACENIC=m
-CONFIG_ALTERA_TSE=m
-CONFIG_ENA_ETHERNET=m
-CONFIG_AMD8111_ETH=m
-CONFIG_PCNET32=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_AMD_XGBE=m
-CONFIG_AQTION=m
-CONFIG_ATL2=m
-CONFIG_ATL1=m
-CONFIG_ATL1E=m
-CONFIG_ATL1C=m
-CONFIG_ALX=m
-CONFIG_CX_ECAT=m
-CONFIG_B44=m
-CONFIG_BCMGENET=m
-CONFIG_TIGON3=m
-CONFIG_BNX2X=m
-CONFIG_SYSTEMPORT=m
-CONFIG_BNXT=m
-CONFIG_MACB=m
-CONFIG_MACB_PCI=m
-CONFIG_THUNDER_NIC_PF=m
-CONFIG_THUNDER_NIC_VF=m
-CONFIG_LIQUIDIO=m
-CONFIG_LIQUIDIO_VF=m
-CONFIG_CHELSIO_T1=m
-CONFIG_CHELSIO_T1_1G=y
-CONFIG_CHELSIO_T4VF=m
-CONFIG_ENIC=m
-CONFIG_GEMINI_ETHERNET=m
-CONFIG_DNET=m
-CONFIG_NET_TULIP=y
-CONFIG_DE2104X=m
-CONFIG_TULIP=m
-CONFIG_TULIP_MWI=y
-CONFIG_TULIP_MMIO=y
-CONFIG_TULIP_NAPI=y
-CONFIG_TULIP_NAPI_HW_MITIGATION=y
-CONFIG_WINBOND_840=m
-CONFIG_DM9102=m
-CONFIG_ULI526X=m
-CONFIG_PCMCIA_XIRCOM=m
-CONFIG_DL2K=m
-CONFIG_SUNDANCE=m
-CONFIG_BE2NET=m
-CONFIG_EZCHIP_NPS_MANAGEMENT_ENET=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_GVE=m
-CONFIG_HINIC=m
-CONFIG_E100=m
-CONFIG_E1000=m
-CONFIG_E1000E=m
-CONFIG_IGB=m
-CONFIG_IGBVF=m
-CONFIG_IXGB=m
-CONFIG_IXGBE=m
-CONFIG_IXGBEVF=m
-CONFIG_I40E=m
-CONFIG_I40EVF=m
-CONFIG_ICE=m
-CONFIG_FM10K=m
-CONFIG_IGC=m
-CONFIG_NGBE=m
-CONFIG_TXGBE=m
-CONFIG_JME=m
-CONFIG_MVMDIO=m
-CONFIG_SKGE=m
-CONFIG_SKGE_GENESIS=y
-CONFIG_SKY2=m
-# CONFIG_NET_VENDOR_MELLANOX is not set
-CONFIG_KS8851=m
-CONFIG_KS8851_MLL=m
-CONFIG_KSZ884X_PCI=m
-CONFIG_ENC28J60=m
-CONFIG_ENCX24J600=m
-CONFIG_LAN743X=m
-CONFIG_MYRI10GE=m
-CONFIG_FEALNX=m
-CONFIG_NI_XGE_MANAGEMENT_ENET=m
-CONFIG_NATSEMI=m
-CONFIG_NS83820=m
-CONFIG_S2IO=m
-CONFIG_PCMCIA_AXNET=m
-CONFIG_NE2K_PCI=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_FORCEDETH=m
-CONFIG_ETHOC=m
-CONFIG_HAMACHI=m
-CONFIG_YELLOWFIN=m
-CONFIG_IONIC=m
-CONFIG_QLA3XXX=m
-CONFIG_QLCNIC=m
-CONFIG_NETXEN_NIC=m
-CONFIG_QED=m
-CONFIG_QEDE=m
-CONFIG_BNA=m
-CONFIG_QCA7000_SPI=m
-CONFIG_QCOM_EMAC=m
-CONFIG_RMNET=m
-CONFIG_R6040=m
-CONFIG_ATP=m
-CONFIG_8139CP=m
-CONFIG_8139TOO=m
-CONFIG_8139TOO_TUNE_TWISTER=y
-CONFIG_8139TOO_8129=y
-CONFIG_R8169=m
-CONFIG_SXGBE_ETH=m
-CONFIG_SC92031=m
-CONFIG_SIS900=m
-CONFIG_SIS190=m
-CONFIG_SFC=m
-CONFIG_SFC_FALCON=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_EPIC100=m
-CONFIG_SMSC911X=m
-CONFIG_SMSC9420=m
-CONFIG_STMMAC_ETH=m
-CONFIG_STMMAC_PCI=m
-CONFIG_HAPPYMEAL=m
-CONFIG_SUNGEM=m
-CONFIG_CASSINI=m
-CONFIG_NIU=m
-CONFIG_DWC_XLGMAC=m
-CONFIG_DWC_XLGMAC_PCI=m
-CONFIG_TEHUTI=m
-CONFIG_TLAN=m
-CONFIG_VIA_RHINE=m
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VIA_VELOCITY=m
-CONFIG_WIZNET_W5100=m
-CONFIG_WIZNET_W5300=m
-CONFIG_XILINX_AXI_EMAC=m
-CONFIG_XILINX_LL_TEMAC=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PHYLIB=y
-CONFIG_AMD_PHY=m
-CONFIG_AQUANTIA_PHY=m
-CONFIG_BROADCOM_PHY=m
-CONFIG_BCM87XX_PHY=m
-CONFIG_CICADA_PHY=m
-CONFIG_DAVICOM_PHY=m
-CONFIG_ICPLUS_PHY=m
-CONFIG_LXT_PHY=m
-CONFIG_INTEL_XWAY_PHY=m
-CONFIG_LSI_ET1011C_PHY=m
-CONFIG_MARVELL_PHY=m
-CONFIG_MICROCHIP_T1_PHY=m
-CONFIG_MICROSEMI_PHY=m
-CONFIG_NATIONAL_PHY=m
-CONFIG_AT803X_PHY=m
-CONFIG_QSEMI_PHY=m
-CONFIG_RENESAS_PHY=m
-CONFIG_STE10XP=m
-CONFIG_TERANETICS_PHY=m
-CONFIG_DP83822_PHY=m
-CONFIG_DP83TC811_PHY=m
-CONFIG_DP83848_PHY=m
-CONFIG_DP83867_PHY=m
-CONFIG_VITESSE_PHY=m
-CONFIG_MICREL_KS8995MA=m
-CONFIG_MDIO_BITBANG=m
-CONFIG_MDIO_GPIO=m
-CONFIG_USB_NET_DRIVERS=m
-CONFIG_USB_CATC=m
-CONFIG_USB_KAWETH=m
-CONFIG_USB_PEGASUS=m
-CONFIG_USB_RTL8150=m
-CONFIG_USB_RTL8152=m
-CONFIG_USB_LAN78XX=m
-CONFIG_USB_USBNET=m
-CONFIG_USB_NET_CDC_EEM=m
-CONFIG_USB_NET_HUAWEI_CDC_NCM=m
-CONFIG_USB_NET_CDC_MBIM=m
-CONFIG_USB_NET_DM9601=m
-CONFIG_USB_NET_SR9700=m
-CONFIG_USB_NET_SR9800=m
-CONFIG_USB_NET_SMSC75XX=m
-CONFIG_USB_NET_SMSC95XX=m
-CONFIG_USB_NET_GL620A=m
-CONFIG_USB_NET_PLUSB=m
-CONFIG_USB_NET_MCS7830=m
-CONFIG_USB_NET_RNDIS_HOST=m
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-CONFIG_USB_EPSON2888=y
-CONFIG_USB_KC2190=y
-CONFIG_USB_NET_CX82310_ETH=m
-CONFIG_USB_NET_KALMIA=m
-CONFIG_USB_NET_QMI_WWAN=m
-CONFIG_USB_HSO=m
-CONFIG_USB_NET_INT51X1=m
-CONFIG_USB_IPHETH=m
-CONFIG_USB_SIERRA_NET=m
-CONFIG_USB_VL600=m
-CONFIG_USB_NET_CH9200=m
-CONFIG_USB_NET_AQC111=m
-CONFIG_ADM8211=m
-CONFIG_ATH5K=m
-CONFIG_ATH9K=m
-CONFIG_ATH9K_AHB=y
-CONFIG_ATH9K_DYNACK=y
-CONFIG_ATH9K_PCI_NO_EEPROM=m
-CONFIG_ATH9K_HTC=m
-CONFIG_ATH9K_HWRNG=y
-CONFIG_CARL9170=m
-CONFIG_ATH6KL=m
-CONFIG_ATH6KL_SDIO=m
-CONFIG_ATH6KL_USB=m
-CONFIG_AR5523=m
-CONFIG_WIL6210=m
-CONFIG_ATH10K=m
-CONFIG_ATH10K_PCI=m
-CONFIG_ATH10K_AHB=y
-CONFIG_ATH10K_SDIO=m
-CONFIG_ATH10K_USB=m
-CONFIG_WCN36XX=m
-CONFIG_ATMEL=m
-CONFIG_PCI_ATMEL=m
-CONFIG_PCMCIA_ATMEL=m
-CONFIG_AT76C50X_USB=m
-CONFIG_B43=m
-CONFIG_B43_SDIO=y
-CONFIG_BRCMSMAC=m
-CONFIG_BRCMFMAC=m
-CONFIG_BRCMFMAC_USB=y
-CONFIG_BRCMFMAC_PCIE=y
-CONFIG_AIRO=m
-CONFIG_AIRO_CS=m
-CONFIG_IPW2100=m
-CONFIG_IPW2200=m
-CONFIG_IWL4965=m
-CONFIG_IWL3945=m
-CONFIG_IWLWIFI=m
-CONFIG_IWLDVM=m
-CONFIG_IWLMVM=m
-CONFIG_HOSTAP=m
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
-CONFIG_HOSTAP_PLX=m
-CONFIG_HOSTAP_PCI=m
-CONFIG_HOSTAP_CS=m
-CONFIG_HERMES=m
-CONFIG_HERMES_PRISM=y
-CONFIG_PLX_HERMES=m
-CONFIG_TMD_HERMES=m
-CONFIG_NORTEL_HERMES=m
-CONFIG_PCI_HERMES=m
-CONFIG_PCMCIA_HERMES=m
-CONFIG_PCMCIA_SPECTRUM=m
-CONFIG_ORINOCO_USB=m
-CONFIG_P54_COMMON=m
-CONFIG_P54_USB=m
-CONFIG_P54_PCI=m
-CONFIG_P54_SPI=m
-CONFIG_P54_SPI_DEFAULT_EEPROM=y
-CONFIG_LIBERTAS=m
-CONFIG_LIBERTAS_USB=m
-CONFIG_LIBERTAS_CS=m
-CONFIG_LIBERTAS_SDIO=m
-CONFIG_LIBERTAS_SPI=m
-CONFIG_LIBERTAS_THINFIRM=m
-CONFIG_LIBERTAS_THINFIRM_USB=m
-CONFIG_MWIFIEX=m
-CONFIG_MWIFIEX_SDIO=m
-CONFIG_MWIFIEX_PCIE=m
-CONFIG_MWIFIEX_USB=m
-CONFIG_MWL8K=m
-CONFIG_MT7601U=m
-CONFIG_MT76x0U=m
-CONFIG_MT76x0E=m
-CONFIG_MT76x2E=m
-CONFIG_MT76x2U=m
-CONFIG_MT7603E=m
-CONFIG_MT7615E=m
-CONFIG_MT7663U=m
-CONFIG_MT7663S=m
-CONFIG_MT7915E=m
-CONFIG_MT7921E=m
-CONFIG_MT7921S=m
-CONFIG_MT7921U=m
-CONFIG_WILC1000_SDIO=m
-CONFIG_WILC1000_SPI=m
-CONFIG_WILC1000_HW_OOB_INTR=y
-CONFIG_RT2X00=m
-CONFIG_RT2400PCI=m
-CONFIG_RT2500PCI=m
-CONFIG_RT61PCI=m
-CONFIG_RT2800PCI=m
-CONFIG_RT2500USB=m
-CONFIG_RT73USB=m
-CONFIG_RT2800USB=m
-CONFIG_RT2800USB_RT3573=y
-CONFIG_RT2800USB_RT53XX=y
-CONFIG_RT2800USB_RT55XX=y
-CONFIG_RT2800USB_UNKNOWN=y
-CONFIG_RTL8180=m
-CONFIG_RTL8187=m
-CONFIG_RTL_CARDS=m
-CONFIG_RTL8192CE=m
-CONFIG_RTL8192SE=m
-CONFIG_RTL8192DE=m
-CONFIG_RTL8723AE=m
-CONFIG_RTL8723BE=m
-CONFIG_RTL8188EE=m
-CONFIG_RTL8192EE=m
-CONFIG_RTL8821AE=m
-CONFIG_RTL8192CU=m
-CONFIG_RTL8XXXU=m
-CONFIG_RTL8XXXU_UNTESTED=y
-CONFIG_RTW88=m
-CONFIG_RTW88_8822BE=m
-CONFIG_RTW88_8822CE=m
-CONFIG_RTW88_8723DE=m
-CONFIG_RTW88_8821CE=m
-CONFIG_RTW89=m
-CONFIG_RTW89_8852AE=m
-CONFIG_RTW89_8852CE=m
-CONFIG_RSI_91X=m
-CONFIG_CW1200=m
-CONFIG_CW1200_WLAN_SDIO=m
-CONFIG_CW1200_WLAN_SPI=m
-CONFIG_WL1251=m
-CONFIG_WL1251_SPI=m
-CONFIG_WL1251_SDIO=m
-CONFIG_WL12XX=m
-CONFIG_WL18XX=m
-CONFIG_WLCORE_SPI=m
-CONFIG_WLCORE_SDIO=m
-CONFIG_USB_ZD1201=m
-CONFIG_ZD1211RW=m
-CONFIG_QTNFMAC_PCIE=m
-CONFIG_PCMCIA_RAYCS=m
-CONFIG_PCMCIA_WL3501=m
-CONFIG_MAC80211_HWSIM=m
-# CONFIG_XEN_NETDEV_FRONTEND is not set
-CONFIG_VMXNET3=m
-CONFIG_FUJITSU_ES=m
-CONFIG_NET_FAILOVER=y
-CONFIG_INPUT_LEDS=m
-CONFIG_INPUT_MOUSEDEV=m
-CONFIG_INPUT_JOYDEV=y
-CONFIG_INPUT_EVDEV=y
-CONFIG_KEYBOARD_ADP5520=m
-CONFIG_KEYBOARD_ADP5588=m
-CONFIG_KEYBOARD_ADP5589=m
-CONFIG_KEYBOARD_QT1070=m
-CONFIG_KEYBOARD_QT2160=m
-CONFIG_KEYBOARD_LKKBD=m
-CONFIG_KEYBOARD_GPIO=m
-CONFIG_KEYBOARD_GPIO_POLLED=m
-CONFIG_KEYBOARD_TCA6416=m
-CONFIG_KEYBOARD_TCA8418=m
-CONFIG_KEYBOARD_MATRIX=m
-CONFIG_KEYBOARD_LM8323=m
-CONFIG_KEYBOARD_LM8333=m
-CONFIG_KEYBOARD_MAX7359=m
-CONFIG_KEYBOARD_MCS=m
-CONFIG_KEYBOARD_MPR121=m
-CONFIG_KEYBOARD_NEWTON=m
-CONFIG_KEYBOARD_OPENCORES=m
-CONFIG_KEYBOARD_SAMSUNG=m
-CONFIG_KEYBOARD_STOWAWAY=m
-CONFIG_KEYBOARD_SUNKBD=m
-CONFIG_KEYBOARD_TWL4030=m
-CONFIG_KEYBOARD_XTKBD=m
-CONFIG_MOUSE_PS2=m
-CONFIG_MOUSE_PS2_ELANTECH=y
-CONFIG_MOUSE_PS2_SENTELIC=y
-CONFIG_MOUSE_PS2_TOUCHKIT=y
-CONFIG_MOUSE_PS2_VMMOUSE=y
-CONFIG_MOUSE_SERIAL=m
-CONFIG_MOUSE_APPLETOUCH=m
-CONFIG_MOUSE_BCM5974=m
-CONFIG_MOUSE_CYAPA=m
-CONFIG_MOUSE_ELAN_I2C=m
-CONFIG_MOUSE_ELAN_I2C_SMBUS=y
-CONFIG_MOUSE_VSXXXAA=m
-CONFIG_MOUSE_GPIO=m
-CONFIG_MOUSE_SYNAPTICS_I2C=m
-CONFIG_MOUSE_SYNAPTICS_USB=m
-CONFIG_INPUT_JOYSTICK=y
-CONFIG_JOYSTICK_ANALOG=m
-CONFIG_JOYSTICK_A3D=m
-CONFIG_JOYSTICK_ADI=m
-CONFIG_JOYSTICK_COBRA=m
-CONFIG_JOYSTICK_GF2K=m
-CONFIG_JOYSTICK_GRIP=m
-CONFIG_JOYSTICK_GRIP_MP=m
-CONFIG_JOYSTICK_GUILLEMOT=m
-CONFIG_JOYSTICK_INTERACT=m
-CONFIG_JOYSTICK_SIDEWINDER=m
-CONFIG_JOYSTICK_TMDC=m
-CONFIG_JOYSTICK_IFORCE=m
-CONFIG_JOYSTICK_IFORCE_USB=m
-CONFIG_JOYSTICK_IFORCE_232=m
-CONFIG_JOYSTICK_WARRIOR=m
-CONFIG_JOYSTICK_MAGELLAN=m
-CONFIG_JOYSTICK_SPACEORB=m
-CONFIG_JOYSTICK_SPACEBALL=m
-CONFIG_JOYSTICK_STINGER=m
-CONFIG_JOYSTICK_TWIDJOY=m
-CONFIG_JOYSTICK_ZHENHUA=m
-CONFIG_JOYSTICK_DB9=m
-CONFIG_JOYSTICK_GAMECON=m
-CONFIG_JOYSTICK_TURBOGRAFX=m
-CONFIG_JOYSTICK_AS5011=m
-CONFIG_JOYSTICK_JOYDUMP=m
-CONFIG_JOYSTICK_XPAD=m
-CONFIG_JOYSTICK_XPAD_FF=y
-CONFIG_JOYSTICK_XPAD_LEDS=y
-CONFIG_JOYSTICK_WALKERA0701=m
-CONFIG_JOYSTICK_PSXPAD_SPI=m
-CONFIG_JOYSTICK_PSXPAD_SPI_FF=y
-CONFIG_JOYSTICK_PXRC=m
-CONFIG_JOYSTICK_QWIIC=m
-CONFIG_JOYSTICK_FSIA6B=m
-CONFIG_INPUT_TOUCHSCREEN=y
-CONFIG_TOUCHSCREEN_88PM860X=m
-CONFIG_TOUCHSCREEN_ADS7846=m
-CONFIG_TOUCHSCREEN_AD7877=m
-CONFIG_TOUCHSCREEN_AD7879=m
-CONFIG_TOUCHSCREEN_AD7879_I2C=m
-CONFIG_TOUCHSCREEN_AD7879_SPI=m
-CONFIG_TOUCHSCREEN_ATMEL_MXT=m
-CONFIG_TOUCHSCREEN_AUO_PIXCIR=m
-CONFIG_TOUCHSCREEN_BU21013=m
-CONFIG_TOUCHSCREEN_CY8CTMG110=m
-CONFIG_TOUCHSCREEN_CYTTSP_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP_SPI=m
-CONFIG_TOUCHSCREEN_CYTTSP4_CORE=m
-CONFIG_TOUCHSCREEN_CYTTSP4_I2C=m
-CONFIG_TOUCHSCREEN_CYTTSP4_SPI=m
-CONFIG_TOUCHSCREEN_DA9034=m
-CONFIG_TOUCHSCREEN_DA9052=m
-CONFIG_TOUCHSCREEN_DYNAPRO=m
-CONFIG_TOUCHSCREEN_HAMPSHIRE=m
-CONFIG_TOUCHSCREEN_EETI=m
-CONFIG_TOUCHSCREEN_FUJITSU=m
-CONFIG_TOUCHSCREEN_GOODIX=m
-CONFIG_TOUCHSCREEN_ILI210X=m
-CONFIG_TOUCHSCREEN_GUNZE=m
-CONFIG_TOUCHSCREEN_ELAN=m
-CONFIG_TOUCHSCREEN_ELO=m
-CONFIG_TOUCHSCREEN_WACOM_W8001=m
-CONFIG_TOUCHSCREEN_WACOM_I2C=m
-CONFIG_TOUCHSCREEN_MAX11801=m
-CONFIG_TOUCHSCREEN_MCS5000=m
-CONFIG_TOUCHSCREEN_MMS114=m
-CONFIG_TOUCHSCREEN_MTOUCH=m
-CONFIG_TOUCHSCREEN_INEXIO=m
-CONFIG_TOUCHSCREEN_MK712=m
-CONFIG_TOUCHSCREEN_PENMOUNT=m
-CONFIG_TOUCHSCREEN_EDT_FT5X06=m
-CONFIG_TOUCHSCREEN_TOUCHRIGHT=m
-CONFIG_TOUCHSCREEN_TOUCHWIN=m
-CONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
-CONFIG_TOUCHSCREEN_UCB1400=m
-CONFIG_TOUCHSCREEN_PIXCIR=m
-CONFIG_TOUCHSCREEN_WDT87XX_I2C=m
-CONFIG_TOUCHSCREEN_WM831X=m
-CONFIG_TOUCHSCREEN_WM97XX=m
-CONFIG_TOUCHSCREEN_USB_COMPOSITE=m
-CONFIG_TOUCHSCREEN_MC13783=m
-CONFIG_TOUCHSCREEN_TOUCHIT213=m
-CONFIG_TOUCHSCREEN_TSC_SERIO=m
-CONFIG_TOUCHSCREEN_TSC2004=m
-CONFIG_TOUCHSCREEN_TSC2005=m
-CONFIG_TOUCHSCREEN_TSC2007=m
-CONFIG_TOUCHSCREEN_PCAP=m
-CONFIG_TOUCHSCREEN_ST1232=m
-CONFIG_TOUCHSCREEN_SUR40=m
-CONFIG_TOUCHSCREEN_SX8654=m
-CONFIG_TOUCHSCREEN_TPS6507X=m
-CONFIG_TOUCHSCREEN_ZFORCE=m
-CONFIG_TOUCHSCREEN_ROHM_BU21023=m
-CONFIG_INPUT_MISC=y
-CONFIG_INPUT_88PM860X_ONKEY=m
-CONFIG_INPUT_88PM80X_ONKEY=m
-CONFIG_INPUT_AD714X=m
-CONFIG_INPUT_ARIZONA_HAPTICS=m
-CONFIG_INPUT_BMA150=m
-CONFIG_INPUT_E3X0_BUTTON=m
-CONFIG_INPUT_PCSPKR=m
-CONFIG_INPUT_MAX8925_ONKEY=m
-CONFIG_INPUT_MC13783_PWRBUTTON=m
-CONFIG_INPUT_MMA8450=m
-CONFIG_INPUT_APANEL=m
-CONFIG_INPUT_GPIO_BEEPER=m
-CONFIG_INPUT_ATLAS_BTNS=m
-CONFIG_INPUT_ATI_REMOTE2=m
-CONFIG_INPUT_KEYSPAN_REMOTE=m
-CONFIG_INPUT_KXTJ9=m
-CONFIG_INPUT_POWERMATE=m
-CONFIG_INPUT_YEALINK=m
-CONFIG_INPUT_CM109=m
-CONFIG_INPUT_REGULATOR_HAPTIC=m
-CONFIG_INPUT_RETU_PWRBUTTON=m
-CONFIG_INPUT_TWL4030_PWRBUTTON=m
-CONFIG_INPUT_TWL4030_VIBRA=m
-CONFIG_INPUT_TWL6040_VIBRA=m
-CONFIG_INPUT_UINPUT=y
-CONFIG_INPUT_PALMAS_PWRBUTTON=m
-CONFIG_INPUT_PCF50633_PMU=m
-CONFIG_INPUT_PCF8574=m
-CONFIG_INPUT_GPIO_ROTARY_ENCODER=m
-CONFIG_INPUT_DA9052_ONKEY=m
-CONFIG_INPUT_DA9055_ONKEY=m
-CONFIG_INPUT_DA9063_ONKEY=m
-CONFIG_INPUT_WM831X_ON=m
-CONFIG_INPUT_PCAP=m
-CONFIG_INPUT_ADXL34X=m
-CONFIG_INPUT_IMS_PCU=m
-CONFIG_INPUT_CMA3000=m
-CONFIG_INPUT_CMA3000_I2C=m
-CONFIG_INPUT_XEN_KBDDEV_FRONTEND=m
-CONFIG_INPUT_IDEAPAD_SLIDEBAR=m
-CONFIG_INPUT_SOC_BUTTON_ARRAY=m
-CONFIG_INPUT_DRV260X_HAPTICS=m
-CONFIG_INPUT_DRV2665_HAPTICS=m
-CONFIG_INPUT_DRV2667_HAPTICS=m
-CONFIG_SERIO_SERPORT=m
-CONFIG_SERIO_CT82C710=m
-CONFIG_SERIO_PARKBD=m
-CONFIG_SERIO_PCIPS2=m
-CONFIG_SERIO_RAW=m
-CONFIG_SERIO_ALTERA_PS2=m
-CONFIG_SERIO_PS2MULT=m
-CONFIG_SERIO_ARC_PS2=m
-CONFIG_USERIO=m
-CONFIG_GAMEPORT_NS558=m
-CONFIG_GAMEPORT_L4=m
-CONFIG_GAMEPORT_EMU10K1=m
-CONFIG_GAMEPORT_FM801=m
-CONFIG_LEGACY_PTY_COUNT=0
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=48
-CONFIG_SERIAL_8250_RUNTIME_UARTS=32
-CONFIG_SERIAL_8250_EXTENDED=y
-CONFIG_SERIAL_8250_MANY_PORTS=y
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-CONFIG_SERIAL_8250_RSA=y
-CONFIG_SERIAL_8250_DW=m
-CONFIG_SERIAL_8250_RT288X=y
-CONFIG_SERIAL_8250_MID=m
-CONFIG_SERIAL_KGDB_NMI=y
-CONFIG_SERIAL_MAX3100=m
-CONFIG_SERIAL_MAX310X=y
-CONFIG_SERIAL_UARTLITE=m
-CONFIG_SERIAL_JSM=m
-CONFIG_SERIAL_SCCNXP=y
-CONFIG_SERIAL_SCCNXP_CONSOLE=y
-CONFIG_SERIAL_SC16IS7XX=m
-CONFIG_SERIAL_SC16IS7XX_SPI=y
-CONFIG_SERIAL_ALTERA_JTAGUART=m
-CONFIG_SERIAL_ALTERA_UART=m
-CONFIG_SERIAL_ARC=m
-CONFIG_SERIAL_RP2=m
-CONFIG_SERIAL_FSL_LPUART=m
-CONFIG_SERIAL_MEN_Z135=m
-CONFIG_SERIAL_NONSTANDARD=y
-CONFIG_MOXA_INTELLIO=m
-CONFIG_MOXA_SMARTIO=m
-CONFIG_SYNCLINK_GT=m
-CONFIG_N_HDLC=m
-CONFIG_N_GSM=m
-CONFIG_NOZOMI=m
-CONFIG_TTY_PRINTK=y
-CONFIG_PRINTER=m
-CONFIG_PPDEV=m
-CONFIG_IPMI_HANDLER=m
-CONFIG_IPMI_DEVICE_INTERFACE=m
-CONFIG_IPMI_SSIF=m
-CONFIG_IPMI_WATCHDOG=m
-CONFIG_IPMI_POWEROFF=m
-CONFIG_HW_RANDOM=y
-CONFIG_HW_RANDOM_TIMERIOMEM=m
-CONFIG_HW_RANDOM_INTEL=m
-CONFIG_HW_RANDOM_AMD=m
-CONFIG_HW_RANDOM_VIA=m
-CONFIG_APPLICOM=m
-CONFIG_SYNCLINK_CS=m
-CONFIG_CARDMAN_4000=m
-CONFIG_CARDMAN_4040=m
-CONFIG_IPWIRELESS=m
-CONFIG_MWAVE=m
-CONFIG_HPET=y
-CONFIG_HANGCHECK_TIMER=m
-CONFIG_TCG_TPM=y
-CONFIG_TCG_TIS=y
-CONFIG_TCG_TIS_I2C_ATMEL=m
-CONFIG_TCG_TIS_I2C_INFINEON=m
-CONFIG_TCG_TIS_I2C_NUVOTON=m
-CONFIG_TCG_NSC=m
-CONFIG_TCG_ATMEL=m
-CONFIG_TCG_INFINEON=m
-CONFIG_TCG_XEN=m
-CONFIG_TCG_CRB=y
-CONFIG_TCG_TIS_ST33ZP24_I2C=m
-CONFIG_TCG_TIS_ST33ZP24_SPI=m
-CONFIG_TELCLOCK=m
-CONFIG_XILLYBUS=m
-CONFIG_XILLYBUS_PCIE=m
-CONFIG_I2C_CHARDEV=y
-CONFIG_I2C_ALI1535=m
-CONFIG_I2C_ALI1563=m
-CONFIG_I2C_ALI15X3=m
-CONFIG_I2C_AMD756=m
-CONFIG_I2C_AMD756_S4882=m
-CONFIG_I2C_AMD8111=m
-CONFIG_I2C_I801=m
-CONFIG_I2C_ISCH=m
-CONFIG_I2C_ISMT=m
-CONFIG_I2C_PIIX4=m
-CONFIG_I2C_NFORCE2=m
-CONFIG_I2C_NFORCE2_S4985=m
-CONFIG_I2C_SIS5595=m
-CONFIG_I2C_SIS630=m
-CONFIG_I2C_SIS96X=m
-CONFIG_I2C_VIA=m
-CONFIG_I2C_VIAPRO=m
-CONFIG_I2C_SCMI=m
-CONFIG_I2C_CBUS_GPIO=m
-CONFIG_I2C_DESIGNWARE_PLATFORM=y
-CONFIG_I2C_DESIGNWARE_BAYTRAIL=y
-CONFIG_I2C_DESIGNWARE_PCI=m
-CONFIG_I2C_EMEV2=m
-CONFIG_I2C_GPIO=m
-CONFIG_I2C_KEMPLD=m
-CONFIG_I2C_OCORES=m
-CONFIG_I2C_PCA_PLATFORM=m
-CONFIG_I2C_SIMTEC=m
-CONFIG_I2C_XILINX=m
-CONFIG_I2C_DIOLAN_U2C=m
-CONFIG_I2C_DLN2=m
-CONFIG_I2C_PARPORT=m
-CONFIG_I2C_ROBOTFUZZ_OSIF=m
-CONFIG_I2C_TAOS_EVM=m
-CONFIG_I2C_TINY_USB=m
-CONFIG_I2C_VIPERBOARD=m
-CONFIG_I2C_STUB=m
-CONFIG_SPI=y
-CONFIG_SPI_ALTERA=m
-CONFIG_SPI_BUTTERFLY=m
-CONFIG_SPI_CADENCE=m
-CONFIG_SPI_DESIGNWARE=m
-CONFIG_SPI_DW_PCI=m
-CONFIG_SPI_DW_MMIO=m
-CONFIG_SPI_DLN2=m
-CONFIG_SPI_GPIO=m
-CONFIG_SPI_LM70_LLP=m
-CONFIG_SPI_OC_TINY=m
-CONFIG_SPI_SC18IS602=m
-CONFIG_SPI_XCOMM=m
-CONFIG_SPI_ZYNQMP_GQSPI=m
-CONFIG_SPI_SPIDEV=m
-CONFIG_SPI_TLE62X0=m
-CONFIG_SPMI=m
-CONFIG_HSI=m
-CONFIG_HSI_CHAR=m
-CONFIG_PPS_CLIENT_LDISC=m
-CONFIG_PPS_CLIENT_PARPORT=m
-CONFIG_PPS_CLIENT_GPIO=m
-CONFIG_PINCTRL_AMD=y
-CONFIG_PINCTRL_BAYTRAIL=y
-CONFIG_PINCTRL_CHERRYVIEW=m
-CONFIG_PINCTRL_BROXTON=m
-CONFIG_PINCTRL_SUNRISEPOINT=m
-CONFIG_GPIO_SYSFS=y
-CONFIG_GPIO_AMDPT=m
-CONFIG_GPIO_DWAPB=m
-CONFIG_GPIO_GENERIC_PLATFORM=m
-CONFIG_GPIO_VX855=m
-CONFIG_GPIO_F7188X=m
-CONFIG_GPIO_IT87=m
-CONFIG_GPIO_SCH=m
-CONFIG_GPIO_SCH311X=m
-CONFIG_GPIO_MAX7300=m
-CONFIG_GPIO_MAX732X=m
-CONFIG_GPIO_PCA953X=m
-CONFIG_GPIO_PCF857X=m
-CONFIG_GPIO_ADP5520=m
-CONFIG_GPIO_ARIZONA=m
-CONFIG_GPIO_CRYSTAL_COVE=m
-CONFIG_GPIO_DA9052=m
-CONFIG_GPIO_DA9055=m
-CONFIG_GPIO_DLN2=m
-CONFIG_GPIO_JANZ_TTL=m
-CONFIG_GPIO_KEMPLD=m
-CONFIG_GPIO_LP3943=m
-CONFIG_GPIO_PALMAS=y
-CONFIG_GPIO_RC5T583=y
-CONFIG_GPIO_TPS6586X=y
-CONFIG_GPIO_TPS65910=y
-CONFIG_GPIO_TPS65912=m
-CONFIG_GPIO_TWL4030=m
-CONFIG_GPIO_TWL6040=m
-CONFIG_GPIO_UCB1400=m
-CONFIG_GPIO_WM831X=m
-CONFIG_GPIO_WM8350=m
-CONFIG_GPIO_WM8994=m
-CONFIG_GPIO_AMD8111=m
-CONFIG_GPIO_ML_IOH=m
-CONFIG_GPIO_RDC321X=m
-CONFIG_GPIO_MAX7301=m
-CONFIG_GPIO_MC33880=m
-CONFIG_GPIO_VIPERBOARD=m
-CONFIG_W1_MASTER_MATROX=m
-CONFIG_W1_MASTER_DS2490=m
-CONFIG_W1_MASTER_DS2482=m
-CONFIG_W1_MASTER_DS1WM=m
-CONFIG_W1_MASTER_GPIO=m
-CONFIG_W1_SLAVE_THERM=m
-CONFIG_W1_SLAVE_SMEM=m
-CONFIG_W1_SLAVE_DS2408=m
-CONFIG_W1_SLAVE_DS2413=m
-CONFIG_W1_SLAVE_DS2406=m
-CONFIG_W1_SLAVE_DS2423=m
-CONFIG_W1_SLAVE_DS2431=m
-CONFIG_W1_SLAVE_DS2433=m
-CONFIG_W1_SLAVE_DS28E04=m
-CONFIG_POWER_RESET=y
-CONFIG_POWER_RESET_RESTART=y
-CONFIG_PDA_POWER=m
-CONFIG_GENERIC_ADC_BATTERY=m
-CONFIG_MAX8925_POWER=m
-CONFIG_WM831X_BACKUP=m
-CONFIG_WM831X_POWER=m
-CONFIG_WM8350_POWER=m
-CONFIG_TEST_POWER=m
-CONFIG_BATTERY_88PM860X=m
-CONFIG_BATTERY_DS2760=m
-CONFIG_BATTERY_DS2780=m
-CONFIG_BATTERY_DS2781=m
-CONFIG_BATTERY_DS2782=m
-CONFIG_BATTERY_SBS=m
-CONFIG_BATTERY_BQ27XXX=m
-CONFIG_BATTERY_DA9030=m
-CONFIG_BATTERY_DA9052=m
-CONFIG_CHARGER_DA9150=m
-CONFIG_BATTERY_DA9150=m
-CONFIG_BATTERY_MAX17040=m
-CONFIG_BATTERY_MAX17042=m
-CONFIG_BATTERY_TWL4030_MADC=m
-CONFIG_CHARGER_88PM860X=m
-CONFIG_CHARGER_PCF50633=m
-CONFIG_BATTERY_RX51=m
-CONFIG_CHARGER_ISP1704=m
-CONFIG_CHARGER_MAX8903=m
-CONFIG_CHARGER_TWL4030=m
-CONFIG_CHARGER_LP8727=m
-CONFIG_CHARGER_LP8788=m
-CONFIG_CHARGER_GPIO=m
-CONFIG_CHARGER_MANAGER=y
-CONFIG_CHARGER_MAX14577=m
-CONFIG_CHARGER_MAX77693=m
-CONFIG_CHARGER_MAX8997=m
-CONFIG_CHARGER_MAX8998=m
-CONFIG_CHARGER_BQ2415X=m
-CONFIG_CHARGER_BQ24190=m
-CONFIG_CHARGER_BQ24257=m
-CONFIG_CHARGER_BQ24735=m
-CONFIG_CHARGER_BQ25890=m
-CONFIG_CHARGER_SMB347=m
-CONFIG_CHARGER_TPS65090=m
-CONFIG_BATTERY_GAUGE_LTC2941=m
-CONFIG_BATTERY_RT5033=m
-CONFIG_CHARGER_RT9455=m
-CONFIG_SENSORS_ABITUGURU=m
-CONFIG_SENSORS_ABITUGURU3=m
-CONFIG_SENSORS_AD7314=m
-CONFIG_SENSORS_AD7414=m
-CONFIG_SENSORS_AD7418=m
-CONFIG_SENSORS_ADM1025=m
-CONFIG_SENSORS_ADM1026=m
-CONFIG_SENSORS_ADM1029=m
-CONFIG_SENSORS_ADM1031=m
-CONFIG_SENSORS_ADM9240=m
-CONFIG_SENSORS_ADT7310=m
-CONFIG_SENSORS_ADT7410=m
-CONFIG_SENSORS_ADT7411=m
-CONFIG_SENSORS_ADT7462=m
-CONFIG_SENSORS_ADT7470=m
-CONFIG_SENSORS_ADT7475=m
-CONFIG_SENSORS_ASC7621=m
-CONFIG_SENSORS_K8TEMP=m
-CONFIG_SENSORS_K10TEMP=m
-CONFIG_SENSORS_FAM15H_POWER=m
-CONFIG_SENSORS_APPLESMC=m
-CONFIG_SENSORS_ASB100=m
-CONFIG_SENSORS_ATXP1=m
-CONFIG_SENSORS_DS620=m
-CONFIG_SENSORS_DS1621=m
-CONFIG_SENSORS_DA9052_ADC=m
-CONFIG_SENSORS_DA9055=m
-CONFIG_SENSORS_I5K_AMB=m
-CONFIG_SENSORS_F71805F=m
-CONFIG_SENSORS_F71882FG=m
-CONFIG_SENSORS_F75375S=m
-CONFIG_SENSORS_MC13783_ADC=m
-CONFIG_SENSORS_FSCHMD=m
-CONFIG_SENSORS_GL518SM=m
-CONFIG_SENSORS_GL520SM=m
-CONFIG_SENSORS_G760A=m
-CONFIG_SENSORS_G762=m
-CONFIG_SENSORS_HIH6130=m
-CONFIG_SENSORS_IBMAEM=m
-CONFIG_SENSORS_IBMPEX=m
-CONFIG_SENSORS_IIO_HWMON=m
-CONFIG_SENSORS_I5500=m
-CONFIG_SENSORS_CORETEMP=m
-CONFIG_SENSORS_IT87=m
-CONFIG_SENSORS_JC42=m
-CONFIG_SENSORS_POWR1220=m
-CONFIG_SENSORS_LINEAGE=m
-CONFIG_SENSORS_LTC2945=m
-CONFIG_SENSORS_LTC4151=m
-CONFIG_SENSORS_LTC4215=m
-CONFIG_SENSORS_LTC4222=m
-CONFIG_SENSORS_LTC4245=m
-CONFIG_SENSORS_LTC4260=m
-CONFIG_SENSORS_LTC4261=m
-CONFIG_SENSORS_MAX1111=m
-CONFIG_SENSORS_MAX16065=m
-CONFIG_SENSORS_MAX1619=m
-CONFIG_SENSORS_MAX1668=m
-CONFIG_SENSORS_MAX197=m
-CONFIG_SENSORS_MAX6639=m
-CONFIG_SENSORS_MAX6650=m
-CONFIG_SENSORS_MAX6697=m
-CONFIG_SENSORS_MAX31790=m
-CONFIG_SENSORS_MCP3021=m
-CONFIG_SENSORS_MENF21BMC_HWMON=m
-CONFIG_SENSORS_ADCXX=m
-CONFIG_SENSORS_LM63=m
-CONFIG_SENSORS_LM70=m
-CONFIG_SENSORS_LM73=m
-CONFIG_SENSORS_LM75=m
-CONFIG_SENSORS_LM77=m
-CONFIG_SENSORS_LM78=m
-CONFIG_SENSORS_LM80=m
-CONFIG_SENSORS_LM83=m
-CONFIG_SENSORS_LM85=m
-CONFIG_SENSORS_LM87=m
-CONFIG_SENSORS_LM90=m
-CONFIG_SENSORS_LM92=m
-CONFIG_SENSORS_LM93=m
-CONFIG_SENSORS_LM95234=m
-CONFIG_SENSORS_LM95241=m
-CONFIG_SENSORS_LM95245=m
-CONFIG_SENSORS_PC87360=m
-CONFIG_SENSORS_PC87427=m
-CONFIG_SENSORS_NTC_THERMISTOR=m
-CONFIG_SENSORS_NCT6683=m
-CONFIG_SENSORS_NCT6775=m
-CONFIG_SENSORS_NCT7802=m
-CONFIG_SENSORS_NCT7904=m
-CONFIG_SENSORS_PCF8591=m
-CONFIG_PMBUS=m
-CONFIG_SENSORS_ADM1275=m
-CONFIG_SENSORS_LM25066=m
-CONFIG_SENSORS_LTC2978=m
-CONFIG_SENSORS_LTC2978_REGULATOR=y
-CONFIG_SENSORS_MAX16064=m
-CONFIG_SENSORS_MAX20751=m
-CONFIG_SENSORS_MAX34440=m
-CONFIG_SENSORS_MAX8688=m
-CONFIG_SENSORS_TPS40422=m
-CONFIG_SENSORS_UCD9000=m
-CONFIG_SENSORS_UCD9200=m
-CONFIG_SENSORS_ZL6100=m
-CONFIG_SENSORS_SHT15=m
-CONFIG_SENSORS_SHT21=m
-CONFIG_SENSORS_SHTC1=m
-CONFIG_SENSORS_SIS5595=m
-CONFIG_SENSORS_DME1737=m
-CONFIG_SENSORS_EMC1403=m
-CONFIG_SENSORS_EMC2103=m
-CONFIG_SENSORS_EMC6W201=m
-CONFIG_SENSORS_SMSC47M1=m
-CONFIG_SENSORS_SMSC47M192=m
-CONFIG_SENSORS_SMSC47B397=m
-CONFIG_SENSORS_SCH5627=m
-CONFIG_SENSORS_SCH5636=m
-CONFIG_SENSORS_SMM665=m
-CONFIG_SENSORS_ADC128D818=m
-CONFIG_SENSORS_ADS7828=m
-CONFIG_SENSORS_ADS7871=m
-CONFIG_SENSORS_AMC6821=m
-CONFIG_SENSORS_INA209=m
-CONFIG_SENSORS_INA2XX=m
-CONFIG_SENSORS_TC74=m
-CONFIG_SENSORS_THMC50=m
-CONFIG_SENSORS_TMP102=m
-CONFIG_SENSORS_TMP103=m
-CONFIG_SENSORS_TMP401=m
-CONFIG_SENSORS_TMP421=m
-CONFIG_SENSORS_VIA_CPUTEMP=m
-CONFIG_SENSORS_VIA686A=m
-CONFIG_SENSORS_VT1211=m
-CONFIG_SENSORS_VT8231=m
-CONFIG_SENSORS_W83781D=m
-CONFIG_SENSORS_W83791D=m
-CONFIG_SENSORS_W83792D=m
-CONFIG_SENSORS_W83793=m
-CONFIG_SENSORS_W83795=m
-CONFIG_SENSORS_W83L785TS=m
-CONFIG_SENSORS_W83L786NG=m
-CONFIG_SENSORS_W83627HF=m
-CONFIG_SENSORS_W83627EHF=m
-CONFIG_SENSORS_WM831X=m
-CONFIG_SENSORS_WM8350=m
-CONFIG_SENSORS_ACPI_POWER=m
-CONFIG_SENSORS_ATK0110=m
-CONFIG_THERMAL_GOV_FAIR_SHARE=y
-CONFIG_THERMAL_EMULATION=y
-CONFIG_INTEL_POWERCLAMP=m
-CONFIG_INTEL_SOC_DTS_THERMAL=m
-CONFIG_INT340X_THERMAL=m
-CONFIG_INTEL_PCH_THERMAL=m
-CONFIG_INTEL_MENLOW=m
-CONFIG_WATCHDOG=y
-CONFIG_WATCHDOG_CORE=y
-CONFIG_SOFT_WATCHDOG=m
-CONFIG_DA9052_WATCHDOG=m
-CONFIG_DA9055_WATCHDOG=m
-CONFIG_DA9063_WATCHDOG=m
-CONFIG_DA9062_WATCHDOG=m
-CONFIG_MENF21BMC_WATCHDOG=m
-CONFIG_WM831X_WATCHDOG=m
-CONFIG_WM8350_WATCHDOG=m
-CONFIG_XILINX_WATCHDOG=m
-CONFIG_CADENCE_WATCHDOG=m
-CONFIG_DW_WATCHDOG=m
-CONFIG_TWL4030_WATCHDOG=m
-CONFIG_MAX63XX_WATCHDOG=m
-CONFIG_RETU_WATCHDOG=m
-CONFIG_ACQUIRE_WDT=m
-CONFIG_ADVANTECH_WDT=m
-CONFIG_ALIM1535_WDT=m
-CONFIG_ALIM7101_WDT=m
-CONFIG_F71808E_WDT=m
-CONFIG_SP5100_TCO=m
-CONFIG_SBC_FITPC2_WATCHDOG=m
-CONFIG_EUROTECH_WDT=m
-CONFIG_IB700_WDT=m
-CONFIG_IBMASR=m
-CONFIG_WAFER_WDT=m
-CONFIG_I6300ESB_WDT=m
-CONFIG_IE6XX_WDT=m
-CONFIG_ITCO_WDT=m
-CONFIG_ITCO_VENDOR_SUPPORT=y
-CONFIG_IT8712F_WDT=m
-CONFIG_IT87_WDT=m
-CONFIG_HP_WATCHDOG=m
-CONFIG_KEMPLD_WDT=m
-CONFIG_SC1200_WDT=m
-CONFIG_PC87413_WDT=m
-CONFIG_NV_TCO=m
-CONFIG_60XX_WDT=m
-CONFIG_CPU5_WDT=m
-CONFIG_SMSC_SCH311X_WDT=m
-CONFIG_SMSC37B787_WDT=m
-CONFIG_VIA_WDT=m
-CONFIG_W83627HF_WDT=m
-CONFIG_W83877F_WDT=m
-CONFIG_W83977F_WDT=m
-CONFIG_MACHZ_WDT=m
-CONFIG_SBC_EPX_C3_WATCHDOG=m
-CONFIG_MEN_A21_WDT=m
-CONFIG_XEN_WDT=m
-CONFIG_PCIPCWATCHDOG=m
-CONFIG_WDTPCI=m
-CONFIG_USBPCWATCHDOG=m
-CONFIG_SSB_DRIVER_GPIO=y
-CONFIG_MFD_AS3711=y
-CONFIG_PMIC_ADP5520=y
-CONFIG_MFD_AAT2870_CORE=y
-CONFIG_MFD_BCM590XX=m
-CONFIG_PMIC_DA903X=y
-CONFIG_MFD_DA9052_SPI=y
-CONFIG_MFD_DA9052_I2C=y
-CONFIG_MFD_DA9055=y
-CONFIG_MFD_DA9062=m
-CONFIG_MFD_DA9063=y
-CONFIG_MFD_DA9150=m
-CONFIG_MFD_DLN2=m
-CONFIG_MFD_MC13XXX_SPI=m
-CONFIG_MFD_MC13XXX_I2C=m
-CONFIG_HTC_PASIC3=m
-CONFIG_HTC_I2CPLD=y
-CONFIG_MFD_INTEL_QUARK_I2C_GPIO=m
-CONFIG_INTEL_SOC_PMIC=y
-CONFIG_MFD_INTEL_LPSS_ACPI=m
-CONFIG_MFD_INTEL_LPSS_PCI=m
-CONFIG_MFD_JANZ_CMODIO=m
-CONFIG_MFD_KEMPLD=m
-CONFIG_MFD_88PM800=m
-CONFIG_MFD_88PM805=m
-CONFIG_MFD_88PM860X=y
-CONFIG_MFD_MAX14577=y
-CONFIG_MFD_MAX77693=y
-CONFIG_MFD_MAX77843=y
-CONFIG_MFD_MAX8907=m
-CONFIG_MFD_MAX8925=y
-CONFIG_MFD_MAX8997=y
-CONFIG_MFD_MAX8998=y
-CONFIG_MFD_MT6397=m
-CONFIG_MFD_MENF21BMC=m
-CONFIG_EZX_PCAP=y
-CONFIG_MFD_VIPERBOARD=m
-CONFIG_MFD_RETU=m
-CONFIG_MFD_PCF50633=m
-CONFIG_PCF50633_ADC=m
-CONFIG_PCF50633_GPIO=m
-CONFIG_UCB1400_CORE=m
-CONFIG_MFD_RT5033=m
-CONFIG_MFD_RC5T583=y
-CONFIG_MFD_SEC_CORE=y
-CONFIG_MFD_SI476X_CORE=m
-CONFIG_MFD_SM501=m
-CONFIG_MFD_SM501_GPIO=y
-CONFIG_MFD_SKY81452=m
-CONFIG_MFD_TI_AM335X_TSCADC=m
-CONFIG_MFD_LP3943=m
-CONFIG_MFD_LP8788=y
-CONFIG_MFD_PALMAS=y
-CONFIG_TPS6105X=m
-CONFIG_TPS65010=m
-CONFIG_TPS6507X=m
-CONFIG_MFD_TPS65090=y
-CONFIG_MFD_TPS6586X=y
-CONFIG_MFD_TPS65910=y
-CONFIG_MFD_TPS65912_I2C=y
-CONFIG_MFD_TPS65912_SPI=y
-CONFIG_TWL4030_CORE=y
-CONFIG_TWL6040_CORE=y
-CONFIG_MFD_LM3533=m
-CONFIG_MFD_ARIZONA_I2C=m
-CONFIG_MFD_ARIZONA_SPI=m
-CONFIG_MFD_WM5102=y
-CONFIG_MFD_WM5110=y
-CONFIG_MFD_WM8997=y
-CONFIG_MFD_WM8998=y
-CONFIG_MFD_WM8400=y
-CONFIG_MFD_WM831X_I2C=y
-CONFIG_MFD_WM831X_SPI=y
-CONFIG_MFD_WM8350_I2C=y
-CONFIG_MFD_WM8994=m
-CONFIG_REGULATOR_VIRTUAL_CONSUMER=m
-CONFIG_REGULATOR_USERSPACE_CONSUMER=m
-CONFIG_REGULATOR_88PM800=m
-CONFIG_REGULATOR_88PM8607=m
-CONFIG_REGULATOR_ACT8865=m
-CONFIG_REGULATOR_AD5398=m
-CONFIG_REGULATOR_AAT2870=m
-CONFIG_REGULATOR_AS3711=m
-CONFIG_REGULATOR_BCM590XX=m
-CONFIG_REGULATOR_DA903X=m
-CONFIG_REGULATOR_DA9052=m
-CONFIG_REGULATOR_DA9055=m
-CONFIG_REGULATOR_DA9062=m
-CONFIG_REGULATOR_DA9210=m
-CONFIG_REGULATOR_DA9211=m
-CONFIG_REGULATOR_FAN53555=m
-CONFIG_REGULATOR_GPIO=m
-CONFIG_REGULATOR_ISL9305=m
-CONFIG_REGULATOR_ISL6271A=m
-CONFIG_REGULATOR_LP3971=m
-CONFIG_REGULATOR_LP3972=m
-CONFIG_REGULATOR_LP872X=m
-CONFIG_REGULATOR_LP8755=m
-CONFIG_REGULATOR_LP8788=m
-CONFIG_REGULATOR_LTC3589=m
-CONFIG_REGULATOR_MAX14577=m
-CONFIG_REGULATOR_MAX1586=m
-CONFIG_REGULATOR_MAX8649=m
-CONFIG_REGULATOR_MAX8660=m
-CONFIG_REGULATOR_MAX8907=m
-CONFIG_REGULATOR_MAX8925=m
-CONFIG_REGULATOR_MAX8952=m
-CONFIG_REGULATOR_MAX8997=m
-CONFIG_REGULATOR_MAX8998=m
-CONFIG_REGULATOR_MAX77693=m
-CONFIG_REGULATOR_MC13783=m
-CONFIG_REGULATOR_MC13892=m
-CONFIG_REGULATOR_MT6311=m
-CONFIG_REGULATOR_MT6397=m
-CONFIG_REGULATOR_PALMAS=m
-CONFIG_REGULATOR_PCAP=m
-CONFIG_REGULATOR_PCF50633=m
-CONFIG_REGULATOR_PFUZE100=m
-CONFIG_REGULATOR_QCOM_SPMI=m
-CONFIG_REGULATOR_RC5T583=m
-CONFIG_REGULATOR_RT5033=m
-CONFIG_REGULATOR_S2MPA01=m
-CONFIG_REGULATOR_S2MPS11=m
-CONFIG_REGULATOR_S5M8767=m
-CONFIG_REGULATOR_SKY81452=m
-CONFIG_REGULATOR_TPS51632=m
-CONFIG_REGULATOR_TPS62360=m
-CONFIG_REGULATOR_TPS65023=m
-CONFIG_REGULATOR_TPS6507X=m
-CONFIG_REGULATOR_TPS65090=m
-CONFIG_REGULATOR_TPS6524X=m
-CONFIG_REGULATOR_TPS6586X=m
-CONFIG_REGULATOR_TPS65910=m
-CONFIG_REGULATOR_TPS65912=m
-CONFIG_REGULATOR_TWL4030=m
-CONFIG_REGULATOR_WM831X=m
-CONFIG_REGULATOR_WM8350=m
-CONFIG_REGULATOR_WM8400=m
-CONFIG_REGULATOR_WM8994=m
-CONFIG_CEC_CH7322=m
-CONFIG_CEC_GPIO=m
-CONFIG_CEC_SECO=m
-CONFIG_USB_PULSE8_CEC=m
-CONFIG_USB_RAINSHADOW_CEC=m
-CONFIG_MEDIA_SUPPORT=m
-CONFIG_V4L2_FLASH_LED_CLASS=m
-CONFIG_MEDIA_USB_SUPPORT=y
-CONFIG_VIDEO_GO7007=m
-CONFIG_VIDEO_GO7007_USB=m
-CONFIG_VIDEO_GO7007_USB_S2250_BOARD=m
-CONFIG_VIDEO_HDPVR=m
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_STK1160_COMMON=m
-CONFIG_VIDEO_AU0828=m
-CONFIG_DVB_AS102=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-CONFIG_DVB_USB_V2=m
-CONFIG_DVB_USB_AF9035=m
-CONFIG_DVB_USB_ANYSEE=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_AZ6007=m
-CONFIG_DVB_USB_CE6230=m
-CONFIG_DVB_USB_DVBSKY=m
-CONFIG_DVB_USB_EC168=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_MXL111SF=m
-CONFIG_SMS_USB_DRV=m
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_EM28XX_V4L2=m
-CONFIG_VIDEO_EM28XX_ALSA=m
-CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_USB_AIRSPY=m
-CONFIG_USB_HACKRF=m
-CONFIG_USB_MSI2500=m
-CONFIG_MEDIA_PCI_SUPPORT=y
-CONFIG_VIDEO_DT3155=m
-CONFIG_VIDEO_COBALT=m
-CONFIG_VIDEO_CX25821=m
-CONFIG_VIDEO_CX25821_ALSA=m
-CONFIG_VIDEO_SAA7134=m
-CONFIG_VIDEO_SAA7134_ALSA=m
-CONFIG_VIDEO_SAA7134_DVB=m
-CONFIG_VIDEO_SAA7134_GO7007=m
-CONFIG_VIDEO_SAA7164=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-CONFIG_DVB_DDBRIDGE=m
-CONFIG_DVB_NETUP_UNIDVB=m
-CONFIG_DVB_NGENE=m
-CONFIG_DVB_PLUTO2=m
-CONFIG_DVB_PT1=m
-CONFIG_DVB_PT3=m
-CONFIG_RADIO_MAXIRADIO=m
-CONFIG_RADIO_SAA7706H=m
-CONFIG_RADIO_SHARK=m
-CONFIG_RADIO_SHARK2=m
-CONFIG_RADIO_SI4713=m
-CONFIG_RADIO_SI476X=m
-CONFIG_RADIO_TEA5764=m
-CONFIG_RADIO_TEF6862=m
-CONFIG_RADIO_WL1273=m
-CONFIG_USB_DSBR=m
-CONFIG_USB_KEENE=m
-CONFIG_USB_MA901=m
-CONFIG_USB_MR800=m
-CONFIG_USB_RAREMONO=m
-CONFIG_RADIO_SI470X=m
-CONFIG_USB_SI470X=m
-CONFIG_I2C_SI470X=m
-CONFIG_USB_SI4713=m
-CONFIG_PLATFORM_SI4713=m
-CONFIG_RADIO_WL128X=m
-CONFIG_DVB_PLATFORM_DRIVERS=y
-CONFIG_SMS_SDIO_DRV=m
-CONFIG_DVB_FIREDTV=m
-CONFIG_SMS_SIANO_DEBUGFS=y
-CONFIG_VIDEO_MT9M111=m
-CONFIG_VIDEO_BT819=m
-CONFIG_VIDEO_BT856=m
-CONFIG_VIDEO_BT866=m
-CONFIG_VIDEO_KS0127=m
-CONFIG_VIDEO_SAA7110=m
-CONFIG_VIDEO_VPX3220=m
-CONFIG_VIDEO_ADV7170=m
-CONFIG_VIDEO_ADV7175=m
-CONFIG_VIDEO_SAA7185=m
-CONFIG_AGP=y
-CONFIG_AGP_AMD64=m
-CONFIG_AGP_INTEL=m
-CONFIG_AGP_SIS=m
-CONFIG_AGP_VIA=m
-CONFIG_DRM=y
-CONFIG_DRM_LOAD_EDID_FIRMWARE=y
-CONFIG_DRM_DP_CEC=y
-CONFIG_DRM_I2C_NXP_TDA998X=m
-CONFIG_DRM_I2C_NXP_TDA9950=m
-CONFIG_DRM_RADEON=m
-CONFIG_DRM_AMDGPU=m
-CONFIG_DRM_AMDGPU_SI=y
-CONFIG_DRM_AMDGPU_CIK=y
-CONFIG_DRM_AMD_ACP=y
-CONFIG_DRM_AMD_DC_HDCP=y
-CONFIG_HSA_AMD=y
-CONFIG_DRM_NOUVEAU=m
-CONFIG_DRM_I915=m
-CONFIG_DRM_VGEM=m
-CONFIG_DRM_VMWGFX=m
-CONFIG_DRM_GMA500=m
-CONFIG_DRM_UDL=m
-CONFIG_DRM_AST=m
-CONFIG_DRM_QXL=m
-CONFIG_DRM_CIRRUS_QEMU=m
-CONFIG_FB=m
-CONFIG_FIRMWARE_EDID=y
-CONFIG_FB_CIRRUS=m
-CONFIG_FB_PM2=m
-CONFIG_FB_PM2_FIFO_DISCONNECT=y
-CONFIG_FB_CYBER2000=m
-CONFIG_FB_ARC=m
-CONFIG_FB_VGA16=m
-CONFIG_FB_UVESA=m
-CONFIG_FB_N411=m
-CONFIG_FB_HGA=m
-CONFIG_FB_OPENCORES=m
-CONFIG_FB_S1D13XXX=m
-CONFIG_FB_NVIDIA=m
-CONFIG_FB_NVIDIA_I2C=y
-CONFIG_FB_RIVA=m
-CONFIG_FB_RIVA_I2C=y
-CONFIG_FB_I740=m
-CONFIG_FB_LE80578=m
-CONFIG_FB_CARILLO_RANCH=m
-CONFIG_FB_INTEL=m
-CONFIG_FB_MATROX=m
-CONFIG_FB_MATROX_MILLENIUM=y
-CONFIG_FB_MATROX_MYSTIQUE=y
-CONFIG_FB_MATROX_G=y
-CONFIG_FB_MATROX_I2C=m
-CONFIG_FB_MATROX_MAVEN=m
-CONFIG_FB_RADEON=m
-CONFIG_FB_ATY128=m
-CONFIG_FB_ATY=m
-CONFIG_FB_ATY_CT=y
-CONFIG_FB_ATY_GENERIC_LCD=y
-CONFIG_FB_ATY_GX=y
-CONFIG_FB_S3=m
-CONFIG_FB_SAVAGE=m
-CONFIG_FB_SAVAGE_I2C=y
-CONFIG_FB_SAVAGE_ACCEL=y
-CONFIG_FB_SIS=m
-CONFIG_FB_SIS_300=y
-CONFIG_FB_SIS_315=y
-CONFIG_FB_VIA=m
-CONFIG_FB_VIA_DIRECT_PROCFS=y
-CONFIG_FB_VIA_X_COMPATIBILITY=y
-CONFIG_FB_NEOMAGIC=m
-CONFIG_FB_KYRO=m
-CONFIG_FB_3DFX=m
-CONFIG_FB_3DFX_ACCEL=y
-CONFIG_FB_VOODOO1=m
-CONFIG_FB_VT8623=m
-CONFIG_FB_TRIDENT=m
-CONFIG_FB_ARK=m
-CONFIG_FB_PM3=m
-CONFIG_FB_CARMINE=m
-CONFIG_FB_SM501=m
-CONFIG_FB_SMSCUFX=m
-CONFIG_FB_UDL=m
-CONFIG_FB_IBM_GXT4500=m
-CONFIG_FB_METRONOME=m
-CONFIG_FB_MB862XX=m
-CONFIG_FB_SIMPLE=m
-CONFIG_FB_SSD1307=m
-CONFIG_FB_SM712=m
-CONFIG_LCD_CLASS_DEVICE=m
-CONFIG_LCD_L4F00242T03=m
-CONFIG_LCD_LMS283GF05=m
-CONFIG_LCD_LTV350QV=m
-CONFIG_LCD_ILI922X=m
-CONFIG_LCD_TDO24M=m
-CONFIG_LCD_VGG2432A4=m
-CONFIG_LCD_PLATFORM=m
-CONFIG_LCD_AMS369FG06=m
-CONFIG_LCD_LMS501KF03=m
-CONFIG_LCD_HX8357=m
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-CONFIG_BACKLIGHT_KTD253=m
-CONFIG_BACKLIGHT_LM3533=m
-CONFIG_BACKLIGHT_DA903X=m
-CONFIG_BACKLIGHT_DA9052=m
-CONFIG_BACKLIGHT_MAX8925=m
-CONFIG_BACKLIGHT_APPLE=m
-CONFIG_BACKLIGHT_SAHARA=m
-CONFIG_BACKLIGHT_WM831X=m
-CONFIG_BACKLIGHT_ADP5520=m
-CONFIG_BACKLIGHT_ADP8860=m
-CONFIG_BACKLIGHT_ADP8870=m
-CONFIG_BACKLIGHT_88PM860X=m
-CONFIG_BACKLIGHT_PCF50633=m
-CONFIG_BACKLIGHT_AAT2870=m
-CONFIG_BACKLIGHT_LM3639=m
-CONFIG_BACKLIGHT_PANDORA=m
-CONFIG_BACKLIGHT_SKY81452=m
-CONFIG_BACKLIGHT_AS3711=m
-CONFIG_BACKLIGHT_GPIO=m
-CONFIG_BACKLIGHT_LV5207LP=m
-CONFIG_BACKLIGHT_BD6107=m
-CONFIG_BACKLIGHT_LED=m
-CONFIG_FRAMEBUFFER_CONSOLE=y
-CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-CONFIG_SOUND=m
-CONFIG_SND=m
-CONFIG_SND_HRTIMER=m
-CONFIG_SND_SEQUENCER=m
-CONFIG_SND_SEQ_DUMMY=m
-CONFIG_SND_PCSP=m
-CONFIG_SND_DUMMY=m
-CONFIG_SND_ALOOP=m
-CONFIG_SND_VIRMIDI=m
-CONFIG_SND_MTPAV=m
-CONFIG_SND_MTS64=m
-CONFIG_SND_SERIAL_U16550=m
-CONFIG_SND_MPU401=m
-CONFIG_SND_PORTMAN2X4=m
-CONFIG_SND_AC97_POWER_SAVE=y
-CONFIG_SND_AD1889=m
-CONFIG_SND_ALS300=m
-CONFIG_SND_ALS4000=m
-CONFIG_SND_ALI5451=m
-CONFIG_SND_ASIHPI=m
-CONFIG_SND_ATIIXP=m
-CONFIG_SND_ATIIXP_MODEM=m
-CONFIG_SND_AU8810=m
-CONFIG_SND_AU8820=m
-CONFIG_SND_AU8830=m
-CONFIG_SND_AW2=m
-CONFIG_SND_AZT3328=m
-CONFIG_SND_BT87X=m
-CONFIG_SND_CA0106=m
-CONFIG_SND_CMIPCI=m
-CONFIG_SND_OXYGEN=m
-CONFIG_SND_CS4281=m
-CONFIG_SND_CS46XX=m
-CONFIG_SND_CTXFI=m
-CONFIG_SND_DARLA20=m
-CONFIG_SND_GINA20=m
-CONFIG_SND_LAYLA20=m
-CONFIG_SND_DARLA24=m
-CONFIG_SND_GINA24=m
-CONFIG_SND_LAYLA24=m
-CONFIG_SND_MONA=m
-CONFIG_SND_MIA=m
-CONFIG_SND_ECHO3G=m
-CONFIG_SND_INDIGO=m
-CONFIG_SND_INDIGOIO=m
-CONFIG_SND_INDIGODJ=m
-CONFIG_SND_INDIGOIOX=m
-CONFIG_SND_INDIGODJX=m
-CONFIG_SND_EMU10K1=m
-CONFIG_SND_EMU10K1X=m
-CONFIG_SND_ENS1370=m
-CONFIG_SND_ENS1371=m
-CONFIG_SND_ES1938=m
-CONFIG_SND_ES1968=m
-CONFIG_SND_ES1968_INPUT=y
-CONFIG_SND_ES1968_RADIO=y
-CONFIG_SND_FM801=m
-CONFIG_SND_FM801_TEA575X_BOOL=y
-CONFIG_SND_HDSP=m
-CONFIG_SND_HDSPM=m
-CONFIG_SND_ICE1712=m
-CONFIG_SND_ICE1724=m
-CONFIG_SND_INTEL8X0=m
-CONFIG_SND_INTEL8X0M=m
-CONFIG_SND_KORG1212=m
-CONFIG_SND_LOLA=m
-CONFIG_SND_LX6464ES=m
-CONFIG_SND_MAESTRO3=m
-CONFIG_SND_MAESTRO3_INPUT=y
-CONFIG_SND_MIXART=m
-CONFIG_SND_NM256=m
-CONFIG_SND_PCXHR=m
-CONFIG_SND_RIPTIDE=m
-CONFIG_SND_RME32=m
-CONFIG_SND_RME96=m
-CONFIG_SND_RME9652=m
-CONFIG_SND_SONICVIBES=m
-CONFIG_SND_TRIDENT=m
-CONFIG_SND_VIA82XX=m
-CONFIG_SND_VIA82XX_MODEM=m
-CONFIG_SND_VIRTUOSO=m
-CONFIG_SND_VX222=m
-CONFIG_SND_YMFPCI=m
-CONFIG_SND_HDA_INTEL=m
-CONFIG_SND_HDA_HWDEP=y
-CONFIG_SND_HDA_INPUT_BEEP=y
-CONFIG_SND_HDA_INPUT_BEEP_MODE=0
-CONFIG_SND_HDA_PATCH_LOADER=y
-CONFIG_SND_HDA_CODEC_REALTEK=m
-CONFIG_SND_HDA_CODEC_ANALOG=m
-CONFIG_SND_HDA_CODEC_SIGMATEL=m
-CONFIG_SND_HDA_CODEC_VIA=m
-CONFIG_SND_HDA_CODEC_HDMI=m
-CONFIG_SND_HDA_CODEC_CIRRUS=m
-CONFIG_SND_HDA_CODEC_CS8409=m
-CONFIG_SND_HDA_CODEC_CONEXANT=m
-CONFIG_SND_HDA_CODEC_CA0110=m
-CONFIG_SND_HDA_CODEC_CA0132=m
-CONFIG_SND_HDA_CODEC_CMEDIA=m
-CONFIG_SND_HDA_CODEC_SI3054=m
-CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y
-CONFIG_SND_USB_AUDIO=m
-CONFIG_SND_USB_UA101=m
-CONFIG_SND_USB_USX2Y=m
-CONFIG_SND_USB_CAIAQ=m
-CONFIG_SND_USB_CAIAQ_INPUT=y
-CONFIG_SND_USB_US122L=m
-CONFIG_SND_USB_6FIRE=m
-CONFIG_SND_USB_HIFACE=m
-CONFIG_SND_BCD2000=m
-CONFIG_SND_USB_POD=m
-CONFIG_SND_USB_PODHD=m
-CONFIG_SND_USB_TONEPORT=m
-CONFIG_SND_USB_VARIAX=m
-CONFIG_SND_DICE=m
-CONFIG_SND_OXFW=m
-CONFIG_SND_ISIGHT=m
-CONFIG_SND_FIREWORKS=m
-CONFIG_SND_BEBOB=m
-CONFIG_SND_FIREWIRE_DIGI00X=m
-CONFIG_SND_FIREWIRE_TASCAM=m
-CONFIG_SND_FIREWIRE_MOTU=m
-CONFIG_SND_FIREFACE=m
-CONFIG_SND_VXPOCKET=m
-CONFIG_SND_PDAUDIOCF=m
-CONFIG_SND_SOC=m
-CONFIG_SND_SOC_AMD_ACP=m
-CONFIG_SND_SOC_AMD_CZ_DA7219MX98357_MACH=m
-CONFIG_SND_SOC_AMD_CZ_RT5645_MACH=m
-CONFIG_SND_SOC_AMD_ST_ES8336_MACH=m
-CONFIG_SND_SOC_AMD_ACP3x=m
-CONFIG_SND_SOC_AMD_RV_RT5682_MACH=m
-CONFIG_SND_SOC_AMD_RENOIR=m
-CONFIG_SND_SOC_AMD_RENOIR_MACH=m
-CONFIG_SND_SOC_AMD_ACP5x=m
-CONFIG_SND_SOC_AMD_VANGOGH_MACH=m
-CONFIG_SND_SOC_AMD_ACP6x=m
-CONFIG_SND_SOC_AMD_YC_MACH=m
-CONFIG_SND_SOC_AMD_ACP_COMMON=m
-CONFIG_SND_SOC_AMD_ACP_PCI=m
-CONFIG_SND_AMD_ASOC_RENOIR=m
-CONFIG_SND_AMD_ASOC_REMBRANDT=m
-CONFIG_SND_SOC_AMD_LEGACY_MACH=m
-CONFIG_SND_SOC_AMD_SOF_MACH=m
-CONFIG_SND_SOC_AMD_RPL_ACP6x=m
-CONFIG_SND_SOC_AMD_PS=m
-CONFIG_SND_SOC_AMD_PS_MACH=m
-CONFIG_SND_ATMEL_SOC=m
-CONFIG_SND_SOC_MIKROE_PROTO=m
-CONFIG_SND_BCM63XX_I2S_WHISTLER=m
-CONFIG_SND_DESIGNWARE_I2S=m
-CONFIG_SND_DESIGNWARE_PCM=y
-CONFIG_SND_SOC_FSL_ASRC=m
-CONFIG_SND_SOC_FSL_SAI=m
-CONFIG_SND_SOC_FSL_SSI=m
-CONFIG_SND_SOC_FSL_SPDIF=m
-CONFIG_SND_SOC_FSL_ESAI=m
-CONFIG_SND_SOC_IMX_AUDMUX=m
-CONFIG_SND_I2S_HI6210_I2S=m
-CONFIG_SND_SOC_IMG=y
-CONFIG_SND_SOC_IMG_I2S_IN=m
-CONFIG_SND_SOC_IMG_I2S_OUT=m
-CONFIG_SND_SOC_IMG_PARALLEL_OUT=m
-CONFIG_SND_SOC_IMG_SPDIF_IN=m
-CONFIG_SND_SOC_IMG_SPDIF_OUT=m
-CONFIG_SND_SOC_IMG_PISTACHIO_INTERNAL_DAC=m
-CONFIG_SND_SST_ATOM_HIFI2_PLATFORM_PCI=m
-CONFIG_SND_SOC_INTEL_SKYLAKE=m
-CONFIG_SND_SOC_INTEL_CML_H=m
-CONFIG_SND_SOC_INTEL_CML_LP=m
-CONFIG_SND_SOC_INTEL_SKYLAKE_HDAUDIO_CODEC=y
-CONFIG_SND_SOC_INTEL_USER_FRIENDLY_LONG_NAMES=y
-CONFIG_SND_SOC_INTEL_BYTCR_RT5640_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_RT5651_MACH=m
-CONFIG_SND_SOC_INTEL_BYTCR_WM5102_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5672_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_RT5645_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_MAX98090_TI_MACH=m
-CONFIG_SND_SOC_INTEL_CHT_BSW_NAU8824_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_CX2072X_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_DA7213_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_ES8316_MACH=m
-CONFIG_SND_SOC_INTEL_BYT_CHT_NOCODEC_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_RT286_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_SSM4567_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_NAU88L25_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_DA7219_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_BXT_RT298_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5663_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5663_RT5514_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98357A_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_DA7219_MAX98927_MACH=m
-CONFIG_SND_SOC_INTEL_KBL_RT5660_MACH=m
-CONFIG_SND_SOC_INTEL_SKL_HDA_DSP_GENERIC_MACH=m
-CONFIG_SND_SOC_MTK_BTCVSD=m
-CONFIG_SND_SOC_XILINX_I2S=m
-CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
-CONFIG_SND_SOC_XILINX_SPDIF=m
-CONFIG_SND_SOC_XTFPGA_I2S=m
-CONFIG_SND_SOC_AC97_CODEC=m
-CONFIG_SND_SOC_ADAU1701=m
-CONFIG_SND_SOC_ADAU1761_I2C=m
-CONFIG_SND_SOC_ADAU1761_SPI=m
-CONFIG_SND_SOC_ADAU7118_HW=m
-CONFIG_SND_SOC_ADAU7118_I2C=m
-CONFIG_SND_SOC_AK4104=m
-CONFIG_SND_SOC_AK4118=m
-CONFIG_SND_SOC_AK4375=m
-CONFIG_SND_SOC_AK4458=m
-CONFIG_SND_SOC_AK4554=m
-CONFIG_SND_SOC_AK4613=m
-CONFIG_SND_SOC_AK4642=m
-CONFIG_SND_SOC_AK5386=m
-CONFIG_SND_SOC_AK5558=m
-CONFIG_SND_SOC_ALC5623=m
-CONFIG_SND_SOC_BD28623=m
-CONFIG_SND_SOC_BT_SCO=m
-CONFIG_SND_SOC_CS35L32=m
-CONFIG_SND_SOC_CS35L33=m
-CONFIG_SND_SOC_CS35L34=m
-CONFIG_SND_SOC_CS35L35=m
-CONFIG_SND_SOC_CS35L36=m
-CONFIG_SND_SOC_CS42L42=m
-CONFIG_SND_SOC_CS42L51_I2C=m
-CONFIG_SND_SOC_CS42L52=m
-CONFIG_SND_SOC_CS42L56=m
-CONFIG_SND_SOC_CS42L73=m
-CONFIG_SND_SOC_CS4234=m
-CONFIG_SND_SOC_CS4265=m
-CONFIG_SND_SOC_CS4270=m
-CONFIG_SND_SOC_CS4271_I2C=m
-CONFIG_SND_SOC_CS4271_SPI=m
-CONFIG_SND_SOC_CS42XX8_I2C=m
-CONFIG_SND_SOC_CS43130=m
-CONFIG_SND_SOC_CS4341=m
-CONFIG_SND_SOC_CS4349=m
-CONFIG_SND_SOC_CS53L30=m
-CONFIG_SND_SOC_ES7134=m
-CONFIG_SND_SOC_ES7241=m
-CONFIG_SND_SOC_ES8328_I2C=m
-CONFIG_SND_SOC_ES8328_SPI=m
-CONFIG_SND_SOC_GTM601=m
-CONFIG_SND_SOC_INNO_RK3036=m
-CONFIG_SND_SOC_MAX98088=m
-CONFIG_SND_SOC_MAX98504=m
-CONFIG_SND_SOC_MAX9867=m
-CONFIG_SND_SOC_MAX9860=m
-CONFIG_SND_SOC_MSM8916_WCD_ANALOG=m
-CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=m
-CONFIG_SND_SOC_PCM1681=m
-CONFIG_SND_SOC_PCM1789_I2C=m
-CONFIG_SND_SOC_PCM179X_I2C=m
-CONFIG_SND_SOC_PCM179X_SPI=m
-CONFIG_SND_SOC_PCM186X_I2C=m
-CONFIG_SND_SOC_PCM186X_SPI=m
-CONFIG_SND_SOC_PCM3060_I2C=m
-CONFIG_SND_SOC_PCM3060_SPI=m
-CONFIG_SND_SOC_PCM3168A_I2C=m
-CONFIG_SND_SOC_PCM3168A_SPI=m
-CONFIG_SND_SOC_PCM5102A=m
-CONFIG_SND_SOC_PCM512x_SPI=m
-CONFIG_SND_SOC_RK3328=m
-CONFIG_SND_SOC_RT5616=m
-CONFIG_SND_SOC_RT5631=m
-CONFIG_SND_SOC_RT5659=m
-CONFIG_SND_SOC_SGTL5000=m
-CONFIG_SND_SOC_SIMPLE_AMPLIFIER=m
-CONFIG_SND_SOC_SIMPLE_MUX=m
-CONFIG_SND_SOC_SPDIF=m
-CONFIG_SND_SOC_SSM2305=m
-CONFIG_SND_SOC_SSM2602_SPI=m
-CONFIG_SND_SOC_SSM2602_I2C=m
-CONFIG_SND_SOC_STA32X=m
-CONFIG_SND_SOC_STA350=m
-CONFIG_SND_SOC_STI_SAS=m
-CONFIG_SND_SOC_TAS2552=m
-CONFIG_SND_SOC_TAS2562=m
-CONFIG_SND_SOC_TAS2764=m
-CONFIG_SND_SOC_TAS2770=m
-CONFIG_SND_SOC_TAS5086=m
-CONFIG_SND_SOC_TAS571X=m
-CONFIG_SND_SOC_TAS5720=m
-CONFIG_SND_SOC_TAS6424=m
-CONFIG_SND_SOC_TDA7419=m
-CONFIG_SND_SOC_TFA9879=m
-CONFIG_SND_SOC_TLV320AIC23_I2C=m
-CONFIG_SND_SOC_TLV320AIC23_SPI=m
-CONFIG_SND_SOC_TLV320AIC31XX=m
-CONFIG_SND_SOC_TLV320AIC32X4_I2C=m
-CONFIG_SND_SOC_TLV320AIC32X4_SPI=m
-CONFIG_SND_SOC_TLV320ADCX140=m
-CONFIG_SND_SOC_TSCS42XX=m
-CONFIG_SND_SOC_TSCS454=m
-CONFIG_SND_SOC_UDA1334=m
-CONFIG_SND_SOC_WM8510=m
-CONFIG_SND_SOC_WM8523=m
-CONFIG_SND_SOC_WM8524=m
-CONFIG_SND_SOC_WM8580=m
-CONFIG_SND_SOC_WM8711=m
-CONFIG_SND_SOC_WM8728=m
-CONFIG_SND_SOC_WM8737=m
-CONFIG_SND_SOC_WM8741=m
-CONFIG_SND_SOC_WM8750=m
-CONFIG_SND_SOC_WM8753=m
-CONFIG_SND_SOC_WM8770=m
-CONFIG_SND_SOC_WM8776=m
-CONFIG_SND_SOC_WM8782=m
-CONFIG_SND_SOC_WM8804_SPI=m
-CONFIG_SND_SOC_WM8903=m
-CONFIG_SND_SOC_WM8904=m
-CONFIG_SND_SOC_WM8960=m
-CONFIG_SND_SOC_WM8962=m
-CONFIG_SND_SOC_WM8974=m
-CONFIG_SND_SOC_WM8978=m
-CONFIG_SND_SOC_WM8985=m
-CONFIG_SND_SOC_ZL38060=m
-CONFIG_SND_SOC_MAX9759=m
-CONFIG_SND_SOC_MT6351=m
-CONFIG_SND_SOC_MT6358=m
-CONFIG_SND_SOC_MT6660=m
-CONFIG_SND_SOC_NAU8315=m
-CONFIG_SND_SOC_NAU8540=m
-CONFIG_SND_SOC_NAU8810=m
-CONFIG_SND_SOC_NAU8822=m
-CONFIG_SND_SOC_TPA6130A2=m
-CONFIG_SND_SIMPLE_CARD=m
-CONFIG_SND_AUDIO_GRAPH_CARD=m
-CONFIG_SND_AUDIO_GRAPH_CARD2=m
-CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=m
-CONFIG_HDMI_LPE_AUDIO=m
-CONFIG_HID=m
-CONFIG_HID_BATTERY_STRENGTH=y
-CONFIG_HIDRAW=y
-CONFIG_UHID=m
-CONFIG_HID_A4TECH=m
-CONFIG_HID_ACRUX=m
-CONFIG_HID_ACRUX_FF=y
-CONFIG_HID_APPLE=m
-CONFIG_HID_APPLEIR=m
-CONFIG_HID_ASUS=m
-CONFIG_HID_AUREAL=m
-CONFIG_HID_BELKIN=m
-CONFIG_HID_BETOP_FF=m
-CONFIG_HID_BIGBEN_FF=m
-CONFIG_HID_CHERRY=m
-CONFIG_HID_CHICONY=m
-CONFIG_HID_CORSAIR=m
-CONFIG_HID_PRODIKEYS=m
-CONFIG_HID_CP2112=m
-CONFIG_HID_CYPRESS=m
-CONFIG_HID_DRAGONRISE=m
-CONFIG_DRAGONRISE_FF=y
-CONFIG_HID_EMS_FF=m
-CONFIG_HID_ELECOM=m
-CONFIG_HID_ELO=m
-CONFIG_HID_EZKEY=m
-CONFIG_HID_GEMBIRD=m
-CONFIG_HID_GFRM=m
-CONFIG_HID_HOLTEK=m
-CONFIG_HOLTEK_FF=y
-CONFIG_HID_GT683R=m
-CONFIG_HID_KEYTOUCH=m
-CONFIG_HID_KYE=m
-CONFIG_HID_UCLOGIC=m
-CONFIG_HID_WALTOP=m
-CONFIG_HID_GYRATION=m
-CONFIG_HID_ICADE=m
-CONFIG_HID_JABRA=m
-CONFIG_HID_TWINHAN=m
-CONFIG_HID_KENSINGTON=m
-CONFIG_HID_LCPOWER=m
-CONFIG_HID_LENOVO=m
-CONFIG_HID_LOGITECH=m
-CONFIG_HID_LOGITECH_DJ=m
-CONFIG_LOGITECH_FF=y
-CONFIG_LOGIRUMBLEPAD2_FF=y
-CONFIG_LOGIG940_FF=y
-CONFIG_HID_MAGICMOUSE=m
-CONFIG_HID_MAYFLASH=m
-CONFIG_HID_MICROSOFT=m
-CONFIG_HID_MONTEREY=m
-CONFIG_HID_MULTITOUCH=m
-CONFIG_HID_NINTENDO=m
-CONFIG_HID_NTRIG=m
-CONFIG_HID_ORTEK=m
-CONFIG_HID_PANTHERLORD=m
-CONFIG_PANTHERLORD_FF=y
-CONFIG_HID_PENMOUNT=m
-CONFIG_HID_PETALYNX=m
-CONFIG_HID_PICOLCD=m
-CONFIG_HID_PICOLCD_BACKLIGHT=y
-CONFIG_HID_PICOLCD_LCD=y
-CONFIG_HID_PICOLCD_LEDS=y
-CONFIG_HID_PLANTRONICS=m
-CONFIG_HID_PRIMAX=m
-CONFIG_HID_RETRODE=m
-CONFIG_HID_ROCCAT=m
-CONFIG_HID_SAITEK=m
-CONFIG_HID_SAMSUNG=m
-CONFIG_HID_SONY=m
-CONFIG_SONY_FF=y
-CONFIG_HID_SPEEDLINK=m
-CONFIG_HID_STEAM=m
-CONFIG_HID_STEELSERIES=m
-CONFIG_HID_SUNPLUS=m
-CONFIG_HID_RMI=m
-CONFIG_HID_GREENASIA=m
-CONFIG_GREENASIA_FF=y
-CONFIG_HID_SMARTJOYPLUS=m
-CONFIG_SMARTJOYPLUS_FF=y
-CONFIG_HID_TIVO=m
-CONFIG_HID_TOPSEED=m
-CONFIG_HID_THINGM=m
-CONFIG_HID_THRUSTMASTER=m
-CONFIG_THRUSTMASTER_FF=y
-CONFIG_HID_WACOM=m
-CONFIG_HID_WIIMOTE=m
-CONFIG_HID_XINMO=m
-CONFIG_HID_ZEROPLUS=m
-CONFIG_ZEROPLUS_FF=y
-CONFIG_HID_ZYDACRON=m
-CONFIG_HID_SENSOR_HUB=m
-CONFIG_HID_SENSOR_CUSTOM_SENSOR=m
-CONFIG_HID_ALPS=m
-CONFIG_USB_HID=m
-CONFIG_HID_PID=y
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_KBD=m
-CONFIG_USB_MOUSE=m
-CONFIG_INTEL_ISH_HID=m
-CONFIG_INTEL_ISH_FIRMWARE_DOWNLOADER=m
-CONFIG_USB_LED_TRIG=y
-CONFIG_USB=y
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-CONFIG_USB_DYNAMIC_MINORS=y
-CONFIG_USB_MON=m
-CONFIG_USB_C67X00_HCD=m
-CONFIG_USB_XHCI_HCD=y
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_FSL=m
-CONFIG_USB_EHCI_HCD_PLATFORM=y
-CONFIG_USB_OXU210HP_HCD=m
-CONFIG_USB_ISP116X_HCD=m
-CONFIG_USB_FOTG210_HCD=m
-CONFIG_USB_MAX3421_HCD=m
-CONFIG_USB_OHCI_HCD=y
-CONFIG_USB_OHCI_HCD_PLATFORM=y
-CONFIG_USB_UHCI_HCD=y
-CONFIG_USB_U132_HCD=m
-CONFIG_USB_SL811_HCD=m
-CONFIG_USB_SL811_HCD_ISO=y
-CONFIG_USB_SL811_CS=m
-CONFIG_USB_R8A66597_HCD=m
-CONFIG_USB_HCD_SSB=m
-CONFIG_USB_ACM=y
-CONFIG_USB_PRINTER=m
-CONFIG_USB_TMC=m
-CONFIG_USB_STORAGE=y
-CONFIG_USB_STORAGE_REALTEK=y
-CONFIG_USB_STORAGE_DATAFAB=y
-CONFIG_USB_STORAGE_FREECOM=y
-CONFIG_USB_STORAGE_ISD200=y
-CONFIG_USB_STORAGE_USBAT=y
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_STORAGE_ONETOUCH=y
-CONFIG_USB_STORAGE_KARMA=y
-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
-CONFIG_USB_STORAGE_ENE_UB6250=y
-CONFIG_USB_UAS=y
-CONFIG_USB_MDC800=m
-CONFIG_USB_MICROTEK=m
-CONFIG_USBIP_CORE=m
-CONFIG_USBIP_VHCI_HCD=m
-CONFIG_USBIP_HOST=m
-CONFIG_USB_MUSB_HDRC=m
-CONFIG_MUSB_PIO_ONLY=y
-CONFIG_USB_DWC3=m
-CONFIG_USB_DWC3_ULPI=y
-CONFIG_USB_DWC2=y
-CONFIG_USB_DWC2_PCI=m
-CONFIG_USB_CHIPIDEA=m
-CONFIG_USB_CHIPIDEA_UDC=y
-CONFIG_USB_CHIPIDEA_HOST=y
-CONFIG_USB_ISP1760=m
-CONFIG_USB_USS720=m
-CONFIG_USB_SERIAL=m
-CONFIG_USB_SERIAL_GENERIC=y
-CONFIG_USB_SERIAL_SIMPLE=m
-CONFIG_USB_SERIAL_AIRCABLE=m
-CONFIG_USB_SERIAL_ARK3116=m
-CONFIG_USB_SERIAL_BELKIN=m
-CONFIG_USB_SERIAL_CH341=m
-CONFIG_USB_SERIAL_WHITEHEAT=m
-CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
-CONFIG_USB_SERIAL_CP210X=m
-CONFIG_USB_SERIAL_CYPRESS_M8=m
-CONFIG_USB_SERIAL_EMPEG=m
-CONFIG_USB_SERIAL_FTDI_SIO=m
-CONFIG_USB_SERIAL_VISOR=m
-CONFIG_USB_SERIAL_IPAQ=m
-CONFIG_USB_SERIAL_IR=m
-CONFIG_USB_SERIAL_EDGEPORT=m
-CONFIG_USB_SERIAL_EDGEPORT_TI=m
-CONFIG_USB_SERIAL_F81232=m
-CONFIG_USB_SERIAL_GARMIN=m
-CONFIG_USB_SERIAL_IPW=m
-CONFIG_USB_SERIAL_IUU=m
-CONFIG_USB_SERIAL_KEYSPAN_PDA=m
-CONFIG_USB_SERIAL_KEYSPAN=m
-CONFIG_USB_SERIAL_KLSI=m
-CONFIG_USB_SERIAL_KOBIL_SCT=m
-CONFIG_USB_SERIAL_MCT_U232=m
-CONFIG_USB_SERIAL_METRO=m
-CONFIG_USB_SERIAL_MOS7720=m
-CONFIG_USB_SERIAL_MOS7715_PARPORT=y
-CONFIG_USB_SERIAL_MOS7840=m
-CONFIG_USB_SERIAL_MXUPORT=m
-CONFIG_USB_SERIAL_NAVMAN=m
-CONFIG_USB_SERIAL_PL2303=m
-CONFIG_USB_SERIAL_OTI6858=m
-CONFIG_USB_SERIAL_QCAUX=m
-CONFIG_USB_SERIAL_QUALCOMM=m
-CONFIG_USB_SERIAL_SPCP8X5=m
-CONFIG_USB_SERIAL_SAFE=m
-CONFIG_USB_SERIAL_SIERRAWIRELESS=m
-CONFIG_USB_SERIAL_SYMBOL=m
-CONFIG_USB_SERIAL_TI=m
-CONFIG_USB_SERIAL_CYBERJACK=m
-CONFIG_USB_SERIAL_OPTION=m
-CONFIG_USB_SERIAL_OMNINET=m
-CONFIG_USB_SERIAL_OPTICON=m
-CONFIG_USB_SERIAL_XSENS_MT=m
-CONFIG_USB_SERIAL_WISHBONE=m
-CONFIG_USB_SERIAL_SSU100=m
-CONFIG_USB_SERIAL_QT2=m
-CONFIG_USB_SERIAL_DEBUG=m
-CONFIG_USB_EMI62=m
-CONFIG_USB_EMI26=m
-CONFIG_USB_ADUTUX=m
-CONFIG_USB_SEVSEG=m
-CONFIG_USB_LEGOTOWER=m
-CONFIG_USB_LCD=m
-CONFIG_USB_CYPRESS_CY7C63=m
-CONFIG_USB_CYTHERM=m
-CONFIG_USB_IDMOUSE=m
-CONFIG_USB_FTDI_ELAN=m
-CONFIG_USB_APPLEDISPLAY=m
-CONFIG_USB_SISUSBVGA=m
-CONFIG_USB_LD=m
-CONFIG_USB_TRANCEVIBRATOR=m
-CONFIG_USB_IOWARRIOR=m
-CONFIG_USB_TEST=m
-CONFIG_USB_EHSET_TEST_FIXTURE=m
-CONFIG_USB_ISIGHTFW=m
-CONFIG_USB_YUREX=m
-CONFIG_USB_HUB_USB251XB=m
-CONFIG_USB_HSIC_USB3503=m
-CONFIG_USB_HSIC_USB4604=m
-CONFIG_USB_LINK_LAYER_TEST=m
-CONFIG_USB_CHAOSKEY=m
-CONFIG_USB_GPIO_VBUS=m
-CONFIG_TAHVO_USB=m
-CONFIG_TAHVO_USB_HOST_BY_DEFAULT=y
-CONFIG_USB_ISP1301=m
-CONFIG_USB_GADGET=m
-CONFIG_USB_FOTG210_UDC=m
-CONFIG_USB_GR_UDC=m
-CONFIG_USB_R8A66597=m
-CONFIG_USB_PXA27X=m
-CONFIG_USB_MV_UDC=m
-CONFIG_USB_MV_U3D=m
-CONFIG_USB_BDC_UDC=m
-CONFIG_USB_AMD5536UDC=m
-CONFIG_USB_NET2272=m
-CONFIG_USB_NET2272_DMA=y
-CONFIG_USB_NET2280=m
-CONFIG_USB_GOKU=m
-CONFIG_USB_EG20T=m
-CONFIG_USB_CONFIGFS=m
-CONFIG_USB_CONFIGFS_SERIAL=y
-CONFIG_USB_CONFIGFS_ACM=y
-CONFIG_USB_CONFIGFS_OBEX=y
-CONFIG_USB_CONFIGFS_NCM=y
-CONFIG_USB_CONFIGFS_ECM=y
-CONFIG_USB_CONFIGFS_ECM_SUBSET=y
-CONFIG_USB_CONFIGFS_RNDIS=y
-CONFIG_USB_CONFIGFS_EEM=y
-CONFIG_USB_CONFIGFS_MASS_STORAGE=y
-CONFIG_USB_CONFIGFS_F_LB_SS=y
-CONFIG_USB_CONFIGFS_F_FS=y
-CONFIG_USB_CONFIGFS_F_UAC1=y
-CONFIG_USB_CONFIGFS_F_UAC2=y
-CONFIG_USB_CONFIGFS_F_MIDI=y
-CONFIG_USB_CONFIGFS_F_HID=y
-CONFIG_USB_CONFIGFS_F_UVC=y
-CONFIG_USB_CONFIGFS_F_PRINTER=y
-CONFIG_USB_ZERO=m
-CONFIG_USB_AUDIO=m
-CONFIG_GADGET_UAC1=y
-CONFIG_USB_ETH=m
-CONFIG_USB_ETH_EEM=y
-CONFIG_USB_G_NCM=m
-CONFIG_USB_GADGETFS=m
-CONFIG_USB_FUNCTIONFS=m
-CONFIG_USB_FUNCTIONFS_ETH=y
-CONFIG_USB_FUNCTIONFS_RNDIS=y
-CONFIG_USB_FUNCTIONFS_GENERIC=y
-CONFIG_USB_MASS_STORAGE=m
-CONFIG_USB_GADGET_TARGET=m
-CONFIG_USB_G_SERIAL=m
-CONFIG_USB_MIDI_GADGET=m
-CONFIG_USB_G_PRINTER=m
-CONFIG_USB_CDC_COMPOSITE=m
-CONFIG_USB_G_ACM_MS=m
-CONFIG_USB_G_HID=m
-CONFIG_USB_G_DBGP=m
-CONFIG_USB_G_WEBCAM=m
-CONFIG_TYPEC=m
-CONFIG_MMC=y
-CONFIG_PWRSEQ_SD8787=m
-CONFIG_SDIO_UART=y
-CONFIG_MMC_SDHCI=y
-CONFIG_MMC_SDHCI_PCI=y
-CONFIG_MMC_SDHCI_ACPI=y
-CONFIG_MMC_SDHCI_PLTFM=y
-CONFIG_MMC_SDHCI_OF_ARASAN=y
-CONFIG_MMC_SDHCI_OF_AT91=y
-CONFIG_MMC_SDHCI_OF_DWCMSHC=y
-CONFIG_MMC_SDHCI_CADENCE=y
-CONFIG_MMC_SDHCI_F_SDH30=y
-CONFIG_MMC_SDHCI_MILBEAUT=y
-CONFIG_MMC_WBSD=y
-CONFIG_MMC_TIFM_SD=y
-CONFIG_MMC_SPI=y
-CONFIG_MMC_SDRICOH_CS=m
-CONFIG_MMC_CB710=y
-CONFIG_MMC_VIA_SDMMC=y
-CONFIG_MMC_VUB300=y
-CONFIG_MMC_USHC=y
-CONFIG_MMC_USDHI6ROL0=y
-CONFIG_MMC_HSQ=y
-CONFIG_MMC_TOSHIBA_PCI=y
-CONFIG_MMC_MTK=y
-CONFIG_MMC_SDHCI_XENON=y
-CONFIG_MMC_SDHCI_OMAP=y
-CONFIG_MMC_SDHCI_AM654=y
-CONFIG_SCSI_UFSHCD=m
-CONFIG_SCSI_UFSHCD_PCI=m
-CONFIG_SCSI_UFSHCD_PLATFORM=m
-CONFIG_MEMSTICK=m
-CONFIG_MSPRO_BLOCK=m
-CONFIG_MS_BLOCK=m
-CONFIG_MEMSTICK_TIFM_MS=m
-CONFIG_MEMSTICK_JMICRON_38X=m
-CONFIG_MEMSTICK_R592=m
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_CLASS_FLASH=m
-CONFIG_LEDS_88PM860X=m
-CONFIG_LEDS_LM3530=m
-CONFIG_LEDS_LM3533=m
-CONFIG_LEDS_LM3642=m
-CONFIG_LEDS_PCA9532=m
-CONFIG_LEDS_PCA9532_GPIO=y
-CONFIG_LEDS_GPIO=m
-CONFIG_LEDS_LP3944=m
-CONFIG_LEDS_LP8788=m
-CONFIG_LEDS_PCA955X=m
-CONFIG_LEDS_PCA963X=m
-CONFIG_LEDS_WM831X_STATUS=m
-CONFIG_LEDS_WM8350=m
-CONFIG_LEDS_DA903X=m
-CONFIG_LEDS_DA9052=m
-CONFIG_LEDS_DAC124S085=m
-CONFIG_LEDS_REGULATOR=m
-CONFIG_LEDS_BD2802=m
-CONFIG_LEDS_INTEL_SS4200=m
-CONFIG_LEDS_ADP5520=m
-CONFIG_LEDS_MC13783=m
-CONFIG_LEDS_TCA6507=m
-CONFIG_LEDS_TLC591XX=m
-CONFIG_LEDS_MAX8997=m
-CONFIG_LEDS_LM355x=m
-CONFIG_LEDS_MENF21BMC=m
-CONFIG_LEDS_BLINKM=m
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_ONESHOT=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_BACKLIGHT=m
-CONFIG_LEDS_TRIGGER_CPU=y
-CONFIG_LEDS_TRIGGER_GPIO=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-CONFIG_LEDS_TRIGGER_TRANSIENT=m
-CONFIG_LEDS_TRIGGER_CAMERA=m
-CONFIG_EDAC=y
-# CONFIG_EDAC_LEGACY_SYSFS is not set
-CONFIG_EDAC_DECODE_MCE=m
-CONFIG_EDAC_AMD64=m
-CONFIG_EDAC_E752X=m
-CONFIG_EDAC_I82975X=m
-CONFIG_EDAC_I3000=m
-CONFIG_EDAC_I3200=m
-CONFIG_EDAC_IE31200=m
-CONFIG_EDAC_X38=m
-CONFIG_EDAC_I5400=m
-CONFIG_EDAC_I7CORE=m
-CONFIG_EDAC_I5000=m
-CONFIG_EDAC_I5100=m
-CONFIG_EDAC_I7300=m
-CONFIG_EDAC_SBRIDGE=m
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_DRV_88PM860X=m
-CONFIG_RTC_DRV_88PM80X=m
-CONFIG_RTC_DRV_ABB5ZES3=m
-CONFIG_RTC_DRV_ABX80X=m
-CONFIG_RTC_DRV_DS1307=m
-CONFIG_RTC_DRV_DS1374=m
-CONFIG_RTC_DRV_DS1374_WDT=y
-CONFIG_RTC_DRV_DS1672=m
-CONFIG_RTC_DRV_LP8788=m
-CONFIG_RTC_DRV_MAX6900=m
-CONFIG_RTC_DRV_MAX8907=m
-CONFIG_RTC_DRV_MAX8925=m
-CONFIG_RTC_DRV_MAX8998=m
-CONFIG_RTC_DRV_MAX8997=m
-CONFIG_RTC_DRV_RS5C372=m
-CONFIG_RTC_DRV_ISL1208=m
-CONFIG_RTC_DRV_ISL12022=m
-CONFIG_RTC_DRV_X1205=m
-CONFIG_RTC_DRV_PCF8523=m
-CONFIG_RTC_DRV_PCF85063=m
-CONFIG_RTC_DRV_PCF8563=m
-CONFIG_RTC_DRV_PCF8583=m
-CONFIG_RTC_DRV_M41T80=m
-CONFIG_RTC_DRV_M41T80_WDT=y
-CONFIG_RTC_DRV_BQ32K=m
-CONFIG_RTC_DRV_PALMAS=m
-CONFIG_RTC_DRV_TPS6586X=m
-CONFIG_RTC_DRV_TPS65910=m
-CONFIG_RTC_DRV_RC5T583=m
-CONFIG_RTC_DRV_S35390A=m
-CONFIG_RTC_DRV_FM3130=m
-CONFIG_RTC_DRV_RX8581=m
-CONFIG_RTC_DRV_RX8025=m
-CONFIG_RTC_DRV_EM3027=m
-CONFIG_RTC_DRV_RV8803=m
-CONFIG_RTC_DRV_S5M=m
-CONFIG_RTC_DRV_M41T93=m
-CONFIG_RTC_DRV_M41T94=m
-CONFIG_RTC_DRV_DS1305=m
-CONFIG_RTC_DRV_DS1343=m
-CONFIG_RTC_DRV_DS1347=m
-CONFIG_RTC_DRV_DS1390=m
-CONFIG_RTC_DRV_R9701=m
-CONFIG_RTC_DRV_RX4581=m
-CONFIG_RTC_DRV_RS5C348=m
-CONFIG_RTC_DRV_MAX6902=m
-CONFIG_RTC_DRV_PCF2123=m
-CONFIG_RTC_DRV_MCP795=m
-CONFIG_RTC_DRV_DS3232=m
-CONFIG_RTC_DRV_PCF2127=m
-CONFIG_RTC_DRV_RV3029C2=m
-CONFIG_RTC_DRV_DS1286=m
-CONFIG_RTC_DRV_DS1511=m
-CONFIG_RTC_DRV_DS1553=m
-CONFIG_RTC_DRV_DS1685_FAMILY=m
-CONFIG_RTC_DRV_DS1742=m
-CONFIG_RTC_DRV_DS2404=m
-CONFIG_RTC_DRV_DA9052=m
-CONFIG_RTC_DRV_DA9055=m
-CONFIG_RTC_DRV_DA9063=m
-CONFIG_RTC_DRV_STK17TA8=m
-CONFIG_RTC_DRV_M48T86=m
-CONFIG_RTC_DRV_M48T35=m
-CONFIG_RTC_DRV_M48T59=m
-CONFIG_RTC_DRV_MSM6242=m
-CONFIG_RTC_DRV_BQ4802=m
-CONFIG_RTC_DRV_RP5C01=m
-CONFIG_RTC_DRV_V3020=m
-CONFIG_RTC_DRV_WM831X=m
-CONFIG_RTC_DRV_WM8350=m
-CONFIG_RTC_DRV_PCF50633=m
-CONFIG_RTC_DRV_PCAP=m
-CONFIG_RTC_DRV_MC13XXX=m
-CONFIG_RTC_DRV_MT6397=m
-CONFIG_RTC_DRV_HID_SENSOR_TIME=m
-CONFIG_KS0108=m
-CONFIG_PANEL=m
-CONFIG_UIO_CIF=m
-CONFIG_UIO_PDRV_GENIRQ=m
-CONFIG_UIO_DMEM_GENIRQ=m
-CONFIG_UIO_AEC=m
-CONFIG_UIO_SERCOS3=m
-CONFIG_UIO_PCI_GENERIC=m
-CONFIG_UIO_NETX=m
-CONFIG_UIO_PRUSS=m
-CONFIG_UIO_MF624=m
-CONFIG_VFIO=m
-CONFIG_VFIO_PCI=m
-CONFIG_VFIO_PCI_VGA=y
-# CONFIG_VIRTIO_MENU is not set
-CONFIG_VHOST_NET=m
-CONFIG_VHOST_SCSI=m
-# CONFIG_XEN_BALLOON is not set
-# CONFIG_XEN_DEV_EVTCHN is not set
-# CONFIG_XEN_BACKEND is not set
-# CONFIG_XENFS is not set
-# CONFIG_XEN_SYS_HYPERVISOR is not set
-# CONFIG_XEN_GNTDEV is not set
-# CONFIG_XEN_GRANT_DEV_ALLOC is not set
-# CONFIG_XEN_ACPI_PROCESSOR is not set
-CONFIG_COMEDI=m
-CONFIG_COMEDI_MISC_DRIVERS=y
-CONFIG_COMEDI_BOND=m
-CONFIG_COMEDI_TEST=m
-CONFIG_COMEDI_PARPORT=m
-CONFIG_COMEDI_ISA_DRIVERS=y
-CONFIG_COMEDI_PCL711=m
-CONFIG_COMEDI_PCL724=m
-CONFIG_COMEDI_PCL726=m
-CONFIG_COMEDI_PCL730=m
-CONFIG_COMEDI_PCL812=m
-CONFIG_COMEDI_PCL816=m
-CONFIG_COMEDI_PCL818=m
-CONFIG_COMEDI_PCM3724=m
-CONFIG_COMEDI_AMPLC_DIO200_ISA=m
-CONFIG_COMEDI_AMPLC_PC236_ISA=m
-CONFIG_COMEDI_AMPLC_PC263_ISA=m
-CONFIG_COMEDI_RTI800=m
-CONFIG_COMEDI_RTI802=m
-CONFIG_COMEDI_DAC02=m
-CONFIG_COMEDI_DAS16M1=m
-CONFIG_COMEDI_DAS08_ISA=m
-CONFIG_COMEDI_DAS16=m
-CONFIG_COMEDI_DAS800=m
-CONFIG_COMEDI_DAS1800=m
-CONFIG_COMEDI_DAS6402=m
-CONFIG_COMEDI_DT2801=m
-CONFIG_COMEDI_DT2811=m
-CONFIG_COMEDI_DT2814=m
-CONFIG_COMEDI_DT2815=m
-CONFIG_COMEDI_DT2817=m
-CONFIG_COMEDI_DT282X=m
-CONFIG_COMEDI_DMM32AT=m
-CONFIG_COMEDI_FL512=m
-CONFIG_COMEDI_AIO_AIO12_8=m
-CONFIG_COMEDI_AIO_IIRO_16=m
-CONFIG_COMEDI_II_PCI20KC=m
-CONFIG_COMEDI_C6XDIGIO=m
-CONFIG_COMEDI_MPC624=m
-CONFIG_COMEDI_ADQ12B=m
-CONFIG_COMEDI_NI_AT_A2150=m
-CONFIG_COMEDI_NI_AT_AO=m
-CONFIG_COMEDI_NI_ATMIO=m
-CONFIG_COMEDI_NI_ATMIO16D=m
-CONFIG_COMEDI_NI_LABPC_ISA=m
-CONFIG_COMEDI_PCMAD=m
-CONFIG_COMEDI_PCMDA12=m
-CONFIG_COMEDI_PCMMIO=m
-CONFIG_COMEDI_PCMUIO=m
-CONFIG_COMEDI_MULTIQ3=m
-CONFIG_COMEDI_S526=m
-CONFIG_COMEDI_PCI_DRIVERS=m
-CONFIG_COMEDI_8255_PCI=m
-CONFIG_COMEDI_ADDI_APCI_1032=m
-CONFIG_COMEDI_ADDI_APCI_1500=m
-CONFIG_COMEDI_ADDI_APCI_1516=m
-CONFIG_COMEDI_ADDI_APCI_1564=m
-CONFIG_COMEDI_ADDI_APCI_16XX=m
-CONFIG_COMEDI_ADDI_APCI_2032=m
-CONFIG_COMEDI_ADDI_APCI_2200=m
-CONFIG_COMEDI_ADDI_APCI_3120=m
-CONFIG_COMEDI_ADDI_APCI_3501=m
-CONFIG_COMEDI_ADDI_APCI_3XXX=m
-CONFIG_COMEDI_ADL_PCI6208=m
-CONFIG_COMEDI_ADL_PCI7X3X=m
-CONFIG_COMEDI_ADL_PCI8164=m
-CONFIG_COMEDI_ADL_PCI9111=m
-CONFIG_COMEDI_ADL_PCI9118=m
-CONFIG_COMEDI_ADV_PCI1710=m
-CONFIG_COMEDI_ADV_PCI1723=m
-CONFIG_COMEDI_ADV_PCI1724=m
-CONFIG_COMEDI_ADV_PCI_DIO=m
-CONFIG_COMEDI_AMPLC_DIO200_PCI=m
-CONFIG_COMEDI_AMPLC_PC236_PCI=m
-CONFIG_COMEDI_AMPLC_PC263_PCI=m
-CONFIG_COMEDI_AMPLC_PCI224=m
-CONFIG_COMEDI_AMPLC_PCI230=m
-CONFIG_COMEDI_CONTEC_PCI_DIO=m
-CONFIG_COMEDI_DAS08_PCI=m
-CONFIG_COMEDI_DT3000=m
-CONFIG_COMEDI_DYNA_PCI10XX=m
-CONFIG_COMEDI_GSC_HPDI=m
-CONFIG_COMEDI_MF6X4=m
-CONFIG_COMEDI_ICP_MULTI=m
-CONFIG_COMEDI_DAQBOARD2000=m
-CONFIG_COMEDI_JR3_PCI=m
-CONFIG_COMEDI_KE_COUNTER=m
-CONFIG_COMEDI_CB_PCIDAS64=m
-CONFIG_COMEDI_CB_PCIDAS=m
-CONFIG_COMEDI_CB_PCIDDA=m
-CONFIG_COMEDI_CB_PCIMDAS=m
-CONFIG_COMEDI_CB_PCIMDDA=m
-CONFIG_COMEDI_ME4000=m
-CONFIG_COMEDI_ME_DAQ=m
-CONFIG_COMEDI_NI_6527=m
-CONFIG_COMEDI_NI_65XX=m
-CONFIG_COMEDI_NI_660X=m
-CONFIG_COMEDI_NI_670X=m
-CONFIG_COMEDI_NI_LABPC_PCI=m
-CONFIG_COMEDI_NI_PCIDIO=m
-CONFIG_COMEDI_NI_PCIMIO=m
-CONFIG_COMEDI_RTD520=m
-CONFIG_COMEDI_S626=m
-CONFIG_COMEDI_PCMCIA_DRIVERS=m
-CONFIG_COMEDI_CB_DAS16_CS=m
-CONFIG_COMEDI_DAS08_CS=m
-CONFIG_COMEDI_NI_DAQ_700_CS=m
-CONFIG_COMEDI_NI_DAQ_DIO24_CS=m
-CONFIG_COMEDI_NI_LABPC_CS=m
-CONFIG_COMEDI_NI_MIO_CS=m
-CONFIG_COMEDI_QUATECH_DAQP_CS=m
-CONFIG_COMEDI_USB_DRIVERS=m
-CONFIG_COMEDI_DT9812=m
-CONFIG_COMEDI_NI_USB6501=m
-CONFIG_COMEDI_USBDUX=m
-CONFIG_COMEDI_USBDUXFAST=m
-CONFIG_COMEDI_USBDUXSIGMA=m
-CONFIG_COMEDI_VMK80XX=m
-CONFIG_COMEDI_8255_SA=m
-CONFIG_STAGING=y
-CONFIG_PRISM2_USB=m
-CONFIG_RTL8192U=m
-CONFIG_RTLLIB=m
-CONFIG_RTL8192E=m
-CONFIG_RTL8723BS=m
-CONFIG_R8712U=m
-CONFIG_R8188EU=m
-CONFIG_RTS5208=m
-CONFIG_VT6655=m
-CONFIG_VT6656=m
-CONFIG_ADIS16203=m
-CONFIG_ADIS16240=m
-CONFIG_AD7816=m
-CONFIG_ADT7316=m
-CONFIG_ADT7316_I2C=m
-CONFIG_AD9832=m
-CONFIG_AD9834=m
-CONFIG_AD5933=m
-CONFIG_ADE7854=m
-CONFIG_AD2S1210=m
-CONFIG_STAGING_MEDIA=y
-CONFIG_LTE_GDM724X=m
-CONFIG_CHROME_PLATFORMS=y
-CONFIG_CHROMEOS_LAPTOP=m
-CONFIG_CHROMEOS_PSTORE=m
-CONFIG_CHROMEOS_TBMC=m
-CONFIG_CROS_EC=m
-CONFIG_CROS_EC_I2C=m
-CONFIG_CROS_EC_ISHTP=m
-CONFIG_CROS_EC_SPI=m
-CONFIG_CROS_EC_LPC=m
-CONFIG_CROS_KBD_LED_BACKLIGHT=m
-CONFIG_WILCO_EC=m
-CONFIG_WILCO_EC_EVENTS=m
-CONFIG_WILCO_EC_TELEMETRY=m
-CONFIG_SURFACE3_WMI=m
-CONFIG_SURFACE_PRO3_BUTTON=m
-CONFIG_ACERHDF=m
-CONFIG_ACER_WIRELESS=m
-CONFIG_ACER_WMI=m
-CONFIG_APPLE_GMUX=m
-CONFIG_ASUS_LAPTOP=m
-CONFIG_ASUS_WIRELESS=m
-CONFIG_AMILO_RFKILL=m
-CONFIG_FUJITSU_LAPTOP=m
-CONFIG_FUJITSU_TABLET=m
-CONFIG_GPD_POCKET_FAN=m
-CONFIG_IBM_RTL=m
-CONFIG_IDEAPAD_LAPTOP=m
-CONFIG_SENSORS_HDAPS=m
-CONFIG_THINKPAD_ACPI=m
-CONFIG_THINKPAD_ACPI_DEBUGFACILITIES=y
-CONFIG_INTEL_SPEED_SELECT_INTERFACE=m
-CONFIG_INTEL_HID_EVENT=m
-CONFIG_INTEL_OAKTRAIL=m
-CONFIG_INTEL_PUNIT_IPC=m
-CONFIG_INTEL_RST=m
-CONFIG_INTEL_SMARTCONNECT=m
-CONFIG_INTEL_TURBO_MAX_3=y
-CONFIG_MSI_LAPTOP=m
-CONFIG_MSI_WMI=m
-CONFIG_SAMSUNG_LAPTOP=m
-CONFIG_SAMSUNG_Q10=m
-CONFIG_ACPI_TOSHIBA=m
-CONFIG_TOSHIBA_BT_RFKILL=m
-CONFIG_TOSHIBA_HAPS=m
-CONFIG_TOSHIBA_WMI=m
-CONFIG_ACPI_CMPC=m
-CONFIG_COMPAL_LAPTOP=m
-CONFIG_LG_LAPTOP=m
-CONFIG_PANASONIC_LAPTOP=m
-CONFIG_SONY_LAPTOP=m
-CONFIG_SONYPI_COMPAT=y
-CONFIG_TOPSTAR_LAPTOP=m
-CONFIG_INTEL_IPS=m
-CONFIG_COMMON_CLK_WM831X=m
-CONFIG_COMMON_CLK_SI5351=m
-CONFIG_COMMON_CLK_CDCE706=m
-CONFIG_COMMON_CLK_S2MPS11=m
-CONFIG_CLK_TWL6040=m
-CONFIG_COMMON_CLK_PALMAS=m
-CONFIG_ALTERA_MBOX=m
-CONFIG_AMD_IOMMU=y
-CONFIG_INTEL_IOMMU=y
-CONFIG_INTEL_IOMMU_SVM=y
-# CONFIG_INTEL_IOMMU_DEFAULT_ON is not set
-CONFIG_IRQ_REMAP=y
-CONFIG_SOUNDWIRE=y
-CONFIG_SOC_TI=y
-CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y
-CONFIG_DEVFREQ_GOV_PERFORMANCE=y
-CONFIG_DEVFREQ_GOV_POWERSAVE=y
-CONFIG_DEVFREQ_GOV_USERSPACE=y
-CONFIG_PM_DEVFREQ_EVENT=y
-CONFIG_EXTCON_ADC_JACK=m
-CONFIG_EXTCON_GPIO=m
-CONFIG_EXTCON_MAX14577=m
-CONFIG_EXTCON_MAX77693=m
-CONFIG_EXTCON_MAX77843=m
-CONFIG_EXTCON_MAX8997=m
-CONFIG_EXTCON_PALMAS=m
-CONFIG_EXTCON_RT8973A=m
-CONFIG_EXTCON_SM5502=m
-CONFIG_EXTCON_USB_GPIO=m
-CONFIG_MEMORY=y
-CONFIG_IIO=m
-CONFIG_IIO_BUFFER_CB=m
-CONFIG_ADIS16201=m
-CONFIG_ADIS16209=m
-CONFIG_BMC150_ACCEL=m
-CONFIG_HID_SENSOR_ACCEL_3D=m
-CONFIG_IIO_ST_ACCEL_3AXIS=m
-CONFIG_KXSD9=m
-CONFIG_KXCJK1013=m
-CONFIG_MMA8452=m
-CONFIG_MMA9551=m
-CONFIG_MMA9553=m
-CONFIG_MXC4005=m
-CONFIG_SCA3000=m
-CONFIG_STK8312=m
-CONFIG_STK8BA50=m
-CONFIG_AD7192=m
-CONFIG_AD7266=m
-CONFIG_AD7280=m
-CONFIG_AD7291=m
-CONFIG_AD7298=m
-CONFIG_AD7476=m
-CONFIG_AD7606_IFACE_PARALLEL=m
-CONFIG_AD7606_IFACE_SPI=m
-CONFIG_AD7780=m
-CONFIG_AD7791=m
-CONFIG_AD7793=m
-CONFIG_AD7887=m
-CONFIG_AD7923=m
-CONFIG_AD799X=m
-CONFIG_CC10001_ADC=m
-CONFIG_DA9150_GPADC=m
-CONFIG_HI8435=m
-CONFIG_LP8788_ADC=m
-CONFIG_MAX1027=m
-CONFIG_MAX1363=m
-CONFIG_MCP320X=m
-CONFIG_MCP3422=m
-CONFIG_MEN_Z188_ADC=m
-CONFIG_NAU7802=m
-CONFIG_QCOM_SPMI_IADC=m
-CONFIG_QCOM_SPMI_VADC=m
-CONFIG_TI_ADC081C=m
-CONFIG_TI_ADC128S052=m
-CONFIG_TI_AM335X_ADC=m
-CONFIG_TWL4030_MADC=m
-CONFIG_TWL6030_GPADC=m
-CONFIG_VIPERBOARD_ADC=m
-CONFIG_AD8366=m
-CONFIG_AD7150=m
-CONFIG_AD7746=m
-CONFIG_VZ89X=m
-CONFIG_IIO_SSP_SENSORS_COMMONS=m
-CONFIG_IIO_SSP_SENSORHUB=m
-CONFIG_AD5064=m
-CONFIG_AD5360=m
-CONFIG_AD5380=m
-CONFIG_AD5421=m
-CONFIG_AD5446=m
-CONFIG_AD5449=m
-CONFIG_AD5504=m
-CONFIG_AD5624R_SPI=m
-CONFIG_AD5755=m
-CONFIG_AD5764=m
-CONFIG_AD5791=m
-CONFIG_AD7303=m
-CONFIG_M62332=m
-CONFIG_MAX517=m
-CONFIG_MCP4725=m
-CONFIG_MCP4922=m
-CONFIG_AD9523=m
-CONFIG_ADF4350=m
-CONFIG_ADIS16080=m
-CONFIG_ADIS16130=m
-CONFIG_ADIS16136=m
-CONFIG_ADIS16260=m
-CONFIG_ADXRS450=m
-CONFIG_BMG160=m
-CONFIG_HID_SENSOR_GYRO_3D=m
-CONFIG_IIO_ST_GYRO_3AXIS=m
-CONFIG_ITG3200=m
-CONFIG_DHT11=m
-CONFIG_HDC100X=m
-CONFIG_HTU21=m
-CONFIG_SI7005=m
-CONFIG_SI7020=m
-CONFIG_ADIS16400=m
-CONFIG_ADIS16480=m
-CONFIG_KMX61=m
-CONFIG_ACPI_ALS=m
-CONFIG_ADJD_S311=m
-CONFIG_AL3320A=m
-CONFIG_APDS9300=m
-CONFIG_APDS9960=m
-CONFIG_BH1750=m
-CONFIG_CM32181=m
-CONFIG_CM3232=m
-CONFIG_CM3323=m
-CONFIG_CM36651=m
-CONFIG_GP2AP020A00F=m
-CONFIG_SENSORS_ISL29018=m
-CONFIG_SENSORS_ISL29028=m
-CONFIG_ISL29125=m
-CONFIG_HID_SENSOR_ALS=m
-CONFIG_HID_SENSOR_PROX=m
-CONFIG_JSA1212=m
-CONFIG_RPR0521=m
-CONFIG_SENSORS_LM3533=m
-CONFIG_LTR501=m
-CONFIG_OPT3001=m
-CONFIG_PA12203001=m
-CONFIG_STK3310=m
-CONFIG_TCS3414=m
-CONFIG_TCS3472=m
-CONFIG_SENSORS_TSL2563=m
-CONFIG_TSL2583=m
-CONFIG_TSL4531=m
-CONFIG_US5182D=m
-CONFIG_VCNL4000=m
-CONFIG_AK09911=m
-CONFIG_MAG3110=m
-CONFIG_HID_SENSOR_MAGNETOMETER_3D=m
-CONFIG_MMC35240=m
-CONFIG_IIO_ST_MAGN_3AXIS=m
-CONFIG_SENSORS_HMC5843_I2C=m
-CONFIG_SENSORS_HMC5843_SPI=m
-CONFIG_HID_SENSOR_INCLINOMETER_3D=m
-CONFIG_HID_SENSOR_DEVICE_ROTATION=m
-CONFIG_IIO_INTERRUPT_TRIGGER=m
-CONFIG_IIO_SYSFS_TRIGGER=m
-CONFIG_MCP4531=m
-CONFIG_BMP280=m
-CONFIG_HID_SENSOR_PRESS=m
-CONFIG_MPL3115=m
-CONFIG_MS5611=m
-CONFIG_MS5611_I2C=m
-CONFIG_MS5611_SPI=m
-CONFIG_MS5637=m
-CONFIG_IIO_ST_PRESS=m
-CONFIG_T5403=m
-CONFIG_AS3935=m
-CONFIG_LIDAR_LITE_V2=m
-CONFIG_SX9500=m
-CONFIG_AD2S90=m
-CONFIG_AD2S1200=m
-CONFIG_MLX90614=m
-CONFIG_TMP006=m
-CONFIG_TSYS01=m
-CONFIG_TSYS02D=m
-CONFIG_NTB=m
-CONFIG_NTB_AMD=m
-CONFIG_NTB_INTEL=m
-CONFIG_NTB_PINGPONG=m
-CONFIG_NTB_TOOL=m
-CONFIG_NTB_TRANSPORT=m
-CONFIG_IPACK_BUS=m
-CONFIG_BOARD_TPCI200=m
-CONFIG_SERIAL_IPOCTAL=m
-CONFIG_BCM_KONA_USB2_PHY=m
-CONFIG_PHY_PXA_28NM_HSIC=m
-CONFIG_PHY_PXA_28NM_USB2=m
-CONFIG_PHY_SAMSUNG_USB2=m
-CONFIG_PHY_TUSB1210=m
-CONFIG_POWERCAP=y
-CONFIG_INTEL_RAPL=m
-CONFIG_MCB=m
-CONFIG_MCB_PCI=m
-CONFIG_BLK_DEV_PMEM=m
-CONFIG_STM=m
-CONFIG_STM_DUMMY=m
-CONFIG_STM_SOURCE_CONSOLE=m
-CONFIG_INTEL_TH=m
-CONFIG_INTEL_TH_PCI=m
-CONFIG_INTEL_TH_GTH=m
-CONFIG_INTEL_TH_STH=m
-CONFIG_INTEL_TH_MSU=m
-CONFIG_INTEL_TH_PTI=m
-CONFIG_FPGA=m
-CONFIG_MOST=m
-CONFIG_EXT4_FS=y
-CONFIG_EXT4_FS_POSIX_ACL=y
-CONFIG_EXT4_FS_SECURITY=y
-CONFIG_FANOTIFY=y
-CONFIG_FANOTIFY_ACCESS_PERMISSIONS=y
-CONFIG_QUOTA=y
-CONFIG_QUOTA_NETLINK_INTERFACE=y
-# CONFIG_PRINT_QUOTA_WARNING is not set
-CONFIG_QFMT_V1=m
-CONFIG_QFMT_V2=m
-CONFIG_AUTOFS4_FS=m
-CONFIG_FUSE_FS=y
-CONFIG_CUSE=m
-CONFIG_OVERLAY_FS=y
-CONFIG_ISO9660_FS=m
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=m
-CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=y
-CONFIG_EXFAT_FS=m
-CONFIG_NTFS_FS=m
-CONFIG_NTFS_RW=y
-CONFIG_NTFS3_FS=m
-CONFIG_NTFS3_LZX_XPRESS=y
-CONFIG_NTFS3_FS_POSIX_ACL=y
-CONFIG_PROC_KCORE=y
-CONFIG_TMPFS_POSIX_ACL=y
-CONFIG_HUGETLBFS=y
-CONFIG_EFIVAR_FS=y
-CONFIG_SQUASHFS=y
-CONFIG_SQUASHFS_FILE_DIRECT=y
-CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SQUASHFS_XATTR=y
-CONFIG_SQUASHFS_LZ4=y
-CONFIG_SQUASHFS_LZO=y
-CONFIG_SQUASHFS_XZ=y
-CONFIG_PSTORE_RAM=m
-CONFIG_NFS_FS=m
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=m
-CONFIG_NFS_SWAP=y
-CONFIG_NFS_V4_1=y
-CONFIG_NFS_V4_2=y
-CONFIG_NFS_V4_1_MIGRATION=y
-CONFIG_SUNRPC_DEBUG=y
-CONFIG_CEPH_FS=m
-CONFIG_CEPH_FS_POSIX_ACL=y
-CONFIG_CEPH_FS_SECURITY_LABEL=y
-CONFIG_CIFS=m
-CONFIG_CIFS_UPCALL=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-CONFIG_CIFS_DFS_UPCALL=y
-CONFIG_CIFS_SWN_UPCALL=y
-CONFIG_NLS_DEFAULT="utf8"
-CONFIG_NLS_CODEPAGE_437=y
-CONFIG_NLS_CODEPAGE_737=m
-CONFIG_NLS_CODEPAGE_775=m
-CONFIG_NLS_CODEPAGE_850=m
-CONFIG_NLS_CODEPAGE_852=m
-CONFIG_NLS_CODEPAGE_855=m
-CONFIG_NLS_CODEPAGE_857=m
-CONFIG_NLS_CODEPAGE_860=m
-CONFIG_NLS_CODEPAGE_861=m
-CONFIG_NLS_CODEPAGE_862=m
-CONFIG_NLS_CODEPAGE_863=m
-CONFIG_NLS_CODEPAGE_864=m
-CONFIG_NLS_CODEPAGE_865=m
-CONFIG_NLS_CODEPAGE_866=m
-CONFIG_NLS_CODEPAGE_869=m
-CONFIG_NLS_CODEPAGE_936=m
-CONFIG_NLS_CODEPAGE_950=m
-CONFIG_NLS_CODEPAGE_932=m
-CONFIG_NLS_CODEPAGE_949=m
-CONFIG_NLS_CODEPAGE_874=m
-CONFIG_NLS_ISO8859_8=m
-CONFIG_NLS_CODEPAGE_1250=m
-CONFIG_NLS_CODEPAGE_1251=m
-CONFIG_NLS_ASCII=m
-CONFIG_NLS_ISO8859_1=y
-CONFIG_NLS_ISO8859_2=m
-CONFIG_NLS_ISO8859_3=m
-CONFIG_NLS_ISO8859_4=m
-CONFIG_NLS_ISO8859_5=m
-CONFIG_NLS_ISO8859_6=m
-CONFIG_NLS_ISO8859_7=m
-CONFIG_NLS_ISO8859_9=m
-CONFIG_NLS_ISO8859_13=m
-CONFIG_NLS_ISO8859_14=m
-CONFIG_NLS_ISO8859_15=m
-CONFIG_NLS_KOI8_R=m
-CONFIG_NLS_KOI8_U=m
-CONFIG_NLS_MAC_ROMAN=m
-CONFIG_NLS_MAC_CELTIC=m
-CONFIG_NLS_MAC_CENTEURO=m
-CONFIG_NLS_MAC_CROATIAN=m
-CONFIG_NLS_MAC_CYRILLIC=m
-CONFIG_NLS_MAC_GAELIC=m
-CONFIG_NLS_MAC_GREEK=m
-CONFIG_NLS_MAC_ICELAND=m
-CONFIG_NLS_MAC_INUIT=m
-CONFIG_NLS_MAC_ROMANIAN=m
-CONFIG_NLS_MAC_TURKISH=m
-CONFIG_NLS_UTF8=m
-CONFIG_DLM=m
-CONFIG_PERSISTENT_KEYRINGS=y
-CONFIG_TRUSTED_KEYS=y
-CONFIG_ENCRYPTED_KEYS=y
-CONFIG_SECURITY=y
-CONFIG_SECURITY_NETWORK_XFRM=y
-CONFIG_SECURITY_PATH=y
-CONFIG_INTEL_TXT=y
-CONFIG_SECURITY_SMACK=y
-CONFIG_SECURITY_YAMA=y
-# CONFIG_INTEGRITY is not set
-CONFIG_LSM="lockdown,yama"
-CONFIG_CRYPTO_USER=m
-CONFIG_CRYPTO_PCRYPT=m
-CONFIG_CRYPTO_TEST=m
-CONFIG_CRYPTO_ANUBIS=m
-CONFIG_CRYPTO_BLOWFISH=m
-CONFIG_CRYPTO_CAMELLIA=m
-CONFIG_CRYPTO_KHAZAD=m
-CONFIG_CRYPTO_SEED=m
-CONFIG_CRYPTO_TEA=m
-CONFIG_CRYPTO_TWOFISH=m
-CONFIG_CRYPTO_CTS=m
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_KEYWRAP=m
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_CHACHA20POLY1305=m
-CONFIG_CRYPTO_ESSIV=m
-CONFIG_CRYPTO_RMD160=m
-CONFIG_CRYPTO_VMAC=m
-CONFIG_CRYPTO_WP512=m
-CONFIG_CRYPTO_XCBC=m
-CONFIG_CRYPTO_CRC32=m
-CONFIG_CRYPTO_842=m
-CONFIG_CRYPTO_LZ4=m
-CONFIG_CRYPTO_LZ4HC=m
-CONFIG_CRYPTO_ZSTD=m
-CONFIG_CRYPTO_ANSI_CPRNG=m
-CONFIG_CRYPTO_DRBG_HASH=y
-CONFIG_CRYPTO_DRBG_CTR=y
-CONFIG_CRYPTO_USER_API_HASH=m
-CONFIG_CRYPTO_USER_API_SKCIPHER=m
-CONFIG_CRYPTO_USER_API_RNG=m
-CONFIG_CRYPTO_USER_API_AEAD=m
-CONFIG_CRYPTO_AES_NI_INTEL=m
-CONFIG_CRYPTO_BLOWFISH_X86_64=m
-CONFIG_CRYPTO_CAMELLIA_AESNI_AVX2_X86_64=m
-CONFIG_CRYPTO_CAST5_AVX_X86_64=m
-CONFIG_CRYPTO_CAST6_AVX_X86_64=m
-CONFIG_CRYPTO_DES3_EDE_X86_64=m
-CONFIG_CRYPTO_SERPENT_SSE2_X86_64=m
-CONFIG_CRYPTO_SERPENT_AVX2_X86_64=m
-CONFIG_CRYPTO_TWOFISH_AVX_X86_64=m
-CONFIG_CRYPTO_CHACHA20_X86_64=m
-CONFIG_CRYPTO_POLY1305_X86_64=m
-CONFIG_CRYPTO_SHA1_SSSE3=m
-CONFIG_CRYPTO_SHA256_SSSE3=m
-CONFIG_CRYPTO_SHA512_SSSE3=m
-CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL=m
-CONFIG_CRYPTO_CRC32C_INTEL=y
-CONFIG_CRYPTO_CRC32_PCLMUL=m
-CONFIG_CRYPTO_CRCT10DIF_PCLMUL=m
-CONFIG_CRYPTO_DEV_PADLOCK=y
-CONFIG_CRYPTO_DEV_PADLOCK_AES=m
-CONFIG_CRYPTO_DEV_PADLOCK_SHA=m
-CONFIG_CRYPTO_DEV_CCP=y
-CONFIG_CRYPTO_DEV_QAT_DH895xCC=m
-CONFIG_CRYPTO_DEV_QAT_DH895xCCVF=m
-CONFIG_PKCS7_TEST_KEY=m
-CONFIG_SIGNED_PE_FILE_VERIFICATION=y
-CONFIG_CRC_CCITT=y
-CONFIG_XZ_DEC_TEST=m
-CONFIG_PRINTK_TIME=y
-CONFIG_BOOT_PRINTK_DELAY=y
-CONFIG_DYNAMIC_DEBUG=y
-CONFIG_FRAME_WARN=1024
-CONFIG_KGDB=y
-CONFIG_KGDB_LOW_LEVEL_TRAP=y
-CONFIG_KGDB_KDB=y
-CONFIG_KDB_KEYBOARD=y
-CONFIG_SCHED_STACK_END_CHECK=y
-CONFIG_SCHEDSTATS=y
-CONFIG_LOCK_TORTURE_TEST=m
-CONFIG_RCU_CPU_STALL_TIMEOUT=60
-CONFIG_FUNCTION_PROFILER=y
-CONFIG_STACK_TRACER=y
-CONFIG_SCHED_TRACER=y
-CONFIG_MMIOTRACE=y
-CONFIG_FTRACE_SYSCALLS=y
-CONFIG_BLK_DEV_IO_TRACE=y
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-CONFIG_EARLY_PRINTK_DBGP=y
-CONFIG_IO_DELAY_0XED=y
-CONFIG_PUNIT_ATOM_DEBUG=m
-CONFIG_NOTIFIER_ERROR_INJECTION=m
-CONFIG_RBTREE_TEST=m
-CONFIG_INTERVAL_TREE_TEST=m
-CONFIG_PERCPU_TEST=m
-CONFIG_TEST_HEXDUMP=m
-CONFIG_TEST_STRING_HELPERS=m
-CONFIG_TEST_KSTRTOX=m
-CONFIG_TEST_PRINTF=m
-CONFIG_TEST_LKM=m
-CONFIG_TEST_USER_COPY=m
-CONFIG_TEST_BPF=m
-CONFIG_TEST_FIRMWARE=m
-CONFIG_TEST_UDELAY=m
-CONFIG_TEST_STATIC_KEYS=m
-CONFIG_MEMTEST=y
diff --git a/board/recalbox/x86/kernel_patches/0001-steamdeck-enable-gamepad-on-startup.patch b/board/recalbox/x86/kernel_patches/0001-steamdeck-enable-gamepad-on-startup.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bea6e7ca72f23f32569eafaf9010f70acfa50b9a
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/0001-steamdeck-enable-gamepad-on-startup.patch
@@ -0,0 +1,24 @@
+From a1086ccec2103fa0139c517bb8941eb9202d67bc Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Tue, 11 Mar 2025 09:05:32 +0100
+Subject: [PATCH 1/5] steamdeck enable gamepad on startup
+
+---
+ drivers/hid/hid-steam.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
+index 10460b7bde1a..aa8965251a2e 100644
+--- a/drivers/hid/hid-steam.c
++++ b/drivers/hid/hid-steam.c
+@@ -1247,6 +1247,7 @@ static int steam_probe(struct hid_device *hdev,
+ spin_lock_init(&steam->lock);
+ mutex_init(&steam->report_mutex);
+ steam->quirks = id->driver_data;
++ steam->gamepad_mode = true; // enable gamepad at startup
+ INIT_WORK(&steam->work_connect, steam_work_connect_cb);
+ INIT_DELAYED_WORK(&steam->mode_switch, steam_mode_switch_cb);
+ INIT_LIST_HEAD(&steam->list);
+--
+2.52.0
+
diff --git a/board/recalbox/x86/kernel_patches/0002-steamdeck-use-quick-access-button-to-switch-input-mo.patch b/board/recalbox/x86/kernel_patches/0002-steamdeck-use-quick-access-button-to-switch-input-mo.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4bd3a346eda406a52f27f261157e091cb8c9471a
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/0002-steamdeck-use-quick-access-button-to-switch-input-mo.patch
@@ -0,0 +1,29 @@
+From a9306e8424de80cec23fdf2818f60205078a4658 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Tue, 11 Mar 2025 09:07:01 +0100
+Subject: [PATCH 2/5] steamdeck use quick access button to switch input mode
+
+---
+ drivers/hid/hid-steam.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
+index aa8965251a2e..76a70635f29d 100644
+--- a/drivers/hid/hid-steam.c
++++ b/drivers/hid/hid-steam.c
+@@ -1616,10 +1616,10 @@ static void steam_do_deck_input_event(struct steam_device *steam,
+ b13 = data[13];
+ b14 = data[14];
+
+- if (!(b9 & BIT(6)) && steam->did_mode_switch) {
++ if (!(b14 & BIT(2)) && steam->did_mode_switch) {
+ steam->did_mode_switch = false;
+ cancel_delayed_work(&steam->mode_switch);
+- } else if (!steam->client_opened && (b9 & BIT(6)) && !steam->did_mode_switch) {
++ } else if (!steam->client_opened && (b14 & BIT(2)) && !steam->did_mode_switch) {
+ steam->did_mode_switch = true;
+ schedule_delayed_work(&steam->mode_switch, 45 * HZ / 100);
+ }
+--
+2.52.0
+
diff --git a/board/recalbox/x86/kernel_patches/0003-steamdeck-enable-a-joystick-deadzone.patch b/board/recalbox/x86/kernel_patches/0003-steamdeck-enable-a-joystick-deadzone.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bef0420d02a35af0d37943981bc0dc4626cc22a5
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/0003-steamdeck-enable-a-joystick-deadzone.patch
@@ -0,0 +1,48 @@
+From 8b9c0841811d6a9038330e97f2dc98699ef1c632 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Tue, 11 Mar 2025 09:07:29 +0100
+Subject: [PATCH 3/5] steamdeck enable a joystick deadzone
+
+---
+ drivers/hid/hid-steam.c | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
+index 76a70635f29d..0a1a699ce701 100644
+--- a/drivers/hid/hid-steam.c
++++ b/drivers/hid/hid-steam.c
+@@ -1603,6 +1603,16 @@ static void steam_do_input_event(struct steam_device *steam,
+ * 15.6 | -- | unknown
+ * 15.7 | -- | unknown
+ */
++s16 apply_deadzone(s16 value, s16 flat) {
++ s16 max = 32768;
++ if (value > -flat && value < flat)
++ return 0;
++ if (value > 0)
++ return (value - flat) * max / (max - flat);
++ else
++ return (value + flat) * max / (max - flat);
++}
++
+ static void steam_do_deck_input_event(struct steam_device *steam,
+ struct input_dev *input, u8 *data)
+ {
+@@ -1646,10 +1656,10 @@ static void steam_do_deck_input_event(struct steam_device *steam,
+ input_report_abs(input, ABS_HAT1Y, 0);
+ }
+
+- input_report_abs(input, ABS_X, steam_le16(data + 48));
+- input_report_abs(input, ABS_Y, -steam_le16(data + 50));
+- input_report_abs(input, ABS_RX, steam_le16(data + 52));
+- input_report_abs(input, ABS_RY, -steam_le16(data + 54));
++ input_report_abs(input, ABS_X, apply_deadzone(steam_le16(data + 48), 800));
++ input_report_abs(input, ABS_Y, apply_deadzone(-steam_le16(data + 50), 800));
++ input_report_abs(input, ABS_RX, apply_deadzone(steam_le16(data + 52), 800));
++ input_report_abs(input, ABS_RY, apply_deadzone(-steam_le16(data + 54), 800));
+
+ input_report_abs(input, ABS_HAT2Y, steam_le16(data + 44));
+ input_report_abs(input, ABS_HAT2X, steam_le16(data + 46));
+--
+2.52.0
+
diff --git a/board/recalbox/x86/kernel_patches/0004-set-trigger-to-class-ABS_Z-and-ABS_RZ-events.patch b/board/recalbox/x86/kernel_patches/0004-set-trigger-to-class-ABS_Z-and-ABS_RZ-events.patch
new file mode 100644
index 0000000000000000000000000000000000000000..caefad724a3530b320b86e09f6075c27bbafb5d3
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/0004-set-trigger-to-class-ABS_Z-and-ABS_RZ-events.patch
@@ -0,0 +1,49 @@
+From 5a9ae469537793ede1cc31e93fc528caec722a10 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Wed, 26 Mar 2025 21:32:47 +0100
+Subject: [PATCH 4/5] set trigger to class ABS_Z and ABS_RZ events
+
+---
+ drivers/hid/hid-steam.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
+index 0a1a699ce701..511275f2b0a5 100644
+--- a/drivers/hid/hid-steam.c
++++ b/drivers/hid/hid-steam.c
+@@ -778,8 +778,8 @@ static int steam_input_register(struct steam_device *steam)
+ STEAM_PAD_FUZZ, 0);
+
+ if (steam->quirks & STEAM_QUIRK_DECK) {
+- input_set_abs_params(input, ABS_HAT2Y, 0, 32767, 0, 0);
+- input_set_abs_params(input, ABS_HAT2X, 0, 32767, 0, 0);
++ input_set_abs_params(input, ABS_Z, 0, 32767, 0, 0);
++ input_set_abs_params(input, ABS_RZ, 0, 32767, 0, 0);
+
+ input_set_abs_params(input, ABS_RX, -32767, 32767, 0, 0);
+ input_set_abs_params(input, ABS_RY, -32767, 32767, 0, 0);
+@@ -795,8 +795,8 @@ static int steam_input_register(struct steam_device *steam)
+ input_abs_set_res(input, ABS_RY, STEAM_DECK_JOYSTICK_RESOLUTION);
+ input_abs_set_res(input, ABS_HAT1X, STEAM_PAD_RESOLUTION);
+ input_abs_set_res(input, ABS_HAT1Y, STEAM_PAD_RESOLUTION);
+- input_abs_set_res(input, ABS_HAT2Y, STEAM_DECK_TRIGGER_RESOLUTION);
+- input_abs_set_res(input, ABS_HAT2X, STEAM_DECK_TRIGGER_RESOLUTION);
++ input_abs_set_res(input, ABS_Z, STEAM_DECK_TRIGGER_RESOLUTION);
++ input_abs_set_res(input, ABS_RZ, STEAM_DECK_TRIGGER_RESOLUTION);
+ } else {
+ input_set_abs_params(input, ABS_HAT2Y, 0, 255, 0, 0);
+ input_set_abs_params(input, ABS_HAT2X, 0, 255, 0, 0);
+@@ -1661,8 +1661,8 @@ static void steam_do_deck_input_event(struct steam_device *steam,
+ input_report_abs(input, ABS_RX, apply_deadzone(steam_le16(data + 52), 800));
+ input_report_abs(input, ABS_RY, apply_deadzone(-steam_le16(data + 54), 800));
+
+- input_report_abs(input, ABS_HAT2Y, steam_le16(data + 44));
+- input_report_abs(input, ABS_HAT2X, steam_le16(data + 46));
++ input_report_abs(input, ABS_Z, steam_le16(data + 44));
++ input_report_abs(input, ABS_RZ, steam_le16(data + 46));
+
+ input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
+ input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
+--
+2.52.0
+
diff --git a/board/recalbox/x86/kernel_patches/0005-steamdeck-disable-TL2-TR2-for-triggers.patch b/board/recalbox/x86/kernel_patches/0005-steamdeck-disable-TL2-TR2-for-triggers.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c9aafeb0a9e3fd44cce8d4be914e2afba9b8f1fd
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/0005-steamdeck-disable-TL2-TR2-for-triggers.patch
@@ -0,0 +1,49 @@
+From 05fbe207fd2904cd66a48d10bd51807ec2883534 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Thu, 11 Dec 2025 22:30:59 +0100
+Subject: [PATCH 5/5] steamdeck disable TL2/TR2 for triggers
+
+---
+ drivers/hid/hid-steam.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
+index 511275f2b0a5..096401680059 100644
+--- a/drivers/hid/hid-steam.c
++++ b/drivers/hid/hid-steam.c
+@@ -739,8 +739,8 @@ static int steam_input_register(struct steam_device *steam)
+ input->id.product = hdev->product;
+ input->id.version = hdev->version;
+
+- input_set_capability(input, EV_KEY, BTN_TR2);
+- input_set_capability(input, EV_KEY, BTN_TL2);
++// input_set_capability(input, EV_KEY, BTN_TR2);
++// input_set_capability(input, EV_KEY, BTN_TL2);
+ input_set_capability(input, EV_KEY, BTN_TR);
+ input_set_capability(input, EV_KEY, BTN_TL);
+ input_set_capability(input, EV_KEY, BTN_Y);
+@@ -1480,8 +1480,8 @@ static void steam_do_input_event(struct steam_device *steam,
+ input_report_abs(input, ABS_RX, steam_le16(data + 20));
+ input_report_abs(input, ABS_RY, -steam_le16(data + 22));
+
+- input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
+- input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
++// input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
++// input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
+ input_event(input, EV_KEY, BTN_TR, !!(b8 & BIT(2)));
+ input_event(input, EV_KEY, BTN_TL, !!(b8 & BIT(3)));
+ input_event(input, EV_KEY, BTN_Y, !!(b8 & BIT(4)));
+@@ -1664,8 +1664,8 @@ static void steam_do_deck_input_event(struct steam_device *steam,
+ input_report_abs(input, ABS_Z, steam_le16(data + 44));
+ input_report_abs(input, ABS_RZ, steam_le16(data + 46));
+
+- input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
+- input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
++// input_event(input, EV_KEY, BTN_TR2, !!(b8 & BIT(0)));
++// input_event(input, EV_KEY, BTN_TL2, !!(b8 & BIT(1)));
+ input_event(input, EV_KEY, BTN_TR, !!(b8 & BIT(2)));
+ input_event(input, EV_KEY, BTN_TL, !!(b8 & BIT(3)));
+ input_event(input, EV_KEY, BTN_Y, !!(b8 & BIT(4)));
+--
+2.52.0
+
diff --git a/board/recalbox/x86/kernel_patches/9998-0001-handheld.patch b/board/recalbox/x86/kernel_patches/9998-0001-handheld.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7e5d75085d2c31a86c1f3adc4cee257a9c3be205
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/9998-0001-handheld.patch
@@ -0,0 +1,2834 @@
+From 0a1530b5d25691ff8c00374120a4948f6f7d2a3c Mon Sep 17 00:00:00 2001
+From: Eric Naim
+Date: Sat, 3 May 2025 18:40:48 +0800
+Subject: [PATCH] handheld
+
+Signed-off-by: Eric Naim
+---
+ .../wmi/devices/msi-wmi-platform.rst | 30 +-
+ drivers/extcon/Kconfig | 7 +
+ drivers/extcon/Makefile | 1 +
+ drivers/extcon/extcon-steamdeck.c | 180 +++
+ drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h | 2 -
+ .../gpu/drm/amd/amdgpu/atombios_encoders.c | 10 +-
+ drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c | 2 +-
+ .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 38 +-
+ .../amd/display/dc/hwss/dce110/dce110_hwseq.c | 9 +
+ .../drm/amd/display/dc/link/link_validation.c | 11 +
+ .../gpu/drm/drm_panel_orientation_quirks.c | 36 +
+ drivers/hid/hid-ids.h | 1 +
+ drivers/hid/hid-input.c | 2 +
+ drivers/hwmon/Kconfig | 11 +
+ drivers/hwmon/Makefile | 1 +
+ drivers/hwmon/steamdeck-hwmon.c | 294 ++++
+ drivers/leds/Kconfig | 7 +
+ drivers/leds/Makefile | 1 +
+ drivers/leds/leds-steamdeck.c | 74 +
+ drivers/mfd/Kconfig | 11 +
+ drivers/mfd/Makefile | 2 +
+ drivers/mfd/steamdeck.c | 147 ++
+ drivers/net/wireless/ath/ath11k/core.c | 2 +-
+ drivers/platform/x86/Kconfig | 3 +
+ drivers/platform/x86/msi-wmi-platform.c | 1225 +++++++++++++++--
+ drivers/video/backlight/backlight.c | 2 +
+ sound/soc/amd/acp/acp-mach.h | 2 +-
+ sound/soc/codecs/max98388.c | 24 +-
+ 28 files changed, 2028 insertions(+), 107 deletions(-)
+ create mode 100644 drivers/extcon/extcon-steamdeck.c
+ create mode 100644 drivers/hwmon/steamdeck-hwmon.c
+ create mode 100644 drivers/leds/leds-steamdeck.c
+ create mode 100644 drivers/mfd/steamdeck.c
+
+diff --git a/Documentation/wmi/devices/msi-wmi-platform.rst b/Documentation/wmi/devices/msi-wmi-platform.rst
+index 73197b31926a..ac5f1c72da90 100644
+--- a/Documentation/wmi/devices/msi-wmi-platform.rst
++++ b/Documentation/wmi/devices/msi-wmi-platform.rst
+@@ -138,10 +138,6 @@ input data, the meaning of which depends on the subfeature being accessed.
+ The output buffer contains a single byte which signals success or failure (``0x00`` on failure)
+ and 31 bytes of output data, the meaning if which depends on the subfeature being accessed.
+
+-.. note::
+- The ACPI control method responsible for handling the WMI method calls is not thread-safe.
+- This is a firmware bug that needs to be handled inside the driver itself.
+-
+ WMI method Get_EC()
+ -------------------
+
+@@ -169,6 +165,32 @@ The fan RPM readings can be calculated with the following formula:
+
+ If the fan speed reading is zero, then the fan RPM is zero too.
+
++The subfeature ``0x01`` is used to retrieve the fan speed table for the CPU fan. The output
++data contains the fan speed table and two bytes with unknown data. The fan speed table
++consists of six 8-bit entries, each containing a fan speed value in percent.
++
++The subfeature ``0x02`` is used tho retrieve the same data for the GPU fan.
++
++WMI method Set_Fan()
++--------------------
++
++The fan speed tables can be accessed using subfeature ``0x01`` (CPU fan) and subfeature ``0x02``
++(GPU fan). The input data has the same format as the output data of the ``Get_Fan`` WMI method.
++
++WMI method Get_AP()
++-------------------
++
++The current fan mode can be accessed using subfeature ``0x01``. The output data contains a flag
++byte and two bytes of unknown data. If the 7th bit inside the flag byte is cleared then all fans
++are operating in automatic mode, otherwise the fans operate based on the fan speed tables
++accessible thru the ``Get_Fan``/``Set_Fan`` WMI methods.
++
++WMI method Set_AP()
++-------------------
++
++The current fan mode can be changed using subfeature ``0x01``. The input data has the same format
++as the output data of the ``Get_AP`` WMI method.
++
+ WMI method Get_WMI()
+ --------------------
+
+diff --git a/drivers/extcon/Kconfig b/drivers/extcon/Kconfig
+index a6f6d467aacf..4adec844c4b4 100644
+--- a/drivers/extcon/Kconfig
++++ b/drivers/extcon/Kconfig
+@@ -214,4 +214,11 @@ config EXTCON_RTK_TYPE_C
+ The DHC (Digital Home Hub) RTD series SoC contains a type c module.
+ This driver will detect the status of the type-c port.
+
++config EXTCON_STEAMDECK
++ tristate "Steam Deck extcon support"
++ depends on MFD_STEAMDECK
++ help
++ Say Y here to enable support of USB Type C cable detection extcon
++ support on Steam Deck devices
++
+ endif
+diff --git a/drivers/extcon/Makefile b/drivers/extcon/Makefile
+index 0d6d23faf748..6eb613e0bcba 100644
+--- a/drivers/extcon/Makefile
++++ b/drivers/extcon/Makefile
+@@ -27,3 +27,4 @@ obj-$(CONFIG_EXTCON_USB_GPIO) += extcon-usb-gpio.o
+ obj-$(CONFIG_EXTCON_USBC_CROS_EC) += extcon-usbc-cros-ec.o
+ obj-$(CONFIG_EXTCON_USBC_TUSB320) += extcon-usbc-tusb320.o
+ obj-$(CONFIG_EXTCON_RTK_TYPE_C) += extcon-rtk-type-c.o
++obj-$(CONFIG_EXTCON_STEAMDECK) += extcon-steamdeck.o
+diff --git a/drivers/extcon/extcon-steamdeck.c b/drivers/extcon/extcon-steamdeck.c
+new file mode 100644
+index 000000000000..49cb5d30bf6b
+--- /dev/null
++++ b/drivers/extcon/extcon-steamdeck.c
+@@ -0,0 +1,180 @@
++
++#include
++#include
++#include
++
++#define ACPI_STEAMDECK_NOTIFY_STATUS 0x80
++
++/* 0 - port connected, 1 -port disconnected */
++#define ACPI_STEAMDECK_PORT_CONNECT BIT(0)
++/* 0 - Upstream Facing Port, 1 - Downdstream Facing Port */
++#define ACPI_STEAMDECK_CUR_DATA_ROLE BIT(3)
++/*
++ * Debouncing delay to allow negotiation process to settle. 2s value
++ * was arrived at via trial and error.
++ */
++#define STEAMDECK_ROLE_SWITCH_DELAY (msecs_to_jiffies(2000))
++
++struct steamdeck_extcon {
++ struct acpi_device *adev;
++ struct delayed_work role_work;
++ struct extcon_dev *edev;
++ struct device *dev;
++};
++
++static int steamdeck_read_pdcs(struct steamdeck_extcon *sd, unsigned long long *pdcs)
++{
++ acpi_status status;
++
++ status = acpi_evaluate_integer(sd->adev->handle, "PDCS", NULL, pdcs);
++ if (ACPI_FAILURE(status)) {
++ dev_err(sd->dev, "PDCS evaluation failed: %s\n",
++ acpi_format_exception(status));
++ return -EIO;
++ }
++
++ return 0;
++}
++
++static void steamdeck_usb_role_work(struct work_struct *work)
++{
++ struct steamdeck_extcon *sd =
++ container_of(work, struct steamdeck_extcon, role_work.work);
++ unsigned long long pdcs;
++ bool usb_host;
++
++ if (steamdeck_read_pdcs(sd, &pdcs))
++ return;
++
++ /*
++ * We only care about these two
++ */
++ pdcs &= ACPI_STEAMDECK_PORT_CONNECT | ACPI_STEAMDECK_CUR_DATA_ROLE;
++
++ /*
++ * For "connect" events our role is determined by a bit in
++ * PDCS, for "disconnect" we switch to being a gadget
++ * unconditionally. The thinking for the latter is we don't
++ * want to start acting as a USB host until we get
++ * confirmation from the firmware that we are a USB host
++ */
++ usb_host = (pdcs & ACPI_STEAMDECK_PORT_CONNECT) ?
++ pdcs & ACPI_STEAMDECK_CUR_DATA_ROLE : false;
++
++ dev_dbg(sd->dev, "USB role is %s\n", usb_host ? "host" : "device");
++ WARN_ON(extcon_set_state_sync(sd->edev, EXTCON_USB_HOST,
++ usb_host));
++
++}
++
++static void steamdeck_notify(acpi_handle handle, u32 event, void *context)
++{
++ struct device *dev = context;
++ struct steamdeck_extcon *sd = dev_get_drvdata(dev);
++ unsigned long long pdcs;
++ unsigned long delay;
++
++ switch (event) {
++ case ACPI_STEAMDECK_NOTIFY_STATUS:
++ if (steamdeck_read_pdcs(sd, &pdcs))
++ return;
++ /*
++ * We process "disconnect" events immediately and
++ * "connect" events with a delay to give the HW time
++ * to settle. For example attaching USB hub (at least
++ * for HW used for testing) will generate intermediary
++ * event with "host" bit not set, followed by the one
++ * that does have it set.
++ */
++ delay = (pdcs & ACPI_STEAMDECK_PORT_CONNECT) ?
++ STEAMDECK_ROLE_SWITCH_DELAY : 0;
++
++ queue_delayed_work(system_long_wq, &sd->role_work, delay);
++ break;
++ default:
++ dev_warn(dev, "Unsupported event [0x%x]\n", event);
++ }
++}
++
++static void steamdeck_remove_notify_handler(void *data)
++{
++ struct steamdeck_extcon *sd = data;
++
++ acpi_remove_notify_handler(sd->adev->handle, ACPI_DEVICE_NOTIFY,
++ steamdeck_notify);
++ cancel_delayed_work_sync(&sd->role_work);
++}
++
++static const unsigned int steamdeck_extcon_cable[] = {
++ EXTCON_USB,
++ EXTCON_USB_HOST,
++ EXTCON_CHG_USB_SDP,
++ EXTCON_CHG_USB_CDP,
++ EXTCON_CHG_USB_DCP,
++ EXTCON_CHG_USB_ACA,
++ EXTCON_NONE,
++};
++
++static int steamdeck_extcon_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct steamdeck_extcon *sd;
++ acpi_status status;
++ int ret;
++
++ sd = devm_kzalloc(dev, sizeof(*sd), GFP_KERNEL);
++ if (!sd)
++ return -ENOMEM;
++
++ INIT_DELAYED_WORK(&sd->role_work, steamdeck_usb_role_work);
++ platform_set_drvdata(pdev, sd);
++ sd->adev = ACPI_COMPANION(dev->parent);
++ sd->dev = dev;
++ sd->edev = devm_extcon_dev_allocate(dev, steamdeck_extcon_cable);
++ if (IS_ERR(sd->edev))
++ return PTR_ERR(sd->edev);
++
++ ret = devm_extcon_dev_register(dev, sd->edev);
++ if (ret < 0) {
++ dev_err(dev, "Failed to register extcon device: %d\n", ret);
++ return ret;
++ }
++
++ /*
++ * Set initial role value
++ */
++ queue_delayed_work(system_long_wq, &sd->role_work, 0);
++ flush_delayed_work(&sd->role_work);
++
++ status = acpi_install_notify_handler(sd->adev->handle,
++ ACPI_DEVICE_NOTIFY,
++ steamdeck_notify,
++ dev);
++ if (ACPI_FAILURE(status)) {
++ dev_err(dev, "Error installing ACPI notify handler\n");
++ return -EIO;
++ }
++
++ ret = devm_add_action_or_reset(dev, steamdeck_remove_notify_handler,
++ sd);
++ return ret;
++}
++
++static const struct platform_device_id steamdeck_extcon_id_table[] = {
++ { .name = "steamdeck-extcon" },
++ {}
++};
++MODULE_DEVICE_TABLE(platform, steamdeck_extcon_id_table);
++
++static struct platform_driver steamdeck_extcon_driver = {
++ .probe = steamdeck_extcon_probe,
++ .driver = {
++ .name = "steamdeck-extcon",
++ },
++ .id_table = steamdeck_extcon_id_table,
++};
++module_platform_driver(steamdeck_extcon_driver);
++
++MODULE_AUTHOR("Andrey Smirnov ");
++MODULE_DESCRIPTION("Steam Deck extcon driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+index 6da4f946cac0..5b639276939d 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_mode.h
+@@ -435,8 +435,6 @@ struct amdgpu_mode_info {
+ struct drm_property *regamma_tf_property;
+ };
+
+-#define AMDGPU_MAX_BL_LEVEL 0xFF
+-
+ struct amdgpu_backlight_privdata {
+ struct amdgpu_encoder *encoder;
+ uint8_t negative;
+diff --git a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
+index a51f3414b65d..bc0f9759c5c5 100644
+--- a/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
++++ b/drivers/gpu/drm/amd/amdgpu/atombios_encoders.c
+@@ -39,6 +39,10 @@
+ #include
+ #include "bif/bif_4_1_d.h"
+
++
++/* Maximum backlight level. */
++#define AMDGPU_ATOM_MAX_BL_LEVEL 0xFF
++
+ u8
+ amdgpu_atombios_encoder_get_backlight_level_from_reg(struct amdgpu_device *adev)
+ {
+@@ -127,8 +131,8 @@ static u8 amdgpu_atombios_encoder_backlight_level(struct backlight_device *bd)
+ /* Convert brightness to hardware level */
+ if (bd->props.brightness < 0)
+ level = 0;
+- else if (bd->props.brightness > AMDGPU_MAX_BL_LEVEL)
+- level = AMDGPU_MAX_BL_LEVEL;
++ else if (bd->props.brightness > AMDGPU_ATOM_MAX_BL_LEVEL)
++ level = AMDGPU_ATOM_MAX_BL_LEVEL;
+ else
+ level = bd->props.brightness;
+
+@@ -198,7 +202,7 @@ void amdgpu_atombios_encoder_init_backlight(struct amdgpu_encoder *amdgpu_encode
+ }
+
+ memset(&props, 0, sizeof(props));
+- props.max_brightness = AMDGPU_MAX_BL_LEVEL;
++ props.max_brightness = AMDGPU_ATOM_MAX_BL_LEVEL;
+ props.type = BACKLIGHT_RAW;
+ snprintf(bl_name, sizeof(bl_name),
+ "amdgpu_bl%d", dev->primary->index);
+diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
+index b1818e87889a..f13e5eecd32a 100644
+--- a/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
++++ b/drivers/gpu/drm/amd/amdgpu/sdma_v5_2.c
+@@ -1339,7 +1339,7 @@ static int sdma_v5_2_sw_init(struct amdgpu_ip_block *ip_block)
+ for (i = 0; i < adev->sdma.num_instances; i++) {
+ ring = &adev->sdma.instance[i].ring;
+ ring->ring_obj = NULL;
+- ring->use_doorbell = true;
++ ring->use_doorbell = false;
+ ring->me = i;
+
+ DRM_INFO("use_doorbell being set to: [%s]\n",
+diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+index ee177942738f..4b0a48f2f440 100644
+--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+@@ -164,6 +164,9 @@ MODULE_FIRMWARE(FIRMWARE_DCN_401_DMUB);
+ /* Number of bytes in PSP footer for firmware. */
+ #define PSP_FOOTER_BYTES 0x100
+
++/* Maximum backlight level. */
++#define AMDGPU_MAX_BL_LEVEL 0xFFFF
++
+ /**
+ * DOC: overview
+ *
+@@ -4726,7 +4729,7 @@ static int amdgpu_dm_mode_config_init(struct amdgpu_device *adev)
+ return 0;
+ }
+
+-#define AMDGPU_DM_DEFAULT_MIN_BACKLIGHT 12
++#define AMDGPU_DM_DEFAULT_MIN_BACKLIGHT 0
+ #define AMDGPU_DM_DEFAULT_MAX_BACKLIGHT 255
+ #define AMDGPU_DM_MIN_SPREAD ((AMDGPU_DM_DEFAULT_MAX_BACKLIGHT - AMDGPU_DM_DEFAULT_MIN_BACKLIGHT) / 2)
+ #define AUX_BL_DEFAULT_TRANSITION_TIME_MS 50
+@@ -4760,11 +4763,27 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm,
+
+ if (caps.caps_valid) {
+ dm->backlight_caps[bl_idx].caps_valid = true;
++
++ printk(KERN_NOTICE"VLV Successfully queried backlight range over ACPI: %d %d\n",
++ (int) caps.min_input_signal, (int) caps.max_input_signal);
++
++ if ( caps.min_input_signal != AMDGPU_DM_DEFAULT_MIN_BACKLIGHT ||
++ caps.max_input_signal != AMDGPU_DM_DEFAULT_MAX_BACKLIGHT )
++ {
++ caps.min_input_signal = AMDGPU_DM_DEFAULT_MIN_BACKLIGHT;
++ caps.max_input_signal = AMDGPU_DM_DEFAULT_MAX_BACKLIGHT;
++
++ printk(KERN_NOTICE"VLV OVERRIDE backlight range: %d %d\n",
++ (int) caps.min_input_signal, (int) caps.max_input_signal);
++ }
++
+ if (caps.aux_support)
+ return;
+ dm->backlight_caps[bl_idx].min_input_signal = caps.min_input_signal;
+ dm->backlight_caps[bl_idx].max_input_signal = caps.max_input_signal;
+ } else {
++ printk(KERN_NOTICE"VLV ACPI does not provide backlight range, using defaults: %d %d\n",
++ AMDGPU_DM_DEFAULT_MIN_BACKLIGHT, AMDGPU_DM_DEFAULT_MAX_BACKLIGHT);
+ dm->backlight_caps[bl_idx].min_input_signal =
+ AMDGPU_DM_DEFAULT_MIN_BACKLIGHT;
+ dm->backlight_caps[bl_idx].max_input_signal =
+@@ -4774,6 +4793,9 @@ static void amdgpu_dm_update_backlight_caps(struct amdgpu_display_manager *dm,
+ if (dm->backlight_caps[bl_idx].aux_support)
+ return;
+
++ printk(KERN_NOTICE"VLV Kernel built without ACPI. using backlight range defaults: %d %d\n",
++ AMDGPU_DM_DEFAULT_MIN_BACKLIGHT, AMDGPU_DM_DEFAULT_MAX_BACKLIGHT);
++
+ dm->backlight_caps[bl_idx].min_input_signal = AMDGPU_DM_DEFAULT_MIN_BACKLIGHT;
+ dm->backlight_caps[bl_idx].max_input_signal = AMDGPU_DM_DEFAULT_MAX_BACKLIGHT;
+ #endif
+@@ -4805,9 +4827,9 @@ static u32 convert_brightness_from_user(const struct amdgpu_dm_backlight_caps *c
+ if (!get_brightness_range(caps, &min, &max))
+ return brightness;
+
+- // Rescale 0..255 to min..max
+- return min + DIV_ROUND_CLOSEST((max - min) * brightness,
+- AMDGPU_MAX_BL_LEVEL);
++ // Rescale 0..AMDGPU_MAX_BL_LEVEL to min..max
++ return min + DIV_ROUND_CLOSEST_ULL((u64)(max - min) * brightness,
++ AMDGPU_MAX_BL_LEVEL);
+ }
+
+ static u32 convert_brightness_to_user(const struct amdgpu_dm_backlight_caps *caps,
+@@ -4820,9 +4842,9 @@ static u32 convert_brightness_to_user(const struct amdgpu_dm_backlight_caps *cap
+
+ if (brightness < min)
+ return 0;
+- // Rescale min..max to 0..255
+- return DIV_ROUND_CLOSEST(AMDGPU_MAX_BL_LEVEL * (brightness - min),
+- max - min);
++ // Rescale min..max to 0..AMDGPU_MAX_BL_LEVEL
++ return DIV_ROUND_CLOSEST_ULL((u64)AMDGPU_MAX_BL_LEVEL * (brightness - min),
++ max - min);
+ }
+
+ static void amdgpu_dm_backlight_set_level(struct amdgpu_display_manager *dm,
+@@ -9224,7 +9246,7 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
+ int planes_count = 0, vpos, hpos;
+ unsigned long flags;
+ u32 target_vblank, last_flip_vblank;
+- bool vrr_active = amdgpu_dm_crtc_vrr_active(acrtc_state);
++ bool vrr_active = true;//amdgpu_dm_crtc_vrr_active(acrtc_state);
+ bool cursor_update = false;
+ bool pflip_present = false;
+ bool dirty_rects_changed = false;
+diff --git a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
+index 81f4c386c287..1f9e10caf456 100644
+--- a/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
++++ b/drivers/gpu/drm/amd/display/dc/hwss/dce110/dce110_hwseq.c
+@@ -95,6 +95,8 @@
+ #define FN(reg_name, field_name) \
+ hws->shifts->field_name, hws->masks->field_name
+
++static const uint8_t DP_SINK_BRANCH_DEV_NAME_KT50X0[] = "KT50X0!";
++
+ struct dce110_hw_seq_reg_offsets {
+ uint32_t crtc;
+ };
+@@ -3243,6 +3245,13 @@ void dce110_enable_dp_link_output(
+ link->dc->res_pool->dp_clock_source;
+ const struct link_hwss *link_hwss = get_link_hwss(link, link_res);
+ unsigned int i;
++ if (link->ctx->dce_version == DCN_VERSION_3_01 &&
++ link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_0060AD &&
++ memcmp(&link->dpcd_caps.branch_dev_name,
++ DP_SINK_BRANCH_DEV_NAME_KT50X0,
++ sizeof(link->dpcd_caps.branch_dev_name)) == 0) {
++ msleep(2000);
++ }
+
+ /*
+ * Add the logic to extract BOTH power up and power down sequences
+diff --git a/drivers/gpu/drm/amd/display/dc/link/link_validation.c b/drivers/gpu/drm/amd/display/dc/link/link_validation.c
+index 29606fda029d..ff127f8a405b 100644
+--- a/drivers/gpu/drm/amd/display/dc/link/link_validation.c
++++ b/drivers/gpu/drm/amd/display/dc/link/link_validation.c
+@@ -35,6 +35,8 @@
+
+ #define DC_LOGGER_INIT(logger)
+
++static const uint8_t DP_SINK_BRANCH_DEV_NAME_KT50X0[] = "KT50X0!";
++
+ static uint32_t get_tmds_output_pixel_clock_100hz(const struct dc_crtc_timing *timing)
+ {
+
+@@ -276,6 +278,15 @@ static bool dp_validate_mode_timing(
+ timing->v_addressable == (uint32_t) 480)
+ return true;
+
++ if (link->ctx->dce_version == DCN_VERSION_3_01 &&
++ link->dpcd_caps.sink_dev_id == DP_BRANCH_DEVICE_ID_0060AD &&
++ memcmp(&link->dpcd_caps.branch_dev_name,
++ DP_SINK_BRANCH_DEV_NAME_KT50X0,
++ sizeof(link->dpcd_caps.branch_dev_name)) == 0) {
++ if (timing->pix_clk_100hz / 10 >= (uint32_t) 1200000)
++ return false; /* KT50X0 does not support Pxl clock >= 1200MHz */
++ }
++
+ link_setting = dp_get_verified_link_cap(link);
+
+ /* TODO: DYNAMIC_VALIDATION needs to be implemented */
+diff --git a/drivers/gpu/drm/drm_panel_orientation_quirks.c b/drivers/gpu/drm/drm_panel_orientation_quirks.c
+index c554ad8f246b..8a323ba824b1 100644
+--- a/drivers/gpu/drm/drm_panel_orientation_quirks.c
++++ b/drivers/gpu/drm/drm_panel_orientation_quirks.c
+@@ -485,6 +485,42 @@ static const struct dmi_system_id orientation_data[] = {
+ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONE XPLAYER"),
+ },
+ .driver_data = (void *)&lcd1200x1920_leftside_up,
++ }, { /* OneXPlayer X1 AMD */
++ .matches = {
++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONEXPLAYER X1 A"),
++ },
++ .driver_data = (void *)&lcd1600x2560_leftside_up,
++ }, { /* OneXPlayer X1 AMD Strix Point */
++ .matches = {
++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONEXPLAYER X1Pro"),
++ },
++ .driver_data = (void *)&lcd1600x2560_leftside_up,
++ }, { /* OneXPlayer X1 mini (AMD) */
++ .matches = {
++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONEXPLAYER X1 mini"),
++ },
++ .driver_data = (void *)&lcd1600x2560_leftside_up,
++ }, { /* OneXPlayer OneXFly F1 Pro (OLED) */
++ .matches = {
++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONEXPLAYER F1Pro"),
++ },
++ .driver_data = (void *)&lcd1080x1920_leftside_up,
++ }, { /* OneXPlayer OneXFly F1 Pro (OLED) LE Red variant */
++ .matches = {
++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ONEXPLAYER F1 EVA-02"),
++ },
++ .driver_data = (void *)&lcd1080x1920_leftside_up,
++ }, { /* Zotac Gaming Zone (OLED) */
++ .matches = {
++ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "ZOTAC"),
++ DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "ZOTAC GAMING ZONE"),
++ },
++ .driver_data = (void *)&lcd1080x1920_leftside_up,
+ }, { /* OrangePi Neo */
+ .matches = {
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "OrangePi"),
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index b716cafc63b1..49816393230e 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -1045,6 +1045,7 @@
+ #define USB_VENDOR_ID_NOVATEK 0x0603
+ #define USB_DEVICE_ID_NOVATEK_PCT 0x0600
+ #define USB_DEVICE_ID_NOVATEK_MOUSE 0x1602
++#define I2C_DEVICE_ID_ONEXPLAYER_X1 0xF001
+
+ #define USB_VENDOR_ID_NTI 0x0757
+ #define USB_DEVICE_ID_USB_SUN 0x0a00
+diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c
+index 9d80635a91eb..08e87577feef 100644
+--- a/drivers/hid/hid-input.c
++++ b/drivers/hid/hid-input.c
+@@ -390,6 +390,8 @@ static const struct hid_device_id hid_battery_quirks[] = {
+ * set HID_BATTERY_QUIRK_IGNORE for all Elan I2C-HID devices.
+ */
+ { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_BATTERY_QUIRK_IGNORE },
++ { HID_I2C_DEVICE(USB_VENDOR_ID_NOVATEK, I2C_DEVICE_ID_ONEXPLAYER_X1),
++ HID_BATTERY_QUIRK_IGNORE },
+ {}
+ };
+
+diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
+index 4cbaba15d86e..12bfba7491c1 100644
+--- a/drivers/hwmon/Kconfig
++++ b/drivers/hwmon/Kconfig
+@@ -2089,6 +2089,17 @@ config SENSORS_SCH5636
+ This driver can also be built as a module. If so, the module
+ will be called sch5636.
+
++config SENSORS_STEAMDECK
++ tristate "Steam Deck EC sensors"
++ depends on MFD_STEAMDECK
++ help
++ If you say yes here you get support for the hardware
++ monitoring features exposed by EC firmware on Steam Deck
++ devices
++
++ This driver can also be built as a module. If so, the module
++ will be called steamdeck-hwmon.
++
+ config SENSORS_STTS751
+ tristate "ST Microelectronics STTS751"
+ depends on I2C
+diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
+index b7ef0f0562d3..664e79b0995f 100644
+--- a/drivers/hwmon/Makefile
++++ b/drivers/hwmon/Makefile
+@@ -210,6 +210,7 @@ obj-$(CONFIG_SENSORS_SMSC47B397)+= smsc47b397.o
+ obj-$(CONFIG_SENSORS_SMSC47M1) += smsc47m1.o
+ obj-$(CONFIG_SENSORS_SMSC47M192)+= smsc47m192.o
+ obj-$(CONFIG_SENSORS_SPARX5) += sparx5-temp.o
++obj-$(CONFIG_SENSORS_STEAMDECK) += steamdeck-hwmon.o
+ obj-$(CONFIG_SENSORS_SPD5118) += spd5118.o
+ obj-$(CONFIG_SENSORS_STTS751) += stts751.o
+ obj-$(CONFIG_SENSORS_SURFACE_FAN)+= surface_fan.o
+diff --git a/drivers/hwmon/steamdeck-hwmon.c b/drivers/hwmon/steamdeck-hwmon.c
+new file mode 100644
+index 000000000000..9d0a5471b181
+--- /dev/null
++++ b/drivers/hwmon/steamdeck-hwmon.c
+@@ -0,0 +1,294 @@
++// SPDX-License-Identifier: GPL-2.0+
++/*
++ * Steam Deck EC sensors driver
++ *
++ * Copyright (C) 2021-2022 Valve Corporation
++ */
++
++#include
++#include
++#include
++
++#define STEAMDECK_HWMON_NAME "steamdeck-hwmon"
++
++struct steamdeck_hwmon {
++ struct acpi_device *adev;
++};
++
++static long
++steamdeck_hwmon_get(struct steamdeck_hwmon *sd, const char *method)
++{
++ unsigned long long val;
++ if (ACPI_FAILURE(acpi_evaluate_integer(sd->adev->handle,
++ (char *)method, NULL, &val)))
++ return -EIO;
++
++ return val;
++}
++
++static int
++steamdeck_hwmon_read(struct device *dev, enum hwmon_sensor_types type,
++ u32 attr, int channel, long *out)
++{
++ struct steamdeck_hwmon *sd = dev_get_drvdata(dev);
++
++ switch (type) {
++ case hwmon_curr:
++ if (attr != hwmon_curr_input)
++ return -EOPNOTSUPP;
++
++ *out = steamdeck_hwmon_get(sd, "PDAM");
++ if (*out < 0)
++ return *out;
++ break;
++ case hwmon_in:
++ if (attr != hwmon_in_input)
++ return -EOPNOTSUPP;
++
++ *out = steamdeck_hwmon_get(sd, "PDVL");
++ if (*out < 0)
++ return *out;
++ break;
++ case hwmon_temp:
++ if (attr != hwmon_temp_input)
++ return -EOPNOTSUPP;
++
++ *out = steamdeck_hwmon_get(sd, "BATT");
++ if (*out < 0)
++ return *out;
++ /*
++ * Assuming BATT returns deg C we need to mutiply it
++ * by 1000 to convert to mC
++ */
++ *out *= 1000;
++ break;
++ case hwmon_fan:
++ switch (attr) {
++ case hwmon_fan_input:
++ *out = steamdeck_hwmon_get(sd, "FANR");
++ if (*out < 0)
++ return *out;
++ break;
++ case hwmon_fan_target:
++ *out = steamdeck_hwmon_get(sd, "FSSR");
++ if (*out < 0)
++ return *out;
++ break;
++ case hwmon_fan_fault:
++ *out = steamdeck_hwmon_get(sd, "FANC");
++ if (*out < 0)
++ return *out;
++ /*
++ * FANC (Fan check):
++ * 0: Abnormal
++ * 1: Normal
++ */
++ *out = !*out;
++ break;
++ default:
++ return -EOPNOTSUPP;
++ }
++ break;
++ default:
++ return -EOPNOTSUPP;
++ }
++
++ return 0;
++}
++
++static int
++steamdeck_hwmon_read_string(struct device *dev, enum hwmon_sensor_types type,
++ u32 attr, int channel, const char **str)
++{
++ switch (type) {
++ /*
++ * These two aren't, strictly speaking, measured. EC
++ * firmware just reports what PD negotiation resulted
++ * in.
++ */
++ case hwmon_curr:
++ *str = "PD Contract Current";
++ break;
++ case hwmon_in:
++ *str = "PD Contract Voltage";
++ break;
++ case hwmon_temp:
++ *str = "Battery Temp";
++ break;
++ case hwmon_fan:
++ *str = "System Fan";
++ break;
++ default:
++ return -EOPNOTSUPP;
++ }
++
++ return 0;
++}
++
++static int
++steamdeck_hwmon_write(struct device *dev, enum hwmon_sensor_types type,
++ u32 attr, int channel, long val)
++{
++ struct steamdeck_hwmon *sd = dev_get_drvdata(dev);
++
++ if (type != hwmon_fan ||
++ attr != hwmon_fan_target)
++ return -EOPNOTSUPP;
++
++ val = clamp_val(val, 0, 7300);
++
++ if (ACPI_FAILURE(acpi_execute_simple_method(sd->adev->handle,
++ "FANS", val)))
++ return -EIO;
++
++ return 0;
++}
++
++static umode_t
++steamdeck_hwmon_is_visible(const void *data, enum hwmon_sensor_types type,
++ u32 attr, int channel)
++{
++ if (type == hwmon_fan &&
++ attr == hwmon_fan_target)
++ return 0644;
++
++ return 0444;
++}
++
++static const struct hwmon_channel_info *steamdeck_hwmon_info[] = {
++ HWMON_CHANNEL_INFO(in,
++ HWMON_I_INPUT | HWMON_I_LABEL),
++ HWMON_CHANNEL_INFO(curr,
++ HWMON_C_INPUT | HWMON_C_LABEL),
++ HWMON_CHANNEL_INFO(temp,
++ HWMON_T_INPUT | HWMON_T_LABEL),
++ HWMON_CHANNEL_INFO(fan,
++ HWMON_F_INPUT | HWMON_F_LABEL |
++ HWMON_F_TARGET | HWMON_F_FAULT),
++ NULL
++};
++
++static const struct hwmon_ops steamdeck_hwmon_ops = {
++ .is_visible = steamdeck_hwmon_is_visible,
++ .read = steamdeck_hwmon_read,
++ .read_string = steamdeck_hwmon_read_string,
++ .write = steamdeck_hwmon_write,
++};
++
++static const struct hwmon_chip_info steamdeck_hwmon_chip_info = {
++ .ops = &steamdeck_hwmon_ops,
++ .info = steamdeck_hwmon_info,
++};
++
++
++static ssize_t
++steamdeck_hwmon_simple_store(struct device *dev, const char *buf, size_t count,
++ const char *method,
++ unsigned long upper_limit)
++{
++ struct steamdeck_hwmon *sd = dev_get_drvdata(dev);
++ unsigned long value;
++
++ if (kstrtoul(buf, 10, &value) || value >= upper_limit)
++ return -EINVAL;
++
++ if (ACPI_FAILURE(acpi_execute_simple_method(sd->adev->handle,
++ (char *)method, value)))
++ return -EIO;
++
++ return count;
++}
++
++static ssize_t
++steamdeck_hwmon_simple_show(struct device *dev, char *buf,
++ const char *method)
++{
++ struct steamdeck_hwmon *sd = dev_get_drvdata(dev);
++ unsigned long value;
++
++ value = steamdeck_hwmon_get(sd, method);
++ if (value < 0)
++ return value;
++
++ return sprintf(buf, "%ld\n", value);
++}
++
++#define STEAMDECK_HWMON_ATTR_RW(_name, _set_method, _get_method, \
++ _upper_limit) \
++ static ssize_t _name##_show(struct device *dev, \
++ struct device_attribute *attr, \
++ char *buf) \
++ { \
++ return steamdeck_hwmon_simple_show(dev, buf, \
++ _get_method); \
++ } \
++ static ssize_t _name##_store(struct device *dev, \
++ struct device_attribute *attr, \
++ const char *buf, size_t count) \
++ { \
++ return steamdeck_hwmon_simple_store(dev, buf, count, \
++ _set_method, \
++ _upper_limit); \
++ } \
++ static DEVICE_ATTR_RW(_name)
++
++STEAMDECK_HWMON_ATTR_RW(max_battery_charge_level, "FCBL", "SFBL", 101);
++STEAMDECK_HWMON_ATTR_RW(max_battery_charge_rate, "CHGR", "GCHR", 101);
++
++static struct attribute *steamdeck_hwmon_attributes[] = {
++ &dev_attr_max_battery_charge_level.attr,
++ &dev_attr_max_battery_charge_rate.attr,
++ NULL
++};
++
++static const struct attribute_group steamdeck_hwmon_group = {
++ .attrs = steamdeck_hwmon_attributes,
++};
++
++static const struct attribute_group *steamdeck_hwmon_groups[] = {
++ &steamdeck_hwmon_group,
++ NULL
++};
++
++static int steamdeck_hwmon_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct steamdeck_hwmon *sd;
++ struct device *hwmon;
++
++ sd = devm_kzalloc(dev, sizeof(*sd), GFP_KERNEL);
++ if (!sd)
++ return -ENOMEM;
++
++ sd->adev = ACPI_COMPANION(dev->parent);
++ hwmon = devm_hwmon_device_register_with_info(dev,
++ "steamdeck_hwmon",
++ sd,
++ &steamdeck_hwmon_chip_info,
++ steamdeck_hwmon_groups);
++ if (IS_ERR(hwmon)) {
++ dev_err(dev, "Failed to register HWMON device");
++ return PTR_ERR(hwmon);
++ }
++
++ return 0;
++}
++
++static const struct platform_device_id steamdeck_hwmon_id_table[] = {
++ { .name = STEAMDECK_HWMON_NAME },
++ {}
++};
++MODULE_DEVICE_TABLE(platform, steamdeck_hwmon_id_table);
++
++static struct platform_driver steamdeck_hwmon_driver = {
++ .probe = steamdeck_hwmon_probe,
++ .driver = {
++ .name = STEAMDECK_HWMON_NAME,
++ },
++ .id_table = steamdeck_hwmon_id_table,
++};
++module_platform_driver(steamdeck_hwmon_driver);
++
++MODULE_AUTHOR("Andrey Smirnov ");
++MODULE_DESCRIPTION("Steam Deck EC sensors driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
+index 2b27d043921c..e39a279d5290 100644
+--- a/drivers/leds/Kconfig
++++ b/drivers/leds/Kconfig
+@@ -1003,6 +1003,13 @@ config LEDS_ACER_A500
+ This option enables support for the Power Button LED of
+ Acer Iconia Tab A500.
+
++config LEDS_STEAMDECK
++ tristate "LED support for Steam Deck"
++ depends on LEDS_CLASS && MFD_STEAMDECK
++ help
++ This option enabled support for the status LED (next to the
++ power button) on Steam Deck
++
+ source "drivers/leds/blink/Kconfig"
+
+ comment "Flash and Torch LED drivers"
+diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile
+index 6ad52e219ec6..2ec1c891388e 100644
+--- a/drivers/leds/Makefile
++++ b/drivers/leds/Makefile
+@@ -84,6 +84,7 @@ obj-$(CONFIG_LEDS_QNAP_MCU) += leds-qnap-mcu.o
+ obj-$(CONFIG_LEDS_REGULATOR) += leds-regulator.o
+ obj-$(CONFIG_LEDS_SC27XX_BLTC) += leds-sc27xx-bltc.o
+ obj-$(CONFIG_LEDS_ST1202) += leds-st1202.o
++obj-$(CONFIG_LEDS_STEAMDECK) += leds-steamdeck.o
+ obj-$(CONFIG_LEDS_SUN50I_A100) += leds-sun50i-a100.o
+ obj-$(CONFIG_LEDS_SUNFIRE) += leds-sunfire.o
+ obj-$(CONFIG_LEDS_SYSCON) += leds-syscon.o
+diff --git a/drivers/leds/leds-steamdeck.c b/drivers/leds/leds-steamdeck.c
+new file mode 100644
+index 000000000000..56d31d2dd099
+--- /dev/null
++++ b/drivers/leds/leds-steamdeck.c
+@@ -0,0 +1,74 @@
++// SPDX-License-Identifier: GPL-2.0+
++
++/*
++ * Steam Deck EC MFD LED cell driver
++ *
++ * Copyright (C) 2021-2022 Valve Corporation
++ *
++ */
++
++#include
++#include
++#include
++
++struct steamdeck_led {
++ struct acpi_device *adev;
++ struct led_classdev cdev;
++};
++
++static int steamdeck_leds_brightness_set(struct led_classdev *cdev,
++ enum led_brightness value)
++{
++ struct steamdeck_led *sd = container_of(cdev, struct steamdeck_led,
++ cdev);
++
++ if (ACPI_FAILURE(acpi_execute_simple_method(sd->adev->handle,
++ "CHBV", value)))
++ return -EIO;
++
++ return 0;
++}
++
++static int steamdeck_leds_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ struct steamdeck_led *sd;
++ int ret;
++
++ sd = devm_kzalloc(dev, sizeof(*sd), GFP_KERNEL);
++ if (!sd)
++ return -ENOMEM;
++
++ sd->adev = ACPI_COMPANION(dev->parent);
++
++ sd->cdev.name = "status:white";
++ sd->cdev.brightness_set_blocking = steamdeck_leds_brightness_set;
++ sd->cdev.max_brightness = 100;
++
++ ret = devm_led_classdev_register(dev, &sd->cdev);
++ if (ret) {
++ dev_err(dev, "Failed to register LEDs device: %d\n", ret);
++ return ret;
++ }
++
++ return 0;
++}
++
++static const struct platform_device_id steamdeck_leds_id_table[] = {
++ { .name = "steamdeck-leds" },
++ {}
++};
++MODULE_DEVICE_TABLE(platform, steamdeck_leds_id_table);
++
++static struct platform_driver steamdeck_leds_driver = {
++ .probe = steamdeck_leds_probe,
++ .driver = {
++ .name = "steamdeck-leds",
++ },
++ .id_table = steamdeck_leds_id_table,
++};
++module_platform_driver(steamdeck_leds_driver);
++
++MODULE_AUTHOR("Andrey Smirnov ");
++MODULE_DESCRIPTION("Steam Deck LEDs driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
+index 6b0682af6e32..d4ce0aaa652b 100644
+--- a/drivers/mfd/Kconfig
++++ b/drivers/mfd/Kconfig
+@@ -2439,5 +2439,16 @@ config MFD_UPBOARD_FPGA
+ To compile this driver as a module, choose M here: the module will be
+ called upboard-fpga.
+
++config MFD_STEAMDECK
++ tristate "Valve Steam Deck"
++ select MFD_CORE
++ depends on ACPI
++ depends on X86_64 || COMPILE_TEST
++ help
++ This driver registers various MFD cells that expose aspects
++ of Steam Deck specific ACPI functionality.
++
++ Say N here, unless you are running on Steam Deck hardware.
++
+ endmenu
+ endif
+diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
+index 9220eaf7cf12..16f91a3e162e 100644
+--- a/drivers/mfd/Makefile
++++ b/drivers/mfd/Makefile
+@@ -293,4 +293,6 @@ obj-$(CONFIG_MFD_QNAP_MCU) += qnap-mcu.o
+ obj-$(CONFIG_MFD_RSMU_I2C) += rsmu_i2c.o rsmu_core.o
+ obj-$(CONFIG_MFD_RSMU_SPI) += rsmu_spi.o rsmu_core.o
+
++obj-$(CONFIG_MFD_STEAMDECK) += steamdeck.o
++
+ obj-$(CONFIG_MFD_UPBOARD_FPGA) += upboard-fpga.o
+diff --git a/drivers/mfd/steamdeck.c b/drivers/mfd/steamdeck.c
+new file mode 100644
+index 000000000000..a60fa7db9141
+--- /dev/null
++++ b/drivers/mfd/steamdeck.c
+@@ -0,0 +1,147 @@
++// SPDX-License-Identifier: GPL-2.0+
++
++/*
++ * Steam Deck EC MFD core driver
++ *
++ * Copyright (C) 2021-2022 Valve Corporation
++ *
++ */
++
++#include
++#include
++#include
++
++#define STEAMDECK_STA_OK \
++ (ACPI_STA_DEVICE_ENABLED | \
++ ACPI_STA_DEVICE_PRESENT | \
++ ACPI_STA_DEVICE_FUNCTIONING)
++
++struct steamdeck {
++ struct acpi_device *adev;
++ struct device *dev;
++};
++
++#define STEAMDECK_ATTR_RO(_name, _method) \
++ static ssize_t _name##_show(struct device *dev, \
++ struct device_attribute *attr, \
++ char *buf) \
++ { \
++ struct steamdeck *sd = dev_get_drvdata(dev); \
++ unsigned long long val; \
++ \
++ if (ACPI_FAILURE(acpi_evaluate_integer( \
++ sd->adev->handle, \
++ _method, NULL, &val))) \
++ return -EIO; \
++ \
++ return sysfs_emit(buf, "%llu\n", val); \
++ } \
++ static DEVICE_ATTR_RO(_name)
++
++STEAMDECK_ATTR_RO(firmware_version, "PDFW");
++STEAMDECK_ATTR_RO(board_id, "BOID");
++
++static ssize_t controller_board_power_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct steamdeck *sd = dev_get_drvdata(dev);
++ bool enabled;
++ ssize_t ret = kstrtobool(buf, &enabled);
++
++ if (ret)
++ return ret;
++
++ if (ACPI_FAILURE(acpi_execute_simple_method(sd->adev->handle,
++ "SCBP", enabled)))
++ return -EIO;
++
++ return count;
++}
++static DEVICE_ATTR_WO(controller_board_power);
++
++static struct attribute *steamdeck_attrs[] = {
++ &dev_attr_firmware_version.attr,
++ &dev_attr_board_id.attr,
++ &dev_attr_controller_board_power.attr,
++ NULL
++};
++
++ATTRIBUTE_GROUPS(steamdeck);
++
++static const struct mfd_cell steamdeck_cells[] = {
++ { .name = "steamdeck-hwmon" },
++ { .name = "steamdeck-leds" },
++ { .name = "steamdeck-extcon" },
++};
++
++static void steamdeck_remove_sysfs_groups(void *data)
++{
++ struct steamdeck *sd = data;
++
++ sysfs_remove_groups(&sd->dev->kobj, steamdeck_groups);
++}
++
++static int steamdeck_probe(struct platform_device *pdev)
++{
++ struct device *dev = &pdev->dev;
++ unsigned long long sta;
++ struct steamdeck *sd;
++ acpi_status status;
++ int ret;
++
++ sd = devm_kzalloc(dev, sizeof(*sd), GFP_KERNEL);
++ if (!sd)
++ return -ENOMEM;
++ sd->adev = ACPI_COMPANION(dev);
++ sd->dev = dev;
++ platform_set_drvdata(pdev, sd);
++
++ status = acpi_evaluate_integer(sd->adev->handle, "_STA",
++ NULL, &sta);
++ if (ACPI_FAILURE(status)) {
++ dev_err(dev, "Status check failed (0x%x)\n", status);
++ return -EINVAL;
++ }
++
++ if ((sta & STEAMDECK_STA_OK) != STEAMDECK_STA_OK) {
++ dev_err(dev, "Device is not ready\n");
++ return -EINVAL;
++ }
++
++ ret = sysfs_create_groups(&dev->kobj, steamdeck_groups);
++ if (ret) {
++ dev_err(dev, "Failed to create sysfs group\n");
++ return ret;
++ }
++
++ ret = devm_add_action_or_reset(dev, steamdeck_remove_sysfs_groups,
++ sd);
++ if (ret) {
++ dev_err(dev, "Failed to register devres action\n");
++ return ret;
++ }
++
++ return devm_mfd_add_devices(dev, PLATFORM_DEVID_NONE,
++ steamdeck_cells, ARRAY_SIZE(steamdeck_cells),
++ NULL, 0, NULL);
++}
++
++static const struct acpi_device_id steamdeck_device_ids[] = {
++ { "VLV0100", 0 },
++ { "", 0 },
++};
++MODULE_DEVICE_TABLE(acpi, steamdeck_device_ids);
++
++static struct platform_driver steamdeck_driver = {
++ .probe = steamdeck_probe,
++ .driver = {
++ .name = "steamdeck",
++ .acpi_match_table = steamdeck_device_ids,
++ },
++};
++module_platform_driver(steamdeck_driver);
++
++MODULE_AUTHOR("Andrey Smirnov ");
++MODULE_DESCRIPTION("Steam Deck EC MFD core driver");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
+index 7edab99d3ae9..3d0fd8df9392 100644
+--- a/drivers/platform/x86/Kconfig
++++ b/drivers/platform/x86/Kconfig
+@@ -750,8 +750,11 @@ config MSI_WMI
+
+ config MSI_WMI_PLATFORM
+ tristate "MSI WMI Platform features"
++ depends on ACPI_BATTERY
+ depends on ACPI_WMI
+ depends on HWMON
++ select ACPI_PLATFORM_PROFILE
++ select FW_ATTR_CLASS
+ help
+ Say Y here if you want to have support for WMI-based platform features
+ like fan sensor access on MSI machines.
+diff --git a/drivers/platform/x86/msi-wmi-platform.c b/drivers/platform/x86/msi-wmi-platform.c
+index dc5e9878cb68..acd343f53be1 100644
+--- a/drivers/platform/x86/msi-wmi-platform.c
++++ b/drivers/platform/x86/msi-wmi-platform.c
+@@ -10,31 +10,39 @@
+ #include
+ #include
+ #include
+-#include
+ #include
+ #include
+ #include
++#include
+ #include
++#include
++#include
+ #include
++#include
+ #include
++#include
++#include
+ #include
+ #include
+ #include
+ #include
++#include
++#include
+ #include
+ #include
++#include
+
+ #include
+
++#include "firmware_attributes_class.h"
++
+ #define DRIVER_NAME "msi-wmi-platform"
+
+ #define MSI_PLATFORM_GUID "ABBC0F6E-8EA1-11d1-00A0-C90629100000"
+
+ #define MSI_WMI_PLATFORM_INTERFACE_VERSION 2
+
+-#define MSI_PLATFORM_WMI_MAJOR_OFFSET 1
+-#define MSI_PLATFORM_WMI_MINOR_OFFSET 2
+-
++/* Get_EC() and Set_EC() WMI methods */
+ #define MSI_PLATFORM_EC_FLAGS_OFFSET 1
+ #define MSI_PLATFORM_EC_MINOR_MASK GENMASK(3, 0)
+ #define MSI_PLATFORM_EC_MAJOR_MASK GENMASK(5, 4)
+@@ -42,6 +50,37 @@
+ #define MSI_PLATFORM_EC_IS_TIGERLAKE BIT(7)
+ #define MSI_PLATFORM_EC_VERSION_OFFSET 2
+
++/* Get_Fan() and Set_Fan() WMI methods */
++#define MSI_PLATFORM_FAN_SUBFEATURE_FAN_SPEED 0x0
++#define MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE 0x1
++#define MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE 0x2
++#define MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE 0x1
++#define MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE 0x2
++
++/* Get_AP() and Set_AP() WMI methods */
++#define MSI_PLATFORM_AP_SUBFEATURE_FAN_MODE 0x1
++#define MSI_PLATFORM_AP_FAN_FLAGS_OFFSET 1
++#define MSI_PLATFORM_AP_ENABLE_FAN_TABLES BIT(7)
++
++/* Get_Data() and Set_Data() Shift Mode Register */
++#define MSI_PLATFORM_SHIFT_ADDR 0xd2
++#define MSI_PLATFORM_SHIFT_DISABLE BIT(7)
++#define MSI_PLATFORM_SHIFT_ENABLE (BIT(7) | BIT(6))
++#define MSI_PLATFORM_SHIFT_SPORT (MSI_PLATFORM_SHIFT_ENABLE + 4)
++#define MSI_PLATFORM_SHIFT_COMFORT (MSI_PLATFORM_SHIFT_ENABLE + 0)
++#define MSI_PLATFORM_SHIFT_GREEN (MSI_PLATFORM_SHIFT_ENABLE + 1)
++#define MSI_PLATFORM_SHIFT_ECO (MSI_PLATFORM_SHIFT_ENABLE + 2)
++#define MSI_PLATFORM_SHIFT_USER (MSI_PLATFORM_SHIFT_ENABLE + 3)
++
++/* Get_Data() and Set_Data() Params */
++#define MSI_PLATFORM_PL1_ADDR 0x50
++#define MSI_PLATFORM_PL2_ADDR 0x51
++#define MSI_PLATFORM_BAT_ADDR 0xd7
++
++/* Get_WMI() WMI method */
++#define MSI_PLATFORM_WMI_MAJOR_OFFSET 1
++#define MSI_PLATFORM_WMI_MINOR_OFFSET 2
++
+ static bool force;
+ module_param_unsafe(force, bool, 0);
+ MODULE_PARM_DESC(force, "Force loading without checking for supported WMI interface versions");
+@@ -78,13 +117,73 @@ enum msi_wmi_platform_method {
+ MSI_PLATFORM_GET_WMI = 0x1d,
+ };
+
++struct msi_wmi_platform_quirk {
++ bool shift_mode; /* Shift mode is supported */
++ bool charge_threshold; /* Charge threshold is supported */
++ bool dual_fans; /* For devices with two hwmon fans */
++ bool restore_curves; /* Restore factory curves on unload */
++ int pl_min; /* Minimum PLx value */
++ int pl1_max; /* Maximum PL1 value */
++ int pl2_max; /* Maximum PL2 value */
++};
++
++struct msi_wmi_platform_factory_curves {
++ u8 cpu_fan_table[32];
++ u8 gpu_fan_table[32];
++ u8 cpu_temp_table[32];
++ u8 gpu_temp_table[32];
++};
++
+ struct msi_wmi_platform_data {
+ struct wmi_device *wdev;
+- struct mutex wmi_lock; /* Necessary when calling WMI methods */
++ struct msi_wmi_platform_quirk *quirks;
++ struct device *ppdev;
++ struct msi_wmi_platform_factory_curves factory_curves;
++ struct acpi_battery_hook battery_hook;
++ struct device_attribute battery_attr;
++ struct device *fw_attrs_dev;
++ struct kset *fw_attrs_kset;
++ struct mutex write_lock;
++};
++
++enum msi_fw_attr_id {
++ MSI_ATTR_PPT_PL1_SPL,
++ MSI_ATTR_PPT_PL2_SPPT,
++};
++
++static const char *const msi_fw_attr_name[] = {
++ [MSI_ATTR_PPT_PL1_SPL] = "ppt_pl1_spl",
++ [MSI_ATTR_PPT_PL2_SPPT] = "ppt_pl2_sppt",
++};
++
++static const char *const msi_fw_attr_desc[] = {
++ [MSI_ATTR_PPT_PL1_SPL] = "CPU Steady package limit (PL1/SPL)",
++ [MSI_ATTR_PPT_PL2_SPPT] = "CPU Boost slow package limit (PL2/SPPT)",
++};
++
++#define MSI_ATTR_LANGUAGE_CODE "en_US.UTF-8"
++
++struct msi_fw_attr {
++ struct msi_wmi_platform_data *data;
++ enum msi_fw_attr_id fw_attr_id;
++ struct attribute_group attr_group;
++ struct kobj_attribute display_name;
++ struct kobj_attribute current_value;
++ struct kobj_attribute min_value;
++ struct kobj_attribute max_value;
++
++ u32 min;
++ u32 max;
++
++ int (*get_value)(struct msi_wmi_platform_data *data,
++ struct msi_fw_attr *fw_attr, char *buf);
++ ssize_t (*set_value)(struct msi_wmi_platform_data *data,
++ struct msi_fw_attr *fw_attr, const char *buf,
++ size_t count);
+ };
+
+ struct msi_wmi_platform_debugfs_data {
+- struct msi_wmi_platform_data *data;
++ struct wmi_device *wdev;
+ enum msi_wmi_platform_method method;
+ struct rw_semaphore buffer_lock; /* Protects debugfs buffer */
+ size_t length;
+@@ -123,6 +222,53 @@ static const char * const msi_wmi_platform_debugfs_names[] = {
+ "get_wmi"
+ };
+
++static struct msi_wmi_platform_quirk quirk_default = {};
++static struct msi_wmi_platform_quirk quirk_gen1 = {
++ .shift_mode = true,
++ .charge_threshold = true,
++ .dual_fans = true,
++ .restore_curves = true,
++ .pl_min = 8,
++ .pl1_max = 43,
++ .pl2_max = 45
++};
++static struct msi_wmi_platform_quirk quirk_gen2 = {
++ .shift_mode = true,
++ .charge_threshold = true,
++ .dual_fans = true,
++ .restore_curves = true,
++ .pl_min = 8,
++ .pl1_max = 30,
++ .pl2_max = 37
++};
++
++static const struct dmi_system_id msi_quirks[] = {
++ {
++ .ident = "MSI Claw (gen 1)",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International Co., Ltd."),
++ DMI_MATCH(DMI_BOARD_NAME, "MS-1T41"),
++ },
++ .driver_data = &quirk_gen1,
++ },
++ {
++ .ident = "MSI Claw AI+ 7",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International Co., Ltd."),
++ DMI_MATCH(DMI_BOARD_NAME, "MS-1T42"),
++ },
++ .driver_data = &quirk_gen2,
++ },
++ {
++ .ident = "MSI Claw AI+ 8",
++ .matches = {
++ DMI_MATCH(DMI_SYS_VENDOR, "Micro-Star International Co., Ltd."),
++ DMI_MATCH(DMI_BOARD_NAME, "MS-1T52"),
++ },
++ .driver_data = &quirk_gen2,
++ },
++};
++
+ static int msi_wmi_platform_parse_buffer(union acpi_object *obj, u8 *output, size_t length)
+ {
+ if (obj->type != ACPI_TYPE_BUFFER)
+@@ -139,45 +285,316 @@ static int msi_wmi_platform_parse_buffer(union acpi_object *obj, u8 *output, siz
+ return 0;
+ }
+
+-static int msi_wmi_platform_query(struct msi_wmi_platform_data *data,
+- enum msi_wmi_platform_method method, u8 *input,
+- size_t input_length, u8 *output, size_t output_length)
++static int msi_wmi_platform_query(struct wmi_device *wdev, enum msi_wmi_platform_method method,
++ u8 *data, size_t length)
+ {
+ struct acpi_buffer out = { ACPI_ALLOCATE_BUFFER, NULL };
+ struct acpi_buffer in = {
+- .length = input_length,
+- .pointer = input
++ .length = length,
++ .pointer = data
+ };
+ union acpi_object *obj;
+ acpi_status status;
+ int ret;
+
+- if (!input_length || !output_length)
++ if (!length)
+ return -EINVAL;
+
+- /*
+- * The ACPI control method responsible for handling the WMI method calls
+- * is not thread-safe. Because of this we have to do the locking ourself.
+- */
+- scoped_guard(mutex, &data->wmi_lock) {
+- status = wmidev_evaluate_method(data->wdev, 0x0, method, &in, &out);
+- if (ACPI_FAILURE(status))
+- return -EIO;
+- }
++ status = wmidev_evaluate_method(wdev, 0x0, method, &in, &out);
++ if (ACPI_FAILURE(status))
++ return -EIO;
+
+ obj = out.pointer;
+ if (!obj)
+ return -ENODATA;
+
+- ret = msi_wmi_platform_parse_buffer(obj, output, output_length);
++ ret = msi_wmi_platform_parse_buffer(obj, data, length);
+ kfree(obj);
+
+ return ret;
+ }
+
++static ssize_t msi_wmi_platform_fan_table_show(struct device *dev, struct device_attribute *attr,
++ char *buf)
++{
++ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++ u8 buffer[32] = { sattr->nr };
++ u8 fan_percent;
++ int ret;
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_FAN, buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ fan_percent = buffer[sattr->index + 1];
++ if (fan_percent > 100)
++ return -EIO;
++
++ return sysfs_emit(buf, "%d\n", fixp_linear_interpolate(0, 0, 100, 255, fan_percent));
++}
++
++static ssize_t msi_wmi_platform_fan_table_store(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++ u8 buffer[32] = { sattr->nr };
++ long speed;
++ int ret;
++
++ ret = kstrtol(buf, 10, &speed);
++ if (ret < 0)
++ return ret;
++
++ speed = clamp_val(speed, 0, 255);
++
++ guard(mutex)(&data->write_lock);
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_FAN, buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ buffer[0] = sattr->nr;
++ buffer[sattr->index + 1] = fixp_linear_interpolate(0, 0, 255, 100, speed);
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_FAN, buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t msi_wmi_platform_temp_table_show(struct device *dev, struct device_attribute *attr,
++ char *buf)
++{
++ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++ u8 buffer[32] = { sattr->nr };
++ u8 temp_c;
++ int ret;
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_TEMPERATURE,
++ buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ temp_c = buffer[sattr->index + 1];
++
++ return sysfs_emit(buf, "%d\n", temp_c);
++}
++
++static ssize_t msi_wmi_platform_temp_table_store(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++ u8 buffer[32] = { sattr->nr };
++ long temp_c;
++ int ret;
++
++ ret = kstrtol(buf, 10, &temp_c);
++ if (ret < 0)
++ return ret;
++
++ temp_c = clamp_val(temp_c, 0, 255);
++
++ guard(mutex)(&data->write_lock);
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_TEMPERATURE,
++ buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ buffer[0] = sattr->nr;
++ buffer[sattr->index + 1] = temp_c;
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_TEMPERATURE,
++ buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point1_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE, 0x0);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point2_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE, 0x3);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point3_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE, 0x4);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point4_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE, 0x5);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point5_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE, 0x6);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point6_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE, 0x7);
++
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point1_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE, 0x1);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point2_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE, 0x2);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point3_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE, 0x3);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point4_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE, 0x4);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point5_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE, 0x5);
++static SENSOR_DEVICE_ATTR_2_RW(pwm1_auto_point6_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE, 0x6);
++
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point1_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE, 0x0);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point2_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE, 0x3);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point3_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE, 0x4);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point4_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE, 0x5);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point5_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE, 0x6);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point6_temp, msi_wmi_platform_temp_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE, 0x7);
++
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point1_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE, 0x1);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point2_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE, 0x2);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point3_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE, 0x3);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point4_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE, 0x4);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point5_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE, 0x5);
++static SENSOR_DEVICE_ATTR_2_RW(pwm2_auto_point6_pwm, msi_wmi_platform_fan_table,
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE, 0x6);
++
++static struct attribute *msi_wmi_platform_hwmon_attrs[] = {
++ &sensor_dev_attr_pwm1_auto_point1_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point2_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point3_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point4_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point5_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point6_temp.dev_attr.attr,
++
++ &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point3_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point4_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point5_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm1_auto_point6_pwm.dev_attr.attr,
++
++ &sensor_dev_attr_pwm2_auto_point1_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point2_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point3_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point4_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point5_temp.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point6_temp.dev_attr.attr,
++
++ &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point3_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point4_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point5_pwm.dev_attr.attr,
++ &sensor_dev_attr_pwm2_auto_point6_pwm.dev_attr.attr,
++ NULL
++};
++ATTRIBUTE_GROUPS(msi_wmi_platform_hwmon);
++
++static int msi_wmi_platform_curves_save(struct msi_wmi_platform_data *data)
++{
++ int ret;
++
++ data->factory_curves.cpu_fan_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE;
++ ret = msi_wmi_platform_query(
++ data->wdev, MSI_PLATFORM_GET_FAN,
++ data->factory_curves.cpu_fan_table,
++ sizeof(data->factory_curves.cpu_fan_table));
++ if (ret < 0)
++ return ret;
++ data->factory_curves.cpu_fan_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_FAN_TABLE;
++
++ data->factory_curves.gpu_fan_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE;
++ ret = msi_wmi_platform_query(
++ data->wdev, MSI_PLATFORM_GET_FAN,
++ data->factory_curves.gpu_fan_table,
++ sizeof(data->factory_curves.gpu_fan_table));
++ if (ret < 0)
++ return ret;
++ data->factory_curves.gpu_fan_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_FAN_TABLE;
++
++ data->factory_curves.cpu_temp_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE;
++ ret = msi_wmi_platform_query(
++ data->wdev, MSI_PLATFORM_GET_TEMPERATURE,
++ data->factory_curves.cpu_temp_table,
++ sizeof(data->factory_curves.cpu_temp_table));
++ if (ret < 0)
++ return ret;
++ data->factory_curves.cpu_temp_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_CPU_TEMP_TABLE;
++
++ data->factory_curves.gpu_temp_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE;
++ ret = msi_wmi_platform_query(
++ data->wdev, MSI_PLATFORM_GET_TEMPERATURE,
++ data->factory_curves.gpu_temp_table,
++ sizeof(data->factory_curves.gpu_temp_table));
++ if (ret < 0)
++ return ret;
++ data->factory_curves.gpu_temp_table[0] =
++ MSI_PLATFORM_FAN_SUBFEATURE_GPU_TEMP_TABLE;
++
++ return 0;
++}
++
++static int msi_wmi_platform_curves_load(struct msi_wmi_platform_data *data)
++{
++ u8 buffer[32] = { };
++ int ret;
++
++ memcpy(buffer, data->factory_curves.cpu_fan_table,
++ sizeof(data->factory_curves.cpu_fan_table));
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_FAN, buffer,
++ sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ memcpy(buffer, data->factory_curves.gpu_fan_table,
++ sizeof(data->factory_curves.gpu_fan_table));
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_FAN, buffer,
++ sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ memcpy(buffer, data->factory_curves.cpu_temp_table,
++ sizeof(data->factory_curves.cpu_temp_table));
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_TEMPERATURE,
++ buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ memcpy(buffer, data->factory_curves.gpu_temp_table,
++ sizeof(data->factory_curves.gpu_temp_table));
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_TEMPERATURE,
++ buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ return 0;
++}
++
++
+ static umode_t msi_wmi_platform_is_visible(const void *drvdata, enum hwmon_sensor_types type,
+ u32 attr, int channel)
+ {
++ if (type == hwmon_pwm && attr == hwmon_pwm_enable)
++ return 0644;
++
+ return 0444;
+ }
+
+@@ -185,28 +602,112 @@ static int msi_wmi_platform_read(struct device *dev, enum hwmon_sensor_types typ
+ int channel, long *val)
+ {
+ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
+- u8 input[32] = { 0 };
+- u8 output[32];
++ u8 buffer[32] = { };
+ u16 value;
++ u8 flags;
+ int ret;
+
+- ret = msi_wmi_platform_query(data, MSI_PLATFORM_GET_FAN, input, sizeof(input), output,
+- sizeof(output));
+- if (ret < 0)
+- return ret;
++ switch (type) {
++ case hwmon_fan:
++ switch (attr) {
++ case hwmon_fan_input:
++ buffer[0] = MSI_PLATFORM_FAN_SUBFEATURE_FAN_SPEED;
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_FAN, buffer,
++ sizeof(buffer));
++ if (ret < 0)
++ return ret;
+
+- value = get_unaligned_be16(&output[channel * 2 + 1]);
+- if (!value)
+- *val = 0;
+- else
+- *val = 480000 / value;
++ value = get_unaligned_be16(&buffer[channel * 2 + 1]);
++ if (!value)
++ *val = 0;
++ else
++ *val = 480000 / value;
+
+- return 0;
++ return 0;
++ default:
++ return -EOPNOTSUPP;
++ }
++ case hwmon_pwm:
++ switch (attr) {
++ case hwmon_pwm_enable:
++ buffer[0] = MSI_PLATFORM_AP_SUBFEATURE_FAN_MODE;
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_AP, buffer,
++ sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ flags = buffer[MSI_PLATFORM_AP_FAN_FLAGS_OFFSET];
++ if (flags & MSI_PLATFORM_AP_ENABLE_FAN_TABLES)
++ *val = 1; // TODO: Do fan tables count as "manual fan control"?
++ else
++ *val = 2;
++
++ return 0;
++ default:
++ return -EOPNOTSUPP;
++ }
++ default:
++ return -EOPNOTSUPP;
++ }
++}
++
++static int msi_wmi_platform_write(struct device *dev, enum hwmon_sensor_types type, u32 attr,
++ int channel, long val)
++{
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++ u8 buffer[32] = { };
++ int ret;
++
++ switch (type) {
++ case hwmon_pwm:
++ switch (attr) {
++ case hwmon_pwm_enable:
++ guard(mutex)(&data->write_lock);
++
++ buffer[0] = MSI_PLATFORM_AP_SUBFEATURE_FAN_MODE;
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_AP, buffer,
++ sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ buffer[0] = MSI_PLATFORM_AP_SUBFEATURE_FAN_MODE;
++ switch (val) {
++ case 1:
++ buffer[MSI_PLATFORM_AP_FAN_FLAGS_OFFSET] |=
++ MSI_PLATFORM_AP_ENABLE_FAN_TABLES;
++ break;
++ case 2:
++ buffer[MSI_PLATFORM_AP_FAN_FLAGS_OFFSET] &=
++ ~MSI_PLATFORM_AP_ENABLE_FAN_TABLES;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_AP, buffer,
++ sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ if (val == 2 && data->quirks->restore_curves) {
++ ret = msi_wmi_platform_curves_load(data);
++ if (ret < 0)
++ return ret;
++ }
++
++ return 0;
++ default:
++ return -EOPNOTSUPP;
++ }
++ default:
++ return -EOPNOTSUPP;
++ }
+ }
+
+ static const struct hwmon_ops msi_wmi_platform_ops = {
+ .is_visible = msi_wmi_platform_is_visible,
+ .read = msi_wmi_platform_read,
++ .write = msi_wmi_platform_write,
+ };
+
+ static const struct hwmon_channel_info * const msi_wmi_platform_info[] = {
+@@ -216,6 +717,10 @@ static const struct hwmon_channel_info * const msi_wmi_platform_info[] = {
+ HWMON_F_INPUT,
+ HWMON_F_INPUT
+ ),
++ HWMON_CHANNEL_INFO(pwm,
++ HWMON_PWM_ENABLE,
++ HWMON_PWM_ENABLE
++ ),
+ NULL
+ };
+
+@@ -224,8 +729,496 @@ static const struct hwmon_chip_info msi_wmi_platform_chip_info = {
+ .info = msi_wmi_platform_info,
+ };
+
+-static ssize_t msi_wmi_platform_write(struct file *fp, const char __user *input, size_t length,
+- loff_t *offset)
++static const struct hwmon_channel_info * const msi_wmi_platform_info_dual[] = {
++ HWMON_CHANNEL_INFO(fan,
++ HWMON_F_INPUT,
++ HWMON_F_INPUT
++ ),
++ HWMON_CHANNEL_INFO(pwm,
++ HWMON_PWM_ENABLE,
++ HWMON_PWM_ENABLE
++ ),
++ NULL
++};
++
++static const struct hwmon_chip_info msi_wmi_platform_chip_info_dual = {
++ .ops = &msi_wmi_platform_ops,
++ .info = msi_wmi_platform_info_dual,
++};
++
++static int msi_wmi_platform_profile_probe(void *drvdata, unsigned long *choices)
++{
++ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
++ set_bit(PLATFORM_PROFILE_BALANCED, choices);
++ set_bit(PLATFORM_PROFILE_BALANCED_PERFORMANCE, choices);
++ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
++ return 0;
++}
++
++static int msi_wmi_platform_profile_get(struct device *dev,
++ enum platform_profile_option *profile)
++{
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++
++ u8 buffer[32] = { };
++
++ buffer[0] = MSI_PLATFORM_SHIFT_ADDR;
++
++ int ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_DATA, buffer, sizeof(buffer));
++ if (ret < 0)
++ return ret;
++
++ if (buffer[0] != 1)
++ return -EINVAL;
++
++ switch (buffer[1]) {
++ case MSI_PLATFORM_SHIFT_SPORT:
++ *profile = PLATFORM_PROFILE_PERFORMANCE;
++ return 0;
++ case MSI_PLATFORM_SHIFT_COMFORT:
++ *profile = PLATFORM_PROFILE_BALANCED_PERFORMANCE;
++ return 0;
++ case MSI_PLATFORM_SHIFT_GREEN:
++ *profile = PLATFORM_PROFILE_BALANCED;
++ return 0;
++ case MSI_PLATFORM_SHIFT_ECO:
++ *profile = PLATFORM_PROFILE_LOW_POWER;
++ return 0;
++ case MSI_PLATFORM_SHIFT_USER:
++ *profile = PLATFORM_PROFILE_CUSTOM;
++ return 0;
++ default:
++ return -EINVAL;
++ }
++}
++
++static int msi_wmi_platform_profile_set(struct device *dev,
++ enum platform_profile_option profile)
++{
++ struct msi_wmi_platform_data *data = dev_get_drvdata(dev);
++ u8 buffer[32] = { };
++
++ buffer[0] = MSI_PLATFORM_SHIFT_ADDR;
++
++ switch (profile) {
++ case PLATFORM_PROFILE_PERFORMANCE:
++ buffer[1] = MSI_PLATFORM_SHIFT_SPORT;
++ break;
++ case PLATFORM_PROFILE_BALANCED_PERFORMANCE:
++ buffer[1] = MSI_PLATFORM_SHIFT_COMFORT;
++ break;
++ case PLATFORM_PROFILE_BALANCED:
++ buffer[1] = MSI_PLATFORM_SHIFT_GREEN;
++ break;
++ case PLATFORM_PROFILE_LOW_POWER:
++ buffer[1] = MSI_PLATFORM_SHIFT_ECO;
++ break;
++ case PLATFORM_PROFILE_CUSTOM:
++ buffer[1] = MSI_PLATFORM_SHIFT_USER;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_DATA, buffer, sizeof(buffer));
++}
++
++static const struct platform_profile_ops msi_wmi_platform_profile_ops = {
++ .probe = msi_wmi_platform_profile_probe,
++ .profile_get = msi_wmi_platform_profile_get,
++ .profile_set = msi_wmi_platform_profile_set,
++};
++
++/* Firmware Attributes setup */
++static int data_get_addr(struct msi_wmi_platform_data *data,
++ const enum msi_fw_attr_id id)
++{
++ switch (id) {
++ case MSI_ATTR_PPT_PL1_SPL:
++ return MSI_PLATFORM_PL1_ADDR;
++ case MSI_ATTR_PPT_PL2_SPPT:
++ return MSI_PLATFORM_PL2_ADDR;
++ default:
++ pr_warn("Invalid attribute id %d\n", id);
++ return -EINVAL;
++ }
++}
++
++static ssize_t data_set_value(struct msi_wmi_platform_data *data,
++ struct msi_fw_attr *fw_attr, const char *buf,
++ size_t count)
++{
++ u8 buffer[32] = { 0 };
++ int ret, fwid;
++ u32 value;
++
++ fwid = data_get_addr(data, fw_attr->fw_attr_id);
++ if (fwid < 0)
++ return fwid;
++
++ ret = kstrtou32(buf, 10, &value);
++ if (ret)
++ return ret;
++
++ if (fw_attr->min >= 0 && value < fw_attr->min)
++ return -EINVAL;
++ if (fw_attr->max >= 0 && value > fw_attr->max)
++ return -EINVAL;
++
++ buffer[0] = fwid;
++ put_unaligned_le32(value, &buffer[1]);
++
++ guard(mutex)(&data->write_lock);
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_DATA, buffer, sizeof(buffer));
++ if (ret) {
++ pr_warn("Failed to set_data with id %d: %d\n",
++ fw_attr->fw_attr_id, ret);
++ return ret;
++ }
++
++ return count;
++}
++
++static int data_get_value(struct msi_wmi_platform_data *data,
++ struct msi_fw_attr *fw_attr, char *buf)
++{
++ u8 buffer[32] = { 0 };
++ u32 value;
++ int ret, addr;
++
++ addr = data_get_addr(data, fw_attr->fw_attr_id);
++ if (addr < 0)
++ return addr;
++
++ buffer[0] = addr;
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_DATA, buffer,
++ sizeof(buffer));
++ if (ret) {
++ pr_warn("Failed to show set_data for id %d: %d\n",
++ fw_attr->fw_attr_id, ret);
++ return ret;
++ }
++
++ value = get_unaligned_le32(&buffer[1]);
++
++ return sysfs_emit(buf, "%d\n", value);
++}
++
++static ssize_t display_name_language_code_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return sysfs_emit(buf, "%s\n", MSI_ATTR_LANGUAGE_CODE);
++}
++
++static struct kobj_attribute fw_attr_display_name_language_code =
++ __ATTR_RO(display_name_language_code);
++
++static ssize_t scalar_increment_show(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ char *buf)
++{
++ return sysfs_emit(buf, "1\n");
++}
++
++static struct kobj_attribute fw_attr_scalar_increment =
++ __ATTR_RO(scalar_increment);
++
++static ssize_t pending_reboot_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return sysfs_emit(buf, "0\n");
++}
++
++static struct kobj_attribute fw_attr_pending_reboot = __ATTR_RO(pending_reboot);
++
++static ssize_t display_name_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
++{
++ struct msi_fw_attr *fw_attr =
++ container_of(attr, struct msi_fw_attr, display_name);
++
++ return sysfs_emit(buf, "%s\n", msi_fw_attr_desc[fw_attr->fw_attr_id]);
++}
++
++static ssize_t current_value_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
++{
++ struct msi_fw_attr *fw_attr =
++ container_of(attr, struct msi_fw_attr, current_value);
++
++ return fw_attr->get_value(fw_attr->data, fw_attr, buf);
++}
++
++static ssize_t current_value_store(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct msi_fw_attr *fw_attr =
++ container_of(attr, struct msi_fw_attr, current_value);
++
++ return fw_attr->set_value(fw_attr->data, fw_attr, buf, count);
++}
++
++static ssize_t type_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return sysfs_emit(buf, "integer\n");
++}
++
++static struct kobj_attribute fw_attr_type_int = {
++ .attr = { .name = "type", .mode = 0444 },
++ .show = type_show,
++};
++
++static ssize_t min_value_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ struct msi_fw_attr *fw_attr =
++ container_of(attr, struct msi_fw_attr, min_value);
++
++ return sysfs_emit(buf, "%d\n", fw_attr->min);
++}
++
++static ssize_t max_value_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ struct msi_fw_attr *fw_attr =
++ container_of(attr, struct msi_fw_attr, max_value);
++
++ return sysfs_emit(buf, "%d\n", fw_attr->max);
++}
++
++#define FW_ATTR_ENUM_MAX_ATTRS 7
++
++static int
++msi_fw_attr_init(struct msi_wmi_platform_data *data,
++ const enum msi_fw_attr_id fw_attr_id,
++ struct kobj_attribute *fw_attr_type, const s32 min,
++ const s32 max,
++ int (*get_value)(struct msi_wmi_platform_data *data,
++ struct msi_fw_attr *fw_attr, char *buf),
++ ssize_t (*set_value)(struct msi_wmi_platform_data *data,
++ struct msi_fw_attr *fw_attr,
++ const char *buf, size_t count))
++{
++ struct msi_fw_attr *fw_attr;
++ struct attribute **attrs;
++ int idx = 0;
++
++ fw_attr = devm_kzalloc(&data->wdev->dev, sizeof(*fw_attr), GFP_KERNEL);
++ if (!fw_attr)
++ return -ENOMEM;
++
++ attrs = devm_kcalloc(&data->wdev->dev, FW_ATTR_ENUM_MAX_ATTRS + 1,
++ sizeof(*attrs), GFP_KERNEL);
++ if (!attrs)
++ return -ENOMEM;
++
++ fw_attr->data = data;
++ fw_attr->fw_attr_id = fw_attr_id;
++ fw_attr->attr_group.name = msi_fw_attr_name[fw_attr_id];
++ fw_attr->attr_group.attrs = attrs;
++ fw_attr->get_value = get_value;
++ fw_attr->set_value = set_value;
++
++ attrs[idx++] = &fw_attr_type->attr;
++ if (fw_attr_type == &fw_attr_type_int)
++ attrs[idx++] = &fw_attr_scalar_increment.attr;
++ attrs[idx++] = &fw_attr_display_name_language_code.attr;
++
++ sysfs_attr_init(&fw_attr->display_name.attr);
++ fw_attr->display_name.attr.name = "display_name";
++ fw_attr->display_name.attr.mode = 0444;
++ fw_attr->display_name.show = display_name_show;
++ attrs[idx++] = &fw_attr->display_name.attr;
++
++ sysfs_attr_init(&fw_attr->current_value.attr);
++ fw_attr->current_value.attr.name = "current_value";
++ fw_attr->current_value.attr.mode = 0644;
++ fw_attr->current_value.show = current_value_show;
++ fw_attr->current_value.store = current_value_store;
++ attrs[idx++] = &fw_attr->current_value.attr;
++
++ if (min >= 0) {
++ fw_attr->min = min;
++ sysfs_attr_init(&fw_attr->min_value.attr);
++ fw_attr->min_value.attr.name = "min_value";
++ fw_attr->min_value.attr.mode = 0444;
++ fw_attr->min_value.show = min_value_show;
++ attrs[idx++] = &fw_attr->min_value.attr;
++ } else {
++ fw_attr->min = -1;
++ }
++
++ if (max >= 0) {
++ fw_attr->max = max;
++ sysfs_attr_init(&fw_attr->max_value.attr);
++ fw_attr->max_value.attr.name = "max_value";
++ fw_attr->max_value.attr.mode = 0444;
++ fw_attr->max_value.show = max_value_show;
++ attrs[idx++] = &fw_attr->max_value.attr;
++ } else {
++ fw_attr->max = -1;
++ }
++
++ attrs[idx] = NULL;
++ return sysfs_create_group(&data->fw_attrs_kset->kobj, &fw_attr->attr_group);
++}
++
++static void msi_kset_unregister(void *data)
++{
++ struct kset *kset = data;
++
++ sysfs_remove_file(&kset->kobj, &fw_attr_pending_reboot.attr);
++ kset_unregister(kset);
++}
++
++static void msi_fw_attrs_dev_unregister(void *data)
++{
++ struct device *fw_attrs_dev = data;
++
++ device_unregister(fw_attrs_dev);
++}
++
++static int msi_wmi_fw_attrs_init(struct msi_wmi_platform_data *data)
++{
++ int err;
++
++ data->fw_attrs_dev = device_create(&firmware_attributes_class, NULL, MKDEV(0, 0),
++ NULL, "%s", DRIVER_NAME);
++ if (IS_ERR(data->fw_attrs_dev))
++ return PTR_ERR(data->fw_attrs_dev);
++
++ err = devm_add_action_or_reset(&data->wdev->dev,
++ msi_fw_attrs_dev_unregister,
++ data->fw_attrs_dev);
++ if (err)
++ return err;
++
++ data->fw_attrs_kset = kset_create_and_add("attributes", NULL,
++ &data->fw_attrs_dev->kobj);
++ if (!data->fw_attrs_kset)
++ return -ENOMEM;
++
++ err = sysfs_create_file(&data->fw_attrs_kset->kobj,
++ &fw_attr_pending_reboot.attr);
++ if (err) {
++ kset_unregister(data->fw_attrs_kset);
++ return err;
++ }
++
++ err = devm_add_action_or_reset(&data->wdev->dev, msi_kset_unregister,
++ data->fw_attrs_kset);
++ if (err)
++ return err;
++
++ if (data->quirks->pl1_max) {
++ err = msi_fw_attr_init(data, MSI_ATTR_PPT_PL1_SPL,
++ &fw_attr_type_int, data->quirks->pl_min,
++ data->quirks->pl1_max, &data_get_value,
++ &data_set_value);
++ if (err)
++ return err;
++ }
++
++ if (data->quirks->pl2_max) {
++ err = msi_fw_attr_init(data, MSI_ATTR_PPT_PL2_SPPT,
++ &fw_attr_type_int, data->quirks->pl_min,
++ data->quirks->pl2_max, &data_get_value,
++ &data_set_value);
++ if (err)
++ return err;
++ }
++
++ return 0;
++}
++
++static ssize_t charge_control_end_threshold_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ const struct msi_wmi_platform_data *data =
++ container_of(attr, struct msi_wmi_platform_data, battery_attr);
++ u8 buffer[32] = { 0 };
++ u32 val;
++ int ret;
++
++ ret = kstrtou32(buf, 10, &val);
++ if (ret)
++ return ret;
++
++ if (val > 100)
++ return -EINVAL;
++
++ buffer[0] = MSI_PLATFORM_BAT_ADDR;
++ buffer[1] = val | BIT(7);
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_SET_DATA, buffer,
++ sizeof(buffer));
++ if (ret)
++ return ret;
++
++ return count;
++}
++
++static ssize_t charge_control_end_threshold_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ const struct msi_wmi_platform_data *data =
++ container_of(attr, struct msi_wmi_platform_data, battery_attr);
++ u8 buffer[32] = { 0 };
++ u8 value;
++ int ret;
++
++ buffer[0] = MSI_PLATFORM_BAT_ADDR;
++
++ ret = msi_wmi_platform_query(data->wdev, MSI_PLATFORM_GET_DATA, buffer,
++ sizeof(buffer));
++
++ if (ret)
++ return ret;
++
++ value = buffer[1] & ~BIT(7);
++
++ if (value > 100)
++ return -EIO;
++
++ return sysfs_emit(buf, "%d\n", value);
++}
++
++static int msi_platform_battery_add(struct power_supply *battery,
++ struct acpi_battery_hook *hook)
++{
++ struct msi_wmi_platform_data *data = container_of(hook,
++ struct msi_wmi_platform_data, battery_hook);
++
++ /* MSI devices only have one battery. */
++ if (strcmp(battery->desc->name, "BAT0") != 0 &&
++ strcmp(battery->desc->name, "BAT1") != 0 &&
++ strcmp(battery->desc->name, "BATC") != 0 &&
++ strcmp(battery->desc->name, "BATT") != 0)
++ return -ENODEV;
++
++ if (device_create_file(&battery->dev,
++ &data->battery_attr))
++ return -ENODEV;
++
++ return 0;
++}
++
++static int msi_platform_battery_remove(struct power_supply *battery,
++ struct acpi_battery_hook *hook)
++{
++ struct msi_wmi_platform_data *data = container_of(hook,
++ struct msi_wmi_platform_data, battery_hook);
++
++ device_remove_file(&battery->dev,
++ &data->battery_attr);
++ return 0;
++}
++
++static ssize_t msi_wmi_platform_debugfs_write(struct file *fp, const char __user *input,
++ size_t length, loff_t *offset)
+ {
+ struct seq_file *seq = fp->private_data;
+ struct msi_wmi_platform_debugfs_data *data = seq->private;
+@@ -244,18 +1237,18 @@ static ssize_t msi_wmi_platform_write(struct file *fp, const char __user *input,
+ if (ret < 0)
+ return ret;
+
+- down_write(&data->buffer_lock);
+- ret = msi_wmi_platform_query(data->data, data->method, payload, data->length, data->buffer,
+- data->length);
+- up_write(&data->buffer_lock);
+-
++ ret = msi_wmi_platform_query(data->wdev, data->method, payload, data->length);
+ if (ret < 0)
+ return ret;
+
++ down_write(&data->buffer_lock);
++ memcpy(data->buffer, payload, data->length);
++ up_write(&data->buffer_lock);
++
+ return length;
+ }
+
+-static int msi_wmi_platform_show(struct seq_file *seq, void *p)
++static int msi_wmi_platform_debugfs_show(struct seq_file *seq, void *p)
+ {
+ struct msi_wmi_platform_debugfs_data *data = seq->private;
+ int ret;
+@@ -267,19 +1260,19 @@ static int msi_wmi_platform_show(struct seq_file *seq, void *p)
+ return ret;
+ }
+
+-static int msi_wmi_platform_open(struct inode *inode, struct file *fp)
++static int msi_wmi_platform_debugfs_open(struct inode *inode, struct file *fp)
+ {
+ struct msi_wmi_platform_debugfs_data *data = inode->i_private;
+
+ /* The seq_file uses the last byte of the buffer for detecting buffer overflows */
+- return single_open_size(fp, msi_wmi_platform_show, data, data->length + 1);
++ return single_open_size(fp, msi_wmi_platform_debugfs_show, data, data->length + 1);
+ }
+
+ static const struct file_operations msi_wmi_platform_debugfs_fops = {
+ .owner = THIS_MODULE,
+- .open = msi_wmi_platform_open,
++ .open = msi_wmi_platform_debugfs_open,
+ .read = seq_read,
+- .write = msi_wmi_platform_write,
++ .write = msi_wmi_platform_debugfs_write,
+ .llseek = seq_lseek,
+ .release = single_release,
+ };
+@@ -291,17 +1284,17 @@ static void msi_wmi_platform_debugfs_remove(void *data)
+ debugfs_remove_recursive(dir);
+ }
+
+-static void msi_wmi_platform_debugfs_add(struct msi_wmi_platform_data *drvdata, struct dentry *dir,
++static void msi_wmi_platform_debugfs_add(struct wmi_device *wdev, struct dentry *dir,
+ const char *name, enum msi_wmi_platform_method method)
+ {
+ struct msi_wmi_platform_debugfs_data *data;
+ struct dentry *entry;
+
+- data = devm_kzalloc(&drvdata->wdev->dev, sizeof(*data), GFP_KERNEL);
++ data = devm_kzalloc(&wdev->dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return;
+
+- data->data = drvdata;
++ data->wdev = wdev;
+ data->method = method;
+ init_rwsem(&data->buffer_lock);
+
+@@ -312,27 +1305,27 @@ static void msi_wmi_platform_debugfs_add(struct msi_wmi_platform_data *drvdata,
+
+ entry = debugfs_create_file(name, 0600, dir, data, &msi_wmi_platform_debugfs_fops);
+ if (IS_ERR(entry))
+- devm_kfree(&drvdata->wdev->dev, data);
++ devm_kfree(&wdev->dev, data);
+ }
+
+-static void msi_wmi_platform_debugfs_init(struct msi_wmi_platform_data *data)
++static void msi_wmi_platform_debugfs_init(struct wmi_device *wdev)
+ {
+ struct dentry *dir;
+ char dir_name[64];
+ int ret, method;
+
+- scnprintf(dir_name, ARRAY_SIZE(dir_name), "%s-%s", DRIVER_NAME, dev_name(&data->wdev->dev));
++ scnprintf(dir_name, ARRAY_SIZE(dir_name), "%s-%s", DRIVER_NAME, dev_name(&wdev->dev));
+
+ dir = debugfs_create_dir(dir_name, NULL);
+ if (IS_ERR(dir))
+ return;
+
+- ret = devm_add_action_or_reset(&data->wdev->dev, msi_wmi_platform_debugfs_remove, dir);
++ ret = devm_add_action_or_reset(&wdev->dev, msi_wmi_platform_debugfs_remove, dir);
+ if (ret < 0)
+ return;
+
+ for (method = MSI_PLATFORM_GET_PACKAGE; method <= MSI_PLATFORM_GET_WMI; method++)
+- msi_wmi_platform_debugfs_add(data, dir, msi_wmi_platform_debugfs_names[method - 1],
++ msi_wmi_platform_debugfs_add(wdev, dir, msi_wmi_platform_debugfs_names[method - 1],
+ method);
+ }
+
+@@ -340,97 +1333,158 @@ static int msi_wmi_platform_hwmon_init(struct msi_wmi_platform_data *data)
+ {
+ struct device *hdev;
+
+- hdev = devm_hwmon_device_register_with_info(&data->wdev->dev, "msi_wmi_platform", data,
+- &msi_wmi_platform_chip_info, NULL);
++ hdev = devm_hwmon_device_register_with_info(
++ &data->wdev->dev, "msi_wmi_platform", data,
++ data->quirks->dual_fans ? &msi_wmi_platform_chip_info_dual :
++ &msi_wmi_platform_chip_info,
++ msi_wmi_platform_hwmon_groups);
+
+ return PTR_ERR_OR_ZERO(hdev);
+ }
+
+-static int msi_wmi_platform_ec_init(struct msi_wmi_platform_data *data)
++static int msi_wmi_platform_ec_init(struct wmi_device *wdev)
+ {
+- u8 input[32] = { 0 };
+- u8 output[32];
++ u8 data[32] = { 0 };
+ u8 flags;
+ int ret;
+
+- ret = msi_wmi_platform_query(data, MSI_PLATFORM_GET_EC, input, sizeof(input), output,
+- sizeof(output));
++ ret = msi_wmi_platform_query(wdev, MSI_PLATFORM_GET_EC, data, sizeof(data));
+ if (ret < 0)
+ return ret;
+
+- flags = output[MSI_PLATFORM_EC_FLAGS_OFFSET];
++ flags = data[MSI_PLATFORM_EC_FLAGS_OFFSET];
+
+- dev_dbg(&data->wdev->dev, "EC RAM version %lu.%lu\n",
++ dev_dbg(&wdev->dev, "EC RAM version %lu.%lu\n",
+ FIELD_GET(MSI_PLATFORM_EC_MAJOR_MASK, flags),
+ FIELD_GET(MSI_PLATFORM_EC_MINOR_MASK, flags));
+- dev_dbg(&data->wdev->dev, "EC firmware version %.28s\n",
+- &output[MSI_PLATFORM_EC_VERSION_OFFSET]);
++ dev_dbg(&wdev->dev, "EC firmware version %.28s\n",
++ &data[MSI_PLATFORM_EC_VERSION_OFFSET]);
+
+ if (!(flags & MSI_PLATFORM_EC_IS_TIGERLAKE)) {
+ if (!force)
+ return -ENODEV;
+
+- dev_warn(&data->wdev->dev, "Loading on a non-Tigerlake platform\n");
++ dev_warn(&wdev->dev, "Loading on a non-Tigerlake platform\n");
+ }
+
+ return 0;
+ }
+
+-static int msi_wmi_platform_init(struct msi_wmi_platform_data *data)
++static int msi_wmi_platform_init(struct wmi_device *wdev)
+ {
+- u8 input[32] = { 0 };
+- u8 output[32];
++ u8 data[32] = { 0 };
+ int ret;
+
+- ret = msi_wmi_platform_query(data, MSI_PLATFORM_GET_WMI, input, sizeof(input), output,
+- sizeof(output));
++ ret = msi_wmi_platform_query(wdev, MSI_PLATFORM_GET_WMI, data, sizeof(data));
+ if (ret < 0)
+ return ret;
+
+- dev_dbg(&data->wdev->dev, "WMI interface version %u.%u\n",
+- output[MSI_PLATFORM_WMI_MAJOR_OFFSET],
+- output[MSI_PLATFORM_WMI_MINOR_OFFSET]);
++ dev_dbg(&wdev->dev, "WMI interface version %u.%u\n",
++ data[MSI_PLATFORM_WMI_MAJOR_OFFSET],
++ data[MSI_PLATFORM_WMI_MINOR_OFFSET]);
+
+- if (output[MSI_PLATFORM_WMI_MAJOR_OFFSET] != MSI_WMI_PLATFORM_INTERFACE_VERSION) {
++ if (data[MSI_PLATFORM_WMI_MAJOR_OFFSET] != MSI_WMI_PLATFORM_INTERFACE_VERSION) {
+ if (!force)
+ return -ENODEV;
+
+- dev_warn(&data->wdev->dev,
+- "Loading despite unsupported WMI interface version (%u.%u)\n",
+- output[MSI_PLATFORM_WMI_MAJOR_OFFSET],
+- output[MSI_PLATFORM_WMI_MINOR_OFFSET]);
++ dev_warn(&wdev->dev, "Loading despite unsupported WMI interface version (%u.%u)\n",
++ data[MSI_PLATFORM_WMI_MAJOR_OFFSET],
++ data[MSI_PLATFORM_WMI_MINOR_OFFSET]);
+ }
+
+ return 0;
+ }
+
++static int msi_wmi_platform_profile_setup(struct msi_wmi_platform_data *data)
++{
++ int err;
++
++ if (!data->quirks->shift_mode)
++ return 0;
++
++ data->ppdev = devm_platform_profile_register(
++ &data->wdev->dev, "msi-wmi-platform", data,
++ &msi_wmi_platform_profile_ops);
++ if (err)
++ return err;
++
++ return PTR_ERR_OR_ZERO(data->ppdev);
++}
++
+ static int msi_wmi_platform_probe(struct wmi_device *wdev, const void *context)
+ {
+ struct msi_wmi_platform_data *data;
++ const struct dmi_system_id *dmi_id;
+ int ret;
+
++ ret = msi_wmi_platform_init(wdev);
++ if (ret < 0)
++ return ret;
++
++ ret = msi_wmi_platform_ec_init(wdev);
++ if (ret < 0)
++ return ret;
++
+ data = devm_kzalloc(&wdev->dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+- return -ENOMEM;
++ return -ENODATA;
+
+ data->wdev = wdev;
+ dev_set_drvdata(&wdev->dev, data);
+
+- ret = devm_mutex_init(&wdev->dev, &data->wmi_lock);
++ dmi_id = dmi_first_match(msi_quirks);
++ if (dmi_id)
++ data->quirks = dmi_id->driver_data;
++ else
++ data->quirks = &quirk_default;
++
++ ret = devm_mutex_init(&wdev->dev, &data->write_lock);
+ if (ret < 0)
+ return ret;
+
+- ret = msi_wmi_platform_init(data);
++ ret = msi_wmi_platform_hwmon_init(data);
+ if (ret < 0)
+ return ret;
+
+- ret = msi_wmi_platform_ec_init(data);
++ ret = msi_wmi_fw_attrs_init(data);
+ if (ret < 0)
+ return ret;
++
++ if (data->quirks->charge_threshold) {
++ data->battery_hook.name = "MSI Battery";
++ data->battery_hook.add_battery = msi_platform_battery_add;
++ data->battery_hook.remove_battery = msi_platform_battery_remove;
++ data->battery_attr.attr.name = "charge_control_end_threshold";
++ data->battery_attr.attr.mode = 0644;
++ data->battery_attr.show = charge_control_end_threshold_show;
++ data->battery_attr.store = charge_control_end_threshold_store;
++ battery_hook_register(&data->battery_hook);
++ }
+
+- msi_wmi_platform_debugfs_init(data);
++ msi_wmi_platform_profile_setup(data);
+
+- return msi_wmi_platform_hwmon_init(data);
++ msi_wmi_platform_debugfs_init(wdev);
++
++ if (data->quirks->restore_curves) {
++ ret = msi_wmi_platform_curves_save(data);
++ if (ret < 0)
++ return ret;
++ }
++
++ return 0;
++}
++
++static void msi_wmi_platform_remove(struct wmi_device *wdev)
++{
++ struct msi_wmi_platform_data *data = dev_get_drvdata(&wdev->dev);
++
++ if (data->quirks->charge_threshold)
++ battery_hook_unregister(&data->battery_hook);
++
++ if (data->quirks->restore_curves) {
++ guard(mutex)(&data->write_lock);
++ msi_wmi_platform_curves_load(data);
++ }
+ }
+
+ static const struct wmi_device_id msi_wmi_platform_id_table[] = {
+@@ -446,6 +1500,7 @@ static struct wmi_driver msi_wmi_platform_driver = {
+ },
+ .id_table = msi_wmi_platform_id_table,
+ .probe = msi_wmi_platform_probe,
++ .remove = msi_wmi_platform_remove,
+ .no_singleton = true,
+ };
+ module_wmi_driver(msi_wmi_platform_driver);
+diff --git a/drivers/video/backlight/backlight.c b/drivers/video/backlight/backlight.c
+index f699e5827ccb..99e86b983c77 100644
+--- a/drivers/video/backlight/backlight.c
++++ b/drivers/video/backlight/backlight.c
+@@ -161,6 +161,7 @@ static inline void backlight_unregister_fb(struct backlight_device *bd)
+ static void backlight_generate_event(struct backlight_device *bd,
+ enum backlight_update_reason reason)
+ {
++#if 0 // We don't want to generate udev events for brightness changes on Steam Deck, as some games like Celeste will re-enumerate controller devices in response to this event.
+ char *envp[2];
+
+ switch (reason) {
+@@ -176,6 +177,7 @@ static void backlight_generate_event(struct backlight_device *bd,
+ }
+ envp[1] = NULL;
+ kobject_uevent_env(&bd->dev.kobj, KOBJ_CHANGE, envp);
++#endif // 0
+ sysfs_notify(&bd->dev.kobj, NULL, "actual_brightness");
+ }
+
+diff --git a/sound/soc/amd/acp/acp-mach.h b/sound/soc/amd/acp/acp-mach.h
+index f94c30c20f20..c3b3f047969c 100644
+--- a/sound/soc/amd/acp/acp-mach.h
++++ b/sound/soc/amd/acp/acp-mach.h
+@@ -29,8 +29,8 @@
+ enum be_id {
+ HEADSET_BE_ID = 0,
+ AMP_BE_ID,
+- DMIC_BE_ID,
+ BT_BE_ID,
++ DMIC_BE_ID,
+ };
+
+ enum cpu_endpoints {
+diff --git a/sound/soc/codecs/max98388.c b/sound/soc/codecs/max98388.c
+index 99986090b4a6..e259be44ce8f 100644
+--- a/sound/soc/codecs/max98388.c
++++ b/sound/soc/codecs/max98388.c
+@@ -390,27 +390,43 @@ static void max98388_reset(struct max98388_priv *max98388, struct device *dev)
+ {
+ int ret, reg, count;
+
++
+ /* Software Reset */
+ ret = regmap_update_bits(max98388->regmap,
+ MAX98388_R2000_SW_RESET,
+ MAX98388_SOFT_RESET,
+ MAX98388_SOFT_RESET);
+- if (ret)
++
++ if (ret) {
+ dev_err(dev, "Reset command failed. (ret:%d)\n", ret);
++ goto exit;
++ }
++
+
+ count = 0;
+ while (count < 3) {
+ usleep_range(10000, 11000);
++
+ /* Software Reset Verification */
+ ret = regmap_read(max98388->regmap,
+ MAX98388_R22FF_REV_ID, ®);
++
+ if (!ret) {
+ dev_info(dev, "Reset completed (retry:%d)\n", count);
+- return;
++ goto exit;
+ }
+ count++;
+ }
++
+ dev_err(dev, "Reset failed. (ret:%d)\n", ret);
++
++
++exit:
++ regcache_cache_only(max98388->regmap, true);
++ ret = regmap_update_bits(max98388->regmap,
++ MAX98388_R2000_SW_RESET,
++ MAX98388_SOFT_RESET, 0);
++ regcache_cache_only(max98388->regmap, false);
+ }
+
+ static int max98388_probe(struct snd_soc_component *component)
+@@ -419,6 +435,7 @@ static int max98388_probe(struct snd_soc_component *component)
+
+ /* Software Reset */
+ max98388_reset(max98388, component->dev);
++ usleep_range(400, 1000);
+
+ /* General channel source configuration */
+ regmap_write(max98388->regmap,
+@@ -812,6 +829,7 @@ static bool max98388_readable_register(struct device *dev,
+ case MAX98388_R210E_AUTO_RESTART:
+ case MAX98388_R210F_GLOBAL_EN:
+ case MAX98388_R22FF_REV_ID:
++ case MAX98388_R2000_SW_RESET:
+ return true;
+ default:
+ return false;
+@@ -824,6 +842,7 @@ static bool max98388_volatile_reg(struct device *dev, unsigned int reg)
+ case MAX98388_R2001_INT_RAW1 ... MAX98388_R2005_INT_STATE2:
+ case MAX98388_R210F_GLOBAL_EN:
+ case MAX98388_R22FF_REV_ID:
++ case MAX98388_R2000_SW_RESET:
+ return true;
+ default:
+ return false;
+@@ -867,6 +886,7 @@ static int max98388_resume(struct device *dev)
+
+ regcache_cache_only(max98388->regmap, false);
+ max98388_reset(max98388, dev);
++ usleep_range(400, 1000);
+ regcache_sync(max98388->regmap);
+
+ return 0;
+--
+2.49.0
+
diff --git a/board/recalbox/x86/kernel_patches/9999-0003-asus.patch b/board/recalbox/x86/kernel_patches/9999-0003-asus.patch
new file mode 100644
index 0000000000000000000000000000000000000000..590f5ba2622b1a596e945f88d8f5102f743c0be9
--- /dev/null
+++ b/board/recalbox/x86/kernel_patches/9999-0003-asus.patch
@@ -0,0 +1,7849 @@
+From 567b842d2fd4c7e5dffa589f1678f4b2dfaf89b5 Mon Sep 17 00:00:00 2001
+From: Peter Jung
+Date: Thu, 22 May 2025 16:19:36 +0200
+Subject: [PATCH 3/9] asus
+
+Signed-off-by: Peter Jung
+---
+ .../ABI/testing/sysfs-platform-asus-wmi | 17 +
+ .../display/dc/dml2/dml2_translation_helper.c | 2 +-
+ drivers/hid/Kconfig | 2 +
+ drivers/hid/Makefile | 2 +
+ drivers/hid/asus-ally-hid/Kconfig | 8 +
+ drivers/hid/asus-ally-hid/Makefile | 6 +
+ .../hid/asus-ally-hid/asus-ally-hid-config.c | 2347 +++++++++++++++++
+ .../hid/asus-ally-hid/asus-ally-hid-core.c | 600 +++++
+ .../hid/asus-ally-hid/asus-ally-hid-input.c | 345 +++
+ drivers/hid/asus-ally-hid/asus-ally-rgb.c | 356 +++
+ drivers/hid/asus-ally-hid/asus-ally.h | 314 +++
+ drivers/hid/hid-asus.c | 116 +-
+ drivers/hid/hid-ids.h | 1 +
+ drivers/platform/x86/Kconfig | 23 +
+ drivers/platform/x86/Makefile | 1 +
+ drivers/platform/x86/asus-armoury.c | 1202 +++++++++
+ drivers/platform/x86/asus-armoury.h | 1278 +++++++++
+ drivers/platform/x86/asus-wmi.c | 359 ++-
+ include/linux/platform_data/x86/asus-wmi.h | 43 +
+ 19 files changed, 6915 insertions(+), 107 deletions(-)
+ create mode 100644 drivers/hid/asus-ally-hid/Kconfig
+ create mode 100644 drivers/hid/asus-ally-hid/Makefile
+ create mode 100644 drivers/hid/asus-ally-hid/asus-ally-hid-config.c
+ create mode 100644 drivers/hid/asus-ally-hid/asus-ally-hid-core.c
+ create mode 100644 drivers/hid/asus-ally-hid/asus-ally-hid-input.c
+ create mode 100644 drivers/hid/asus-ally-hid/asus-ally-rgb.c
+ create mode 100644 drivers/hid/asus-ally-hid/asus-ally.h
+ create mode 100644 drivers/platform/x86/asus-armoury.c
+ create mode 100644 drivers/platform/x86/asus-armoury.h
+
+diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi b/Documentation/ABI/testing/sysfs-platform-asus-wmi
+index 28144371a0f1..765d50b0d9df 100644
+--- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
++++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
+@@ -63,6 +63,7 @@ Date: Aug 2022
+ KernelVersion: 6.1
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Switch the GPU hardware MUX mode. Laptops with this feature can
+ can be toggled to boot with only the dGPU (discrete mode) or in
+ standard Optimus/Hybrid mode. On switch a reboot is required:
+@@ -75,6 +76,7 @@ Date: Aug 2022
+ KernelVersion: 5.17
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Disable discrete GPU:
+ * 0 - Enable dGPU,
+ * 1 - Disable dGPU
+@@ -84,6 +86,7 @@ Date: Aug 2022
+ KernelVersion: 5.17
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Enable the external GPU paired with ROG X-Flow laptops.
+ Toggling this setting will also trigger ACPI to disable the dGPU:
+
+@@ -95,6 +98,7 @@ Date: Aug 2022
+ KernelVersion: 5.17
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Enable an LCD response-time boost to reduce or remove ghosting:
+ * 0 - Disable,
+ * 1 - Enable
+@@ -104,6 +108,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Get the current charging mode being used:
+ * 1 - Barrel connected charger,
+ * 2 - USB-C charging
+@@ -114,6 +119,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Show if the egpu (XG Mobile) is correctly connected:
+ * 0 - False,
+ * 1 - True
+@@ -123,6 +129,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Change the mini-LED mode:
+ * 0 - Single-zone,
+ * 1 - Multi-zone
+@@ -133,6 +140,7 @@ Date: Apr 2024
+ KernelVersion: 6.10
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ List the available mini-led modes.
+
+ What: /sys/devices/platform//ppt_pl1_spl
+@@ -140,6 +148,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the Package Power Target total of CPU: PL1 on Intel, SPL on AMD.
+ Shown on Intel+Nvidia or AMD+Nvidia based systems:
+
+@@ -150,6 +159,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the Slow Package Power Tracking Limit of CPU: PL2 on Intel, SPPT,
+ on AMD. Shown on Intel+Nvidia or AMD+Nvidia based systems:
+
+@@ -160,6 +170,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the Fast Package Power Tracking Limit of CPU. AMD+Nvidia only:
+ * min=5, max=250
+
+@@ -168,6 +179,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the APU SPPT limit. Shown on full AMD systems only:
+ * min=5, max=130
+
+@@ -176,6 +188,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the platform SPPT limit. Shown on full AMD systems only:
+ * min=5, max=130
+
+@@ -184,6 +197,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the dynamic boost limit of the Nvidia dGPU:
+ * min=5, max=25
+
+@@ -192,6 +206,7 @@ Date: Jun 2023
+ KernelVersion: 6.5
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set the target temperature limit of the Nvidia dGPU:
+ * min=75, max=87
+
+@@ -200,6 +215,7 @@ Date: Apr 2024
+ KernelVersion: 6.10
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set if the BIOS POST sound is played on boot.
+ * 0 - False,
+ * 1 - True
+@@ -209,6 +225,7 @@ Date: Apr 2024
+ KernelVersion: 6.10
+ Contact: "Luke Jones"
+ Description:
++ DEPRECATED, WILL BE REMOVED SOON
+ Set if the MCU can go in to low-power mode on system sleep
+ * 0 - False,
+ * 1 - True
+diff --git a/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c b/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c
+index aeb9fae83cac..ad16cfc5eaed 100644
+--- a/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c
++++ b/drivers/gpu/drm/amd/display/dc/dml2/dml2_translation_helper.c
+@@ -892,7 +892,7 @@ static void populate_dummy_dml_surface_cfg(struct dml_surface_cfg_st *out, unsig
+ out->SurfaceWidthC[location] = in->timing.h_addressable;
+ out->SurfaceHeightC[location] = in->timing.v_addressable;
+ out->PitchY[location] = ((out->SurfaceWidthY[location] + 127) / 128) * 128;
+- out->PitchC[location] = 0;
++ out->PitchC[location] = 1;
+ out->DCCEnable[location] = false;
+ out->DCCMetaPitchY[location] = 0;
+ out->DCCMetaPitchC[location] = 0;
+diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
+index 4cfea399ebab..673e57fab594 100644
+--- a/drivers/hid/Kconfig
++++ b/drivers/hid/Kconfig
+@@ -1397,6 +1397,8 @@ source "drivers/hid/intel-ish-hid/Kconfig"
+
+ source "drivers/hid/amd-sfh-hid/Kconfig"
+
++source "drivers/hid/asus-ally-hid/Kconfig"
++
+ source "drivers/hid/surface-hid/Kconfig"
+
+ source "drivers/hid/intel-thc-hid/Kconfig"
+diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
+index c7ecfbb3e228..8f8b0e71153d 100644
+--- a/drivers/hid/Makefile
++++ b/drivers/hid/Makefile
+@@ -170,6 +170,8 @@ obj-$(CONFIG_INTEL_ISH_HID) += intel-ish-hid/
+
+ obj-$(CONFIG_AMD_SFH_HID) += amd-sfh-hid/
+
++obj-$(CONFIG_ASUS_ALLY_HID) += asus-ally-hid/
++
+ obj-$(CONFIG_SURFACE_HID_CORE) += surface-hid/
+
+ obj-$(CONFIG_INTEL_THC_HID) += intel-thc-hid/
+diff --git a/drivers/hid/asus-ally-hid/Kconfig b/drivers/hid/asus-ally-hid/Kconfig
+new file mode 100644
+index 000000000000..f83dda32be62
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/Kconfig
+@@ -0,0 +1,8 @@
++config ASUS_ALLY_HID
++ tristate "Asus Ally handheld support"
++ depends on USB_HID
++ depends on LEDS_CLASS
++ depends on LEDS_CLASS_MULTICOLOR
++ select POWER_SUPPLY
++ help
++ Support for configuring the Asus ROG Ally gamepad using attributes.
+diff --git a/drivers/hid/asus-ally-hid/Makefile b/drivers/hid/asus-ally-hid/Makefile
+new file mode 100644
+index 000000000000..5c3c304b7b53
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/Makefile
+@@ -0,0 +1,6 @@
++# SPDX-License-Identifier: GPL-2.0+
++#
++# Makefile - ASUS ROG Ally handheld device driver
++#
++asus-ally-hid-y := asus-ally-hid-core.o asus-ally-rgb.o asus-ally-hid-input.o asus-ally-hid-config.o
++obj-$(CONFIG_ASUS_ALLY_HID) := asus-ally-hid.o
+diff --git a/drivers/hid/asus-ally-hid/asus-ally-hid-config.c b/drivers/hid/asus-ally-hid/asus-ally-hid-config.c
+new file mode 100644
+index 000000000000..1624880121c4
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/asus-ally-hid-config.c
+@@ -0,0 +1,2347 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * HID driver for Asus ROG laptops and Ally
++ *
++ * Copyright (c) 2023 Luke Jones
++ */
++
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include "asus-ally.h"
++#include "../hid-ids.h"
++
++enum btn_map_type {
++ BTN_TYPE_NONE = 0,
++ BTN_TYPE_PAD = 0x01,
++ BTN_TYPE_KB = 0x02,
++ BTN_TYPE_MOUSE = 0x03,
++ BTN_TYPE_MEDIA = 0x05,
++};
++
++struct btn_code_map {
++ unsigned char type;
++ unsigned char value;
++ const char *name;
++};
++
++static const struct btn_code_map ally_btn_codes[] = {
++ { BTN_TYPE_NONE, 0x00, "NONE" },
++ /* Gamepad button codes */
++ { BTN_TYPE_PAD, 0x01, "PAD_A" },
++ { BTN_TYPE_PAD, 0x02, "PAD_B" },
++ { BTN_TYPE_PAD, 0x03, "PAD_X" },
++ { BTN_TYPE_PAD, 0x04, "PAD_Y" },
++ { BTN_TYPE_PAD, 0x05, "PAD_LB" },
++ { BTN_TYPE_PAD, 0x06, "PAD_RB" },
++ { BTN_TYPE_PAD, 0x07, "PAD_LS" },
++ { BTN_TYPE_PAD, 0x08, "PAD_RS" },
++ { BTN_TYPE_PAD, 0x09, "PAD_DPAD_UP" },
++ { BTN_TYPE_PAD, 0x0A, "PAD_DPAD_DOWN" },
++ { BTN_TYPE_PAD, 0x0B, "PAD_DPAD_LEFT" },
++ { BTN_TYPE_PAD, 0x0C, "PAD_DPAD_RIGHT" },
++ { BTN_TYPE_PAD, 0x0D, "PAD_LT" },
++ { BTN_TYPE_PAD, 0x0E, "PAD_RT" },
++ { BTN_TYPE_PAD, 0x11, "PAD_VIEW" },
++ { BTN_TYPE_PAD, 0x12, "PAD_MENU" },
++ { BTN_TYPE_PAD, 0x13, "PAD_XBOX" },
++
++ /* Keyboard button codes */
++ { BTN_TYPE_KB, 0x8E, "KB_M2" },
++ { BTN_TYPE_KB, 0x8F, "KB_M1" },
++ { BTN_TYPE_KB, 0x76, "KB_ESC" },
++ { BTN_TYPE_KB, 0x50, "KB_F1" },
++ { BTN_TYPE_KB, 0x60, "KB_F2" },
++ { BTN_TYPE_KB, 0x40, "KB_F3" },
++ { BTN_TYPE_KB, 0x0C, "KB_F4" },
++ { BTN_TYPE_KB, 0x03, "KB_F5" },
++ { BTN_TYPE_KB, 0x0B, "KB_F6" },
++ { BTN_TYPE_KB, 0x80, "KB_F7" },
++ { BTN_TYPE_KB, 0x0A, "KB_F8" },
++ { BTN_TYPE_KB, 0x01, "KB_F9" },
++ { BTN_TYPE_KB, 0x09, "KB_F10" },
++ { BTN_TYPE_KB, 0x78, "KB_F11" },
++ { BTN_TYPE_KB, 0x07, "KB_F12" },
++ { BTN_TYPE_KB, 0x18, "KB_F14" },
++ { BTN_TYPE_KB, 0x10, "KB_F15" },
++ { BTN_TYPE_KB, 0x0E, "KB_BACKTICK" },
++ { BTN_TYPE_KB, 0x16, "KB_1" },
++ { BTN_TYPE_KB, 0x1E, "KB_2" },
++ { BTN_TYPE_KB, 0x26, "KB_3" },
++ { BTN_TYPE_KB, 0x25, "KB_4" },
++ { BTN_TYPE_KB, 0x2E, "KB_5" },
++ { BTN_TYPE_KB, 0x36, "KB_6" },
++ { BTN_TYPE_KB, 0x3D, "KB_7" },
++ { BTN_TYPE_KB, 0x3E, "KB_8" },
++ { BTN_TYPE_KB, 0x46, "KB_9" },
++ { BTN_TYPE_KB, 0x45, "KB_0" },
++ { BTN_TYPE_KB, 0x4E, "KB_HYPHEN" },
++ { BTN_TYPE_KB, 0x55, "KB_EQUALS" },
++ { BTN_TYPE_KB, 0x66, "KB_BACKSPACE" },
++ { BTN_TYPE_KB, 0x0D, "KB_TAB" },
++ { BTN_TYPE_KB, 0x15, "KB_Q" },
++ { BTN_TYPE_KB, 0x1D, "KB_W" },
++ { BTN_TYPE_KB, 0x24, "KB_E" },
++ { BTN_TYPE_KB, 0x2D, "KB_R" },
++ { BTN_TYPE_KB, 0x2C, "KB_T" },
++ { BTN_TYPE_KB, 0x35, "KB_Y" },
++ { BTN_TYPE_KB, 0x3C, "KB_U" },
++ { BTN_TYPE_KB, 0x44, "KB_O" },
++ { BTN_TYPE_KB, 0x4D, "KB_P" },
++ { BTN_TYPE_KB, 0x54, "KB_LBRACKET" },
++ { BTN_TYPE_KB, 0x5B, "KB_RBRACKET" },
++ { BTN_TYPE_KB, 0x5D, "KB_BACKSLASH" },
++ { BTN_TYPE_KB, 0x58, "KB_CAPS" },
++ { BTN_TYPE_KB, 0x1C, "KB_A" },
++ { BTN_TYPE_KB, 0x1B, "KB_S" },
++ { BTN_TYPE_KB, 0x23, "KB_D" },
++ { BTN_TYPE_KB, 0x2B, "KB_F" },
++ { BTN_TYPE_KB, 0x34, "KB_G" },
++ { BTN_TYPE_KB, 0x33, "KB_H" },
++ { BTN_TYPE_KB, 0x3B, "KB_J" },
++ { BTN_TYPE_KB, 0x42, "KB_K" },
++ { BTN_TYPE_KB, 0x4B, "KB_L" },
++ { BTN_TYPE_KB, 0x4C, "KB_SEMI" },
++ { BTN_TYPE_KB, 0x52, "KB_QUOTE" },
++ { BTN_TYPE_KB, 0x5A, "KB_RET" },
++ { BTN_TYPE_KB, 0x88, "KB_LSHIFT" },
++ { BTN_TYPE_KB, 0x1A, "KB_Z" },
++ { BTN_TYPE_KB, 0x22, "KB_X" },
++ { BTN_TYPE_KB, 0x21, "KB_C" },
++ { BTN_TYPE_KB, 0x2A, "KB_V" },
++ { BTN_TYPE_KB, 0x32, "KB_B" },
++ { BTN_TYPE_KB, 0x31, "KB_N" },
++ { BTN_TYPE_KB, 0x3A, "KB_M" },
++ { BTN_TYPE_KB, 0x41, "KB_COMMA" },
++ { BTN_TYPE_KB, 0x49, "KB_PERIOD" },
++ { BTN_TYPE_KB, 0x89, "KB_RSHIFT" },
++ { BTN_TYPE_KB, 0x8C, "KB_LCTL" },
++ { BTN_TYPE_KB, 0x82, "KB_META" },
++ { BTN_TYPE_KB, 0x8A, "KB_LALT" },
++ { BTN_TYPE_KB, 0x29, "KB_SPACE" },
++ { BTN_TYPE_KB, 0x8B, "KB_RALT" },
++ { BTN_TYPE_KB, 0x84, "KB_MENU" },
++ { BTN_TYPE_KB, 0x8D, "KB_RCTL" },
++ { BTN_TYPE_KB, 0xC3, "KB_PRNTSCN" },
++ { BTN_TYPE_KB, 0x7E, "KB_SCRLCK" },
++ { BTN_TYPE_KB, 0x91, "KB_PAUSE" },
++ { BTN_TYPE_KB, 0xC2, "KB_INS" },
++ { BTN_TYPE_KB, 0x94, "KB_HOME" },
++ { BTN_TYPE_KB, 0x96, "KB_PGUP" },
++ { BTN_TYPE_KB, 0xC0, "KB_DEL" },
++ { BTN_TYPE_KB, 0x95, "KB_END" },
++ { BTN_TYPE_KB, 0x97, "KB_PGDWN" },
++ { BTN_TYPE_KB, 0x98, "KB_UP_ARROW" },
++ { BTN_TYPE_KB, 0x99, "KB_DOWN_ARROW" },
++ { BTN_TYPE_KB, 0x91, "KB_LEFT_ARROW" },
++ { BTN_TYPE_KB, 0x9B, "KB_RIGHT_ARROW" },
++
++ /* Numpad button codes */
++ { BTN_TYPE_KB, 0x77, "NUMPAD_LOCK" },
++ { BTN_TYPE_KB, 0x90, "NUMPAD_FWDSLASH" },
++ { BTN_TYPE_KB, 0x7C, "NUMPAD_ASTERISK" },
++ { BTN_TYPE_KB, 0x7B, "NUMPAD_HYPHEN" },
++ { BTN_TYPE_KB, 0x70, "NUMPAD_0" },
++ { BTN_TYPE_KB, 0x69, "NUMPAD_1" },
++ { BTN_TYPE_KB, 0x72, "NUMPAD_2" },
++ { BTN_TYPE_KB, 0x7A, "NUMPAD_3" },
++ { BTN_TYPE_KB, 0x6B, "NUMPAD_4" },
++ { BTN_TYPE_KB, 0x73, "NUMPAD_5" },
++ { BTN_TYPE_KB, 0x74, "NUMPAD_6" },
++ { BTN_TYPE_KB, 0x6C, "NUMPAD_7" },
++ { BTN_TYPE_KB, 0x75, "NUMPAD_8" },
++ { BTN_TYPE_KB, 0x7D, "NUMPAD_9" },
++ { BTN_TYPE_KB, 0x79, "NUMPAD_PLUS" },
++ { BTN_TYPE_KB, 0x81, "NUMPAD_ENTER" },
++ { BTN_TYPE_KB, 0x71, "NUMPAD_PERIOD" },
++
++ /* Mouse button codes */
++ { BTN_TYPE_MOUSE, 0x01, "MOUSE_LCLICK" },
++ { BTN_TYPE_MOUSE, 0x02, "MOUSE_RCLICK" },
++ { BTN_TYPE_MOUSE, 0x03, "MOUSE_MCLICK" },
++ { BTN_TYPE_MOUSE, 0x04, "MOUSE_WHEEL_UP" },
++ { BTN_TYPE_MOUSE, 0x05, "MOUSE_WHEEL_DOWN" },
++
++ /* Media button codes */
++ { BTN_TYPE_MEDIA, 0x16, "MEDIA_SCREENSHOT" },
++ { BTN_TYPE_MEDIA, 0x19, "MEDIA_SHOW_KEYBOARD" },
++ { BTN_TYPE_MEDIA, 0x1C, "MEDIA_SHOW_DESKTOP" },
++ { BTN_TYPE_MEDIA, 0x1E, "MEDIA_START_RECORDING" },
++ { BTN_TYPE_MEDIA, 0x01, "MEDIA_MIC_OFF" },
++ { BTN_TYPE_MEDIA, 0x02, "MEDIA_VOL_DOWN" },
++ { BTN_TYPE_MEDIA, 0x03, "MEDIA_VOL_UP" },
++};
++
++static const size_t keymap_len = ARRAY_SIZE(ally_btn_codes);
++
++/* Button pair indexes for mapping commands */
++enum btn_pair_index {
++ BTN_PAIR_DPAD_UPDOWN = 0x01,
++ BTN_PAIR_DPAD_LEFTRIGHT = 0x02,
++ BTN_PAIR_STICK_LR = 0x03,
++ BTN_PAIR_BUMPER_LR = 0x04,
++ BTN_PAIR_AB = 0x05,
++ BTN_PAIR_XY = 0x06,
++ BTN_PAIR_VIEW_MENU = 0x07,
++ BTN_PAIR_M1M2 = 0x08,
++ BTN_PAIR_TRIGGER_LR = 0x09,
++};
++
++struct button_map {
++ struct btn_code_map *remap;
++ struct btn_code_map *macro;
++};
++
++struct button_pair_map {
++ enum btn_pair_index pair_index;
++ struct button_map first;
++ struct button_map second;
++};
++
++/* Store button mapping per gamepad mode */
++struct ally_button_mapping {
++ struct button_pair_map button_pairs[9]; /* 9 button pairs */
++};
++
++/* Find a button code map by its name */
++static const struct btn_code_map *find_button_by_name(const char *name)
++{
++ int i;
++
++ for (i = 0; i < keymap_len; i++) {
++ if (strcmp(ally_btn_codes[i].name, name) == 0)
++ return &ally_btn_codes[i];
++ }
++
++ return NULL;
++}
++
++/* Set button mapping for a button pair */
++static int ally_set_button_mapping(struct hid_device *hdev, struct ally_handheld *ally,
++ struct button_pair_map *mapping)
++{
++ unsigned char packet[64] = { 0 };
++
++ if (!mapping)
++ return -EINVAL;
++
++ packet[0] = HID_ALLY_SET_REPORT_ID;
++ packet[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ packet[2] = CMD_SET_MAPPING;
++ packet[3] = mapping->pair_index;
++ packet[4] = 0x2C; /* Length */
++
++ /* First button mapping */
++ packet[5] = mapping->first.remap->type;
++ /* Fill in bytes 6-14 with button code */
++ if (mapping->first.remap->type) {
++ unsigned char btn_bytes[10] = {0};
++ btn_bytes[0] = mapping->first.remap->type;
++
++ switch (mapping->first.remap->type) {
++ case BTN_TYPE_NONE:
++ break;
++ case BTN_TYPE_PAD:
++ case BTN_TYPE_KB:
++ case BTN_TYPE_MEDIA:
++ btn_bytes[2] = mapping->first.remap->value;
++ break;
++ case BTN_TYPE_MOUSE:
++ btn_bytes[4] = mapping->first.remap->value;
++ break;
++ }
++ memcpy(&packet[5], btn_bytes, 10);
++ }
++
++ /* Macro mapping for first button if any */
++ packet[15] = mapping->first.macro->type;
++ if (mapping->first.macro->type) {
++ unsigned char macro_bytes[11] = {0};
++ macro_bytes[0] = mapping->first.macro->type;
++
++ switch (mapping->first.macro->type) {
++ case BTN_TYPE_NONE:
++ break;
++ case BTN_TYPE_PAD:
++ case BTN_TYPE_KB:
++ case BTN_TYPE_MEDIA:
++ macro_bytes[2] = mapping->first.macro->value;
++ break;
++ case BTN_TYPE_MOUSE:
++ macro_bytes[4] = mapping->first.macro->value;
++ break;
++ }
++ memcpy(&packet[15], macro_bytes, 11);
++ }
++
++ /* Second button mapping */
++ packet[27] = mapping->second.remap->type;
++ /* Fill in bytes 28-36 with button code */
++ if (mapping->second.remap->type) {
++ unsigned char btn_bytes[10] = {0};
++ btn_bytes[0] = mapping->second.remap->type;
++
++ switch (mapping->second.remap->type) {
++ case BTN_TYPE_NONE:
++ break;
++ case BTN_TYPE_PAD:
++ case BTN_TYPE_KB:
++ case BTN_TYPE_MEDIA:
++ btn_bytes[2] = mapping->second.remap->value;
++ break;
++ case BTN_TYPE_MOUSE:
++ btn_bytes[4] = mapping->second.remap->value;
++ break;
++ }
++ memcpy(&packet[27], btn_bytes, 10);
++ }
++
++ /* Macro mapping for second button if any */
++ packet[37] = mapping->second.macro->type;
++ if (mapping->second.macro->type) {
++ unsigned char macro_bytes[11] = {0};
++ macro_bytes[0] = mapping->second.macro->type;
++
++ switch (mapping->second.macro->type) {
++ case BTN_TYPE_NONE:
++ break;
++ case BTN_TYPE_PAD:
++ case BTN_TYPE_KB:
++ case BTN_TYPE_MEDIA:
++ macro_bytes[2] = mapping->second.macro->value;
++ break;
++ case BTN_TYPE_MOUSE:
++ macro_bytes[4] = mapping->second.macro->value;
++ break;
++ }
++ memcpy(&packet[37], macro_bytes, 11);
++ }
++
++ return ally_gamepad_send_packet(ally, hdev, packet, sizeof(packet));
++}
++
++/**
++ * ally_check_capability - Check if a specific capability is supported
++ * @hdev: HID device
++ * @flag_code: Capability flag code to check
++ *
++ * Returns true if capability is supported, false otherwise
++ */
++static bool ally_check_capability(struct hid_device *hdev, u8 flag_code)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ bool result = false;
++ u8 *hidbuf;
++ int ret;
++
++ hidbuf = kzalloc(HID_ALLY_REPORT_SIZE, GFP_KERNEL);
++ if (!hidbuf)
++ return false;
++
++ hidbuf[0] = HID_ALLY_SET_REPORT_ID;
++ hidbuf[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ hidbuf[2] = flag_code;
++ hidbuf[3] = 0x01;
++
++ ret = ally_gamepad_send_receive_packet(ally, hdev, hidbuf, HID_ALLY_REPORT_SIZE);
++ if (ret < 0)
++ goto cleanup;
++
++ if (hidbuf[1] == HID_ALLY_FEATURE_CODE_PAGE && hidbuf[2] == flag_code)
++ result = (hidbuf[4] == 0x01);
++
++cleanup:
++ kfree(hidbuf);
++ return result;
++}
++
++static int ally_detect_capabilities(struct hid_device *hdev,
++ struct ally_config *cfg)
++{
++ if (!hdev || !cfg)
++ return -EINVAL;
++
++ mutex_lock(&cfg->config_mutex);
++ cfg->is_ally_x =
++ (hdev->product == USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X);
++
++ cfg->xbox_controller_support =
++ ally_check_capability(hdev, CMD_CHECK_XBOX_SUPPORT);
++ cfg->user_cal_support =
++ ally_check_capability(hdev, CMD_CHECK_USER_CAL_SUPPORT);
++ cfg->turbo_support =
++ ally_check_capability(hdev, CMD_CHECK_TURBO_SUPPORT);
++ cfg->resp_curve_support =
++ ally_check_capability(hdev, CMD_CHECK_RESP_CURVE_SUPPORT);
++ cfg->dir_to_btn_support =
++ ally_check_capability(hdev, CMD_CHECK_DIR_TO_BTN_SUPPORT);
++ cfg->gyro_support =
++ ally_check_capability(hdev, CMD_CHECK_GYRO_TO_JOYSTICK);
++ cfg->anti_deadzone_support =
++ ally_check_capability(hdev, CMD_CHECK_ANTI_DEADZONE);
++ mutex_unlock(&cfg->config_mutex);
++
++ hid_dbg(
++ hdev,
++ "Ally capabilities: %s, Xbox: %d, UserCal: %d, Turbo: %d, RespCurve: %d, DirToBtn: %d, Gyro: %d, AntiDZ: %d",
++ cfg->is_ally_x ? "Ally X" : "Ally",
++ cfg->xbox_controller_support, cfg->user_cal_support,
++ cfg->turbo_support, cfg->resp_curve_support,
++ cfg->dir_to_btn_support, cfg->gyro_support,
++ cfg->anti_deadzone_support);
++
++ return 0;
++}
++
++static int ally_set_xbox_controller(struct hid_device *hdev,
++ struct ally_config *cfg, bool enabled)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ u8 buffer[64] = { 0 };
++ int ret;
++
++ if (!cfg || !cfg->xbox_controller_support)
++ return -ENODEV;
++
++ buffer[0] = HID_ALLY_SET_REPORT_ID;
++ buffer[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ buffer[2] = CMD_SET_XBOX_CONTROLLER;
++ buffer[3] = 0x01;
++ buffer[4] = enabled ? 0x01 : 0x00;
++
++ ret = ally_gamepad_send_one_byte_packet(
++ ally, hdev, CMD_SET_XBOX_CONTROLLER,
++ enabled ? 0x01 : 0x00);
++ if (ret < 0) return ret;
++
++ cfg->xbox_controller_enabled = enabled;
++ return 0;
++}
++
++static ssize_t xbox_controller_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg;
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ cfg = ally->config;
++
++ if (!cfg->xbox_controller_support)
++ return sprintf(buf, "Unsupported\n");
++
++ return sprintf(buf, "%d\n", cfg->xbox_controller_enabled);
++}
++
++static ssize_t xbox_controller_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg;
++ bool enabled;
++ int ret;
++
++ cfg = ally->config;
++ if (!cfg->xbox_controller_support)
++ return -ENODEV;
++
++ ret = kstrtobool(buf, &enabled);
++ if (ret)
++ return ret;
++
++ ret = ally_set_xbox_controller(hdev, cfg, enabled);
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static DEVICE_ATTR_RW(xbox_controller);
++
++/**
++ * ally_set_vibration_intensity - Set vibration intensity values
++ * @hdev: HID device
++ * @cfg: Ally config
++ * @left: Left motor intensity (0-100)
++ * @right: Right motor intensity (0-100)
++ *
++ * Returns 0 on success, negative error code on failure
++ */
++static int ally_set_vibration_intensity(struct hid_device *hdev,
++ struct ally_config *cfg, u8 left,
++ u8 right)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ u8 buffer[64] = { 0 };
++ int ret;
++
++ if (!cfg)
++ return -ENODEV;
++
++ buffer[0] = HID_ALLY_SET_REPORT_ID;
++ buffer[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ buffer[2] = CMD_SET_VIBRATION_INTENSITY;
++ buffer[3] = 0x02; /* Length */
++ buffer[4] = left;
++ buffer[5] = right;
++
++ ret = ally_gamepad_send_two_byte_packet(
++ ally, hdev, CMD_SET_VIBRATION_INTENSITY, left, right);
++ if (ret < 0)
++ return ret;
++
++ mutex_lock(&cfg->config_mutex);
++ cfg->vibration_intensity_left = left;
++ cfg->vibration_intensity_right = right;
++ mutex_unlock(&cfg->config_mutex);
++
++ return 0;
++}
++
++static ssize_t vibration_intensity_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg;
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ cfg = ally->config;
++
++ return sprintf(buf, "%u,%u\n", cfg->vibration_intensity_left,
++ cfg->vibration_intensity_right);
++}
++
++static ssize_t vibration_intensity_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg;
++ u8 left, right;
++ int ret;
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ cfg = ally->config;
++
++ ret = sscanf(buf, "%hhu %hhu", &left, &right);
++ if (ret != 2 || left > 100 || right > 100)
++ return -EINVAL;
++
++ ret = ally_set_vibration_intensity(hdev, cfg, left, right);
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static DEVICE_ATTR_RW(vibration_intensity);
++
++/**
++ * ally_set_dzot_ranges - Generic function to set joystick or trigger ranges
++ * @hdev: HID device
++ * @cfg: Ally config struct
++ * @command: Command to use (CMD_SET_JOYSTICK_DEADZONE or CMD_SET_TRIGGER_RANGE)
++ * @param1: First parameter
++ * @param2: Second parameter
++ * @param3: Third parameter
++ * @param4: Fourth parameter
++ *
++ * Returns 0 on success, negative error code on failure
++ */
++static int ally_set_dzot_ranges(struct hid_device *hdev,
++ struct ally_config *cfg,
++ u8 command, u8 param1, u8 param2,
++ u8 param3, u8 param4)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ u8 packet[HID_ALLY_REPORT_SIZE] = { 0 };
++ int ret;
++
++ packet[0] = HID_ALLY_SET_REPORT_ID;
++ packet[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ packet[2] = command;
++ packet[3] = 0x04; /* Length */
++ packet[4] = param1;
++ packet[5] = param2;
++ packet[6] = param3;
++ packet[7] = param4;
++
++ ret = ally_gamepad_send_packet(ally, hdev, packet,
++ HID_ALLY_REPORT_SIZE);
++ return ret;
++}
++
++static int ally_validate_joystick_dzot(u8 left_dz, u8 left_ot, u8 right_dz,
++ u8 right_ot)
++{
++ if (left_dz > 50 || right_dz > 50)
++ return -EINVAL;
++
++ if (left_ot < 70 || left_ot > 100 || right_ot < 70 || right_ot > 100)
++ return -EINVAL;
++
++ return 0;
++}
++
++static int ally_set_joystick_dzot(struct hid_device *hdev,
++ struct ally_config *cfg, u8 left_dz,
++ u8 left_ot, u8 right_dz, u8 right_ot)
++{
++ int ret;
++
++ ret = ally_validate_joystick_dzot(left_dz, left_ot, right_dz, right_ot);
++ if (ret < 0)
++ return ret;
++
++ ret = ally_set_dzot_ranges(hdev, cfg,
++ CMD_SET_JOYSTICK_DEADZONE,
++ left_dz, left_ot, right_dz,
++ right_ot);
++ if (ret < 0)
++ return ret;
++
++ mutex_lock(&cfg->config_mutex);
++ cfg->left_deadzone = left_dz;
++ cfg->left_outer_threshold = left_ot;
++ cfg->right_deadzone = right_dz;
++ cfg->right_outer_threshold = right_ot;
++ mutex_unlock(&cfg->config_mutex);
++
++ return 0;
++}
++
++static ssize_t joystick_deadzone_show(struct device *dev,
++ struct device_attribute *attr, char *buf,
++ u8 deadzone, u8 outer_threshold)
++{
++ return sprintf(buf, "%u %u\n", deadzone, outer_threshold);
++}
++
++static ssize_t joystick_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count,
++ bool is_left, struct ally_config *cfg)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ u8 dz, ot;
++ int ret;
++
++ ret = sscanf(buf, "%hhu %hhu", &dz, &ot);
++ if (ret != 2)
++ return -EINVAL;
++
++ if (is_left) {
++ ret = ally_set_joystick_dzot(hdev, cfg, dz, ot,
++ cfg->right_deadzone,
++ cfg->right_outer_threshold);
++ } else {
++ ret = ally_set_joystick_dzot(hdev, cfg, cfg->left_deadzone,
++ cfg->left_outer_threshold, dz, ot);
++ }
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t joystick_left_deadzone_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg = ally->config;
++
++ return joystick_deadzone_show(dev, attr, buf, cfg->left_deadzone,
++ cfg->left_outer_threshold);
++}
++
++static ssize_t joystick_left_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ return joystick_deadzone_store(dev, attr, buf, count, true,
++ ally->config);
++}
++
++static ssize_t joystick_right_deadzone_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg = ally->config;
++
++ return joystick_deadzone_show(dev, attr, buf, cfg->right_deadzone,
++ cfg->right_outer_threshold);
++}
++
++static ssize_t joystick_right_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ return joystick_deadzone_store(dev, attr, buf, count, false,
++ ally->config);
++}
++
++ALLY_DEVICE_CONST_ATTR_RO(js_deadzone_index, deadzone_index, "inner outer\n");
++ALLY_DEVICE_CONST_ATTR_RO(js_deadzone_inner_min, deadzone_inner_min, "0\n");
++ALLY_DEVICE_CONST_ATTR_RO(js_deadzone_inner_max, deadzone_inner_max, "50\n");
++ALLY_DEVICE_CONST_ATTR_RO(js_deadzone_outer_min, deadzone_outer_min, "70\n");
++ALLY_DEVICE_CONST_ATTR_RO(js_deadzone_outer_max, deadzone_outer_max, "100\n");
++
++ALLY_DEVICE_ATTR_RW(joystick_left_deadzone, deadzone);
++ALLY_DEVICE_ATTR_RW(joystick_right_deadzone, deadzone);
++
++/**
++ * ally_set_anti_deadzone - Set anti-deadzone values for joysticks
++ * @ally: ally handheld structure
++ * @left_adz: Left joystick anti-deadzone value (0-100)
++ * @right_adz: Right joystick anti-deadzone value (0-100)
++ *
++ * Return: 0 on success, negative on failure
++ */
++static int ally_set_anti_deadzone(struct ally_handheld *ally, u8 left_adz,
++ u8 right_adz)
++{
++ struct hid_device *hdev = ally->cfg_hdev;
++ int ret;
++
++ if (!ally->config->anti_deadzone_support) {
++ hid_dbg(hdev, "Anti-deadzone not supported on this device\n");
++ return -EOPNOTSUPP;
++ }
++
++ if (left_adz > 100 || right_adz > 100)
++ return -EINVAL;
++
++ ret = ally_gamepad_send_two_byte_packet(
++ ally, hdev, CMD_SET_ANTI_DEADZONE, left_adz, right_adz);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to set anti-deadzone values: %d\n", ret);
++ return ret;
++ }
++
++ ally->config->left_anti_deadzone = left_adz;
++ ally->config->right_anti_deadzone = right_adz;
++ hid_dbg(hdev, "Set joystick anti-deadzone: left=%d, right=%d\n",
++ left_adz, right_adz);
++
++ return 0;
++}
++
++static ssize_t anti_deadzone_show(struct device *dev,
++ struct device_attribute *attr, char *buf,
++ u8 anti_deadzone)
++{
++ return sprintf(buf, "%u\n", anti_deadzone);
++}
++
++static ssize_t anti_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count, bool is_left,
++ struct ally_handheld *ally)
++{
++ u8 adz;
++ int ret;
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ if (!ally->config->anti_deadzone_support)
++ return -EOPNOTSUPP;
++
++ ret = kstrtou8(buf, 10, &adz);
++ if (ret)
++ return ret;
++
++ if (adz > 100)
++ return -EINVAL;
++
++ if (is_left)
++ ret = ally_set_anti_deadzone(ally, adz, ally->config->right_anti_deadzone);
++ else
++ ret = ally_set_anti_deadzone(ally, ally->config->left_anti_deadzone, adz);
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t js_left_anti_deadzone_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ return anti_deadzone_show(dev, attr, buf,
++ ally->config->left_anti_deadzone);
++}
++
++static ssize_t js_left_anti_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ return anti_deadzone_store(dev, attr, buf, count, true, ally);
++}
++
++static ssize_t js_right_anti_deadzone_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ return anti_deadzone_show(dev, attr, buf,
++ ally->config->right_anti_deadzone);
++}
++
++static ssize_t js_right_anti_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ return anti_deadzone_store(dev, attr, buf, count, false, ally);
++}
++
++ALLY_DEVICE_ATTR_RW(js_left_anti_deadzone, anti_deadzone);
++ALLY_DEVICE_ATTR_RW(js_right_anti_deadzone, anti_deadzone);
++ALLY_DEVICE_CONST_ATTR_RO(js_anti_deadzone_min, js_anti_deadzone_min, "0\n");
++ALLY_DEVICE_CONST_ATTR_RO(js_anti_deadzone_max, js_anti_deadzone_max, "100\n");
++
++/**
++ * ally_set_joystick_resp_curve - Set joystick response curve parameters
++ * @ally: ally handheld structure
++ * @hdev: HID device
++ * @side: Which joystick side (0=left, 1=right)
++ * @curve: Response curve parameter structure
++ *
++ * Return: 0 on success, negative on failure
++ */
++static int ally_set_joystick_resp_curve(struct ally_handheld *ally,
++ struct hid_device *hdev, u8 side,
++ struct joystick_resp_curve *curve)
++{
++ u8 packet[HID_ALLY_REPORT_SIZE] = { 0 };
++ int ret;
++ struct ally_config *cfg = ally->config;
++
++ if (!cfg || !cfg->resp_curve_support) {
++ hid_dbg(hdev, "Response curve not supported on this device\n");
++ return -EOPNOTSUPP;
++ }
++
++ if (side > 1) {
++ return -EINVAL;
++ }
++
++ packet[0] = HID_ALLY_SET_REPORT_ID;
++ packet[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ packet[2] = CMD_SET_RESP_CURVE;
++ packet[3] = 0x09; /* Length */
++ packet[4] = side;
++
++ packet[5] = curve->entry_1.move;
++ packet[6] = curve->entry_1.resp;
++ packet[7] = curve->entry_2.move;
++ packet[8] = curve->entry_2.resp;
++ packet[9] = curve->entry_3.move;
++ packet[10] = curve->entry_3.resp;
++ packet[11] = curve->entry_4.move;
++ packet[12] = curve->entry_4.resp;
++
++ ret = ally_gamepad_send_packet(ally, hdev, packet,
++ HID_ALLY_REPORT_SIZE);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to set joystick response curve: %d\n",
++ ret);
++ return ret;
++ }
++
++ mutex_lock(&cfg->config_mutex);
++ if (side == 0) {
++ memcpy(&cfg->left_curve, curve, sizeof(*curve));
++ } else {
++ memcpy(&cfg->right_curve, curve, sizeof(*curve));
++ }
++ mutex_unlock(&cfg->config_mutex);
++
++ hid_dbg(hdev, "Set joystick response curve for side %d\n", side);
++ return 0;
++}
++
++static int response_curve_apply(struct hid_device *hdev, struct ally_handheld *ally, bool is_left)
++{
++ struct ally_config *cfg = ally->config;
++ struct joystick_resp_curve *curve = is_left ? &cfg->left_curve : &cfg->right_curve;
++
++ if (!(curve->entry_1.move < curve->entry_2.move &&
++ curve->entry_2.move < curve->entry_3.move &&
++ curve->entry_3.move < curve->entry_4.move)) {
++ return -EINVAL;
++ }
++
++ return ally_set_joystick_resp_curve(ally, hdev, is_left ? 0 : 1, curve);
++}
++
++static ssize_t response_curve_apply_left_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ int ret;
++ bool apply;
++
++ if (!ally->config->resp_curve_support)
++ return -EOPNOTSUPP;
++
++ ret = kstrtobool(buf, &apply);
++ if (ret)
++ return ret;
++
++ if (!apply)
++ return count; /* Only apply on "1" or "true" value */
++
++ ret = response_curve_apply(hdev, ally, true);
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t response_curve_apply_right_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ int ret;
++ bool apply;
++
++ if (!ally->config->resp_curve_support)
++ return -EOPNOTSUPP;
++
++ ret = kstrtobool(buf, &apply);
++ if (ret)
++ return ret;
++
++ if (!apply)
++ return count; /* Only apply on "1" or "true" value */
++
++ ret = response_curve_apply(hdev, ally, false);
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t response_curve_pct_show(struct device *dev,
++ struct device_attribute *attr, char *buf,
++ struct joystick_resp_curve *curve, int idx)
++{
++ switch (idx) {
++ case 1: return sprintf(buf, "%u\n", curve->entry_1.resp);
++ case 2: return sprintf(buf, "%u\n", curve->entry_2.resp);
++ case 3: return sprintf(buf, "%u\n", curve->entry_3.resp);
++ case 4: return sprintf(buf, "%u\n", curve->entry_4.resp);
++ default: return -EINVAL;
++ }
++}
++
++static ssize_t response_curve_move_show(struct device *dev,
++ struct device_attribute *attr, char *buf,
++ struct joystick_resp_curve *curve, int idx)
++{
++ switch (idx) {
++ case 1: return sprintf(buf, "%u\n", curve->entry_1.move);
++ case 2: return sprintf(buf, "%u\n", curve->entry_2.move);
++ case 3: return sprintf(buf, "%u\n", curve->entry_3.move);
++ case 4: return sprintf(buf, "%u\n", curve->entry_4.move);
++ default: return -EINVAL;
++ }
++}
++
++static ssize_t response_curve_pct_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count,
++ bool is_left, struct ally_handheld *ally,
++ int idx)
++{
++ struct ally_config *cfg = ally->config;
++ struct joystick_resp_curve *curve = is_left ? &cfg->left_curve : &cfg->right_curve;
++ u8 value;
++ int ret;
++
++ if (!cfg->resp_curve_support)
++ return -EOPNOTSUPP;
++
++ ret = kstrtou8(buf, 10, &value);
++ if (ret)
++ return ret;
++
++ if (value > 100)
++ return -EINVAL;
++
++ mutex_lock(&cfg->config_mutex);
++ switch (idx) {
++ case 1: curve->entry_1.resp = value; break;
++ case 2: curve->entry_2.resp = value; break;
++ case 3: curve->entry_3.resp = value; break;
++ case 4: curve->entry_4.resp = value; break;
++ default: ret = -EINVAL;
++ }
++ mutex_unlock(&cfg->config_mutex);
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t response_curve_move_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count,
++ bool is_left, struct ally_handheld *ally,
++ int idx)
++{
++ struct ally_config *cfg = ally->config;
++ struct joystick_resp_curve *curve = is_left ? &cfg->left_curve : &cfg->right_curve;
++ u8 value;
++ int ret;
++
++ if (!cfg->resp_curve_support)
++ return -EOPNOTSUPP;
++
++ ret = kstrtou8(buf, 10, &value);
++ if (ret)
++ return ret;
++
++ if (value > 100)
++ return -EINVAL;
++
++ mutex_lock(&cfg->config_mutex);
++ switch (idx) {
++ case 1: curve->entry_1.move = value; break;
++ case 2: curve->entry_2.move = value; break;
++ case 3: curve->entry_3.move = value; break;
++ case 4: curve->entry_4.move = value; break;
++ default: ret = -EINVAL;
++ }
++ mutex_unlock(&cfg->config_mutex);
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++#define DEFINE_JS_CURVE_PCT_FOPS(region, side) \
++ static ssize_t response_curve_pct_##region##_##side##_show( \
++ struct device *dev, struct device_attribute *attr, char *buf) \
++ { \
++ struct hid_device *hdev = to_hid_device(dev); \
++ struct ally_handheld *ally = hid_get_drvdata(hdev); \
++ return response_curve_pct_show( \
++ dev, attr, buf, &ally->config->side##_curve, region); \
++ } \
++ \
++ static ssize_t response_curve_pct_##region##_##side##_store( \
++ struct device *dev, struct device_attribute *attr, \
++ const char *buf, size_t count) \
++ { \
++ struct hid_device *hdev = to_hid_device(dev); \
++ struct ally_handheld *ally = hid_get_drvdata(hdev); \
++ return response_curve_pct_store(dev, attr, buf, count, \
++ side##_is_left, ally, region); \
++ }
++
++#define DEFINE_JS_CURVE_MOVE_FOPS(region, side) \
++ static ssize_t response_curve_move_##region##_##side##_show( \
++ struct device *dev, struct device_attribute *attr, char *buf) \
++ { \
++ struct hid_device *hdev = to_hid_device(dev); \
++ struct ally_handheld *ally = hid_get_drvdata(hdev); \
++ return response_curve_move_show( \
++ dev, attr, buf, &ally->config->side##_curve, region); \
++ } \
++ \
++ static ssize_t response_curve_move_##region##_##side##_store( \
++ struct device *dev, struct device_attribute *attr, \
++ const char *buf, size_t count) \
++ { \
++ struct hid_device *hdev = to_hid_device(dev); \
++ struct ally_handheld *ally = hid_get_drvdata(hdev); \
++ return response_curve_move_store(dev, attr, buf, count, \
++ side##_is_left, ally, region); \
++ }
++
++#define DEFINE_JS_CURVE_ATTRS(region, side) \
++ DEFINE_JS_CURVE_PCT_FOPS(region, side) \
++ DEFINE_JS_CURVE_MOVE_FOPS(region, side) \
++ ALLY_DEVICE_ATTR_RW(response_curve_pct_##region##_##side, \
++ response_curve_pct_##region); \
++ ALLY_DEVICE_ATTR_RW(response_curve_move_##region##_##side, \
++ response_curve_move_##region)
++
++/* Helper defines for "is_left" parameter */
++#define left_is_left true
++#define right_is_left false
++
++DEFINE_JS_CURVE_ATTRS(1, left);
++DEFINE_JS_CURVE_ATTRS(2, left);
++DEFINE_JS_CURVE_ATTRS(3, left);
++DEFINE_JS_CURVE_ATTRS(4, left);
++
++DEFINE_JS_CURVE_ATTRS(1, right);
++DEFINE_JS_CURVE_ATTRS(2, right);
++DEFINE_JS_CURVE_ATTRS(3, right);
++DEFINE_JS_CURVE_ATTRS(4, right);
++
++ALLY_DEVICE_ATTR_WO(response_curve_apply_left, response_curve_apply);
++ALLY_DEVICE_ATTR_WO(response_curve_apply_right, response_curve_apply);
++
++static ssize_t deadzone_left_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg = ally->config;
++
++ return sprintf(buf, "%u %u\n", cfg->left_deadzone, cfg->left_outer_threshold);
++}
++
++static ssize_t deadzone_right_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg = ally->config;
++
++ return sprintf(buf, "%u %u\n", cfg->right_deadzone, cfg->right_outer_threshold);
++}
++
++DEVICE_ATTR_RO(deadzone_left);
++DEVICE_ATTR_RO(deadzone_right);
++ALLY_DEVICE_CONST_ATTR_RO(deadzone_index, deadzone_index, "inner outer\n");
++
++static struct attribute *axis_xy_left_attrs[] = {
++ &dev_attr_joystick_left_deadzone.attr,
++ &dev_attr_js_deadzone_index.attr,
++ &dev_attr_js_deadzone_inner_min.attr,
++ &dev_attr_js_deadzone_inner_max.attr,
++ &dev_attr_js_deadzone_outer_min.attr,
++ &dev_attr_js_deadzone_outer_max.attr,
++ &dev_attr_js_left_anti_deadzone.attr,
++ &dev_attr_js_anti_deadzone_min.attr,
++ &dev_attr_js_anti_deadzone_max.attr,
++ &dev_attr_response_curve_pct_1_left.attr,
++ &dev_attr_response_curve_pct_2_left.attr,
++ &dev_attr_response_curve_pct_3_left.attr,
++ &dev_attr_response_curve_pct_4_left.attr,
++ &dev_attr_response_curve_move_1_left.attr,
++ &dev_attr_response_curve_move_2_left.attr,
++ &dev_attr_response_curve_move_3_left.attr,
++ &dev_attr_response_curve_move_4_left.attr,
++ &dev_attr_response_curve_apply_left.attr,
++ NULL
++};
++
++static struct attribute *axis_xy_right_attrs[] = {
++ &dev_attr_joystick_right_deadzone.attr,
++ &dev_attr_js_deadzone_index.attr,
++ &dev_attr_js_deadzone_inner_min.attr,
++ &dev_attr_js_deadzone_inner_max.attr,
++ &dev_attr_js_deadzone_outer_min.attr,
++ &dev_attr_js_deadzone_outer_max.attr,
++ &dev_attr_js_right_anti_deadzone.attr,
++ &dev_attr_js_anti_deadzone_min.attr,
++ &dev_attr_js_anti_deadzone_max.attr,
++ &dev_attr_response_curve_pct_1_right.attr,
++ &dev_attr_response_curve_pct_2_right.attr,
++ &dev_attr_response_curve_pct_3_right.attr,
++ &dev_attr_response_curve_pct_4_right.attr,
++ &dev_attr_response_curve_move_1_right.attr,
++ &dev_attr_response_curve_move_2_right.attr,
++ &dev_attr_response_curve_move_3_right.attr,
++ &dev_attr_response_curve_move_4_right.attr,
++ &dev_attr_response_curve_apply_right.attr,
++ NULL
++};
++
++/**
++ * ally_set_trigger_range - Set trigger range values
++ * @hdev: HID device
++ * @cfg: Ally config
++ * @left_min: Left trigger minimum (0-255)
++ * @left_max: Left trigger maximum (0-255)
++ * @right_min: Right trigger minimum (0-255)
++ * @right_max: Right trigger maximum (0-255)
++ *
++ * Returns 0 on success, negative error code on failure
++ */
++static int ally_set_trigger_range(struct hid_device *hdev,
++ struct ally_config *cfg, u8 left_min,
++ u8 left_max, u8 right_min, u8 right_max)
++{
++ int ret;
++
++ if (left_min >= left_max || right_min >= right_max)
++ return -EINVAL;
++
++ ret = ally_set_dzot_ranges(hdev, cfg,
++ CMD_SET_TRIGGER_RANGE,
++ left_min, left_max, right_min,
++ right_max);
++ if (ret < 0)
++ return ret;
++
++ mutex_lock(&cfg->config_mutex);
++ cfg->left_trigger_min = left_min;
++ cfg->left_trigger_max = left_max;
++ cfg->right_trigger_min = right_min;
++ cfg->right_trigger_max = right_max;
++ mutex_unlock(&cfg->config_mutex);
++
++ return 0;
++}
++
++static ssize_t trigger_range_show(struct device *dev,
++ struct device_attribute *attr, char *buf,
++ u8 min_val, u8 max_val)
++{
++ return sprintf(buf, "%u %u\n", min_val, max_val);
++}
++
++static ssize_t trigger_range_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count, bool is_left,
++ struct ally_config *cfg)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ u8 min_val, max_val;
++ int ret;
++
++ ret = sscanf(buf, "%hhu %hhu", &min_val, &max_val);
++ if (ret != 2)
++ return -EINVAL;
++
++ if (is_left) {
++ ret = ally_set_trigger_range(hdev, cfg, min_val, max_val,
++ cfg->right_trigger_min,
++ cfg->right_trigger_max);
++ } else {
++ ret = ally_set_trigger_range(hdev, cfg, cfg->left_trigger_min,
++ cfg->left_trigger_max, min_val,
++ max_val);
++ }
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t trigger_left_deadzone_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg = ally->config;
++
++ return trigger_range_show(dev, attr, buf, cfg->left_trigger_min,
++ cfg->left_trigger_max);
++}
++
++static ssize_t trigger_left_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ return trigger_range_store(dev, attr, buf, count, true, ally->config);
++}
++
++static ssize_t trigger_right_deadzone_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg = ally->config;
++
++ return trigger_range_show(dev, attr, buf, cfg->right_trigger_min,
++ cfg->right_trigger_max);
++}
++
++static ssize_t trigger_right_deadzone_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ return trigger_range_store(dev, attr, buf, count, false, ally->config);
++}
++
++ALLY_DEVICE_CONST_ATTR_RO(tr_deadzone_inner_min, deadzone_inner_min, "0\n");
++ALLY_DEVICE_CONST_ATTR_RO(tr_deadzone_inner_max, deadzone_inner_max, "255\n");
++
++ALLY_DEVICE_ATTR_RW(trigger_left_deadzone, deadzone);
++ALLY_DEVICE_ATTR_RW(trigger_right_deadzone, deadzone);
++
++static struct attribute *axis_z_left_attrs[] = {
++ &dev_attr_trigger_left_deadzone.attr,
++ &dev_attr_tr_deadzone_inner_min.attr,
++ &dev_attr_tr_deadzone_inner_max.attr,
++ NULL
++};
++
++static struct attribute *axis_z_right_attrs[] = {
++ &dev_attr_trigger_right_deadzone.attr,
++ &dev_attr_tr_deadzone_inner_min.attr,
++ &dev_attr_tr_deadzone_inner_max.attr,
++ NULL
++};
++
++/* Map from string name to enum value */
++static int get_gamepad_mode_from_name(const char *name)
++{
++ int i;
++
++ for (i = ALLY_GAMEPAD_MODE_GAMEPAD; i <= ALLY_GAMEPAD_MODE_KEYBOARD;
++ i++) {
++ if (gamepad_mode_names[i] &&
++ strcmp(name, gamepad_mode_names[i]) == 0)
++ return i;
++ }
++
++ return -1;
++}
++
++/**
++ * ally_set_gamepad_mode - Set the gamepad operating mode
++ * @ally: ally handheld structure
++ * @hdev: HID device
++ * @mode: Gamepad mode to set
++ *
++ * Returns: 0 on success, negative on failure
++ */
++static int ally_set_gamepad_mode(struct ally_handheld *ally,
++ struct hid_device *hdev, u8 mode)
++{
++ struct ally_config *cfg = ally->config;
++ int ret;
++
++ if (!cfg)
++ return -EINVAL;
++
++ if (mode < ALLY_GAMEPAD_MODE_GAMEPAD ||
++ mode > ALLY_GAMEPAD_MODE_KEYBOARD) {
++ hid_err(hdev, "Invalid gamepad mode: %u\n", mode);
++ return -EINVAL;
++ }
++
++ ret = ally_gamepad_send_one_byte_packet(ally, hdev,
++ CMD_SET_GAMEPAD_MODE, mode);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to set gamepad mode: %d\n", ret);
++ return ret;
++ }
++
++ mutex_lock(&cfg->config_mutex);
++ cfg->gamepad_mode = mode;
++ mutex_unlock(&cfg->config_mutex);
++
++ hid_info(hdev, "Set gamepad mode to %s\n", gamepad_mode_names[mode]);
++ return 0;
++}
++
++static ssize_t gamepad_mode_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_config *cfg;
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ cfg = ally->config;
++
++ if (cfg->gamepad_mode >= ALLY_GAMEPAD_MODE_GAMEPAD &&
++ cfg->gamepad_mode <= ALLY_GAMEPAD_MODE_KEYBOARD) {
++ return sprintf(buf, "%s\n",
++ gamepad_mode_names[cfg->gamepad_mode]);
++ } else {
++ return sprintf(buf, "unknown (%u)\n", cfg->gamepad_mode);
++ }
++}
++
++static ssize_t gamepad_mode_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ char mode_name[16];
++ int mode;
++ int ret;
++
++ if (!ally || !ally->config)
++ return -ENODEV;
++
++ if (sscanf(buf, "%15s", mode_name) != 1)
++ return -EINVAL;
++
++ mode = get_gamepad_mode_from_name(mode_name);
++ if (mode < 0) {
++ hid_err(hdev, "Unknown gamepad mode: %s\n", mode_name);
++ return -EINVAL;
++ }
++
++ ret = ally_set_gamepad_mode(ally, hdev, mode);
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++static ssize_t gamepad_modes_available_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ int i;
++ int len = 0;
++
++ for (i = ALLY_GAMEPAD_MODE_GAMEPAD; i <= ALLY_GAMEPAD_MODE_KEYBOARD;
++ i++) {
++ len += sprintf(buf + len, "%s ", gamepad_mode_names[i]);
++ }
++
++ /* Replace the last space with a newline */
++ if (len > 0)
++ buf[len - 1] = '\n';
++
++ return len;
++}
++
++DEVICE_ATTR_RW(gamepad_mode);
++DEVICE_ATTR_RO(gamepad_modes_available);
++
++static int ally_set_default_gamepad_mode(struct hid_device *hdev,
++ struct ally_config *cfg)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ cfg->gamepad_mode = ALLY_GAMEPAD_MODE_GAMEPAD;
++
++ return ally_set_gamepad_mode(ally, hdev, cfg->gamepad_mode);
++}
++
++static struct attribute *ally_config_attrs[] = {
++ &dev_attr_xbox_controller.attr,
++ &dev_attr_vibration_intensity.attr,
++ &dev_attr_gamepad_mode.attr,
++ &dev_attr_gamepad_modes_available.attr,
++ NULL
++};
++
++static const struct attribute_group ally_attr_groups[] = {
++ {
++ .attrs = ally_config_attrs,
++ },
++ {
++ .name = "axis_xy_left",
++ .attrs = axis_xy_left_attrs,
++ },
++ {
++ .name = "axis_xy_right",
++ .attrs = axis_xy_right_attrs,
++ },
++ {
++ .name = "axis_z_left",
++ .attrs = axis_z_left_attrs,
++ },
++ {
++ .name = "axis_z_right",
++ .attrs = axis_z_right_attrs,
++ },
++};
++
++/**
++ * ally_get_turbo_params - Get turbo parameters for a specific button
++ * @cfg: Ally config structure
++ * @button_id: Button identifier from ally_button_id enum
++ *
++ * Returns: Pointer to the button's turbo parameters, or NULL if invalid
++ */
++static struct button_turbo_params *ally_get_turbo_params(struct ally_config *cfg,
++ enum ally_button_id button_id)
++{
++ struct turbo_config *turbo;
++
++ if (!cfg || button_id >= ALLY_BTN_MAX)
++ return NULL;
++
++ turbo = &cfg->turbo;
++
++ switch (button_id) {
++ case ALLY_BTN_A:
++ return &turbo->btn_a;
++ case ALLY_BTN_B:
++ return &turbo->btn_b;
++ case ALLY_BTN_X:
++ return &turbo->btn_x;
++ case ALLY_BTN_Y:
++ return &turbo->btn_y;
++ case ALLY_BTN_LB:
++ return &turbo->btn_lb;
++ case ALLY_BTN_RB:
++ return &turbo->btn_rb;
++ case ALLY_BTN_DU:
++ return &turbo->btn_du;
++ case ALLY_BTN_DD:
++ return &turbo->btn_dd;
++ case ALLY_BTN_DL:
++ return &turbo->btn_dl;
++ case ALLY_BTN_DR:
++ return &turbo->btn_dr;
++ case ALLY_BTN_J0B:
++ return &turbo->btn_j0b;
++ case ALLY_BTN_J1B:
++ return &turbo->btn_j1b;
++ case ALLY_BTN_MENU:
++ return &turbo->btn_menu;
++ case ALLY_BTN_VIEW:
++ return &turbo->btn_view;
++ case ALLY_BTN_M1:
++ return &turbo->btn_m1;
++ case ALLY_BTN_M2:
++ return &turbo->btn_m2;
++ default:
++ return NULL;
++ }
++}
++
++/**
++ * ally_set_turbo_params - Set turbo parameters for all buttons
++ * @hdev: HID device
++ * @cfg: Ally config structure
++ *
++ * Returns: 0 on success, negative on failure
++ */
++static int ally_set_turbo_params(struct hid_device *hdev, struct ally_config *cfg)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct turbo_config *turbo = &cfg->turbo;
++ u8 packet[HID_ALLY_REPORT_SIZE] = { 0 };
++ int ret;
++
++ if (!cfg->turbo_support) {
++ hid_dbg(hdev, "Turbo functionality not supported on this device\n");
++ return -EOPNOTSUPP;
++ }
++
++ packet[0] = HID_ALLY_SET_REPORT_ID;
++ packet[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ packet[2] = CMD_SET_TURBO_PARAMS;
++ packet[3] = 0x20; /* Length - 32 bytes for 16 buttons with 2 values each */
++
++ packet[4] = turbo->btn_du.turbo;
++ packet[5] = turbo->btn_du.toggle;
++ packet[6] = turbo->btn_dd.turbo;
++ packet[7] = turbo->btn_dd.toggle;
++ packet[8] = turbo->btn_dl.turbo;
++ packet[9] = turbo->btn_dl.toggle;
++ packet[10] = turbo->btn_dr.turbo;
++ packet[11] = turbo->btn_dr.toggle;
++ packet[12] = turbo->btn_j0b.turbo;
++ packet[13] = turbo->btn_j0b.toggle;
++ packet[14] = turbo->btn_j1b.turbo;
++ packet[15] = turbo->btn_j1b.toggle;
++ packet[16] = turbo->btn_lb.turbo;
++ packet[17] = turbo->btn_lb.toggle;
++ packet[18] = turbo->btn_rb.turbo;
++ packet[19] = turbo->btn_rb.toggle;
++ packet[20] = turbo->btn_a.turbo;
++ packet[21] = turbo->btn_a.toggle;
++ packet[22] = turbo->btn_b.turbo;
++ packet[23] = turbo->btn_b.toggle;
++ packet[24] = turbo->btn_x.turbo;
++ packet[25] = turbo->btn_x.toggle;
++ packet[26] = turbo->btn_y.turbo;
++ packet[27] = turbo->btn_y.toggle;
++ packet[28] = turbo->btn_view.turbo;
++ packet[29] = turbo->btn_view.toggle;
++ packet[30] = turbo->btn_menu.turbo;
++ packet[31] = turbo->btn_menu.toggle;
++ packet[32] = turbo->btn_m2.turbo;
++ packet[33] = turbo->btn_m2.toggle;
++ packet[34] = turbo->btn_m1.turbo;
++ packet[35] = turbo->btn_m1.toggle;
++
++ ret = ally_gamepad_send_packet(ally, hdev, packet, HID_ALLY_REPORT_SIZE);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to set turbo parameters: %d\n", ret);
++ return ret;
++ }
++
++ return 0;
++}
++
++struct button_turbo_attr {
++ struct device_attribute dev_attr;
++ int button_id;
++};
++
++#define to_button_turbo_attr(x) container_of(x, struct button_turbo_attr, dev_attr)
++
++static ssize_t button_turbo_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct button_turbo_attr *btn_attr = to_button_turbo_attr(attr);
++ struct button_turbo_params *params;
++
++ if (!ally->config->turbo_support)
++ return sprintf(buf, "Unsupported\n");
++
++ params = ally_get_turbo_params(ally->config, btn_attr->button_id);
++ if (!params)
++ return -EINVAL;
++
++ /* Format: turbo_interval_ms[,toggle_interval_ms] */
++ if (params->toggle)
++ return sprintf(buf, "%d,%d\n", params->turbo * 50, params->toggle * 50);
++ else
++ return sprintf(buf, "%d\n", params->turbo * 50);
++}
++
++static ssize_t button_turbo_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct button_turbo_attr *btn_attr = to_button_turbo_attr(attr);
++ struct button_turbo_params *params;
++ unsigned int turbo_ms, toggle_ms = 0;
++ int ret;
++
++ if (!ally->config->turbo_support)
++ return -EOPNOTSUPP;
++
++ params = ally_get_turbo_params(ally->config, btn_attr->button_id);
++ if (!params)
++ return -EINVAL;
++
++ /* Parse input: turbo_interval_ms[,toggle_interval_ms] */
++ ret = sscanf(buf, "%u,%u", &turbo_ms, &toggle_ms);
++ if (ret < 1)
++ return -EINVAL;
++
++ if (turbo_ms != 0 && (turbo_ms < 50 || turbo_ms > 1000))
++ return -EINVAL;
++
++ if (ret > 1 && toggle_ms > 0 && (toggle_ms < 50 || toggle_ms > 1000))
++ return -EINVAL;
++
++ mutex_lock(&ally->config->config_mutex);
++
++ params->turbo = turbo_ms / 50;
++ params->toggle = toggle_ms / 50;
++
++ ret = ally_set_turbo_params(hdev, ally->config);
++
++ mutex_unlock(&ally->config->config_mutex);
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++/* Helper to create button turbo attribute */
++static struct button_turbo_attr *button_turbo_attr_create(int button_id)
++{
++ struct button_turbo_attr *attr;
++
++ attr = kzalloc(sizeof(*attr), GFP_KERNEL);
++ if (!attr)
++ return NULL;
++
++ attr->button_id = button_id;
++ sysfs_attr_init(&attr->dev_attr.attr);
++ attr->dev_attr.attr.name = "turbo";
++ attr->dev_attr.attr.mode = 0644;
++ attr->dev_attr.show = button_turbo_show;
++ attr->dev_attr.store = button_turbo_store;
++
++ return attr;
++}
++
++/* Button remap attribute structure */
++struct button_remap_attr {
++ struct device_attribute dev_attr;
++ enum ally_button_id button_id;
++ bool is_macro;
++};
++
++#define to_button_remap_attr(x) container_of(x, struct button_remap_attr, dev_attr)
++
++/* Get appropriate button pair index and position for a given button */
++static int get_button_pair_info(enum ally_button_id button_id,
++ enum btn_pair_index *pair_idx,
++ bool *is_first)
++{
++ switch (button_id) {
++ case ALLY_BTN_DU:
++ *pair_idx = BTN_PAIR_DPAD_UPDOWN;
++ *is_first = true;
++ break;
++ case ALLY_BTN_DD:
++ *pair_idx = BTN_PAIR_DPAD_UPDOWN;
++ *is_first = false;
++ break;
++ case ALLY_BTN_DL:
++ *pair_idx = BTN_PAIR_DPAD_LEFTRIGHT;
++ *is_first = true;
++ break;
++ case ALLY_BTN_DR:
++ *pair_idx = BTN_PAIR_DPAD_LEFTRIGHT;
++ *is_first = false;
++ break;
++ case ALLY_BTN_J0B:
++ *pair_idx = BTN_PAIR_STICK_LR;
++ *is_first = true;
++ break;
++ case ALLY_BTN_J1B:
++ *pair_idx = BTN_PAIR_STICK_LR;
++ *is_first = false;
++ break;
++ case ALLY_BTN_LB:
++ *pair_idx = BTN_PAIR_BUMPER_LR;
++ *is_first = true;
++ break;
++ case ALLY_BTN_RB:
++ *pair_idx = BTN_PAIR_BUMPER_LR;
++ *is_first = false;
++ break;
++ case ALLY_BTN_A:
++ *pair_idx = BTN_PAIR_AB;
++ *is_first = true;
++ break;
++ case ALLY_BTN_B:
++ *pair_idx = BTN_PAIR_AB;
++ *is_first = false;
++ break;
++ case ALLY_BTN_X:
++ *pair_idx = BTN_PAIR_XY;
++ *is_first = true;
++ break;
++ case ALLY_BTN_Y:
++ *pair_idx = BTN_PAIR_XY;
++ *is_first = false;
++ break;
++ case ALLY_BTN_VIEW:
++ *pair_idx = BTN_PAIR_VIEW_MENU;
++ *is_first = true;
++ break;
++ case ALLY_BTN_MENU:
++ *pair_idx = BTN_PAIR_VIEW_MENU;
++ *is_first = false;
++ break;
++ case ALLY_BTN_M1:
++ *pair_idx = BTN_PAIR_M1M2;
++ *is_first = true;
++ break;
++ case ALLY_BTN_M2:
++ *pair_idx = BTN_PAIR_M1M2;
++ *is_first = false;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static ssize_t button_remap_show(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct button_remap_attr *btn_attr = to_button_remap_attr(attr);
++ struct ally_config *cfg = ally->config;
++ enum ally_button_id button_id = btn_attr->button_id;
++ enum btn_pair_index pair_idx;
++ bool is_first;
++ struct button_pair_map *pair;
++ struct button_map *btn_map;
++ int ret;
++
++ if (!cfg)
++ return -ENODEV;
++
++ ret = get_button_pair_info(button_id, &pair_idx, &is_first);
++ if (ret < 0)
++ return ret;
++
++ mutex_lock(&cfg->config_mutex);
++ pair = &((struct ally_button_mapping
++ *)(cfg->button_mappings))[cfg->gamepad_mode]
++ .button_pairs[pair_idx - 1];
++ btn_map = is_first ? &pair->first : &pair->second;
++
++ if (btn_attr->is_macro) {
++ if (btn_map->macro->type == BTN_TYPE_NONE)
++ ret = sprintf(buf, "NONE\n");
++ else
++ ret = sprintf(buf, "%s\n", btn_map->macro->name);
++ } else {
++ if (btn_map->remap->type == BTN_TYPE_NONE)
++ ret = sprintf(buf, "NONE\n");
++ else
++ ret = sprintf(buf, "%s\n", btn_map->remap->name);
++ }
++ mutex_unlock(&cfg->config_mutex);
++
++ return ret;
++}
++
++static ssize_t button_remap_store(struct device *dev,
++ struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct button_remap_attr *btn_attr = to_button_remap_attr(attr);
++ struct ally_config *cfg = ally->config;
++ enum ally_button_id button_id = btn_attr->button_id;
++ enum btn_pair_index pair_idx;
++ bool is_first;
++ struct button_pair_map *pair;
++ struct button_map *btn_map;
++ char btn_name[32];
++ const struct btn_code_map *code;
++ int ret;
++
++ if (!cfg)
++ return -ENODEV;
++
++ if (sscanf(buf, "%31s", btn_name) != 1)
++ return -EINVAL;
++
++ /* Handle "NONE" specially */
++ if (strcmp(btn_name, "NONE") == 0) {
++ code = &ally_btn_codes[0]; /* NONE entry */
++ } else {
++ code = find_button_by_name(btn_name);
++ if (!code)
++ return -EINVAL;
++ }
++
++ ret = get_button_pair_info(button_id, &pair_idx, &is_first);
++ if (ret < 0)
++ return ret;
++
++ mutex_lock(&cfg->config_mutex);
++ /* Access the mapping for current gamepad mode */
++ pair = &((struct ally_button_mapping
++ *)(cfg->button_mappings))[cfg->gamepad_mode]
++ .button_pairs[pair_idx - 1];
++ btn_map = is_first ? &pair->first : &pair->second;
++
++ if (btn_attr->is_macro) {
++ btn_map->macro = (struct btn_code_map *)code;
++ } else {
++ btn_map->remap = (struct btn_code_map *)code;
++ }
++
++ /* Update pair index */
++ pair->pair_index = pair_idx;
++
++ /* Send mapping to device */
++ ret = ally_set_button_mapping(hdev, ally, pair);
++ mutex_unlock(&cfg->config_mutex);
++
++ if (ret < 0)
++ return ret;
++
++ return count;
++}
++
++/* Helper to create button remap attribute */
++static struct button_remap_attr *button_remap_attr_create(enum ally_button_id button_id, bool is_macro)
++{
++ struct button_remap_attr *attr;
++
++ attr = kzalloc(sizeof(*attr), GFP_KERNEL);
++ if (!attr)
++ return NULL;
++
++ attr->button_id = button_id;
++ attr->is_macro = is_macro;
++ sysfs_attr_init(&attr->dev_attr.attr);
++ attr->dev_attr.attr.name = is_macro ? "macro" : "remap";
++ attr->dev_attr.attr.mode = 0644;
++ attr->dev_attr.show = button_remap_show;
++ attr->dev_attr.store = button_remap_store;
++
++ return attr;
++}
++
++/* Structure to hold button sysfs information */
++struct button_sysfs_entry {
++ struct attribute_group group;
++ struct attribute *attrs[4]; /* turbo + remap + macro + NULL terminator */
++ struct button_turbo_attr *turbo_attr;
++ struct button_remap_attr *remap_attr;
++ struct button_remap_attr *macro_attr;
++};
++
++static void ally_set_default_gamepad_mapping(struct ally_button_mapping *mappings)
++{
++ struct ally_button_mapping *map = &mappings[ALLY_GAMEPAD_MODE_GAMEPAD];
++ int i;
++
++ /* Set all pair indexes and initialize to NONE */
++ for (i = 0; i < 9; i++) {
++ map->button_pairs[i].pair_index = i + 1;
++ map->button_pairs[i].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ map->button_pairs[i].first.macro =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ map->button_pairs[i].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ map->button_pairs[i].second.macro =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ }
++
++ /* Set direct mappings using array indices */
++ map->button_pairs[BTN_PAIR_AB - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[1]; /* PAD_A */
++ map->button_pairs[BTN_PAIR_AB - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[2]; /* PAD_B */
++
++ map->button_pairs[BTN_PAIR_XY - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[3]; /* PAD_X */
++ map->button_pairs[BTN_PAIR_XY - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[4]; /* PAD_Y */
++
++ map->button_pairs[BTN_PAIR_BUMPER_LR - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[5]; /* PAD_LB */
++ map->button_pairs[BTN_PAIR_BUMPER_LR - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[6]; /* PAD_RB */
++
++ map->button_pairs[BTN_PAIR_STICK_LR - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[7]; /* PAD_LS */
++ map->button_pairs[BTN_PAIR_STICK_LR - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[8]; /* PAD_RS */
++
++ map->button_pairs[BTN_PAIR_DPAD_UPDOWN - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[9]; /* PAD_DPAD_UP */
++ map->button_pairs[BTN_PAIR_DPAD_UPDOWN - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[10]; /* PAD_DPAD_DOWN */
++
++ map->button_pairs[BTN_PAIR_DPAD_LEFTRIGHT - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[11]; /* PAD_DPAD_LEFT */
++ map->button_pairs[BTN_PAIR_DPAD_LEFTRIGHT - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[12]; /* PAD_DPAD_RIGHT */
++
++ map->button_pairs[BTN_PAIR_TRIGGER_LR - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[13]; /* PAD_LT */
++ map->button_pairs[BTN_PAIR_TRIGGER_LR - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[14]; /* PAD_RT */
++
++ map->button_pairs[BTN_PAIR_VIEW_MENU - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[15]; /* PAD_VIEW */
++ map->button_pairs[BTN_PAIR_VIEW_MENU - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[16]; /* PAD_MENU */
++
++ map->button_pairs[BTN_PAIR_M1M2 - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[19]; /* KB_M1 */
++ map->button_pairs[BTN_PAIR_M1M2 - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[18]; /* KB_M2 */
++}
++
++static void ally_set_default_keyboard_mapping(struct ally_button_mapping *mappings)
++{
++ struct ally_button_mapping *map = &mappings[ALLY_GAMEPAD_MODE_KEYBOARD];
++ int i;
++
++ /* Set all pair indexes and initialize to NONE */
++ for (i = 0; i < 9; i++) {
++ map->button_pairs[i].pair_index = i + 1;
++ map->button_pairs[i].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ map->button_pairs[i].first.macro =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ map->button_pairs[i].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ map->button_pairs[i].second.macro =
++ (struct btn_code_map *)&ally_btn_codes[0];
++ }
++
++ /* Set direct mappings using array indices */
++ map->button_pairs[BTN_PAIR_AB - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[1]; /* PAD_A */
++ map->button_pairs[BTN_PAIR_AB - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[2]; /* PAD_B */
++
++ map->button_pairs[BTN_PAIR_XY - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[3]; /* PAD_X */
++ map->button_pairs[BTN_PAIR_XY - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[4]; /* PAD_Y */
++
++ map->button_pairs[BTN_PAIR_BUMPER_LR - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[5]; /* PAD_LB */
++ map->button_pairs[BTN_PAIR_BUMPER_LR - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[6]; /* PAD_RB */
++
++ map->button_pairs[BTN_PAIR_STICK_LR - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[7]; /* PAD_LS */
++ map->button_pairs[BTN_PAIR_STICK_LR - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[8]; /* PAD_RS */
++
++ map->button_pairs[BTN_PAIR_DPAD_UPDOWN - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[9]; /* PAD_DPAD_UP */
++ map->button_pairs[BTN_PAIR_DPAD_UPDOWN - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[10]; /* PAD_DPAD_DOWN */
++
++ map->button_pairs[BTN_PAIR_DPAD_LEFTRIGHT - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[11]; /* PAD_DPAD_LEFT */
++ map->button_pairs[BTN_PAIR_DPAD_LEFTRIGHT - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[12]; /* PAD_DPAD_RIGHT */
++
++ map->button_pairs[BTN_PAIR_TRIGGER_LR - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[13]; /* PAD_LT */
++ map->button_pairs[BTN_PAIR_TRIGGER_LR - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[14]; /* PAD_RT */
++
++ map->button_pairs[BTN_PAIR_VIEW_MENU - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[15]; /* PAD_VIEW */
++ map->button_pairs[BTN_PAIR_VIEW_MENU - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[16]; /* PAD_MENU */
++
++ map->button_pairs[BTN_PAIR_M1M2 - 1].first.remap =
++ (struct btn_code_map *)&ally_btn_codes[19]; /* KB_M1 */
++ map->button_pairs[BTN_PAIR_M1M2 - 1].second.remap =
++ (struct btn_code_map *)&ally_btn_codes[18]; /* KB_M2 */
++}
++
++/**
++ * ally_create_button_attributes - Create button attributes
++ * @hdev: HID device
++ * @cfg: Ally config structure
++ *
++ * Returns: 0 on success, negative on failure
++ */
++static int ally_create_button_attributes(struct hid_device *hdev,
++ struct ally_config *cfg)
++{
++ struct button_sysfs_entry *entries;
++ int i, j, ret;
++ struct ally_button_mapping *mappings;
++
++ entries = devm_kcalloc(&hdev->dev, ALLY_BTN_MAX, sizeof(*entries),
++ GFP_KERNEL);
++ if (!entries)
++ return -ENOMEM;
++
++ /* Allocate mappings for each gamepad mode (1-based indexing) */
++ mappings = devm_kcalloc(&hdev->dev, ALLY_GAMEPAD_MODE_KEYBOARD + 1,
++ sizeof(*mappings), GFP_KERNEL);
++ if (!mappings) {
++ ret = -ENOMEM;
++ goto err_free_entries;
++ }
++
++ cfg->button_entries = entries;
++ cfg->button_mappings = mappings;
++ ally_set_default_gamepad_mapping(mappings);
++ ally_set_default_keyboard_mapping(mappings);
++
++ for (i = 0; i < ALLY_BTN_MAX; i++) {
++ if (cfg->turbo_support) {
++ entries[i].turbo_attr = button_turbo_attr_create(i);
++ if (!entries[i].turbo_attr) {
++ ret = -ENOMEM;
++ goto err_cleanup;
++ }
++ }
++
++ entries[i].remap_attr = button_remap_attr_create(i, false);
++ if (!entries[i].remap_attr) {
++ ret = -ENOMEM;
++ goto err_cleanup;
++ }
++
++ entries[i].macro_attr = button_remap_attr_create(i, true);
++ if (!entries[i].macro_attr) {
++ ret = -ENOMEM;
++ goto err_cleanup;
++ }
++
++ /* Set up attributes array based on what's supported */
++ if (cfg->turbo_support) {
++ entries[i].attrs[0] =
++ &entries[i].turbo_attr->dev_attr.attr;
++ entries[i].attrs[1] =
++ &entries[i].remap_attr->dev_attr.attr;
++ entries[i].attrs[2] =
++ &entries[i].macro_attr->dev_attr.attr;
++ entries[i].attrs[3] = NULL;
++ } else {
++ entries[i].attrs[0] =
++ &entries[i].remap_attr->dev_attr.attr;
++ entries[i].attrs[1] =
++ &entries[i].macro_attr->dev_attr.attr;
++ entries[i].attrs[2] = NULL;
++ }
++
++ entries[i].group.name = ally_button_names[i];
++ entries[i].group.attrs = entries[i].attrs;
++
++ ret = sysfs_create_group(&hdev->dev.kobj, &entries[i].group);
++ if (ret < 0) {
++ hid_err(hdev,
++ "Failed to create sysfs group for %s: %d\n",
++ ally_button_names[i], ret);
++ goto err_cleanup;
++ }
++ }
++
++ return 0;
++
++err_cleanup:
++ while (--i >= 0) {
++ sysfs_remove_group(&hdev->dev.kobj, &entries[i].group);
++ if (entries[i].turbo_attr)
++ kfree(entries[i].turbo_attr);
++ if (entries[i].remap_attr)
++ kfree(entries[i].remap_attr);
++ if (entries[i].macro_attr)
++ kfree(entries[i].macro_attr);
++ }
++
++err_free_entries:
++ if (mappings)
++ devm_kfree(&hdev->dev, mappings);
++ devm_kfree(&hdev->dev, entries);
++ return ret;
++}
++
++/**
++ * ally_remove_button_attributes - Remove button attributes
++ * @hdev: HID device
++ * @cfg: Ally config structure
++ */
++static void ally_remove_button_attributes(struct hid_device *hdev,
++ struct ally_config *cfg)
++{
++ struct button_sysfs_entry *entries;
++ int i;
++
++ if (!cfg || !cfg->button_entries)
++ return;
++
++ entries = cfg->button_entries;
++
++ /* Remove all attribute groups */
++ for (i = 0; i < ALLY_BTN_MAX; i++) {
++ sysfs_remove_group(&hdev->dev.kobj, &entries[i].group);
++ if (entries[i].turbo_attr)
++ kfree(entries[i].turbo_attr);
++ if (entries[i].remap_attr)
++ kfree(entries[i].remap_attr);
++ if (entries[i].macro_attr)
++ kfree(entries[i].macro_attr);
++ }
++
++ if (cfg->button_mappings)
++ devm_kfree(&hdev->dev, cfg->button_mappings);
++ devm_kfree(&hdev->dev, entries);
++}
++
++/**
++ * ally_config_create - Initialize configuration and create sysfs entries
++ * @hdev: HID device
++ * @ally: Ally device data
++ *
++ * Returns 0 on success, negative error code on failure
++ */
++int ally_config_create(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ struct ally_config *cfg;
++ int ret, i;
++
++ if (!hdev || !ally)
++ return -EINVAL;
++
++ if (get_endpoint_address(hdev) != HID_ALLY_INTF_CFG_IN)
++ return 0;
++
++ cfg = devm_kzalloc(&hdev->dev, sizeof(*cfg), GFP_KERNEL);
++ if (!cfg)
++ return -ENOMEM;
++
++ cfg->hdev = hdev;
++
++ ally->config = cfg;
++
++ ret = ally_detect_capabilities(hdev, cfg);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to detect Ally capabilities: %d\n", ret);
++ goto err_free;
++ }
++
++ /* Create all attribute groups */
++ for (i = 0; i < ARRAY_SIZE(ally_attr_groups); i++) {
++ ret = sysfs_create_group(&hdev->dev.kobj, &ally_attr_groups[i]);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to create sysfs group '%s': %d\n",
++ ally_attr_groups[i].name, ret);
++ /* Remove any groups already created */
++ while (--i >= 0)
++ sysfs_remove_group(&hdev->dev.kobj,
++ &ally_attr_groups[i]);
++ goto err_free;
++ }
++ }
++
++ if (cfg->turbo_support) {
++ ret = ally_create_button_attributes(hdev, cfg);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to create button attributes: %d\n", ret);
++ for (i = 0; i < ARRAY_SIZE(ally_attr_groups); i++)
++ sysfs_remove_group(&hdev->dev.kobj, &ally_attr_groups[i]);
++ goto err_free;
++ }
++ }
++
++ ret = ally_set_default_gamepad_mode(hdev, cfg);
++ if (ret < 0)
++ hid_warn(hdev, "Failed to set default gamepad mode: %d\n", ret);
++
++ cfg->gamepad_mode = 0x01;
++ cfg->left_deadzone = 10;
++ cfg->left_outer_threshold = 90;
++ cfg->right_deadzone = 10;
++ cfg->right_outer_threshold = 90;
++
++ cfg->vibration_intensity_left = 100;
++ cfg->vibration_intensity_right = 100;
++ cfg->vibration_active = false;
++
++ /* Initialize default response curve values (linear) */
++ cfg->left_curve.entry_1.move = 0;
++ cfg->left_curve.entry_1.resp = 0;
++ cfg->left_curve.entry_2.move = 33;
++ cfg->left_curve.entry_2.resp = 33;
++ cfg->left_curve.entry_3.move = 66;
++ cfg->left_curve.entry_3.resp = 66;
++ cfg->left_curve.entry_4.move = 100;
++ cfg->left_curve.entry_4.resp = 100;
++
++ cfg->right_curve.entry_1.move = 0;
++ cfg->right_curve.entry_1.resp = 0;
++ cfg->right_curve.entry_2.move = 33;
++ cfg->right_curve.entry_2.resp = 33;
++ cfg->right_curve.entry_3.move = 66;
++ cfg->right_curve.entry_3.resp = 66;
++ cfg->right_curve.entry_4.move = 100;
++ cfg->right_curve.entry_4.resp = 100;
++
++ // ONLY FOR ALLY 1
++ if (cfg->xbox_controller_support) {
++ ret = ally_set_xbox_controller(hdev, cfg, true);
++ if (ret < 0)
++ hid_warn(
++ hdev,
++ "Failed to set default Xbox controller mode: %d\n",
++ ret);
++ }
++
++ cfg->initialized = true;
++ hid_info(hdev, "Ally configuration system initialized successfully\n");
++
++ return 0;
++
++err_free:
++ ally->config = NULL;
++ devm_kfree(&hdev->dev, cfg);
++ return ret;
++}
++
++/**
++ * ally_config_remove - Clean up configuration resources
++ * @hdev: HID device
++ * @ally: Ally device data
++ */
++void ally_config_remove(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ struct ally_config *cfg;
++ int i;
++
++ if (!ally)
++ return;
++
++ cfg = ally->config;
++ if (!cfg || !cfg->initialized)
++ return;
++
++ if (get_endpoint_address(hdev) != HID_ALLY_INTF_CFG_IN)
++ return;
++
++ if (cfg->turbo_support && cfg->button_entries)
++ ally_remove_button_attributes(hdev, cfg);
++
++ /* Remove all attribute groups in reverse order */
++ for (i = ARRAY_SIZE(ally_attr_groups) - 1; i >= 0; i--)
++ sysfs_remove_group(&hdev->dev.kobj, &ally_attr_groups[i]);
++
++ ally->config = NULL;
++
++ hid_info(hdev, "Ally configuration system removed\n");
++}
+diff --git a/drivers/hid/asus-ally-hid/asus-ally-hid-core.c b/drivers/hid/asus-ally-hid/asus-ally-hid-core.c
+new file mode 100644
+index 000000000000..1e8f98b69332
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/asus-ally-hid-core.c
+@@ -0,0 +1,600 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * HID driver for Asus ROG laptops and Ally
++ *
++ * Copyright (c) 2023 Luke Jones
++ */
++
++#include "linux/mutex.h"
++#include "linux/stddef.h"
++#include "linux/types.h"
++#include
++
++#include "../hid-ids.h"
++#include "asus-ally.h"
++
++#define READY_MAX_TRIES 3
++
++static const u8 EC_INIT_STRING[] = { 0x5A, 'A', 'S', 'U', 'S', ' ', 'T', 'e','c', 'h', '.', 'I', 'n', 'c', '.', '\0' };
++static const u8 FORCE_FEEDBACK_OFF[] = { 0x0D, 0x0F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xEB };
++
++static const struct hid_device_id rog_ally_devices[] = {
++ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY) },
++ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X) },
++ {}
++};
++
++const char * ally_keyboard_name = "ROG Ally Keyboard";
++const char * ally_mouse_name = "ROG Ally Mouse";
++
++/* Changes to ally_drvdata must lock */
++static DEFINE_MUTEX(ally_data_mutex);
++static struct ally_handheld ally_drvdata = {
++ .cfg_hdev = NULL,
++ .led_rgb_dev = NULL,
++ .ally_x_input = NULL,
++};
++
++static inline int asus_dev_set_report(struct hid_device *hdev, const u8 *buf, size_t len)
++{
++ unsigned char *dmabuf;
++ int ret;
++
++ dmabuf = kmemdup(buf, len, GFP_KERNEL);
++ if (!dmabuf)
++ return -ENOMEM;
++
++ ret = hid_hw_raw_request(hdev, buf[0], dmabuf, len, HID_FEATURE_REPORT,
++ HID_REQ_SET_REPORT);
++ kfree(dmabuf);
++
++ return ret;
++}
++
++static inline int asus_dev_get_report(struct hid_device *hdev, u8 *out, size_t len)
++{
++ return hid_hw_raw_request(hdev, HID_ALLY_GET_REPORT_ID, out, len,
++ HID_FEATURE_REPORT, HID_REQ_GET_REPORT);
++}
++
++/**
++ * ally_gamepad_send_packet - Send a raw packet to the gamepad device.
++ *
++ * @ally: ally handheld structure
++ * @hdev: hid device
++ * @buf: Buffer containing the packet data
++ * @len: Length of data to send
++ *
++ * Return: count of data transferred, negative if error
++ */
++int ally_gamepad_send_packet(struct ally_handheld *ally,
++ struct hid_device *hdev, const u8 *buf, size_t len)
++{
++ int ret;
++
++ mutex_lock(&ally->intf_mutex);
++ ret = asus_dev_set_report(hdev, buf, len);
++ mutex_unlock(&ally->intf_mutex);
++
++ return ret;
++}
++
++/**
++ * ally_gamepad_send_receive_packet - Send packet and receive response.
++ *
++ * @ally: ally handheld structure
++ * @hdev: hid device
++ * @buf: Buffer containing the packet data to send and receive response in
++ * @len: Length of buffer
++ *
++ * Return: count of data transferred, negative if error
++ */
++int ally_gamepad_send_receive_packet(struct ally_handheld *ally,
++ struct hid_device *hdev, u8 *buf,
++ size_t len)
++{
++ int ret;
++
++ mutex_lock(&ally->intf_mutex);
++ ret = asus_dev_set_report(hdev, buf, len);
++ if (ret >= 0) {
++ memset(buf, 0, len);
++ ret = asus_dev_get_report(hdev, buf, len);
++ }
++ mutex_unlock(&ally->intf_mutex);
++
++ return ret;
++}
++
++/**
++ * ally_gamepad_send_one_byte_packet - Send a one-byte payload packet.
++ *
++ * @ally: ally handheld structure
++ * @hdev: hid device
++ * @command: Command code
++ * @param: Parameter byte
++ *
++ * Return: count of data transferred, negative if error
++ */
++int ally_gamepad_send_one_byte_packet(struct ally_handheld *ally,
++ struct hid_device *hdev,
++ enum ally_command_codes command, u8 param)
++{
++ u8 *packet;
++ int ret;
++
++ packet = kzalloc(HID_ALLY_REPORT_SIZE, GFP_KERNEL);
++ if (!packet)
++ return -ENOMEM;
++
++ packet[0] = HID_ALLY_SET_REPORT_ID;
++ packet[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ packet[2] = command;
++ packet[3] = 0x01; /* Length */
++ packet[4] = param;
++
++ ret = ally_gamepad_send_packet(ally, hdev, packet,
++ HID_ALLY_REPORT_SIZE);
++ kfree(packet);
++ return ret;
++}
++
++/**
++ * ally_gamepad_send_two_byte_packet - Send a two-byte payload packet.
++ *
++ * @ally: ally handheld structure
++ * @hdev: hid device
++ * @command: Command code
++ * @param1: First parameter byte
++ * @param2: Second parameter byte
++ *
++ * Return: count of data transferred, negative if error
++ */
++int ally_gamepad_send_two_byte_packet(struct ally_handheld *ally,
++ struct hid_device *hdev,
++ enum ally_command_codes command,
++ u8 param1, u8 param2)
++{
++ u8 *packet;
++ int ret;
++
++ packet = kzalloc(HID_ALLY_REPORT_SIZE, GFP_KERNEL);
++ if (!packet)
++ return -ENOMEM;
++
++ packet[0] = HID_ALLY_SET_REPORT_ID;
++ packet[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ packet[2] = command;
++ packet[3] = 0x02; /* Length */
++ packet[4] = param1;
++ packet[5] = param2;
++
++ ret = ally_gamepad_send_packet(ally, hdev, packet,
++ HID_ALLY_REPORT_SIZE);
++ kfree(packet);
++ return ret;
++}
++
++/*
++ * This should be called before any remapping attempts, and on driver init/resume.
++ */
++int ally_gamepad_check_ready(struct hid_device *hdev)
++{
++ int ret, count;
++ u8 *hidbuf;
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ hidbuf = kzalloc(HID_ALLY_REPORT_SIZE, GFP_KERNEL);
++ if (!hidbuf)
++ return -ENOMEM;
++
++ ret = 0;
++ for (count = 0; count < READY_MAX_TRIES; count++) {
++ hidbuf[0] = HID_ALLY_SET_REPORT_ID;
++ hidbuf[1] = HID_ALLY_FEATURE_CODE_PAGE;
++ hidbuf[2] = CMD_CHECK_READY;
++ hidbuf[3] = 01;
++
++ ret = ally_gamepad_send_receive_packet(ally, hdev, hidbuf,
++ HID_ALLY_REPORT_SIZE);
++ if (ret < 0) {
++ hid_err(hdev, "ROG Ally check failed: %d\n", ret);
++ continue;
++ }
++
++ ret = hidbuf[2] == CMD_CHECK_READY;
++ if (ret)
++ break;
++ usleep_range(1000, 2000);
++ }
++
++ if (count == READY_MAX_TRIES)
++ hid_warn(hdev, "ROG Ally never responded with a ready\n");
++
++ kfree(hidbuf);
++ return ret;
++}
++
++u8 get_endpoint_address(struct hid_device *hdev)
++{
++ struct usb_host_endpoint *ep;
++ struct usb_interface *intf;
++
++ intf = to_usb_interface(hdev->dev.parent);
++ if (!intf || !intf->cur_altsetting)
++ return -ENODEV;
++
++ ep = intf->cur_altsetting->endpoint;
++ if (!ep)
++ return -ENODEV;
++
++ return ep->desc.bEndpointAddress;
++}
++
++/**************************************************************************************************/
++/* ROG Ally driver init */
++/**************************************************************************************************/
++
++static int cad_sequence_state = 0;
++static unsigned long cad_last_event_time = 0;
++
++/* Ally left buton emits a sequence of events: ctrl+alt+del. Capture this and emit only a single code */
++static bool handle_ctrl_alt_del(struct hid_device *hdev, u8 *data, int size)
++{
++ if (size < 16 || data[0] != 0x01)
++ return false;
++
++ if (cad_sequence_state > 0 && time_after(jiffies, cad_last_event_time + msecs_to_jiffies(100)))
++ cad_sequence_state = 0;
++
++ cad_last_event_time = jiffies;
++
++ switch (cad_sequence_state) {
++ case 0:
++ if (data[1] == 0x01 && data[2] == 0x00 && data[3] == 0x00) {
++ cad_sequence_state = 1;
++ data[1] = 0x00;
++ return true;
++ }
++ break;
++ case 1:
++ if (data[1] == 0x05 && data[2] == 0x00 && data[3] == 0x00) {
++ cad_sequence_state = 2;
++ data[1] = 0x00;
++ return true;
++ }
++ break;
++ case 2:
++ if (data[1] == 0x05 && data[2] == 0x00 && data[3] == 0x4c) {
++ cad_sequence_state = 3;
++ data[1] = 0x00;
++ data[3] = 0x6F; // F20;
++ return true;
++ }
++ break;
++ case 3:
++ if (data[1] == 0x04 && data[2] == 0x00 && data[3] == 0x4c) {
++ cad_sequence_state = 4;
++ data[1] = 0x00;
++ data[1] = data[3] = 0x00;
++ return true;
++ }
++ break;
++ case 4:
++ if (data[1] == 0x00 && data[2] == 0x00 && data[3] == 0x4c) {
++ cad_sequence_state = 5;
++ data[3] = 0x00;
++ return true;
++ }
++ break;
++ }
++ cad_sequence_state = 0;
++ return false;
++}
++
++static bool handle_ally_event(struct hid_device *hdev, u8 *data, int size)
++{
++ struct input_dev *keyboard_input;
++ int keycode = 0;
++
++ if (data[0] == 0x5A) {
++ switch (data[1]) {
++ case 0x38:
++ keycode = KEY_F19;
++ break;
++ case 0xA6:
++ keycode = KEY_F16;
++ break;
++ case 0xA7:
++ keycode = KEY_F17;
++ break;
++ case 0xA8:
++ keycode = KEY_F18;
++ break;
++ default:
++ return false;
++ }
++
++ keyboard_input = ally_drvdata.keyboard_input;
++ if (keyboard_input) {
++ input_report_key(keyboard_input, keycode, 1);
++ input_sync(keyboard_input);
++ input_report_key(keyboard_input, keycode, 0);
++ input_sync(keyboard_input);
++ return true;
++ }
++
++ memset(data, 0, size);
++ }
++ return false;
++}
++
++static int ally_raw_event(struct hid_device *hdev, struct hid_report *report, u8 *data,
++ int size)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_x_input *ally_x;
++ int ep;
++
++ if (!ally)
++ return -ENODEV;
++
++ ep = get_endpoint_address(hdev);
++ if (ep != HID_ALLY_INTF_CFG_IN && ep != HID_ALLY_X_INTF_IN && ep != HID_ALLY_KEYBOARD_INTF_IN)
++ return 0;
++
++ ally_x = ally->ally_x_input;
++ if (ally_x) {
++ if ((hdev->bus == BUS_USB && report->id == HID_ALLY_X_INPUT_REPORT &&
++ size == HID_ALLY_X_INPUT_REPORT_SIZE) ||
++ (data[0] == 0x5A)) {
++ if (ally_x_raw_event(ally_x, report, data, size))
++ return 0;
++ }
++ }
++
++ switch (ep) {
++ case HID_ALLY_INTF_CFG_IN:
++ if (handle_ally_event(hdev, data, size))
++ return 0;
++ break;
++ case HID_ALLY_KEYBOARD_INTF_IN:
++ if (handle_ctrl_alt_del(hdev, data, size))
++ return 0;
++ break;
++ }
++
++ return 0;
++}
++
++static int ally_hid_init(struct hid_device *hdev)
++{
++ int ret;
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ ret = ally_gamepad_send_packet(ally, hdev, EC_INIT_STRING, sizeof(EC_INIT_STRING));
++ if (ret < 0) {
++ hid_err(hdev, "Ally failed to send init command: %d\n", ret);
++ goto cleanup;
++ }
++
++ /* All gamepad configuration commands must go after the ally_gamepad_check_ready() */
++ ret = ally_gamepad_check_ready(hdev);
++ if (ret < 0)
++ goto cleanup;
++
++ ret = ally_gamepad_send_packet(ally, hdev, FORCE_FEEDBACK_OFF, sizeof(FORCE_FEEDBACK_OFF));
++ if (ret < 0)
++ hid_err(hdev, "Ally failed to init force-feedback off: %d\n", ret);
++
++cleanup:
++ return ret;
++}
++
++static int ally_input_configured(struct hid_device *hdev, struct hid_input *hi)
++{
++ int ep = get_endpoint_address(hdev);
++
++ hid_info(hdev, "Input configured: endpoint 0x%02x, name: %s\n", ep, hi->input->name);
++
++ if (ep == HID_ALLY_KEYBOARD_INTF_IN)
++ hi->input->name = ally_keyboard_name;
++
++ if (ep == HID_ALLY_MOUSE_INTF_IN)
++ hi->input->name = ally_mouse_name;
++
++ return 0;
++}
++
++static int ally_hid_probe(struct hid_device *hdev, const struct hid_device_id *_id)
++{
++ int ret, ep;
++
++ ep = get_endpoint_address(hdev);
++ if (ep < 0)
++ return ep;
++
++ /*** CRITICAL START ***/
++ mutex_lock(&ally_data_mutex);
++ if (ep == HID_ALLY_INTF_CFG_IN)
++ ally_drvdata.cfg_hdev = hdev;
++ if (ep == HID_ALLY_KEYBOARD_INTF_IN)
++ ally_drvdata.keyboard_hdev = hdev;
++ mutex_unlock(&ally_data_mutex);
++ /*** CRITICAL END ***/
++
++ hid_set_drvdata(hdev, &ally_drvdata);
++
++ ret = hid_parse(hdev);
++ if (ret) {
++ hid_err(hdev, "Parse failed\n");
++ return ret;
++ }
++
++ if (ep == HID_ALLY_INTF_CFG_IN || ep == HID_ALLY_X_INTF_IN) {
++ ret = hid_hw_start(hdev, HID_CONNECT_HIDRAW);
++ } else if (ep == HID_ALLY_KEYBOARD_INTF_IN) {
++ ret = hid_hw_start(hdev, HID_CONNECT_HIDINPUT | HID_CONNECT_HIDRAW);
++ if (!list_empty(&hdev->inputs)) {
++ struct hid_input *hidinput = list_first_entry(&hdev->inputs, struct hid_input, list);
++ ally_drvdata.keyboard_input = hidinput->input;
++ }
++ hid_info(hdev, "Connected keyboard interface with input events\n");
++ } else {
++ ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
++ hid_info(hdev, "Passing through HID events for endpoint: 0x%02x\n", ep);
++ return 0;
++ }
++
++ ret = hid_hw_open(hdev);
++ if (ret) {
++ hid_err(hdev, "Failed to open HID device\n");
++ goto err_stop;
++ }
++
++ /* Initialize MCU even before alloc */
++ ret = ally_hid_init(hdev);
++ if (ret < 0)
++ goto err_close;
++
++ if (ep == HID_ALLY_INTF_CFG_IN) {
++ ret = ally_config_create(hdev, &ally_drvdata);
++ if (ret < 0)
++ hid_err(hdev, "Failed to create Ally configuration interface.\n");
++ else
++ hid_info(hdev, "Created Ally configuration interface.\n");
++
++ ret = ally_rgb_create(hdev, &ally_drvdata);
++ if (ret < 0)
++ hid_err(hdev, "Failed to create Ally gamepad LEDs.\n");
++ else
++ hid_info(hdev, "Created Ally RGB LED controls.\n");
++ }
++
++ if (ep == HID_ALLY_X_INTF_IN) {
++ ret = ally_x_create(hdev, &ally_drvdata);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to create Ally X gamepad device.\n");
++ ally_drvdata.ally_x_input = NULL;
++ goto err_close;
++ } else {
++ hid_info(hdev, "Created Ally X gamepad device.\n");
++ }
++ // Not required since we send this inputs ep through the gamepad input dev
++ // if (drvdata.gamepad_cfg && drvdata.gamepad_cfg->input) {
++ // input_unregister_device(drvdata.gamepad_cfg->input);
++ // hid_info(hdev, "Ally X removed unrequired input dev.\n");
++ // }
++ }
++
++ return 0;
++
++err_close:
++ hid_hw_close(hdev);
++err_stop:
++ hid_hw_stop(hdev);
++ return ret;
++}
++
++static void ally_hid_remove(struct hid_device *hdev)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ if (!ally)
++ goto out;
++
++ if (ally->led_rgb_dev)
++ ally_rgb_remove(hdev, ally);
++
++ if (ally->config)
++ ally_config_remove(hdev, ally);
++
++ if (ally->ally_x_input)
++ ally_x_remove(hdev, ally);
++
++out:
++ hid_hw_close(hdev);
++ hid_hw_stop(hdev);
++}
++
++static int ally_hid_reset_resume(struct hid_device *hdev)
++{
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ int ret;
++
++ if (!ally)
++ return -EINVAL;
++
++ int ep = get_endpoint_address(hdev);
++ if (ep != HID_ALLY_INTF_CFG_IN)
++ return 0;
++
++ ret = ally_hid_init(hdev);
++ if (ret < 0)
++ return ret;
++
++ ally_rgb_resume(ally);
++
++ return 0;
++}
++
++static int ally_pm_thaw(struct device *dev)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++
++ if (!hdev)
++ return -EINVAL;
++
++ return ally_hid_reset_resume(hdev);
++}
++
++static int ally_pm_prepare(struct device *dev)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++
++ if (ally->led_rgb_dev) {
++ ally_rgb_store_settings(ally);
++ }
++
++ return 0;
++}
++
++static const struct dev_pm_ops ally_pm_ops = {
++ .thaw = ally_pm_thaw,
++ .prepare = ally_pm_prepare,
++};
++
++MODULE_DEVICE_TABLE(hid, rog_ally_devices);
++
++static struct hid_driver rog_ally_cfg = { .name = "asus_rog_ally",
++ .id_table = rog_ally_devices,
++ .probe = ally_hid_probe,
++ .remove = ally_hid_remove,
++ .raw_event = ally_raw_event,
++ .input_configured = ally_input_configured,
++ /* ALLy 1 requires this to reset device state correctly */
++ .reset_resume = ally_hid_reset_resume,
++ .driver = {
++ .pm = &ally_pm_ops,
++ }
++};
++
++static int __init rog_ally_init(void)
++{
++ mutex_init(&ally_drvdata.intf_mutex);
++ return hid_register_driver(&rog_ally_cfg);
++}
++
++static void __exit rog_ally_exit(void)
++{
++ mutex_destroy(&ally_drvdata.intf_mutex);
++ hid_unregister_driver(&rog_ally_cfg);
++}
++
++module_init(rog_ally_init);
++module_exit(rog_ally_exit);
++
++MODULE_AUTHOR("Luke D. Jones");
++MODULE_DESCRIPTION("HID Driver for ASUS ROG Ally handeheld.");
++MODULE_LICENSE("GPL");
+diff --git a/drivers/hid/asus-ally-hid/asus-ally-hid-input.c b/drivers/hid/asus-ally-hid/asus-ally-hid-input.c
+new file mode 100644
+index 000000000000..4fc848d67c23
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/asus-ally-hid-input.c
+@@ -0,0 +1,345 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * HID driver for Asus ROG laptops and Ally
++ *
++ * Copyright (c) 2023 Luke Jones
++ */
++
++#include "linux/delay.h"
++#include "linux/input-event-codes.h"
++#include
++#include
++
++#include "asus-ally.h"
++
++struct ally_x_input_report {
++ uint16_t x, y;
++ uint16_t rx, ry;
++ uint16_t z, rz;
++ uint8_t buttons[4];
++} __packed;
++
++/* The hatswitch outputs integers, we use them to index this X|Y pair */
++static const int hat_values[][2] = {
++ { 0, 0 }, { 0, -1 }, { 1, -1 }, { 1, 0 }, { 1, 1 },
++ { 0, 1 }, { -1, 1 }, { -1, 0 }, { -1, -1 },
++};
++
++static void ally_x_work(struct work_struct *work)
++{
++ struct ally_x_input *ally_x = container_of(work, struct ally_x_input, output_worker);
++ struct ff_report *ff_report = NULL;
++ bool update_qam_chord = false;
++ bool update_ff = false;
++ unsigned long flags;
++
++ spin_lock_irqsave(&ally_x->lock, flags);
++ update_qam_chord = ally_x->update_qam_chord;
++
++ update_ff = ally_x->update_ff;
++ if (ally_x->update_ff) {
++ ff_report = kmemdup(ally_x->ff_packet, sizeof(*ally_x->ff_packet), GFP_KERNEL);
++ ally_x->update_ff = false;
++ }
++ spin_unlock_irqrestore(&ally_x->lock, flags);
++
++ if (update_ff && ff_report) {
++ ff_report->ff.magnitude_left = ff_report->ff.magnitude_strong;
++ ff_report->ff.magnitude_right = ff_report->ff.magnitude_weak;
++ ally_gamepad_send_packet(ally_x->ally, ally_x->hdev,
++ (u8 *)ff_report, sizeof(*ff_report));
++ }
++ kfree(ff_report);
++
++ if (update_qam_chord) {
++ /*
++ * The sleeps here are required to allow steam to register the button combo.
++ */
++ input_report_key(ally_x->input, BTN_MODE, 1);
++ input_sync(ally_x->input);
++ msleep(150);
++ input_report_key(ally_x->input, BTN_A, 1);
++ input_sync(ally_x->input);
++ input_report_key(ally_x->input, BTN_A, 0);
++ input_sync(ally_x->input);
++ input_report_key(ally_x->input, BTN_MODE, 0);
++ input_sync(ally_x->input);
++
++ spin_lock_irqsave(&ally_x->lock, flags);
++ ally_x->update_qam_chord = false;
++ spin_unlock_irqrestore(&ally_x->lock, flags);
++ }
++}
++
++static int ally_x_play_effect(struct input_dev *idev, void *data, struct ff_effect *effect)
++{
++ struct hid_device *hdev = input_get_drvdata(idev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_x_input *ally_x = ally->ally_x_input;
++ unsigned long flags;
++
++ if (effect->type != FF_RUMBLE)
++ return 0;
++
++ spin_lock_irqsave(&ally_x->lock, flags);
++ ally_x->ff_packet->ff.magnitude_strong = effect->u.rumble.strong_magnitude / 512;
++ ally_x->ff_packet->ff.magnitude_weak = effect->u.rumble.weak_magnitude / 512;
++ ally_x->update_ff = true;
++ spin_unlock_irqrestore(&ally_x->lock, flags);
++
++ if (ally_x->output_worker_initialized)
++ schedule_work(&ally_x->output_worker);
++
++ return 0;
++}
++
++/* Return true if event was handled, otherwise false */
++bool ally_x_raw_event(struct ally_x_input *ally_x, struct hid_report *report, u8 *data,
++ int size)
++{
++ struct ally_x_input_report *in_report;
++ unsigned long flags;
++ u8 byte;
++
++ if (data[0] == 0x0B) {
++ in_report = (struct ally_x_input_report *)&data[1];
++
++ input_report_abs(ally_x->input, ABS_X, in_report->x - 32768);
++ input_report_abs(ally_x->input, ABS_Y, in_report->y - 32768);
++ input_report_abs(ally_x->input, ABS_RX, in_report->rx - 32768);
++ input_report_abs(ally_x->input, ABS_RY, in_report->ry - 32768);
++ input_report_abs(ally_x->input, ABS_Z, in_report->z);
++ input_report_abs(ally_x->input, ABS_RZ, in_report->rz);
++
++ byte = in_report->buttons[0];
++ input_report_key(ally_x->input, BTN_A, byte & BIT(0));
++ input_report_key(ally_x->input, BTN_B, byte & BIT(1));
++ input_report_key(ally_x->input, BTN_X, byte & BIT(2));
++ input_report_key(ally_x->input, BTN_Y, byte & BIT(3));
++ input_report_key(ally_x->input, BTN_TL, byte & BIT(4));
++ input_report_key(ally_x->input, BTN_TR, byte & BIT(5));
++ input_report_key(ally_x->input, BTN_SELECT, byte & BIT(6));
++ input_report_key(ally_x->input, BTN_START, byte & BIT(7));
++
++ byte = in_report->buttons[1];
++ input_report_key(ally_x->input, BTN_THUMBL, byte & BIT(0));
++ input_report_key(ally_x->input, BTN_THUMBR, byte & BIT(1));
++ input_report_key(ally_x->input, BTN_MODE, byte & BIT(2));
++
++ byte = in_report->buttons[2];
++ input_report_abs(ally_x->input, ABS_HAT0X, hat_values[byte][0]);
++ input_report_abs(ally_x->input, ABS_HAT0Y, hat_values[byte][1]);
++ input_sync(ally_x->input);
++
++ return true;
++ }
++ /*
++ * The MCU used on Ally provides many devices: gamepad, keyboord, mouse, other.
++ * The AC and QAM buttons route through another interface making it difficult to
++ * use the events unless we grab those and use them here. Only works for Ally X.
++ */
++ else if (data[0] == 0x5A) {
++ if (ally_x->qam_mode) {
++ spin_lock_irqsave(&ally_x->lock, flags);
++ /* Right Armoury Crate button */
++ if (data[1] == 0x38 && !ally_x->update_qam_chord) {
++ ally_x->update_qam_chord = true;
++ if (ally_x->output_worker_initialized)
++ schedule_work(&ally_x->output_worker);
++ }
++ spin_unlock_irqrestore(&ally_x->lock, flags);
++ /* Left/XBox button */
++ input_report_key(ally_x->input, BTN_MODE, data[1] == 0xA6);
++ } else {
++ /* Right Armoury Crate button */
++ input_report_key(ally_x->input, KEY_PROG1, data[1] == 0x38);
++ /* Left/XBox button */
++ input_report_key(ally_x->input, KEY_F16, data[1] == 0xA6);
++ }
++ /* QAM long press */
++ input_report_key(ally_x->input, KEY_F17, data[1] == 0xA7);
++ /* QAM long press released */
++ input_report_key(ally_x->input, KEY_F18, data[1] == 0xA8);
++ input_sync(ally_x->input);
++
++ return data[1] == 0xA6 || data[1] == 0xA7 || data[1] == 0xA8 || data[1] == 0x38;
++ }
++
++ return false;
++}
++
++static struct input_dev *ally_x_alloc_input_dev(struct hid_device *hdev,
++ const char *name_suffix)
++{
++ struct input_dev *input_dev;
++
++ input_dev = devm_input_allocate_device(&hdev->dev);
++ if (!input_dev)
++ return ERR_PTR(-ENOMEM);
++
++ input_dev->id.bustype = hdev->bus;
++ input_dev->id.vendor = hdev->vendor;
++ input_dev->id.product = hdev->product;
++ input_dev->id.version = hdev->version;
++ input_dev->uniq = hdev->uniq;
++ input_dev->name = "ASUS ROG Ally X Gamepad";
++
++ input_set_drvdata(input_dev, hdev);
++
++ return input_dev;
++}
++
++static ssize_t ally_x_qam_mode_show(struct device *dev, struct device_attribute *attr,
++ char *buf)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_x_input *ally_x = ally->ally_x_input;
++
++ if (!ally_x)
++ return -ENODEV;
++
++ return sysfs_emit(buf, "%d\n", ally_x->qam_mode);
++}
++
++static ssize_t ally_x_qam_mode_store(struct device *dev, struct device_attribute *attr,
++ const char *buf, size_t count)
++{
++ struct hid_device *hdev = to_hid_device(dev);
++ struct ally_handheld *ally = hid_get_drvdata(hdev);
++ struct ally_x_input *ally_x = ally->ally_x_input;
++ bool val;
++ int ret;
++
++ if (!ally_x)
++ return -ENODEV;
++
++ ret = kstrtobool(buf, &val);
++ if (ret < 0)
++ return ret;
++
++ ally_x->qam_mode = val;
++
++ return count;
++}
++ALLY_DEVICE_ATTR_RW(ally_x_qam_mode, qam_mode);
++
++static int ally_x_setup_input(struct hid_device *hdev, struct ally_x_input *ally_x)
++{
++ struct input_dev *input;
++ int ret;
++
++ input = ally_x_alloc_input_dev(hdev, NULL);
++ if (IS_ERR(input))
++ return PTR_ERR(input);
++
++ input_set_abs_params(input, ABS_X, -32768, 32767, 0, 0);
++ input_set_abs_params(input, ABS_Y, -32768, 32767, 0, 0);
++ input_set_abs_params(input, ABS_RX, -32768, 32767, 0, 0);
++ input_set_abs_params(input, ABS_RY, -32768, 32767, 0, 0);
++ input_set_abs_params(input, ABS_Z, 0, 1023, 0, 0);
++ input_set_abs_params(input, ABS_RZ, 0, 1023, 0, 0);
++ input_set_abs_params(input, ABS_HAT0X, -1, 1, 0, 0);
++ input_set_abs_params(input, ABS_HAT0Y, -1, 1, 0, 0);
++ input_set_capability(input, EV_KEY, BTN_A);
++ input_set_capability(input, EV_KEY, BTN_B);
++ input_set_capability(input, EV_KEY, BTN_X);
++ input_set_capability(input, EV_KEY, BTN_Y);
++ input_set_capability(input, EV_KEY, BTN_TL);
++ input_set_capability(input, EV_KEY, BTN_TR);
++ input_set_capability(input, EV_KEY, BTN_SELECT);
++ input_set_capability(input, EV_KEY, BTN_START);
++ input_set_capability(input, EV_KEY, BTN_MODE);
++ input_set_capability(input, EV_KEY, BTN_THUMBL);
++ input_set_capability(input, EV_KEY, BTN_THUMBR);
++
++ input_set_capability(input, EV_KEY, KEY_PROG1);
++ input_set_capability(input, EV_KEY, KEY_F16);
++ input_set_capability(input, EV_KEY, KEY_F17);
++ input_set_capability(input, EV_KEY, KEY_F18);
++ input_set_capability(input, EV_KEY, BTN_TRIGGER_HAPPY);
++ input_set_capability(input, EV_KEY, BTN_TRIGGER_HAPPY1);
++
++ input_set_capability(input, EV_FF, FF_RUMBLE);
++ input_ff_create_memless(input, NULL, ally_x_play_effect);
++
++ ret = input_register_device(input);
++ if (ret) {
++ input_unregister_device(input);
++ return ret;
++ }
++
++ ally_x->input = input;
++
++ return 0;
++}
++
++int ally_x_create(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ uint8_t max_output_report_size;
++ struct ally_x_input *ally_x;
++ struct ff_report *ff_report;
++ int ret;
++
++ ally_x = devm_kzalloc(&hdev->dev, sizeof(*ally_x), GFP_KERNEL);
++ if (!ally_x)
++ return -ENOMEM;
++
++ ally_x->hdev = hdev;
++ ally_x->ally = ally;
++ ally->ally_x_input = ally_x;
++
++ max_output_report_size = sizeof(struct ally_x_input_report);
++
++ ret = ally_x_setup_input(hdev, ally_x);
++ if (ret)
++ goto free_ally_x;
++
++ INIT_WORK(&ally_x->output_worker, ally_x_work);
++ spin_lock_init(&ally_x->lock);
++ ally_x->output_worker_initialized = true;
++ ally_x->qam_mode =
++ true;
++
++ ff_report = devm_kzalloc(&hdev->dev, sizeof(*ff_report), GFP_KERNEL);
++ if (!ff_report) {
++ ret = -ENOMEM;
++ goto free_ally_x;
++ }
++
++ /* None of these bytes will change for the FF command for now */
++ ff_report->report_id = 0x0D;
++ ff_report->ff.enable = 0x0F; /* Enable all by default */
++ ff_report->ff.pulse_sustain_10ms = 0xFF; /* Duration */
++ ff_report->ff.pulse_release_10ms = 0x00; /* Start Delay */
++ ff_report->ff.loop_count = 0xEB; /* Loop Count */
++ ally_x->ff_packet = ff_report;
++
++ if (sysfs_create_file(&hdev->dev.kobj, &dev_attr_ally_x_qam_mode.attr)) {
++ ret = -ENODEV;
++ goto unregister_input;
++ }
++
++ hid_info(hdev, "Registered Ally X controller using %s\n",
++ dev_name(&ally_x->input->dev));
++
++ return 0;
++
++unregister_input:
++ input_unregister_device(ally_x->input);
++free_ally_x:
++ devm_kfree(&hdev->dev, ally_x);
++ return ret;
++}
++
++void ally_x_remove(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ if (ally->ally_x_input) {
++ sysfs_remove_file(&hdev->dev.kobj, &dev_attr_ally_x_qam_mode.attr);
++
++ if (ally->ally_x_input->output_worker_initialized)
++ cancel_work_sync(&ally->ally_x_input->output_worker);
++
++ ally->ally_x_input = NULL;
++ }
++}
+diff --git a/drivers/hid/asus-ally-hid/asus-ally-rgb.c b/drivers/hid/asus-ally-hid/asus-ally-rgb.c
+new file mode 100644
+index 000000000000..22aec39a7634
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/asus-ally-rgb.c
+@@ -0,0 +1,356 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * HID driver for Asus ROG laptops and Ally
++ *
++ * Copyright (c) 2025 Luke Jones
++ */
++
++#include "asus-ally.h"
++#include "linux/delay.h"
++
++static const u8 EC_MODE_LED_APPLY[] = { 0x5A, 0xB4, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0 };
++static const u8 EC_MODE_LED_SET[] = { 0x5A, 0xB5, 0, 0, 0, 0, 0, 0, 0,
++ 0, 0, 0, 0, 0, 0, 0, 0 };
++
++static struct ally_rgb_resume_data resume_data;
++
++static void ally_rgb_schedule_work(struct ally_rgb_dev *led)
++{
++ unsigned long flags;
++
++ if (!led)
++ return;
++
++ spin_lock_irqsave(&led->lock, flags);
++ if (!led->removed)
++ schedule_work(&led->work);
++ spin_unlock_irqrestore(&led->lock, flags);
++}
++
++/*
++ * The RGB still has the basic 0-3 level brightness. Since the multicolour
++ * brightness is being used in place, set this to max
++ */
++static int ally_rgb_set_bright_base_max(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ u8 buf[] = { HID_ALLY_SET_RGB_REPORT_ID, 0xba, 0xc5, 0xc4, 0x02 };
++
++ return ally_gamepad_send_packet(ally, hdev, buf, sizeof(buf));
++}
++
++static void ally_rgb_do_work(struct work_struct *work)
++{
++ struct ally_rgb_dev *led = container_of(work, struct ally_rgb_dev, work);
++ unsigned long flags;
++ int ret;
++
++ bool update_needed = false;
++ u8 red[4], green[4], blue[4];
++ const int data_size = 12; /* 4 RGB zones × 3 colors */
++
++ u8 buf[16] = { [0] = HID_ALLY_SET_REPORT_ID,
++ [1] = HID_ALLY_FEATURE_CODE_PAGE,
++ [2] = CMD_LED_CONTROL,
++ [3] = data_size };
++
++ if (!led || !led->hdev)
++ return;
++
++ spin_lock_irqsave(&led->lock, flags);
++ if (led->removed) {
++ spin_unlock_irqrestore(&led->lock, flags);
++ return;
++ }
++
++ if (led->update_rgb) {
++ memcpy(red, led->red, sizeof(red));
++ memcpy(green, led->green, sizeof(green));
++ memcpy(blue, led->blue, sizeof(blue));
++ led->update_rgb = false;
++ update_needed = true;
++ }
++ spin_unlock_irqrestore(&led->lock, flags);
++
++ if (!update_needed)
++ return;
++
++ for (int i = 0; i < 4; i++) {
++ buf[5 + i * 3] = green[i];
++ buf[6 + i * 3] = blue[i];
++ buf[4 + i * 3] = red[i];
++ }
++
++ ret = ally_gamepad_send_packet(led->ally, led->hdev, buf, sizeof(buf));
++ if (ret < 0)
++ hid_err(led->hdev, "Ally failed to set gamepad backlight: %d\n",
++ ret);
++}
++
++static void ally_rgb_set(struct led_classdev *cdev,
++ enum led_brightness brightness)
++{
++ struct led_classdev_mc *mc_cdev;
++ struct ally_rgb_dev *led;
++ int intensity, bright;
++ unsigned long flags;
++
++ mc_cdev = lcdev_to_mccdev(cdev);
++ if (!mc_cdev)
++ return;
++
++ led = container_of(mc_cdev, struct ally_rgb_dev, led_rgb_dev);
++ if (!led)
++ return;
++
++ led_mc_calc_color_components(mc_cdev, brightness);
++
++ spin_lock_irqsave(&led->lock, flags);
++
++ led->update_rgb = true;
++ bright = mc_cdev->led_cdev.brightness;
++
++ for (int i = 0; i < 4; i++) {
++ intensity = mc_cdev->subled_info[i].intensity;
++ led->red[i] = (((intensity >> 16) & 0xFF) * bright) / 255;
++ led->green[i] = (((intensity >> 8) & 0xFF) * bright) / 255;
++ led->blue[i] = ((intensity & 0xFF) * bright) / 255;
++ }
++
++ resume_data.initialized = true;
++
++ spin_unlock_irqrestore(&led->lock, flags);
++
++ ally_rgb_schedule_work(led);
++}
++
++static int ally_rgb_set_static_from_multi(struct hid_device *hdev,
++ struct ally_handheld *ally, u8 r,
++ u8 g, u8 b)
++{
++ u8 buf[17] = { HID_ALLY_SET_RGB_REPORT_ID, 0xb3 };
++ int ret;
++
++ /*
++ * Set single zone single colour based on the first LED of EC software mode.
++ * buf[2] = zone, buf[3] = mode
++ */
++ buf[4] = r;
++ buf[5] = g;
++ buf[6] = b;
++
++ ret = ally_gamepad_send_packet(ally, hdev, buf, sizeof(buf));
++ if (ret < 0)
++ return ret;
++
++ ret = ally_gamepad_send_packet(ally, hdev, EC_MODE_LED_APPLY,
++ sizeof(EC_MODE_LED_APPLY));
++ if (ret < 0)
++ return ret;
++
++ return ally_gamepad_send_packet(ally, hdev, EC_MODE_LED_SET,
++ sizeof(EC_MODE_LED_SET));
++}
++
++/*
++ * Store the RGB values for restoring on resume, and set the static mode to the first LED colour
++*/
++void ally_rgb_store_settings(struct ally_handheld *ally)
++{
++ struct ally_rgb_dev *led_rgb;
++ int arr_size;
++ u8 r = 0, g = 0, b = 0;
++
++ led_rgb = ally->led_rgb_dev;
++ if (!led_rgb || !led_rgb->hdev)
++ return;
++
++ arr_size = sizeof(resume_data.red);
++
++ /* Take a snapshot of current settings with locking */
++ spin_lock_irq(&led_rgb->lock);
++ resume_data.brightness = led_rgb->led_rgb_dev.led_cdev.brightness;
++ memcpy(resume_data.red, led_rgb->red, arr_size);
++ memcpy(resume_data.green, led_rgb->green, arr_size);
++ memcpy(resume_data.blue, led_rgb->blue, arr_size);
++ r = resume_data.red[0];
++ g = resume_data.green[0];
++ b = resume_data.blue[0];
++ spin_unlock_irq(&led_rgb->lock);
++
++ ally_rgb_set_static_from_multi(led_rgb->hdev, ally, r, g, b);
++}
++
++static void ally_rgb_restore_settings(struct ally_handheld *ally,
++ struct led_classdev *led_cdev,
++ struct mc_subled *mc_led_info)
++{
++ struct ally_rgb_dev *led_rgb_dev;
++ unsigned long flags;
++ int arr_size;
++
++ led_rgb_dev = ally->led_rgb_dev;
++ if (!led_rgb_dev)
++ return;
++
++ arr_size = sizeof(resume_data.red);
++
++ spin_lock_irqsave(&led_rgb_dev->lock, flags);
++
++ memcpy(led_rgb_dev->red, resume_data.red, arr_size);
++ memcpy(led_rgb_dev->green, resume_data.green, arr_size);
++ memcpy(led_rgb_dev->blue, resume_data.blue, arr_size);
++
++ for (int i = 0; i < 4; i++) {
++ mc_led_info[i].intensity = (resume_data.red[i] << 16) |
++ (resume_data.green[i] << 8) |
++ resume_data.blue[i];
++ }
++ led_cdev->brightness = resume_data.brightness;
++
++ spin_unlock_irqrestore(&led_rgb_dev->lock, flags);
++}
++
++/* Set LEDs. Call after any setup. */
++void ally_rgb_resume(struct ally_handheld *ally)
++{
++ struct ally_rgb_dev *led_rgb;
++ struct led_classdev *led_cdev;
++ struct mc_subled *mc_led_info;
++
++ led_rgb = ally->led_rgb_dev;
++ if (!led_rgb)
++ return;
++
++ led_cdev = &led_rgb->led_rgb_dev.led_cdev;
++ mc_led_info = led_rgb->led_rgb_dev.subled_info;
++ if (!led_cdev || !mc_led_info)
++ return;
++
++ if (resume_data.initialized) {
++ ally_rgb_restore_settings(ally, led_cdev, mc_led_info);
++
++ spin_lock_irq(&led_rgb->lock);
++ led_rgb->update_rgb = true;
++ spin_unlock_irq(&led_rgb->lock);
++
++ ally_rgb_schedule_work(led_rgb);
++ ally_rgb_set_bright_base_max(led_rgb->hdev, ally);
++ }
++}
++
++static int ally_rgb_register(struct hid_device *hdev,
++ struct ally_rgb_dev *led_rgb)
++{
++ struct mc_subled *mc_led_info;
++ struct led_classdev *led_cdev;
++ int ret;
++
++ if (!hdev || !led_rgb)
++ return -EINVAL;
++
++ mc_led_info = devm_kmalloc_array(&hdev->dev, 4, sizeof(*mc_led_info),
++ GFP_KERNEL | __GFP_ZERO);
++ if (!mc_led_info)
++ return -ENOMEM;
++
++ for (int i = 0; i < 4; i++) {
++ mc_led_info[i].color_index = LED_COLOR_ID_RGB;
++ }
++
++ led_rgb->led_rgb_dev.subled_info = mc_led_info;
++ led_rgb->led_rgb_dev.num_colors = 4;
++
++ led_cdev = &led_rgb->led_rgb_dev.led_cdev;
++ led_cdev->brightness = 128;
++ led_cdev->name = "ally:rgb:joystick_rings";
++ led_cdev->max_brightness = 255;
++ led_cdev->brightness_set = ally_rgb_set;
++
++ ret = devm_led_classdev_multicolor_register(&hdev->dev,
++ &led_rgb->led_rgb_dev);
++ if (ret < 0)
++ hid_err(hdev, "Failed to register RGB LED device: %d\n", ret);
++
++ return ret;
++}
++
++int ally_rgb_create(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ struct ally_rgb_dev *led_rgb;
++ int ret;
++
++ led_rgb = devm_kzalloc(&hdev->dev, sizeof(struct ally_rgb_dev),
++ GFP_KERNEL);
++ if (!led_rgb)
++ return -ENOMEM;
++
++ led_rgb->ally = ally;
++ led_rgb->hdev = hdev;
++ led_rgb->removed = false;
++ INIT_WORK(&led_rgb->work, ally_rgb_do_work);
++ spin_lock_init(&led_rgb->lock);
++
++ /* Set the pointer in ally structure BEFORE doing any operations that might use it */
++ ally->led_rgb_dev = led_rgb;
++
++ ret = ally_rgb_register(hdev, led_rgb);
++ if (ret < 0) {
++ hid_err(hdev, "Failed to register RGB LED device: %d\n", ret);
++ cancel_work_sync(&led_rgb->work);
++ ally->led_rgb_dev = NULL; /* Reset pointer on failure */
++ devm_kfree(&hdev->dev, led_rgb);
++ return ret;
++ }
++
++ led_rgb->output_worker_initialized = true;
++
++ ret = ally_rgb_set_bright_base_max(hdev, ally);
++ if (ret < 0)
++ hid_warn(hdev, "Failed to set maximum base brightness: %d\n",
++ ret);
++
++ if (resume_data.initialized) {
++ msleep(1500);
++ spin_lock_irq(&led_rgb->lock);
++ led_rgb->update_rgb = true;
++ spin_unlock_irq(&led_rgb->lock);
++ ally_rgb_schedule_work(led_rgb);
++ }
++
++ return 0;
++}
++
++void ally_rgb_remove(struct hid_device *hdev, struct ally_handheld *ally)
++{
++ struct ally_rgb_dev *led_rgb;
++ unsigned long flags;
++ int ep;
++
++ ep = get_endpoint_address(hdev);
++ if (ep != HID_ALLY_INTF_CFG_IN)
++ return;
++
++ led_rgb = ally->led_rgb_dev;
++ if (!led_rgb)
++ return;
++
++ /* Mark as removed to prevent new work from being scheduled */
++ spin_lock_irqsave(&led_rgb->lock, flags);
++ if (led_rgb->removed) {
++ spin_unlock_irqrestore(&led_rgb->lock, flags);
++ return;
++ }
++ led_rgb->removed = true;
++ led_rgb->output_worker_initialized = false;
++ spin_unlock_irqrestore(&led_rgb->lock, flags);
++
++ cancel_work_sync(&led_rgb->work);
++
++ devm_led_classdev_multicolor_unregister(&hdev->dev,
++ &led_rgb->led_rgb_dev);
++
++ ally->led_rgb_dev = NULL;
++
++ hid_info(hdev, "Removed Ally RGB interface");
++}
+diff --git a/drivers/hid/asus-ally-hid/asus-ally.h b/drivers/hid/asus-ally-hid/asus-ally.h
+new file mode 100644
+index 000000000000..fd9c788a4a42
+--- /dev/null
++++ b/drivers/hid/asus-ally-hid/asus-ally.h
+@@ -0,0 +1,314 @@
++/* SPDX-License-Identifier: GPL-2.0-or-later
++ *
++ * HID driver for Asus ROG laptops and Ally
++ *
++ * Copyright (c) 2023 Luke Jones
++ */
++
++ #ifndef __ASUS_ALLY_H
++ #define __ASUS_ALLY_H
++
++#include
++#include
++#include
++
++#define HID_ALLY_KEYBOARD_INTF_IN 0x81
++#define HID_ALLY_MOUSE_INTF_IN 0x82
++#define HID_ALLY_INTF_CFG_IN 0x83
++#define HID_ALLY_X_INTF_IN 0x87
++
++#define HID_ALLY_REPORT_SIZE 64
++#define HID_ALLY_GET_REPORT_ID 0x0D
++#define HID_ALLY_SET_REPORT_ID 0x5A
++#define HID_ALLY_SET_RGB_REPORT_ID 0x5D
++#define HID_ALLY_FEATURE_CODE_PAGE 0xD1
++
++#define HID_ALLY_X_INPUT_REPORT 0x0B
++#define HID_ALLY_X_INPUT_REPORT_SIZE 16
++
++enum ally_command_codes {
++ CMD_SET_GAMEPAD_MODE = 0x01,
++ CMD_SET_MAPPING = 0x02,
++ CMD_SET_JOYSTICK_MAPPING = 0x03,
++ CMD_SET_JOYSTICK_DEADZONE = 0x04,
++ CMD_SET_TRIGGER_RANGE = 0x05,
++ CMD_SET_VIBRATION_INTENSITY = 0x06,
++ CMD_LED_CONTROL = 0x08,
++ CMD_CHECK_READY = 0x0A,
++ CMD_SET_XBOX_CONTROLLER = 0x0B,
++ CMD_CHECK_XBOX_SUPPORT = 0x0C,
++ CMD_USER_CAL_DATA = 0x0D,
++ CMD_CHECK_USER_CAL_SUPPORT = 0x0E,
++ CMD_SET_TURBO_PARAMS = 0x0F,
++ CMD_CHECK_TURBO_SUPPORT = 0x10,
++ CMD_CHECK_RESP_CURVE_SUPPORT = 0x12,
++ CMD_SET_RESP_CURVE = 0x13,
++ CMD_CHECK_DIR_TO_BTN_SUPPORT = 0x14,
++ CMD_SET_GYRO_PARAMS = 0x15,
++ CMD_CHECK_GYRO_TO_JOYSTICK = 0x16,
++ CMD_CHECK_ANTI_DEADZONE = 0x17,
++ CMD_SET_ANTI_DEADZONE = 0x18,
++};
++
++enum ally_gamepad_mode {
++ ALLY_GAMEPAD_MODE_GAMEPAD = 0x01,
++ ALLY_GAMEPAD_MODE_KEYBOARD = 0x02,
++};
++
++static const char *const gamepad_mode_names[] = {
++ [ALLY_GAMEPAD_MODE_GAMEPAD] = "gamepad",
++ [ALLY_GAMEPAD_MODE_KEYBOARD] = "keyboard"
++};
++
++/* Button identifiers for the attribute system */
++enum ally_button_id {
++ ALLY_BTN_A,
++ ALLY_BTN_B,
++ ALLY_BTN_X,
++ ALLY_BTN_Y,
++ ALLY_BTN_LB,
++ ALLY_BTN_RB,
++ ALLY_BTN_DU,
++ ALLY_BTN_DD,
++ ALLY_BTN_DL,
++ ALLY_BTN_DR,
++ ALLY_BTN_J0B,
++ ALLY_BTN_J1B,
++ ALLY_BTN_MENU,
++ ALLY_BTN_VIEW,
++ ALLY_BTN_M1,
++ ALLY_BTN_M2,
++ ALLY_BTN_MAX
++};
++
++/* Names for the button directories in sysfs */
++static const char *const ally_button_names[ALLY_BTN_MAX] = {
++ [ALLY_BTN_A] = "btn_a",
++ [ALLY_BTN_B] = "btn_b",
++ [ALLY_BTN_X] = "btn_x",
++ [ALLY_BTN_Y] = "btn_y",
++ [ALLY_BTN_LB] = "btn_lb",
++ [ALLY_BTN_RB] = "btn_rb",
++ [ALLY_BTN_DU] = "dpad_up",
++ [ALLY_BTN_DD] = "dpad_down",
++ [ALLY_BTN_DL] = "dpad_left",
++ [ALLY_BTN_DR] = "dpad_right",
++ [ALLY_BTN_J0B] = "btn_l3",
++ [ALLY_BTN_J1B] = "btn_r3",
++ [ALLY_BTN_MENU] = "btn_menu",
++ [ALLY_BTN_VIEW] = "btn_view",
++ [ALLY_BTN_M1] = "btn_m1",
++ [ALLY_BTN_M2] = "btn_m2",
++};
++
++struct ally_rgb_resume_data {
++ uint8_t brightness;
++ uint8_t red[4];
++ uint8_t green[4];
++ uint8_t blue[4];
++ bool initialized;
++};
++
++struct ally_rgb_dev {
++ struct ally_handheld *ally;
++ struct hid_device *hdev;
++ struct led_classdev_mc led_rgb_dev;
++ struct work_struct work;
++ bool output_worker_initialized;
++ spinlock_t lock;
++
++ bool removed;
++ bool update_rgb;
++ uint8_t red[4];
++ uint8_t green[4];
++ uint8_t blue[4];
++};
++
++/* rumble packet structure */
++struct ff_data {
++ u8 enable;
++ u8 magnitude_left;
++ u8 magnitude_right;
++ u8 magnitude_strong;
++ u8 magnitude_weak;
++ u8 pulse_sustain_10ms;
++ u8 pulse_release_10ms;
++ u8 loop_count;
++} __packed;
++
++struct ff_report {
++ u8 report_id;
++ struct ff_data ff;
++} __packed;
++
++struct ally_x_input {
++ struct ally_handheld *ally;
++ struct input_dev *input;
++ struct hid_device *hdev;
++ spinlock_t lock;
++
++ struct work_struct output_worker;
++ bool output_worker_initialized;
++
++ /* Set if the left QAM emits Guide/Mode and right QAM emits Home + A chord */
++ bool qam_mode;
++ /* Prevent multiple queued event due to the enforced delay in worker */
++ bool update_qam_chord;
++
++ struct ff_report *ff_packet;
++ bool update_ff;
++};
++
++struct resp_curve_param {
++ u8 move;
++ u8 resp;
++} __packed;
++
++struct joystick_resp_curve {
++ struct resp_curve_param entry_1;
++ struct resp_curve_param entry_2;
++ struct resp_curve_param entry_3;
++ struct resp_curve_param entry_4;
++} __packed;
++
++/*
++ * Button turbo parameters structure
++ * Each button can have:
++ * - turbo: Turbo press interval in multiple of 50ms (0 = disabled, 1-20 = 50ms-1000ms)
++ * - toggle: Toggle interval (0 = disabled)
++ */
++struct button_turbo_params {
++ u8 turbo;
++ u8 toggle;
++} __packed;
++
++/* Collection of all button turbo settings */
++struct turbo_config {
++ struct button_turbo_params btn_du; /* D-pad Up */
++ struct button_turbo_params btn_dd; /* D-pad Down */
++ struct button_turbo_params btn_dl; /* D-pad Left */
++ struct button_turbo_params btn_dr; /* D-pad Right */
++ struct button_turbo_params btn_j0b; /* Left joystick button */
++ struct button_turbo_params btn_j1b; /* Right joystick button */
++ struct button_turbo_params btn_lb; /* Left bumper */
++ struct button_turbo_params btn_rb; /* Right bumper */
++ struct button_turbo_params btn_a; /* A button */
++ struct button_turbo_params btn_b; /* B button */
++ struct button_turbo_params btn_x; /* X button */
++ struct button_turbo_params btn_y; /* Y button */
++ struct button_turbo_params btn_view; /* View button */
++ struct button_turbo_params btn_menu; /* Menu button */
++ struct button_turbo_params btn_m2; /* M2 button */
++ struct button_turbo_params btn_m1; /* M1 button */
++};
++
++struct ally_config {
++ struct hid_device *hdev;
++ /* Must be locked if the data is being changed */
++ struct mutex config_mutex;
++ bool initialized;
++
++ /* Device capabilities flags */
++ bool is_ally_x;
++ bool xbox_controller_support;
++ bool user_cal_support;
++ bool turbo_support;
++ bool resp_curve_support;
++ bool dir_to_btn_support;
++ bool gyro_support;
++ bool anti_deadzone_support;
++
++ /* Current settings */
++ bool xbox_controller_enabled;
++ u8 gamepad_mode;
++ u8 left_deadzone;
++ u8 left_outer_threshold;
++ u8 right_deadzone;
++ u8 right_outer_threshold;
++ u8 left_anti_deadzone;
++ u8 right_anti_deadzone;
++ u8 left_trigger_min;
++ u8 left_trigger_max;
++ u8 right_trigger_min;
++ u8 right_trigger_max;
++
++ /* Vibration settings */
++ u8 vibration_intensity_left;
++ u8 vibration_intensity_right;
++ bool vibration_active;
++
++ struct turbo_config turbo;
++ struct button_sysfs_entry *button_entries;
++ void *button_mappings; /* ally_button_mapping array indexed by gamepad_mode */
++
++ struct joystick_resp_curve left_curve;
++ struct joystick_resp_curve right_curve;
++};
++
++struct ally_handheld {
++ /* All read/write to IN interfaces must lock */
++ struct mutex intf_mutex;
++ struct hid_device *cfg_hdev;
++
++ struct ally_rgb_dev *led_rgb_dev;
++
++ struct ally_x_input *ally_x_input;
++
++ struct hid_device *keyboard_hdev;
++ struct input_dev *keyboard_input;
++
++ struct ally_config *config;
++};
++
++int ally_gamepad_send_packet(struct ally_handheld *ally,
++ struct hid_device *hdev, const u8 *buf,
++ size_t len);
++int ally_gamepad_send_receive_packet(struct ally_handheld *ally,
++ struct hid_device *hdev, u8 *buf,
++ size_t len);
++int ally_gamepad_send_one_byte_packet(struct ally_handheld *ally,
++ struct hid_device *hdev,
++ enum ally_command_codes command,
++ u8 param);
++int ally_gamepad_send_two_byte_packet(struct ally_handheld *ally,
++ struct hid_device *hdev,
++ enum ally_command_codes command,
++ u8 param1, u8 param2);
++int ally_gamepad_check_ready(struct hid_device *hdev);
++u8 get_endpoint_address(struct hid_device *hdev);
++
++int ally_rgb_create(struct hid_device *hdev, struct ally_handheld *ally);
++void ally_rgb_remove(struct hid_device *hdev, struct ally_handheld *ally);
++void ally_rgb_store_settings(struct ally_handheld *ally);
++void ally_rgb_resume(struct ally_handheld *ally);
++
++int ally_x_create(struct hid_device *hdev, struct ally_handheld *ally);
++void ally_x_remove(struct hid_device *hdev, struct ally_handheld *ally);
++bool ally_x_raw_event(struct ally_x_input *ally_x, struct hid_report *report, u8 *data,
++ int size);
++
++int ally_config_create(struct hid_device *hdev, struct ally_handheld *ally);
++void ally_config_remove(struct hid_device *hdev, struct ally_handheld *ally);
++
++#define ALLY_DEVICE_ATTR_RW(_name, _sysfs_name) \
++ struct device_attribute dev_attr_##_name = \
++ __ATTR(_sysfs_name, 0644, _name##_show, _name##_store)
++
++#define ALLY_DEVICE_ATTR_RO(_name, _sysfs_name) \
++ struct device_attribute dev_attr_##_name = \
++ __ATTR(_sysfs_name, 0444, _name##_show, NULL)
++
++#define ALLY_DEVICE_ATTR_WO(_name, _sysfs_name) \
++ struct device_attribute dev_attr_##_name = \
++ __ATTR(_sysfs_name, 0200, NULL, _name##_store)
++
++#define ALLY_DEVICE_CONST_ATTR_RO(fname, sysfs_name, value) \
++ static ssize_t fname##_show(struct device *dev, \
++ struct device_attribute *attr, char *buf) \
++ { \
++ return sprintf(buf, value); \
++ } \
++ struct device_attribute dev_attr_##fname = \
++ __ATTR(sysfs_name, 0444, fname##_show, NULL)
++
++#endif /* __ASUS_ALLY_H */
+diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
+index 46e3e42f9eb5..52882d6589e1 100644
+--- a/drivers/hid/hid-asus.c
++++ b/drivers/hid/hid-asus.c
+@@ -52,6 +52,10 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
+ #define FEATURE_KBD_LED_REPORT_ID1 0x5d
+ #define FEATURE_KBD_LED_REPORT_ID2 0x5e
+
++#define ROG_ALLY_REPORT_SIZE 64
++#define ROG_ALLY_X_MIN_MCU 313
++#define ROG_ALLY_MIN_MCU 319
++
+ #define SUPPORT_KBD_BACKLIGHT BIT(0)
+
+ #define MAX_TOUCH_MAJOR 8
+@@ -84,6 +88,7 @@ MODULE_DESCRIPTION("Asus HID Keyboard and TouchPad");
+ #define QUIRK_MEDION_E1239T BIT(10)
+ #define QUIRK_ROG_NKEY_KEYBOARD BIT(11)
+ #define QUIRK_ROG_CLAYMORE_II_KEYBOARD BIT(12)
++#define QUIRK_ROG_ALLY_XPAD BIT(13)
+
+ #define I2C_KEYBOARD_QUIRKS (QUIRK_FIX_NOTEBOOK_REPORT | \
+ QUIRK_NO_INIT_REPORTS | \
+@@ -534,9 +539,102 @@ static bool asus_kbd_wmi_led_control_present(struct hid_device *hdev)
+ return !!(value & ASUS_WMI_DSTS_PRESENCE_BIT);
+ }
+
++/*
++ * We don't care about any other part of the string except the version section.
++ * Example strings: FGA80100.RC72LA.312_T01, FGA80100.RC71LS.318_T01
++ * The bytes "5a 05 03 31 00 1a 13" and possibly more come before the version
++ * string, and there may be additional bytes after the version string such as
++ * "75 00 74 00 65 00" or a postfix such as "_T01"
++ */
++static int mcu_parse_version_string(const u8 *response, size_t response_size)
++{
++ const u8 *end = response + response_size;
++ const u8 *p = response;
++ int dots, err, version;
++ char buf[4];
++
++ dots = 0;
++ while (p < end && dots < 2) {
++ if (*p++ == '.')
++ dots++;
++ }
++
++ if (dots != 2 || p >= end || (p + 3) >= end)
++ return -EINVAL;
++
++ memcpy(buf, p, 3);
++ buf[3] = '\0';
++
++ err = kstrtoint(buf, 10, &version);
++ if (err || version < 0)
++ return -EINVAL;
++
++ return version;
++}
++
++static int mcu_request_version(struct hid_device *hdev)
++{
++ u8 *response __free(kfree) = kzalloc(ROG_ALLY_REPORT_SIZE, GFP_KERNEL);
++ const u8 request[] = { 0x5a, 0x05, 0x03, 0x31, 0x00, 0x20 };
++ int ret;
++
++ if (!response)
++ return -ENOMEM;
++
++ ret = asus_kbd_set_report(hdev, request, sizeof(request));
++ if (ret < 0)
++ return ret;
++
++ ret = hid_hw_raw_request(hdev, FEATURE_REPORT_ID, response,
++ ROG_ALLY_REPORT_SIZE, HID_FEATURE_REPORT,
++ HID_REQ_GET_REPORT);
++ if (ret < 0)
++ return ret;
++
++ ret = mcu_parse_version_string(response, ROG_ALLY_REPORT_SIZE);
++ if (ret < 0) {
++ pr_err("Failed to parse MCU version: %d\n", ret);
++ print_hex_dump(KERN_ERR, "MCU: ", DUMP_PREFIX_NONE,
++ 16, 1, response, ROG_ALLY_REPORT_SIZE, false);
++ }
++
++ return ret;
++}
++
++static void validate_mcu_fw_version(struct hid_device *hdev, int idProduct)
++{
++ int min_version, version;
++
++ version = mcu_request_version(hdev);
++ if (version < 0)
++ return;
++
++ switch (idProduct) {
++ case USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY:
++ min_version = ROG_ALLY_MIN_MCU;
++ break;
++ case USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X:
++ min_version = ROG_ALLY_X_MIN_MCU;
++ break;
++ default:
++ min_version = 0;
++ }
++
++ if (version < min_version) {
++ hid_warn(hdev,
++ "The MCU firmware version must be %d or greater to avoid issues with suspend.\n",
++ min_version);
++ } else {
++ set_ally_mcu_hack(ASUS_WMI_ALLY_MCU_HACK_DISABLED);
++ set_ally_mcu_powersave(true);
++ }
++}
++
+ static int asus_kbd_register_leds(struct hid_device *hdev)
+ {
+ struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
++ struct usb_interface *intf;
++ struct usb_device *udev;
+ unsigned char kbd_func;
+ int ret;
+
+@@ -560,6 +658,14 @@ static int asus_kbd_register_leds(struct hid_device *hdev)
+ if (ret < 0)
+ return ret;
+ }
++
++ if (drvdata->quirks & QUIRK_ROG_ALLY_XPAD) {
++ intf = to_usb_interface(hdev->dev.parent);
++ udev = interface_to_usbdev(intf);
++ validate_mcu_fw_version(hdev,
++ le16_to_cpu(udev->descriptor.idProduct));
++ }
++
+ } else {
+ /* Initialize keyboard */
+ ret = asus_kbd_init(hdev, FEATURE_KBD_REPORT_ID);
+@@ -1278,12 +1384,17 @@ static const struct hid_device_id asus_devices[] = {
+ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
+ USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR),
+ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
++
++ /* asus-ally-hid driver takes over */
++ #if !IS_REACHABLE(CONFIG_ASUS_ALLY_HID)
+ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
+ USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY),
+- QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
++ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | QUIRK_ROG_ALLY_XPAD},
+ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
+ USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X),
+- QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD },
++ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | QUIRK_ROG_ALLY_XPAD },
++ #endif /* !IS_REACHABLE(CONFIG_ASUS_ALLY_HID) */
++
+ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK,
+ USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD),
+ QUIRK_ROG_CLAYMORE_II_KEYBOARD },
+@@ -1327,4 +1438,5 @@ static struct hid_driver asus_driver = {
+ };
+ module_hid_driver(asus_driver);
+
++MODULE_IMPORT_NS("ASUS_WMI");
+ MODULE_LICENSE("GPL");
+diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
+index 288a2b864cc4..50cd02b049fc 100644
+--- a/drivers/hid/hid-ids.h
++++ b/drivers/hid/hid-ids.h
+@@ -217,6 +217,7 @@
+ #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD2 0x19b6
+ #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3 0x1a30
+ #define USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR 0x18c6
++#define USB_DEVICE_ID_ASUSTEK_ROG_RAIKIRI_PAD 0x1abb
+ #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY 0x1abe
+ #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X 0x1b4c
+ #define USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD 0x196b
+diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
+index 0258dd879d64..7edab99d3ae9 100644
+--- a/drivers/platform/x86/Kconfig
++++ b/drivers/platform/x86/Kconfig
+@@ -267,6 +267,18 @@ config ASUS_WIRELESS
+ If you choose to compile this driver as a module the module will be
+ called asus-wireless.
+
++config ASUS_ARMOURY
++ tristate "ASUS Armoury driver"
++ depends on ASUS_WMI
++ select FW_ATTR_CLASS
++ help
++ Say Y here if you have a WMI aware Asus machine and would like to use the
++ firmware_attributes API to control various settings typically exposed in
++ the ASUS Armoury Crate application available on Windows.
++
++ To compile this driver as a module, choose M here: the module will
++ be called asus-armoury.
++
+ config ASUS_WMI
+ tristate "ASUS WMI Driver"
+ depends on ACPI_WMI
+@@ -289,6 +301,17 @@ config ASUS_WMI
+ To compile this driver as a module, choose M here: the module will
+ be called asus-wmi.
+
++config ASUS_WMI_DEPRECATED_ATTRS
++ bool "BIOS option support in WMI platform (DEPRECATED)"
++ depends on ASUS_WMI
++ default y
++ help
++ Say Y to expose the configurable BIOS options through the asus-wmi
++ driver.
++
++ This can be used with or without the asus-armoury driver which
++ has the same attributes, but more, and better features.
++
+ config ASUS_NB_WMI
+ tristate "Asus Notebook WMI Driver"
+ depends on ASUS_WMI
+diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
+index e1b142947067..fe3e7e7dede8 100644
+--- a/drivers/platform/x86/Makefile
++++ b/drivers/platform/x86/Makefile
+@@ -32,6 +32,7 @@ obj-$(CONFIG_APPLE_GMUX) += apple-gmux.o
+ # ASUS
+ obj-$(CONFIG_ASUS_LAPTOP) += asus-laptop.o
+ obj-$(CONFIG_ASUS_WIRELESS) += asus-wireless.o
++obj-$(CONFIG_ASUS_ARMOURY) += asus-armoury.o
+ obj-$(CONFIG_ASUS_WMI) += asus-wmi.o
+ obj-$(CONFIG_ASUS_NB_WMI) += asus-nb-wmi.o
+ obj-$(CONFIG_ASUS_TF103C_DOCK) += asus-tf103c-dock.o
+diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
+new file mode 100644
+index 000000000000..84abc92bd365
+--- /dev/null
++++ b/drivers/platform/x86/asus-armoury.c
+@@ -0,0 +1,1202 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * Asus Armoury (WMI) attributes driver. This driver uses the fw_attributes
++ * class to expose the various WMI functions that many gaming and some
++ * non-gaming ASUS laptops have available.
++ * These typically don't fit anywhere else in the sysfs such as under LED class,
++ * hwmon or other, and are set in Windows using the ASUS Armoury Crate tool.
++ *
++ * Copyright(C) 2024 Luke Jones
++ */
++
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++
++#include "asus-armoury.h"
++#include "firmware_attributes_class.h"
++
++#define ASUS_NB_WMI_EVENT_GUID "0B3CBB35-E3C2-45ED-91C2-4C5A6D195D1C"
++
++#define ASUS_MINI_LED_MODE_MASK 0x03
++/* Standard modes for devices with only on/off */
++#define ASUS_MINI_LED_OFF 0x00
++#define ASUS_MINI_LED_ON 0x01
++/* Like "on" but the effect is more vibrant or brighter */
++#define ASUS_MINI_LED_STRONG_MODE 0x02
++/* New modes for devices with 3 mini-led mode types */
++#define ASUS_MINI_LED_2024_WEAK 0x00
++#define ASUS_MINI_LED_2024_STRONG 0x01
++#define ASUS_MINI_LED_2024_OFF 0x02
++
++/* Power tunable attribute name defines */
++#define ATTR_PPT_PL1_SPL "ppt_pl1_spl"
++#define ATTR_PPT_PL2_SPPT "ppt_pl2_sppt"
++#define ATTR_PPT_PL3_FPPT "ppt_pl3_fppt"
++#define ATTR_PPT_APU_SPPT "ppt_apu_sppt"
++#define ATTR_PPT_PLATFORM_SPPT "ppt_platform_sppt"
++#define ATTR_NV_DYNAMIC_BOOST "nv_dynamic_boost"
++#define ATTR_NV_TEMP_TARGET "nv_temp_target"
++#define ATTR_NV_BASE_TGP "nv_base_tgp"
++#define ATTR_NV_TGP "nv_tgp"
++
++#define ASUS_POWER_CORE_MASK GENMASK(15, 8)
++#define ASUS_PERF_CORE_MASK GENMASK(7, 0)
++
++enum cpu_core_type {
++ CPU_CORE_PERF = 0,
++ CPU_CORE_POWER,
++};
++
++enum cpu_core_value {
++ CPU_CORE_DEFAULT = 0,
++ CPU_CORE_MIN,
++ CPU_CORE_MAX,
++ CPU_CORE_CURRENT,
++};
++
++#define CPU_PERF_CORE_COUNT_MIN 4
++#define CPU_POWR_CORE_COUNT_MIN 0
++
++/* Tunables provided by ASUS for gaming laptops */
++struct cpu_cores {
++ u32 cur_perf_cores;
++ u32 min_perf_cores;
++ u32 max_perf_cores;
++ u32 cur_power_cores;
++ u32 min_power_cores;
++ u32 max_power_cores;
++};
++
++struct rog_tunables {
++ const struct power_limits *power_limits;
++ u32 ppt_pl1_spl; // cpu
++ u32 ppt_pl2_sppt; // cpu
++ u32 ppt_pl3_fppt; // cpu
++ u32 ppt_apu_sppt; // plat
++ u32 ppt_platform_sppt; // plat
++
++ u32 nv_dynamic_boost;
++ u32 nv_temp_target;
++ u32 nv_tgp;
++};
++
++static struct asus_armoury_priv {
++ struct device *fw_attr_dev;
++ struct kset *fw_attr_kset;
++
++ struct cpu_cores *cpu_cores;
++ /* Index 0 for DC, 1 for AC */
++ struct rog_tunables *rog_tunables[2];
++ u32 mini_led_dev_id;
++ u32 gpu_mux_dev_id;
++ /*
++ * Mutex to prevent big/little core count changes writing to same
++ * endpoint at the same time. Must lock during attr store.
++ */
++ struct mutex cpu_core_mutex;
++} asus_armoury = {
++ .cpu_core_mutex = __MUTEX_INITIALIZER(asus_armoury.cpu_core_mutex)
++};
++
++struct fw_attrs_group {
++ bool pending_reboot;
++};
++
++static struct fw_attrs_group fw_attrs = {
++ .pending_reboot = false,
++};
++
++struct asus_attr_group {
++ const struct attribute_group *attr_group;
++ u32 wmi_devid;
++};
++
++static bool asus_wmi_is_present(u32 dev_id)
++{
++ u32 retval;
++ int status;
++
++ status = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, dev_id, 0, &retval);
++ pr_debug("%s called (0x%08x), retval: 0x%08x\n", __func__, dev_id, retval);
++
++ return status == 0 && (retval & ASUS_WMI_DSTS_PRESENCE_BIT);
++}
++
++static void asus_set_reboot_and_signal_event(void)
++{
++ fw_attrs.pending_reboot = true;
++ kobject_uevent(&asus_armoury.fw_attr_dev->kobj, KOBJ_CHANGE);
++}
++
++static ssize_t pending_reboot_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf)
++{
++ return sysfs_emit(buf, "%d\n", fw_attrs.pending_reboot);
++}
++
++static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot);
++
++static bool asus_bios_requires_reboot(struct kobj_attribute *attr)
++{
++ return !strcmp(attr->attr.name, "gpu_mux_mode") ||
++ !strcmp(attr->attr.name, "cores_performance") ||
++ !strcmp(attr->attr.name, "cores_efficiency") ||
++ !strcmp(attr->attr.name, "panel_hd_mode");
++}
++
++static int armoury_wmi_set_devstate(struct kobj_attribute *attr, u32 value, u32 wmi_dev)
++{
++ u32 result;
++ int err;
++
++ err = asus_wmi_set_devstate(wmi_dev, value, &result);
++ if (err) {
++ pr_err("Failed to set %s: %d\n", attr->attr.name, err);
++ return err;
++ }
++ /*
++ * !1 is usually considered a fail by ASUS, but some WMI methods do use > 1
++ * to return a status code or similar.
++ */
++ if (result < 1) {
++ pr_err("Failed to set %s: (result): 0x%x\n", attr->attr.name, result);
++ return -EIO;
++ }
++
++ return 0;
++}
++
++/**
++ * attr_int_store() - Send an int to wmi method, checks if within min/max exclusive.
++ * @kobj: Pointer to the driver object.
++ * @attr: Pointer to the attribute calling this function.
++ * @buf: The buffer to read from, this is parsed to `int` type.
++ * @count: Required by sysfs attribute macros, pass in from the callee attr.
++ * @min: Minimum accepted value. Below this returns -EINVAL.
++ * @max: Maximum accepted value. Above this returns -EINVAL.
++ * @store_value: Pointer to where the parsed value should be stored.
++ * @wmi_dev: The WMI function ID to use.
++ *
++ * This function is intended to be generic so it can be called from any "_store"
++ * attribute which works only with integers. The integer to be sent to the WMI method
++ * is range checked and an error returned if out of range.
++ *
++ * If the value is valid and WMI is success, then the sysfs attribute is notified
++ * and if asus_bios_requires_reboot() is true then reboot attribute is also notified.
++ *
++ * Returns: Either count, or an error.
++ */
++static ssize_t attr_uint_store(struct kobject *kobj, struct kobj_attribute *attr, const char *buf,
++ size_t count, u32 min, u32 max, u32 *store_value, u32 wmi_dev)
++{
++ u32 value;
++ int err;
++
++ err = kstrtouint(buf, 10, &value);
++ if (err)
++ return err;
++
++ if (value < min || value > max)
++ return -EINVAL;
++
++ err = armoury_wmi_set_devstate(attr, value, wmi_dev);
++ if (err)
++ return err;
++
++ if (store_value != NULL)
++ *store_value = value;
++ sysfs_notify(kobj, NULL, attr->attr.name);
++
++ if (asus_bios_requires_reboot(attr))
++ asus_set_reboot_and_signal_event();
++
++ return count;
++}
++
++static ssize_t enum_type_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return sysfs_emit(buf, "enumeration\n");
++}
++
++static ssize_t int_type_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return sysfs_emit(buf, "integer\n");
++}
++
++/* Mini-LED mode **************************************************************/
++static ssize_t mini_led_mode_current_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ u32 value;
++ int err;
++
++ err = asus_wmi_get_devstate_dsts(asus_armoury.mini_led_dev_id, &value);
++ if (err)
++ return err;
++
++ value &= ASUS_MINI_LED_MODE_MASK;
++
++ /*
++ * Remap the mode values to match previous generation mini-LED. The last gen
++ * WMI 0 == off, while on this version WMI 2 == off (flipped).
++ */
++ if (asus_armoury.mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2) {
++ switch (value) {
++ case ASUS_MINI_LED_2024_WEAK:
++ value = ASUS_MINI_LED_ON;
++ break;
++ case ASUS_MINI_LED_2024_STRONG:
++ value = ASUS_MINI_LED_STRONG_MODE;
++ break;
++ case ASUS_MINI_LED_2024_OFF:
++ value = ASUS_MINI_LED_OFF;
++ break;
++ }
++ }
++
++ return sysfs_emit(buf, "%u\n", value);
++}
++
++static ssize_t mini_led_mode_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ u32 mode;
++ int err;
++
++ err = kstrtou32(buf, 10, &mode);
++ if (err)
++ return err;
++
++ if (asus_armoury.mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE &&
++ mode > ASUS_MINI_LED_ON)
++ return -EINVAL;
++ if (asus_armoury.mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2 &&
++ mode > ASUS_MINI_LED_STRONG_MODE)
++ return -EINVAL;
++
++ /*
++ * Remap the mode values so expected behaviour is the same as the last
++ * generation of mini-LED with 0 == off, 1 == on.
++ */
++ if (asus_armoury.mini_led_dev_id == ASUS_WMI_DEVID_MINI_LED_MODE2) {
++ switch (mode) {
++ case ASUS_MINI_LED_OFF:
++ mode = ASUS_MINI_LED_2024_OFF;
++ break;
++ case ASUS_MINI_LED_ON:
++ mode = ASUS_MINI_LED_2024_WEAK;
++ break;
++ case ASUS_MINI_LED_STRONG_MODE:
++ mode = ASUS_MINI_LED_2024_STRONG;
++ break;
++ }
++ }
++
++ err = armoury_wmi_set_devstate(attr, mode, asus_armoury.mini_led_dev_id);
++ if (err)
++ return err;
++
++ sysfs_notify(kobj, NULL, attr->attr.name);
++
++ return count;
++}
++
++static ssize_t mini_led_mode_possible_values_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ switch (asus_armoury.mini_led_dev_id) {
++ case ASUS_WMI_DEVID_MINI_LED_MODE:
++ return sysfs_emit(buf, "0;1\n");
++ case ASUS_WMI_DEVID_MINI_LED_MODE2:
++ return sysfs_emit(buf, "0;1;2\n");
++ }
++
++ return sysfs_emit(buf, "0\n");
++}
++
++ATTR_GROUP_ENUM_CUSTOM(mini_led_mode, "mini_led_mode", "Set the mini-LED backlight mode");
++
++static ssize_t gpu_mux_mode_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr, const char *buf,
++ size_t count)
++{
++ int result, err;
++ u32 optimus;
++
++ err = kstrtou32(buf, 10, &optimus);
++ if (err)
++ return err;
++
++ if (optimus > 1)
++ return -EINVAL;
++
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_DGPU)) {
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_DGPU, &result);
++ if (err)
++ return err;
++ if (result && !optimus) {
++ pr_warn("Can not switch MUX to dGPU mode when dGPU is disabled: %02X %02X\n",
++ result, optimus);
++ return -ENODEV;
++ }
++ }
++
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_EGPU)) {
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_EGPU, &result);
++ if (err)
++ return err;
++ if (result && !optimus) {
++ pr_warn("Can not switch MUX to dGPU mode when eGPU is enabled\n");
++ return -ENODEV;
++ }
++ }
++
++ err = armoury_wmi_set_devstate(attr, optimus, asus_armoury.gpu_mux_dev_id);
++ if (err)
++ return err;
++
++ sysfs_notify(kobj, NULL, attr->attr.name);
++ asus_set_reboot_and_signal_event();
++
++ return count;
++}
++WMI_SHOW_INT(gpu_mux_mode_current_value, "%d\n", asus_armoury.gpu_mux_dev_id);
++ATTR_GROUP_BOOL_CUSTOM(gpu_mux_mode, "gpu_mux_mode", "Set the GPU display MUX mode");
++
++/*
++ * A user may be required to store the value twice, typical store first, then
++ * rescan PCI bus to activate power, then store a second time to save correctly.
++ */
++static ssize_t dgpu_disable_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr, const char *buf,
++ size_t count)
++{
++ int result, err;
++ u32 disable;
++
++ err = kstrtou32(buf, 10, &disable);
++ if (err)
++ return err;
++
++ if (disable > 1)
++ return -EINVAL;
++
++ if (asus_armoury.gpu_mux_dev_id) {
++ err = asus_wmi_get_devstate_dsts(asus_armoury.gpu_mux_dev_id, &result);
++ if (err)
++ return err;
++ if (!result && disable) {
++ pr_warn("Can not disable dGPU when the MUX is in dGPU mode\n");
++ return -ENODEV;
++ }
++ }
++
++ err = armoury_wmi_set_devstate(attr, disable, ASUS_WMI_DEVID_DGPU);
++ if (err)
++ return err;
++
++ sysfs_notify(kobj, NULL, attr->attr.name);
++
++ return count;
++}
++WMI_SHOW_INT(dgpu_disable_current_value, "%d\n", ASUS_WMI_DEVID_DGPU);
++ATTR_GROUP_BOOL_CUSTOM(dgpu_disable, "dgpu_disable", "Disable the dGPU");
++
++/* The ACPI call to enable the eGPU also disables the internal dGPU */
++static ssize_t egpu_enable_current_value_store(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ int result, err;
++ u32 enable;
++
++ err = kstrtou32(buf, 10, &enable);
++ if (err)
++ return err;
++
++ if (enable > 1)
++ return -EINVAL;
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_EGPU_CONNECTED, &result);
++ if (err) {
++ pr_warn("Failed to get eGPU connection status: %d\n", err);
++ return err;
++ }
++
++ if (asus_armoury.gpu_mux_dev_id) {
++ err = asus_wmi_get_devstate_dsts(asus_armoury.gpu_mux_dev_id, &result);
++ if (err) {
++ pr_warn("Failed to get GPU MUX status: %d\n", result);
++ return result;
++ }
++ if (!result && enable) {
++ pr_warn("Can not enable eGPU when the MUX is in dGPU mode\n");
++ return -ENODEV;
++ }
++ }
++
++ err = armoury_wmi_set_devstate(attr, enable, ASUS_WMI_DEVID_EGPU);
++ if (err)
++ return err;
++
++ sysfs_notify(kobj, NULL, attr->attr.name);
++
++ return count;
++}
++WMI_SHOW_INT(egpu_enable_current_value, "%d\n", ASUS_WMI_DEVID_EGPU);
++ATTR_GROUP_BOOL_CUSTOM(egpu_enable, "egpu_enable", "Enable the eGPU (also disables dGPU)");
++
++/* Device memory available to APU */
++
++static ssize_t apu_mem_current_value_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ int err;
++ u32 mem;
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_APU_MEM, &mem);
++ if (err)
++ return err;
++
++ switch (mem) {
++ case 0x100:
++ mem = 0;
++ break;
++ case 0x102:
++ mem = 1;
++ break;
++ case 0x103:
++ mem = 2;
++ break;
++ case 0x104:
++ mem = 3;
++ break;
++ case 0x105:
++ mem = 4;
++ break;
++ case 0x106:
++ /* This is out of order and looks wrong but is correct */
++ mem = 8;
++ break;
++ case 0x107:
++ mem = 5;
++ break;
++ case 0x108:
++ mem = 6;
++ break;
++ case 0x109:
++ mem = 7;
++ break;
++ default:
++ mem = 4;
++ break;
++ }
++
++ return sysfs_emit(buf, "%u\n", mem);
++}
++
++static ssize_t apu_mem_current_value_store(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ int result, err;
++ u32 requested, mem;
++
++ result = kstrtou32(buf, 10, &requested);
++ if (result)
++ return result;
++
++ switch (requested) {
++ case 0:
++ mem = 0x000;
++ break;
++ case 1:
++ mem = 0x102;
++ break;
++ case 2:
++ mem = 0x103;
++ break;
++ case 3:
++ mem = 0x104;
++ break;
++ case 4:
++ mem = 0x105;
++ break;
++ case 5:
++ mem = 0x107;
++ break;
++ case 6:
++ mem = 0x108;
++ break;
++ case 7:
++ mem = 0x109;
++ break;
++ case 8:
++ /* This is out of order and looks wrong but is correct */
++ mem = 0x106;
++ break;
++ default:
++ return -EIO;
++ }
++
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_APU_MEM, mem, &result);
++ if (err) {
++ pr_warn("Failed to set apu_mem: %d\n", err);
++ return err;
++ }
++
++ pr_info("APU memory changed to %uGB, reboot required\n", requested);
++ sysfs_notify(kobj, NULL, attr->attr.name);
++
++ asus_set_reboot_and_signal_event();
++
++ return count;
++}
++
++static ssize_t apu_mem_possible_values_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return sysfs_emit(buf, "0;1;2;3;4;5;6;7;8\n");
++}
++ATTR_GROUP_ENUM_CUSTOM(apu_mem, "apu_mem", "Set available system RAM (in GB) for the APU to use");
++
++static int init_max_cpu_cores(void)
++{
++ u32 cores;
++ int err;
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES_MAX, &cores);
++ if (err)
++ return err;
++
++ cores &= ~ASUS_WMI_DSTS_PRESENCE_BIT;
++ asus_armoury.cpu_cores->max_power_cores = FIELD_GET(ASUS_POWER_CORE_MASK, cores);
++ asus_armoury.cpu_cores->max_perf_cores = FIELD_GET(ASUS_PERF_CORE_MASK, cores);
++
++ err = asus_wmi_get_devstate_dsts(ASUS_WMI_DEVID_CORES, &cores);
++ if (err) {
++ pr_err("Could not get CPU core count: error %d", err);
++ return err;
++ }
++
++ asus_armoury.cpu_cores->cur_perf_cores = FIELD_GET(ASUS_PERF_CORE_MASK, cores);
++ asus_armoury.cpu_cores->cur_power_cores = FIELD_GET(ASUS_POWER_CORE_MASK, cores);
++
++ asus_armoury.cpu_cores->min_perf_cores = CPU_PERF_CORE_COUNT_MIN;
++ asus_armoury.cpu_cores->min_power_cores = CPU_POWR_CORE_COUNT_MIN;
++
++ return 0;
++}
++
++static ssize_t cores_value_show(struct kobject *kobj, struct kobj_attribute *attr, char *buf,
++ enum cpu_core_type core_type, enum cpu_core_value core_value)
++{
++ u32 cores;
++
++ switch (core_value) {
++ case CPU_CORE_DEFAULT:
++ case CPU_CORE_MAX:
++ if (core_type == CPU_CORE_PERF)
++ return sysfs_emit(buf, "%d\n",
++ asus_armoury.cpu_cores->max_perf_cores);
++ else
++ return sysfs_emit(buf, "%d\n",
++ asus_armoury.cpu_cores->max_power_cores);
++ case CPU_CORE_MIN:
++ if (core_type == CPU_CORE_PERF)
++ return sysfs_emit(buf, "%d\n",
++ asus_armoury.cpu_cores->min_perf_cores);
++ else
++ return sysfs_emit(buf, "%d\n",
++ asus_armoury.cpu_cores->min_power_cores);
++ default:
++ break;
++ }
++
++ if (core_type == CPU_CORE_PERF)
++ cores = asus_armoury.cpu_cores->cur_perf_cores;
++ else
++ cores = asus_armoury.cpu_cores->cur_power_cores;
++
++ return sysfs_emit(buf, "%d\n", cores);
++}
++
++static ssize_t cores_current_value_store(struct kobject *kobj, struct kobj_attribute *attr,
++ const char *buf, enum cpu_core_type core_type)
++{
++ u32 new_cores, perf_cores, power_cores, out_val, min, max;
++ int result, err;
++
++ result = kstrtou32(buf, 10, &new_cores);
++ if (result)
++ return result;
++
++ mutex_lock(&asus_armoury.cpu_core_mutex);
++
++ if (core_type == CPU_CORE_PERF) {
++ perf_cores = new_cores;
++ power_cores = out_val = asus_armoury.cpu_cores->cur_power_cores;
++ min = asus_armoury.cpu_cores->min_perf_cores;
++ max = asus_armoury.cpu_cores->max_perf_cores;
++ } else {
++ perf_cores = asus_armoury.cpu_cores->cur_perf_cores;
++ power_cores = out_val = new_cores;
++ min = asus_armoury.cpu_cores->min_power_cores;
++ max = asus_armoury.cpu_cores->max_power_cores;
++ }
++
++ if (new_cores < min || new_cores > max) {
++ mutex_unlock(&asus_armoury.cpu_core_mutex);
++ return -EINVAL;
++ }
++
++ out_val = 0;
++ out_val |= FIELD_PREP(ASUS_PERF_CORE_MASK, perf_cores);
++ out_val |= FIELD_PREP(ASUS_POWER_CORE_MASK, power_cores);
++
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_CORES, out_val, &result);
++
++ if (err) {
++ pr_warn("Failed to set CPU core count: %d\n", err);
++ mutex_unlock(&asus_armoury.cpu_core_mutex);
++ return err;
++ }
++
++ if (result > 1) {
++ pr_warn("Failed to set CPU core count (result): 0x%x\n", result);
++ mutex_unlock(&asus_armoury.cpu_core_mutex);
++ return -EIO;
++ }
++
++ pr_info("CPU core count changed, reboot required\n");
++ mutex_unlock(&asus_armoury.cpu_core_mutex);
++
++ sysfs_notify(kobj, NULL, attr->attr.name);
++ asus_set_reboot_and_signal_event();
++
++ return 0;
++}
++
++static ssize_t cores_performance_min_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_MIN);
++}
++
++static ssize_t cores_performance_max_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_MAX);
++}
++
++static ssize_t cores_performance_default_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_DEFAULT);
++}
++
++static ssize_t cores_performance_current_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_PERF, CPU_CORE_CURRENT);
++}
++
++static ssize_t cores_performance_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr,
++ const char *buf, size_t count)
++{
++ int err;
++
++ err = cores_current_value_store(kobj, attr, buf, CPU_CORE_PERF);
++ if (err)
++ return err;
++
++ return count;
++}
++ATTR_GROUP_CORES_RW(cores_performance, "cores_performance",
++ "Set the max available performance cores");
++
++static ssize_t cores_efficiency_min_value_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_MIN);
++}
++
++static ssize_t cores_efficiency_max_value_show(struct kobject *kobj, struct kobj_attribute *attr,
++ char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_MAX);
++}
++
++static ssize_t cores_efficiency_default_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_DEFAULT);
++}
++
++static ssize_t cores_efficiency_current_value_show(struct kobject *kobj,
++ struct kobj_attribute *attr, char *buf)
++{
++ return cores_value_show(kobj, attr, buf, CPU_CORE_POWER, CPU_CORE_CURRENT);
++}
++
++static ssize_t cores_efficiency_current_value_store(struct kobject *kobj,
++ struct kobj_attribute *attr, const char *buf,
++ size_t count)
++{
++ int err;
++
++ err = cores_current_value_store(kobj, attr, buf, CPU_CORE_POWER);
++ if (err)
++ return err;
++
++ return count;
++}
++ATTR_GROUP_CORES_RW(cores_efficiency, "cores_efficiency",
++ "Set the max available efficiency cores");
++
++/* Define helper to access the current power mode tunable values */
++static inline struct rog_tunables *get_current_tunables(void)
++{
++ return asus_armoury
++ .rog_tunables[power_supply_is_system_supplied() ? 1 : 0];
++}
++
++/* Simple attribute creation */
++ATTR_GROUP_ROG_TUNABLE(ppt_pl1_spl, ATTR_PPT_PL1_SPL, ASUS_WMI_DEVID_PPT_PL1_SPL,
++ "Set the CPU slow package limit");
++ATTR_GROUP_ROG_TUNABLE(ppt_pl2_sppt, ATTR_PPT_PL2_SPPT, ASUS_WMI_DEVID_PPT_PL2_SPPT,
++ "Set the CPU fast package limit");
++ATTR_GROUP_ROG_TUNABLE(ppt_pl3_fppt, ATTR_PPT_PL3_FPPT, ASUS_WMI_DEVID_PPT_FPPT,
++ "Set the CPU fastest package limit");
++ATTR_GROUP_ROG_TUNABLE(ppt_apu_sppt, ATTR_PPT_APU_SPPT, ASUS_WMI_DEVID_PPT_APU_SPPT,
++ "Set the APU package limit");
++ATTR_GROUP_ROG_TUNABLE(ppt_platform_sppt, ATTR_PPT_PLATFORM_SPPT, ASUS_WMI_DEVID_PPT_PLAT_SPPT,
++ "Set the platform package limit");
++ATTR_GROUP_ROG_TUNABLE(nv_dynamic_boost, ATTR_NV_DYNAMIC_BOOST, ASUS_WMI_DEVID_NV_DYN_BOOST,
++ "Set the Nvidia dynamic boost limit");
++ATTR_GROUP_ROG_TUNABLE(nv_temp_target, ATTR_NV_TEMP_TARGET, ASUS_WMI_DEVID_NV_THERM_TARGET,
++ "Set the Nvidia max thermal limit");
++ATTR_GROUP_ROG_TUNABLE(nv_tgp, "nv_tgp", ASUS_WMI_DEVID_DGPU_SET_TGP,
++ "Set the additional TGP on top of the base TGP");
++ATTR_GROUP_INT_VALUE_ONLY_RO(nv_base_tgp, ATTR_NV_BASE_TGP, ASUS_WMI_DEVID_DGPU_BASE_TGP,
++ "Read the base TGP value");
++
++
++ATTR_GROUP_ENUM_INT_RO(charge_mode, "charge_mode", ASUS_WMI_DEVID_CHARGE_MODE, "0;1;2",
++ "Show the current mode of charging");
++
++ATTR_GROUP_BOOL_RW(boot_sound, "boot_sound", ASUS_WMI_DEVID_BOOT_SOUND,
++ "Set the boot POST sound");
++ATTR_GROUP_BOOL_RW(mcu_powersave, "mcu_powersave", ASUS_WMI_DEVID_MCU_POWERSAVE,
++ "Set MCU powersaving mode");
++ATTR_GROUP_BOOL_RW(panel_od, "panel_overdrive", ASUS_WMI_DEVID_PANEL_OD,
++ "Set the panel refresh overdrive");
++ATTR_GROUP_BOOL_RW(panel_hd_mode, "panel_hd_mode", ASUS_WMI_DEVID_PANEL_HD,
++ "Set the panel HD mode to UHD<0> or FHD<1>");
++ATTR_GROUP_BOOL_RW(screen_auto_brightness, "screen_auto_brightness",
++ ASUS_WMI_DEVID_SCREEN_AUTO_BRIGHTNESS,
++ "Set the panel brightness to Off<0> or On<1>");
++ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED,
++ "Show the eGPU connection status");
++
++/* If an attribute does not require any special case handling add it here */
++static const struct asus_attr_group armoury_attr_groups[] = {
++ { &egpu_connected_attr_group, ASUS_WMI_DEVID_EGPU_CONNECTED },
++ { &egpu_enable_attr_group, ASUS_WMI_DEVID_EGPU },
++ { &dgpu_disable_attr_group, ASUS_WMI_DEVID_DGPU },
++ { &apu_mem_attr_group, ASUS_WMI_DEVID_APU_MEM },
++ { &cores_efficiency_attr_group, ASUS_WMI_DEVID_CORES_MAX },
++ { &cores_performance_attr_group, ASUS_WMI_DEVID_CORES_MAX },
++
++ { &ppt_pl1_spl_attr_group, ASUS_WMI_DEVID_PPT_PL1_SPL },
++ { &ppt_pl2_sppt_attr_group, ASUS_WMI_DEVID_PPT_PL2_SPPT },
++ { &ppt_pl3_fppt_attr_group, ASUS_WMI_DEVID_PPT_FPPT },
++ { &ppt_apu_sppt_attr_group, ASUS_WMI_DEVID_PPT_APU_SPPT },
++ { &ppt_platform_sppt_attr_group, ASUS_WMI_DEVID_PPT_PLAT_SPPT },
++ { &nv_dynamic_boost_attr_group, ASUS_WMI_DEVID_NV_DYN_BOOST },
++ { &nv_temp_target_attr_group, ASUS_WMI_DEVID_NV_THERM_TARGET },
++ { &nv_base_tgp_attr_group, ASUS_WMI_DEVID_DGPU_BASE_TGP },
++ { &nv_tgp_attr_group, ASUS_WMI_DEVID_DGPU_SET_TGP },
++
++ { &charge_mode_attr_group, ASUS_WMI_DEVID_CHARGE_MODE },
++ { &boot_sound_attr_group, ASUS_WMI_DEVID_BOOT_SOUND },
++ { &mcu_powersave_attr_group, ASUS_WMI_DEVID_MCU_POWERSAVE },
++ { &panel_od_attr_group, ASUS_WMI_DEVID_PANEL_OD },
++ { &panel_hd_mode_attr_group, ASUS_WMI_DEVID_PANEL_HD },
++};
++
++/**
++ * is_power_tunable_attr - Determines if an attribute is a power-related tunable
++ * @name: The name of the attribute to check
++ *
++ * This function checks if the given attribute name is related to power tuning.
++ *
++ * Return: true if the attribute is a power-related tunable, false otherwise
++ */
++static bool is_power_tunable_attr(const char *name)
++{
++ static const char * const power_tunable_attrs[] = {
++ ATTR_PPT_PL1_SPL, ATTR_PPT_PL2_SPPT,
++ ATTR_PPT_PL3_FPPT, ATTR_PPT_APU_SPPT,
++ ATTR_PPT_PLATFORM_SPPT, ATTR_NV_DYNAMIC_BOOST,
++ ATTR_NV_TEMP_TARGET, ATTR_NV_BASE_TGP,
++ ATTR_NV_TGP
++ };
++
++ for (int i = 0; i < ARRAY_SIZE(power_tunable_attrs); i++) {
++ if (!strcmp(name, power_tunable_attrs[i]))
++ return true;
++ }
++
++ return false;
++}
++
++/**
++ * has_valid_limit - Checks if a power-related attribute has a valid limit value
++ * @name: The name of the attribute to check
++ * @limits: Pointer to the power_limits structure containing limit values
++ *
++ * This function checks if a power-related attribute has a valid limit value.
++ * It returns false if limits is NULL or if the corresponding limit value is zero.
++ *
++ * Return: true if the attribute has a valid limit value, false otherwise
++ */
++static bool has_valid_limit(const char *name, const struct power_limits *limits)
++{
++ u32 limit_value = 0;
++
++ if (!limits)
++ return false;
++
++ if (!strcmp(name, ATTR_PPT_PL1_SPL))
++ limit_value = limits->ppt_pl1_spl_max;
++ else if (!strcmp(name, ATTR_PPT_PL2_SPPT))
++ limit_value = limits->ppt_pl2_sppt_max;
++ else if (!strcmp(name, ATTR_PPT_PL3_FPPT))
++ limit_value = limits->ppt_pl3_fppt_max;
++ else if (!strcmp(name, ATTR_PPT_APU_SPPT))
++ limit_value = limits->ppt_apu_sppt_max;
++ else if (!strcmp(name, ATTR_PPT_PLATFORM_SPPT))
++ limit_value = limits->ppt_platform_sppt_max;
++ else if (!strcmp(name, ATTR_NV_DYNAMIC_BOOST))
++ limit_value = limits->nv_dynamic_boost_max;
++ else if (!strcmp(name, ATTR_NV_TEMP_TARGET))
++ limit_value = limits->nv_temp_target_max;
++ else if (!strcmp(name, ATTR_NV_BASE_TGP) ||
++ !strcmp(name, ATTR_NV_TGP))
++ limit_value = limits->nv_tgp_max;
++
++ return limit_value > 0;
++}
++
++static int asus_fw_attr_add(void)
++{
++ const struct power_limits *limits;
++ bool should_create;
++ const char *name;
++ int err, i;
++
++ asus_armoury.fw_attr_dev = device_create(&firmware_attributes_class, NULL, MKDEV(0, 0),
++ NULL, "%s", DRIVER_NAME);
++ if (IS_ERR(asus_armoury.fw_attr_dev)) {
++ err = PTR_ERR(asus_armoury.fw_attr_dev);
++ goto fail_class_get;
++ }
++
++ asus_armoury.fw_attr_kset = kset_create_and_add("attributes", NULL,
++ &asus_armoury.fw_attr_dev->kobj);
++ if (!asus_armoury.fw_attr_kset) {
++ err = -ENOMEM;
++ goto err_destroy_classdev;
++ }
++
++ err = sysfs_create_file(&asus_armoury.fw_attr_kset->kobj, &pending_reboot.attr);
++ if (err) {
++ pr_err("Failed to create sysfs level attributes\n");
++ goto err_destroy_kset;
++ }
++
++ asus_armoury.mini_led_dev_id = 0;
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_MINI_LED_MODE))
++ asus_armoury.mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE;
++ else if (asus_wmi_is_present(ASUS_WMI_DEVID_MINI_LED_MODE2))
++ asus_armoury.mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE2;
++
++ if (asus_armoury.mini_led_dev_id) {
++ err = sysfs_create_group(&asus_armoury.fw_attr_kset->kobj,
++ &mini_led_mode_attr_group);
++ if (err) {
++ pr_err("Failed to create sysfs-group for mini_led\n");
++ goto err_remove_file;
++ }
++ }
++
++ asus_armoury.gpu_mux_dev_id = 0;
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_GPU_MUX))
++ asus_armoury.gpu_mux_dev_id = ASUS_WMI_DEVID_GPU_MUX;
++ else if (asus_wmi_is_present(ASUS_WMI_DEVID_GPU_MUX_VIVO))
++ asus_armoury.gpu_mux_dev_id = ASUS_WMI_DEVID_GPU_MUX_VIVO;
++
++ if (asus_armoury.gpu_mux_dev_id) {
++ err = sysfs_create_group(&asus_armoury.fw_attr_kset->kobj,
++ &gpu_mux_mode_attr_group);
++ if (err) {
++ pr_err("Failed to create sysfs-group for gpu_mux\n");
++ goto err_remove_mini_led_group;
++ }
++ }
++
++ for (i = 0; i < ARRAY_SIZE(armoury_attr_groups); i++) {
++ if (!asus_wmi_is_present(armoury_attr_groups[i].wmi_devid))
++ continue;
++
++ /* Always create by default, unless PPT is not present */
++ should_create = true;
++ name = armoury_attr_groups[i].attr_group->name;
++
++ /* Check if this is a power-related tunable requiring limits */
++ if (asus_armoury.rog_tunables[1] && asus_armoury.rog_tunables[1]->power_limits &&
++ is_power_tunable_attr(name)) {
++ limits = asus_armoury.rog_tunables[1]->power_limits;
++ /* Check only AC, if DC is not present then AC won't be either */
++ should_create = has_valid_limit(name, limits);
++ if (!should_create) {
++ pr_debug(
++ "Missing max value on %s for tunable: %s\n",
++ dmi_get_system_info(DMI_BOARD_NAME),
++ name);
++ }
++ }
++
++ if (should_create) {
++ err = sysfs_create_group(
++ &asus_armoury.fw_attr_kset->kobj,
++ armoury_attr_groups[i].attr_group);
++ if (err) {
++ pr_err("Failed to create sysfs-group for %s\n",
++ armoury_attr_groups[i].attr_group->name);
++ goto err_remove_groups;
++ }
++ }
++ }
++
++ return 0;
++
++err_remove_groups:
++ while (--i >= 0) {
++ if (asus_wmi_is_present(armoury_attr_groups[i].wmi_devid))
++ sysfs_remove_group(&asus_armoury.fw_attr_kset->kobj,
++ armoury_attr_groups[i].attr_group);
++ }
++ if (asus_armoury.gpu_mux_dev_id)
++ sysfs_remove_group(&asus_armoury.fw_attr_kset->kobj, &gpu_mux_mode_attr_group);
++err_remove_mini_led_group:
++ if (asus_armoury.mini_led_dev_id)
++ sysfs_remove_group(&asus_armoury.fw_attr_kset->kobj, &mini_led_mode_attr_group);
++err_remove_file:
++ sysfs_remove_file(&asus_armoury.fw_attr_kset->kobj, &pending_reboot.attr);
++err_destroy_kset:
++ kset_unregister(asus_armoury.fw_attr_kset);
++err_destroy_classdev:
++fail_class_get:
++ device_destroy(&firmware_attributes_class, MKDEV(0, 0));
++ return err;
++}
++
++/* Init / exit ****************************************************************/
++
++/* Set up the min/max and defaults for ROG tunables */
++static void init_rog_tunables(void)
++{
++ const struct power_limits *ac_limits, *dc_limits;
++ const struct power_data *power_data;
++ const struct dmi_system_id *dmi_id;
++ bool ac_initialized = false, dc_initialized = false;
++
++ /* Match the system against the power_limits table */
++ dmi_id = dmi_first_match(power_limits);
++ if (!dmi_id) {
++ pr_warn("No matching power limits found for this system\n");
++ return;
++ }
++
++ /* Get the power data for this system */
++ power_data = dmi_id->driver_data;
++ if (!power_data) {
++ pr_info("No power data available for this system\n");
++ return;
++ }
++
++ /* Initialize AC power tunables */
++ ac_limits = power_data->ac_data;
++ if (ac_limits) {
++ asus_armoury.rog_tunables[1] =
++ kzalloc(sizeof(struct rog_tunables), GFP_KERNEL);
++ if (!asus_armoury.rog_tunables[1])
++ goto err_nomem;
++
++ asus_armoury.rog_tunables[1]->power_limits = ac_limits;
++
++ /* Set initial AC values */
++ asus_armoury.rog_tunables[1]->ppt_pl1_spl =
++ ac_limits->ppt_pl1_spl_def ?
++ ac_limits->ppt_pl1_spl_def :
++ ac_limits->ppt_pl1_spl_max;
++
++ asus_armoury.rog_tunables[1]->ppt_pl2_sppt =
++ ac_limits->ppt_pl2_sppt_def ?
++ ac_limits->ppt_pl2_sppt_def :
++ ac_limits->ppt_pl2_sppt_max;
++
++ asus_armoury.rog_tunables[1]->ppt_pl3_fppt =
++ ac_limits->ppt_pl3_fppt_def ?
++ ac_limits->ppt_pl3_fppt_def :
++ ac_limits->ppt_pl3_fppt_max;
++
++ asus_armoury.rog_tunables[1]->ppt_apu_sppt =
++ ac_limits->ppt_apu_sppt_def ?
++ ac_limits->ppt_apu_sppt_def :
++ ac_limits->ppt_apu_sppt_max;
++
++ asus_armoury.rog_tunables[1]->ppt_platform_sppt =
++ ac_limits->ppt_platform_sppt_def ?
++ ac_limits->ppt_platform_sppt_def :
++ ac_limits->ppt_platform_sppt_max;
++
++ asus_armoury.rog_tunables[1]->nv_dynamic_boost =
++ ac_limits->nv_dynamic_boost_max;
++ asus_armoury.rog_tunables[1]->nv_temp_target =
++ ac_limits->nv_temp_target_max;
++ asus_armoury.rog_tunables[1]->nv_tgp = ac_limits->nv_tgp_max;
++
++ ac_initialized = true;
++ pr_debug("AC power limits initialized for %s\n", dmi_id->matches[0].substr);
++ }
++
++ /* Initialize DC power tunables */
++ dc_limits = power_data->dc_data;
++ if (dc_limits) {
++ asus_armoury.rog_tunables[0] =
++ kzalloc(sizeof(struct rog_tunables), GFP_KERNEL);
++ if (!asus_armoury.rog_tunables[0]) {
++ if (ac_initialized)
++ kfree(asus_armoury.rog_tunables[1]);
++ goto err_nomem;
++ }
++
++ asus_armoury.rog_tunables[0]->power_limits = dc_limits;
++
++ /* Set initial DC values */
++ asus_armoury.rog_tunables[0]->ppt_pl1_spl =
++ dc_limits->ppt_pl1_spl_def ?
++ dc_limits->ppt_pl1_spl_def :
++ dc_limits->ppt_pl1_spl_max;
++
++ asus_armoury.rog_tunables[0]->ppt_pl2_sppt =
++ dc_limits->ppt_pl2_sppt_def ?
++ dc_limits->ppt_pl2_sppt_def :
++ dc_limits->ppt_pl2_sppt_max;
++
++ asus_armoury.rog_tunables[0]->ppt_pl3_fppt =
++ dc_limits->ppt_pl3_fppt_def ?
++ dc_limits->ppt_pl3_fppt_def :
++ dc_limits->ppt_pl3_fppt_max;
++
++ asus_armoury.rog_tunables[0]->ppt_apu_sppt =
++ dc_limits->ppt_apu_sppt_def ?
++ dc_limits->ppt_apu_sppt_def :
++ dc_limits->ppt_apu_sppt_max;
++
++ asus_armoury.rog_tunables[0]->ppt_platform_sppt =
++ dc_limits->ppt_platform_sppt_def ?
++ dc_limits->ppt_platform_sppt_def :
++ dc_limits->ppt_platform_sppt_max;
++
++ asus_armoury.rog_tunables[0]->nv_dynamic_boost =
++ dc_limits->nv_dynamic_boost_max;
++ asus_armoury.rog_tunables[0]->nv_temp_target =
++ dc_limits->nv_temp_target_max;
++ asus_armoury.rog_tunables[0]->nv_tgp = dc_limits->nv_tgp_max;
++
++ dc_initialized = true;
++ pr_debug("DC power limits initialized for %s\n", dmi_id->matches[0].substr);
++ }
++
++ if (!ac_initialized)
++ pr_debug("No AC PPT limits defined\n");
++
++ if (!dc_initialized)
++ pr_debug("No DC PPT limits defined\n");
++
++ return;
++
++err_nomem:
++ pr_err("Failed to allocate memory for tunables\n");
++}
++
++static int __init asus_fw_init(void)
++{
++ char *wmi_uid;
++ int err;
++
++ wmi_uid = wmi_get_acpi_device_uid(ASUS_WMI_MGMT_GUID);
++ if (!wmi_uid)
++ return -ENODEV;
++
++ /*
++ * if equal to "ASUSWMI" then it's DCTS that can't be used for this
++ * driver, DSTS is required.
++ */
++ if (!strcmp(wmi_uid, ASUS_ACPI_UID_ASUSWMI))
++ return -ENODEV;
++
++ if (asus_wmi_is_present(ASUS_WMI_DEVID_CORES_MAX)) {
++ asus_armoury.cpu_cores = kzalloc(sizeof(struct cpu_cores), GFP_KERNEL);
++ if (!asus_armoury.cpu_cores)
++ return -ENOMEM;
++
++ err = init_max_cpu_cores();
++ if (err) {
++ kfree(asus_armoury.cpu_cores);
++ pr_err("Could not initialise CPU core control %d\n", err);
++ return err;
++ }
++ }
++
++ init_rog_tunables();
++
++ /* Must always be last step to ensure data is available */
++ return asus_fw_attr_add();
++}
++
++static void __exit asus_fw_exit(void)
++{
++ sysfs_remove_file(&asus_armoury.fw_attr_kset->kobj, &pending_reboot.attr);
++ kset_unregister(asus_armoury.fw_attr_kset);
++ device_destroy(&firmware_attributes_class, MKDEV(0, 0));
++
++ kfree(asus_armoury.rog_tunables[0]);
++ kfree(asus_armoury.rog_tunables[1]);
++}
++
++module_init(asus_fw_init);
++module_exit(asus_fw_exit);
++
++MODULE_IMPORT_NS("ASUS_WMI");
++MODULE_AUTHOR("Luke Jones ");
++MODULE_DESCRIPTION("ASUS BIOS Configuration Driver");
++MODULE_LICENSE("GPL");
++MODULE_ALIAS("wmi:" ASUS_NB_WMI_EVENT_GUID);
+diff --git a/drivers/platform/x86/asus-armoury.h b/drivers/platform/x86/asus-armoury.h
+new file mode 100644
+index 000000000000..438768ea14cc
+--- /dev/null
++++ b/drivers/platform/x86/asus-armoury.h
+@@ -0,0 +1,1278 @@
++/* SPDX-License-Identifier: GPL-2.0
++ *
++ * Definitions for kernel modules using asus-armoury driver
++ *
++ * Copyright (c) 2024 Luke Jones
++ */
++
++#ifndef _ASUS_ARMOURY_H_
++#define _ASUS_ARMOURY_H_
++
++#include
++#include
++#include
++
++#define DRIVER_NAME "asus-armoury"
++
++#define __ASUS_ATTR_RO(_func, _name) \
++ { \
++ .attr = { .name = __stringify(_name), .mode = 0444 }, \
++ .show = _func##_##_name##_show, \
++ }
++
++#define __ASUS_ATTR_RO_AS(_name, _show) \
++ { \
++ .attr = { .name = __stringify(_name), .mode = 0444 }, \
++ .show = _show, \
++ }
++
++#define __ASUS_ATTR_RW(_func, _name) \
++ __ATTR(_name, 0644, _func##_##_name##_show, _func##_##_name##_store)
++
++#define __WMI_STORE_INT(_attr, _min, _max, _wmi) \
++ static ssize_t _attr##_store(struct kobject *kobj, \
++ struct kobj_attribute *attr, \
++ const char *buf, size_t count) \
++ { \
++ return attr_uint_store(kobj, attr, buf, count, _min, \
++ _max, NULL, _wmi); \
++ }
++
++#define WMI_SHOW_INT(_attr, _fmt, _wmi) \
++ static ssize_t _attr##_show(struct kobject *kobj, \
++ struct kobj_attribute *attr, char *buf) \
++ { \
++ u32 result; \
++ int err; \
++ \
++ err = asus_wmi_get_devstate_dsts(_wmi, &result); \
++ if (err) \
++ return err; \
++ return sysfs_emit(buf, _fmt, \
++ result & ~ASUS_WMI_DSTS_PRESENCE_BIT); \
++ }
++
++/* Create functions and attributes for use in other macros or on their own */
++
++/* Shows a formatted static variable */
++#define __ATTR_SHOW_FMT(_prop, _attrname, _fmt, _val) \
++ static ssize_t _attrname##_##_prop##_show( \
++ struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
++ { \
++ return sysfs_emit(buf, _fmt, _val); \
++ } \
++ static struct kobj_attribute attr_##_attrname##_##_prop = \
++ __ASUS_ATTR_RO(_attrname, _prop)
++
++#define __ATTR_RO_INT_GROUP_ENUM(_attrname, _wmi, _fsname, _possible, _dispname)\
++ WMI_SHOW_INT(_attrname##_current_value, "%d\n", _wmi); \
++ static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RO(_attrname, current_value); \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ __ATTR_SHOW_FMT(possible_values, _attrname, "%s\n", _possible); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, enum_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_possible_values.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++#define __ATTR_RW_INT_GROUP_ENUM(_attrname, _minv, _maxv, _wmi, _fsname,\
++ _possible, _dispname) \
++ __WMI_STORE_INT(_attrname##_current_value, _minv, _maxv, _wmi); \
++ WMI_SHOW_INT(_attrname##_current_value, "%d\n", _wmi); \
++ static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RW(_attrname, current_value); \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ __ATTR_SHOW_FMT(possible_values, _attrname, "%s\n", _possible); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, enum_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_possible_values.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++/* Boolean style enumeration, base macro. Requires adding show/store */
++#define __ATTR_GROUP_ENUM(_attrname, _fsname, _possible, _dispname) \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ __ATTR_SHOW_FMT(possible_values, _attrname, "%s\n", _possible); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, enum_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_possible_values.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++#define ATTR_GROUP_BOOL_RO(_attrname, _fsname, _wmi, _dispname) \
++ __ATTR_RO_INT_GROUP_ENUM(_attrname, _wmi, _fsname, "0;1", _dispname)
++
++
++#define ATTR_GROUP_BOOL_RW(_attrname, _fsname, _wmi, _dispname) \
++ __ATTR_RW_INT_GROUP_ENUM(_attrname, 0, 1, _wmi, _fsname, "0;1", _dispname)
++
++#define ATTR_GROUP_ENUM_INT_RO(_attrname, _fsname, _wmi, _possible, _dispname) \
++ __ATTR_RO_INT_GROUP_ENUM(_attrname, _wmi, _fsname, _possible, _dispname)
++
++/*
++ * Requires _current_value_show(), _current_value_show()
++ */
++#define ATTR_GROUP_BOOL_CUSTOM(_attrname, _fsname, _dispname) \
++ static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RW(_attrname, current_value); \
++ __ATTR_GROUP_ENUM(_attrname, _fsname, "0;1", _dispname)
++
++/*
++ * Requires _current_value_show(), _current_value_show()
++ * and _possible_values_show()
++ */
++#define ATTR_GROUP_ENUM_CUSTOM(_attrname, _fsname, _dispname) \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RW(_attrname, current_value); \
++ static struct kobj_attribute attr_##_attrname##_possible_values = \
++ __ASUS_ATTR_RO(_attrname, possible_values); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, enum_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_possible_values.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++/* CPU core attributes need a little different in setup */
++#define ATTR_GROUP_CORES_RW(_attrname, _fsname, _dispname) \
++ __ATTR_SHOW_FMT(scalar_increment, _attrname, "%d\n", 1); \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RW(_attrname, current_value); \
++ static struct kobj_attribute attr_##_attrname##_default_value = \
++ __ASUS_ATTR_RO(_attrname, default_value); \
++ static struct kobj_attribute attr_##_attrname##_min_value = \
++ __ASUS_ATTR_RO(_attrname, min_value); \
++ static struct kobj_attribute attr_##_attrname##_max_value = \
++ __ASUS_ATTR_RO(_attrname, max_value); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, int_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_default_value.attr, \
++ &attr_##_attrname##_min_value.attr, \
++ &attr_##_attrname##_max_value.attr, \
++ &attr_##_attrname##_scalar_increment.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++#define ATTR_GROUP_INT_VALUE_ONLY_RO(_attrname, _fsname, _wmi, _dispname) \
++ WMI_SHOW_INT(_attrname##_current_value, "%d\n", _wmi); \
++ static struct kobj_attribute attr_##_attrname##_current_value = \
++ __ASUS_ATTR_RO(_attrname, current_value); \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, int_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_type.attr, NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++/*
++ * ROG PPT attributes need a little different in setup as they
++ * require rog_tunables members.
++ */
++
++#define __ROG_TUNABLE_SHOW(_prop, _attrname, _val) \
++ static ssize_t _attrname##_##_prop##_show( \
++ struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
++ { \
++ struct rog_tunables *tunables = get_current_tunables(); \
++ \
++ if (!tunables || !tunables->power_limits) \
++ return -ENODEV; \
++ \
++ return sysfs_emit(buf, "%d\n", tunables->power_limits->_val); \
++ } \
++ static struct kobj_attribute attr_##_attrname##_##_prop = \
++ __ASUS_ATTR_RO(_attrname, _prop)
++
++#define __ROG_TUNABLE_SHOW_DEFAULT(_attrname) \
++ static ssize_t _attrname##_default_value_show( \
++ struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
++ { \
++ struct rog_tunables *tunables = get_current_tunables(); \
++ \
++ if (!tunables || !tunables->power_limits) \
++ return -ENODEV; \
++ \
++ return sysfs_emit( \
++ buf, "%d\n", \
++ tunables->power_limits->_attrname##_def ? \
++ tunables->power_limits->_attrname##_def : \
++ tunables->power_limits->_attrname##_max); \
++ } \
++ static struct kobj_attribute attr_##_attrname##_default_value = \
++ __ASUS_ATTR_RO(_attrname, default_value)
++
++#define __ROG_TUNABLE_RW(_attr, _wmi) \
++ static ssize_t _attr##_current_value_store( \
++ struct kobject *kobj, struct kobj_attribute *attr, \
++ const char *buf, size_t count) \
++ { \
++ struct rog_tunables *tunables = get_current_tunables(); \
++ \
++ if (!tunables || !tunables->power_limits) \
++ return -ENODEV; \
++ \
++ return attr_uint_store(kobj, attr, buf, count, \
++ tunables->power_limits->_attr##_min, \
++ tunables->power_limits->_attr##_max, \
++ &tunables->_attr, _wmi); \
++ } \
++ static ssize_t _attr##_current_value_show( \
++ struct kobject *kobj, struct kobj_attribute *attr, char *buf) \
++ { \
++ struct rog_tunables *tunables = get_current_tunables(); \
++ \
++ if (!tunables) \
++ return -ENODEV; \
++ \
++ return sysfs_emit(buf, "%u\n", tunables->_attr); \
++ } \
++ static struct kobj_attribute attr_##_attr##_current_value = \
++ __ASUS_ATTR_RW(_attr, current_value)
++
++#define ATTR_GROUP_ROG_TUNABLE(_attrname, _fsname, _wmi, _dispname) \
++ __ROG_TUNABLE_RW(_attrname, _wmi); \
++ __ROG_TUNABLE_SHOW_DEFAULT(_attrname); \
++ __ROG_TUNABLE_SHOW(min_value, _attrname, _attrname##_min); \
++ __ROG_TUNABLE_SHOW(max_value, _attrname, _attrname##_max); \
++ __ATTR_SHOW_FMT(scalar_increment, _attrname, "%d\n", 1); \
++ __ATTR_SHOW_FMT(display_name, _attrname, "%s\n", _dispname); \
++ static struct kobj_attribute attr_##_attrname##_type = \
++ __ASUS_ATTR_RO_AS(type, int_type_show); \
++ static struct attribute *_attrname##_attrs[] = { \
++ &attr_##_attrname##_current_value.attr, \
++ &attr_##_attrname##_default_value.attr, \
++ &attr_##_attrname##_min_value.attr, \
++ &attr_##_attrname##_max_value.attr, \
++ &attr_##_attrname##_scalar_increment.attr, \
++ &attr_##_attrname##_display_name.attr, \
++ &attr_##_attrname##_type.attr, \
++ NULL \
++ }; \
++ static const struct attribute_group _attrname##_attr_group = { \
++ .name = _fsname, .attrs = _attrname##_attrs \
++ }
++
++/* Default is always the maximum value unless *_def is specified */
++struct power_limits {
++ u8 ppt_pl1_spl_min;
++ u8 ppt_pl1_spl_def;
++ u8 ppt_pl1_spl_max;
++ u8 ppt_pl2_sppt_min;
++ u8 ppt_pl2_sppt_def;
++ u8 ppt_pl2_sppt_max;
++ u8 ppt_pl3_fppt_min;
++ u8 ppt_pl3_fppt_def;
++ u8 ppt_pl3_fppt_max;
++ u8 ppt_apu_sppt_min;
++ u8 ppt_apu_sppt_def;
++ u8 ppt_apu_sppt_max;
++ u8 ppt_platform_sppt_min;
++ u8 ppt_platform_sppt_def;
++ u8 ppt_platform_sppt_max;
++ /* Nvidia GPU specific, default is always max */
++ u8 nv_dynamic_boost_def; // unused. exists for macro
++ u8 nv_dynamic_boost_min;
++ u8 nv_dynamic_boost_max;
++ u8 nv_temp_target_def; // unused. exists for macro
++ u8 nv_temp_target_min;
++ u8 nv_temp_target_max;
++ u8 nv_tgp_def; // unused. exists for macro
++ u8 nv_tgp_min;
++ u8 nv_tgp_max;
++};
++
++struct power_data {
++ const struct power_limits *ac_data;
++ const struct power_limits *dc_data;
++ bool requires_fan_curve;
++};
++
++/*
++ * For each avilable attribute there must be a min and a max.
++ * _def is not required and will be assumed to be default == max if missing.
++ */
++static const struct dmi_system_id power_limits[] = {
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA401W"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 75,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 30,
++ .ppt_pl2_sppt_min = 31,
++ .ppt_pl2_sppt_max = 44,
++ .ppt_pl3_fppt_min = 45,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA507N"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 45,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 54,
++ .ppt_pl2_sppt_max = 65,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA507R"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80
++ },
++ .dc_data = NULL
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA507X"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 85,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 45,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 54,
++ .ppt_pl2_sppt_max = 65,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA507Z"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 105,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 15,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 85,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 45,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 60,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA607P"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 30,
++ .ppt_pl1_spl_def = 100,
++ .ppt_pl1_spl_max = 135,
++ .ppt_pl2_sppt_min = 30,
++ .ppt_pl2_sppt_def = 115,
++ .ppt_pl2_sppt_max = 135,
++ .ppt_pl3_fppt_min = 30,
++ .ppt_pl3_fppt_max = 135,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 115,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_def = 45,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_def = 60,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 25,
++ .ppt_pl3_fppt_max = 80,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA617NS"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 15,
++ .ppt_apu_sppt_max = 80,
++ .ppt_platform_sppt_min = 30,
++ .ppt_platform_sppt_max = 120
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 25,
++ .ppt_apu_sppt_max = 35,
++ .ppt_platform_sppt_min = 45,
++ .ppt_platform_sppt_max = 100
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA617NT"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 15,
++ .ppt_apu_sppt_max = 80,
++ .ppt_platform_sppt_min = 30,
++ .ppt_platform_sppt_max = 115
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 15,
++ .ppt_apu_sppt_max = 45,
++ .ppt_platform_sppt_min = 30,
++ .ppt_platform_sppt_max = 50
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FA617XS"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 15,
++ .ppt_apu_sppt_max = 80,
++ .ppt_platform_sppt_min = 30,
++ .ppt_platform_sppt_max = 120,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 25,
++ .ppt_apu_sppt_max = 35,
++ .ppt_platform_sppt_min = 45,
++ .ppt_platform_sppt_max = 100,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "FX507Z"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 90,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 135,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 15,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 45,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 60,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GA401Q"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_max = 80,
++ },
++ .dc_data = NULL
++ },
++ },
++ {
++ .matches = {
++ // This model is full AMD. No Nvidia dGPU.
++ DMI_MATCH(DMI_BOARD_NAME, "GA402R"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 15,
++ .ppt_apu_sppt_max = 80,
++ .ppt_platform_sppt_min = 30,
++ .ppt_platform_sppt_max = 115,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_apu_sppt_min = 25,
++ .ppt_apu_sppt_def = 30,
++ .ppt_apu_sppt_max = 45,
++ .ppt_platform_sppt_min = 40,
++ .ppt_platform_sppt_max = 60,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GA402X"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 35,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_def = 65,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 35,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GA403U"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 65,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 35,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GA503R"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 35,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 65,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 25,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 54,
++ .ppt_pl2_sppt_max = 60,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GA605W"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 85,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 31,
++ .ppt_pl2_sppt_max = 44,
++ .ppt_pl3_fppt_min = 45,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GU603Z"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 60,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 135,
++ /* Only allowed in AC mode */
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 40,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 40,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GU604V"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 65,
++ .ppt_pl1_spl_max = 120,
++ .ppt_pl2_sppt_min = 65,
++ .ppt_pl2_sppt_max = 150,
++ /* Only allowed in AC mode */
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 40,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 40,
++ .ppt_pl2_sppt_max = 60,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GU605M"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 90,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 135,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 38,
++ .ppt_pl2_sppt_max = 53,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GV301Q"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 45,
++ .ppt_pl2_sppt_min = 65,
++ .ppt_pl2_sppt_max = 80,
++ },
++ .dc_data = NULL
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GV301R"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 45,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 54,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 35,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GV601R"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 35,
++ .ppt_pl1_spl_max = 90,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 54,
++ .ppt_pl2_sppt_max = 100,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_def = 80,
++ .ppt_pl3_fppt_max = 125,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 28,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 54,
++ .ppt_pl2_sppt_def = 40,
++ .ppt_pl2_sppt_max = 60,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_def = 80,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GV601V"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_def = 100,
++ .ppt_pl1_spl_max = 110,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 135,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 40,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 40,
++ .ppt_pl2_sppt_max = 60,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "GX650P"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 110,
++ .ppt_pl1_spl_max = 130,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 125,
++ .ppt_pl2_sppt_max = 130,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_def = 125,
++ .ppt_pl3_fppt_max = 135,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_def = 25,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_def = 35,
++ .ppt_pl2_sppt_max = 65,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_def = 42,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G513I"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ /* Yes this laptop is very limited */
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_max = 80,
++ },
++ .dc_data = NULL,
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G513QM"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ /* Yes this laptop is very limited */
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 100,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_max = 190,
++ },
++ .dc_data = NULL,
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G513R"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 35,
++ .ppt_pl1_spl_max = 90,
++ .ppt_pl2_sppt_min = 54,
++ .ppt_pl2_sppt_max = 100,
++ .ppt_pl3_fppt_min = 54,
++ .ppt_pl3_fppt_max = 125,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 50,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 50,
++ .ppt_pl3_fppt_min = 28,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G614J"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 140,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 175,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 55,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 70,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G634J"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 140,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 175,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 55,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 70,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G733C"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 170,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 175,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 35,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G733P"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 30,
++ .ppt_pl1_spl_def = 100,
++ .ppt_pl1_spl_max = 130,
++ .ppt_pl2_sppt_min = 65,
++ .ppt_pl2_sppt_def = 125,
++ .ppt_pl2_sppt_max = 130,
++ .ppt_pl3_fppt_min = 65,
++ .ppt_pl3_fppt_def = 125,
++ .ppt_pl3_fppt_max = 130,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 65,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 65,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 75,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G814J"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 140,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 140,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 55,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 70,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "G834J"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 28,
++ .ppt_pl1_spl_max = 140,
++ .ppt_pl2_sppt_min = 28,
++ .ppt_pl2_sppt_max = 175,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 25,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 55,
++ .ppt_pl2_sppt_min = 25,
++ .ppt_pl2_sppt_max = 70,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ },
++ .requires_fan_curve = true,
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "H7606W"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 15,
++ .ppt_pl1_spl_max = 80,
++ .ppt_pl2_sppt_min = 35,
++ .ppt_pl2_sppt_max = 80,
++ .ppt_pl3_fppt_min = 35,
++ .ppt_pl3_fppt_max = 80,
++ .nv_dynamic_boost_min = 5,
++ .nv_dynamic_boost_max = 20,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ .nv_tgp_min = 55,
++ .nv_tgp_max = 85,
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 25,
++ .ppt_pl1_spl_max = 35,
++ .ppt_pl2_sppt_min = 31,
++ .ppt_pl2_sppt_max = 44,
++ .ppt_pl3_fppt_min = 45,
++ .ppt_pl3_fppt_max = 65,
++ .nv_temp_target_min = 75,
++ .nv_temp_target_max = 87,
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "RC71"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 7,
++ .ppt_pl1_spl_max = 30,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_max = 43,
++ .ppt_pl3_fppt_min = 15,
++ .ppt_pl3_fppt_max = 53
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 7,
++ .ppt_pl1_spl_def = 15,
++ .ppt_pl1_spl_max = 25,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_def = 20,
++ .ppt_pl2_sppt_max = 30,
++ .ppt_pl3_fppt_min = 15,
++ .ppt_pl3_fppt_def = 25,
++ .ppt_pl3_fppt_max = 35
++ }
++ },
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_NAME, "RC72"),
++ },
++ .driver_data = &(struct power_data) {
++ .ac_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 7,
++ .ppt_pl1_spl_max = 30,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_max = 43,
++ .ppt_pl3_fppt_min = 15,
++ .ppt_pl3_fppt_max = 53
++ },
++ .dc_data = &(struct power_limits) {
++ .ppt_pl1_spl_min = 7,
++ .ppt_pl1_spl_def = 17,
++ .ppt_pl1_spl_max = 25,
++ .ppt_pl2_sppt_min = 15,
++ .ppt_pl2_sppt_def = 24,
++ .ppt_pl2_sppt_max = 30,
++ .ppt_pl3_fppt_min = 15,
++ .ppt_pl3_fppt_def = 30,
++ .ppt_pl3_fppt_max = 35
++ }
++ },
++ },
++ {}
++};
++
++#endif /* _ASUS_ARMOURY_H_ */
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index f66d152e265d..cec509171971 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -55,8 +55,6 @@ module_param(fnlock_default, bool, 0444);
+ #define to_asus_wmi_driver(pdrv) \
+ (container_of((pdrv), struct asus_wmi_driver, platform_driver))
+
+-#define ASUS_WMI_MGMT_GUID "97845ED0-4E6D-11DE-8A39-0800200C9A66"
+-
+ #define NOTIFY_BRNUP_MIN 0x11
+ #define NOTIFY_BRNUP_MAX 0x1f
+ #define NOTIFY_BRNDOWN_MIN 0x20
+@@ -105,8 +103,6 @@ module_param(fnlock_default, bool, 0444);
+ #define USB_INTEL_XUSB2PR 0xD0
+ #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31
+
+-#define ASUS_ACPI_UID_ASUSWMI "ASUSWMI"
+-
+ #define WMI_EVENT_MASK 0xFFFF
+
+ #define FAN_CURVE_POINTS 8
+@@ -127,7 +123,6 @@ module_param(fnlock_default, bool, 0444);
+ #define NVIDIA_TEMP_MIN 75
+ #define NVIDIA_TEMP_MAX 87
+
+-#define ASUS_SCREENPAD_BRIGHT_MIN 20
+ #define ASUS_SCREENPAD_BRIGHT_MAX 255
+ #define ASUS_SCREENPAD_BRIGHT_DEFAULT 60
+
+@@ -142,16 +137,20 @@ module_param(fnlock_default, bool, 0444);
+ #define ASUS_MINI_LED_2024_STRONG 0x01
+ #define ASUS_MINI_LED_2024_OFF 0x02
+
+-/* Controls the power state of the USB0 hub on ROG Ally which input is on */
+ #define ASUS_USB0_PWR_EC0_CSEE "\\_SB.PCI0.SBRG.EC0.CSEE"
+-/* 300ms so far seems to produce a reliable result on AC and battery */
+-#define ASUS_USB0_PWR_EC0_CSEE_WAIT 1500
++/*
++ * The period required to wait after screen off/on/s2idle.check in MS.
++ * Time here greatly impacts the wake behaviour. Used in suspend/wake.
++ */
++#define ASUS_USB0_PWR_EC0_CSEE_WAIT 600
++#define ASUS_USB0_PWR_EC0_CSEE_OFF 0xB7
++#define ASUS_USB0_PWR_EC0_CSEE_ON 0xB8
+
+ static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
+
+ static int throttle_thermal_policy_write(struct asus_wmi *);
+
+-static const struct dmi_system_id asus_ally_mcu_quirk[] = {
++static const struct dmi_system_id asus_rog_ally_device[] = {
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_NAME, "RC71L"),
+@@ -274,9 +273,6 @@ struct asus_wmi {
+ u32 tablet_switch_dev_id;
+ bool tablet_switch_inverted;
+
+- /* The ROG Ally device requires the MCU USB device be disconnected before suspend */
+- bool ally_mcu_usb_switch;
+-
+ enum fan_type fan_type;
+ enum fan_type gpu_fan_type;
+ enum fan_type mid_fan_type;
+@@ -335,6 +331,16 @@ struct asus_wmi {
+ struct asus_wmi_driver *driver;
+ };
+
++/* Global to allow setting externally without requiring driver data */
++static enum asus_ally_mcu_hack use_ally_mcu_hack = ASUS_WMI_ALLY_MCU_HACK_INIT;
++
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
++static void asus_wmi_show_deprecated(void)
++{
++ pr_notice_once("Accessing attributes through /sys/bus/platform/asus_wmi is deprecated and will be removed in a future release. Please switch over to /sys/class/firmware_attributes.\n");
++}
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
++
+ /* WMI ************************************************************************/
+
+ static int asus_wmi_evaluate_method3(u32 method_id,
+@@ -385,7 +391,7 @@ int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval)
+ {
+ return asus_wmi_evaluate_method3(method_id, arg0, arg1, 0, retval);
+ }
+-EXPORT_SYMBOL_GPL(asus_wmi_evaluate_method);
++EXPORT_SYMBOL_NS_GPL(asus_wmi_evaluate_method, "ASUS_WMI");
+
+ static int asus_wmi_evaluate_method5(u32 method_id,
+ u32 arg0, u32 arg1, u32 arg2, u32 arg3, u32 arg4, u32 *retval)
+@@ -549,12 +555,51 @@ static int asus_wmi_get_devstate(struct asus_wmi *asus, u32 dev_id, u32 *retval)
+ return 0;
+ }
+
+-static int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param,
+- u32 *retval)
++
++/**
++ * asus_wmi_get_devstate_dsts() - Get the WMI function state.
++ * @dev_id: The WMI method ID to call.
++ * @retval: A pointer to where to store the value returned from WMI.
++ *
++ * On success the return value is 0, and the retval is a valid value returned
++ * by the successful WMI function call otherwise an error is returned if the
++ * call failed, or if the WMI method ID is unsupported.
++ */
++int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
++{
++ int err;
++
++ err = asus_wmi_evaluate_method(ASUS_WMI_METHODID_DSTS, dev_id, 0, retval);
++ if (err)
++ return err;
++
++ if (*retval == ASUS_WMI_UNSUPPORTED_METHOD)
++ return -ENODEV;
++
++ return 0;
++}
++EXPORT_SYMBOL_NS_GPL(asus_wmi_get_devstate_dsts, "ASUS_WMI");
++
++/**
++ * asus_wmi_set_devstate() - Set the WMI function state.
++ * @dev_id: The WMI function to call.
++ * @ctrl_param: The argument to be used for this WMI function.
++ * @retval: A pointer to where to store the value returned from WMI.
++ *
++ * The returned WMI function state if not checked here for error as
++ * asus_wmi_set_devstate() is not called unless first paired with a call to
++ * asus_wmi_get_devstate_dsts() to check that the WMI function is supported.
++ *
++ * On success the return value is 0, and the retval is a valid value returned
++ * by the successful WMI function call. An error value is returned only if the
++ * WMI function failed.
++ */
++int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
+ {
+ return asus_wmi_evaluate_method(ASUS_WMI_METHODID_DEVS, dev_id,
+ ctrl_param, retval);
+ }
++EXPORT_SYMBOL_NS_GPL(asus_wmi_set_devstate, "ASUS_WMI");
+
+ /* Helper for special devices with magic return codes */
+ static int asus_wmi_get_devstate_bits(struct asus_wmi *asus,
+@@ -687,6 +732,7 @@ static void asus_wmi_tablet_mode_get_state(struct asus_wmi *asus)
+ }
+
+ /* Charging mode, 1=Barrel, 2=USB ******************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t charge_mode_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -697,12 +743,16 @@ static ssize_t charge_mode_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", value & 0xff);
+ }
+
+ static DEVICE_ATTR_RO(charge_mode);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* dGPU ********************************************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t dgpu_disable_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -713,6 +763,8 @@ static ssize_t dgpu_disable_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+@@ -766,8 +818,10 @@ static ssize_t dgpu_disable_store(struct device *dev,
+ return count;
+ }
+ static DEVICE_ATTR_RW(dgpu_disable);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* eGPU ********************************************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t egpu_enable_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -778,6 +832,8 @@ static ssize_t egpu_enable_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+@@ -834,8 +890,10 @@ static ssize_t egpu_enable_store(struct device *dev,
+ return count;
+ }
+ static DEVICE_ATTR_RW(egpu_enable);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Is eGPU connected? *********************************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t egpu_connected_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -846,12 +904,16 @@ static ssize_t egpu_connected_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+ static DEVICE_ATTR_RO(egpu_connected);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* gpu mux switch *************************************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t gpu_mux_mode_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -862,6 +924,8 @@ static ssize_t gpu_mux_mode_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+@@ -920,6 +984,7 @@ static ssize_t gpu_mux_mode_store(struct device *dev,
+ return count;
+ }
+ static DEVICE_ATTR_RW(gpu_mux_mode);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* TUF Laptop Keyboard RGB Modes **********************************************/
+ static ssize_t kbd_rgb_mode_store(struct device *dev,
+@@ -1043,6 +1108,7 @@ static const struct attribute_group *kbd_rgb_mode_groups[] = {
+ };
+
+ /* Tunable: PPT: Intel=PL1, AMD=SPPT *****************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t ppt_pl2_sppt_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+@@ -1081,6 +1147,8 @@ static ssize_t ppt_pl2_sppt_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->ppt_pl2_sppt);
+ }
+ static DEVICE_ATTR_RW(ppt_pl2_sppt);
+@@ -1123,6 +1191,8 @@ static ssize_t ppt_pl1_spl_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->ppt_pl1_spl);
+ }
+ static DEVICE_ATTR_RW(ppt_pl1_spl);
+@@ -1166,6 +1236,8 @@ static ssize_t ppt_fppt_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->ppt_fppt);
+ }
+ static DEVICE_ATTR_RW(ppt_fppt);
+@@ -1209,6 +1281,8 @@ static ssize_t ppt_apu_sppt_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->ppt_apu_sppt);
+ }
+ static DEVICE_ATTR_RW(ppt_apu_sppt);
+@@ -1252,6 +1326,8 @@ static ssize_t ppt_platform_sppt_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->ppt_platform_sppt);
+ }
+ static DEVICE_ATTR_RW(ppt_platform_sppt);
+@@ -1295,6 +1371,8 @@ static ssize_t nv_dynamic_boost_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->nv_dynamic_boost);
+ }
+ static DEVICE_ATTR_RW(nv_dynamic_boost);
+@@ -1338,11 +1416,53 @@ static ssize_t nv_temp_target_show(struct device *dev,
+ {
+ struct asus_wmi *asus = dev_get_drvdata(dev);
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%u\n", asus->nv_temp_target);
+ }
+ static DEVICE_ATTR_RW(nv_temp_target);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Ally MCU Powersave ********************************************************/
++
++/*
++ * The HID driver needs to check MCU version and set this to false if the MCU FW
++ * version is >= the minimum requirements. New FW do not need the hacks.
++ */
++void set_ally_mcu_hack(enum asus_ally_mcu_hack status)
++{
++ use_ally_mcu_hack = status;
++ pr_debug("%s Ally MCU suspend quirk\n",
++ status == ASUS_WMI_ALLY_MCU_HACK_ENABLED ? "Enabled" : "Disabled");
++}
++EXPORT_SYMBOL_NS_GPL(set_ally_mcu_hack, "ASUS_WMI");
++
++/*
++ * mcu_powersave should be enabled always, as it is fixed in MCU FW versions:
++ * - v313 for Ally X
++ * - v319 for Ally 1
++ * The HID driver checks MCU versions and so should set this if requirements match
++ */
++void set_ally_mcu_powersave(bool enabled)
++{
++ int result, err;
++
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_MCU_POWERSAVE, enabled, &result);
++ if (err) {
++ pr_warn("Failed to set MCU powersave: %d\n", err);
++ return;
++ }
++ if (result > 1) {
++ pr_warn("Failed to set MCU powersave (result): 0x%x\n", result);
++ return;
++ }
++
++ pr_debug("%s MCU Powersave\n",
++ enabled ? "Enabled" : "Disabled");
++}
++EXPORT_SYMBOL_NS_GPL(set_ally_mcu_powersave, "ASUS_WMI");
++
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t mcu_powersave_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -1353,6 +1473,8 @@ static ssize_t mcu_powersave_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+@@ -1388,6 +1510,7 @@ static ssize_t mcu_powersave_store(struct device *dev,
+ return count;
+ }
+ static DEVICE_ATTR_RW(mcu_powersave);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Battery ********************************************************************/
+
+@@ -2261,6 +2384,7 @@ static int asus_wmi_rfkill_init(struct asus_wmi *asus)
+ }
+
+ /* Panel Overdrive ************************************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t panel_od_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -2271,6 +2395,8 @@ static ssize_t panel_od_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+@@ -2307,9 +2433,10 @@ static ssize_t panel_od_store(struct device *dev,
+ return count;
+ }
+ static DEVICE_ATTR_RW(panel_od);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Bootup sound ***************************************************************/
+-
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t boot_sound_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -2320,6 +2447,8 @@ static ssize_t boot_sound_show(struct device *dev,
+ if (result < 0)
+ return result;
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", result);
+ }
+
+@@ -2355,8 +2484,10 @@ static ssize_t boot_sound_store(struct device *dev,
+ return count;
+ }
+ static DEVICE_ATTR_RW(boot_sound);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Mini-LED mode **************************************************************/
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t mini_led_mode_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -2387,6 +2518,8 @@ static ssize_t mini_led_mode_show(struct device *dev,
+ }
+ }
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "%d\n", value);
+ }
+
+@@ -2457,10 +2590,13 @@ static ssize_t available_mini_led_mode_show(struct device *dev,
+ return sysfs_emit(buf, "0 1 2\n");
+ }
+
++ asus_wmi_show_deprecated();
++
+ return sysfs_emit(buf, "0\n");
+ }
+
+ static DEVICE_ATTR_RO(available_mini_led_mode);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Quirks *********************************************************************/
+
+@@ -3748,6 +3884,7 @@ static int throttle_thermal_policy_set_default(struct asus_wmi *asus)
+ return throttle_thermal_policy_write(asus);
+ }
+
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ static ssize_t throttle_thermal_policy_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+ {
+@@ -3791,6 +3928,7 @@ static ssize_t throttle_thermal_policy_store(struct device *dev,
+ * Throttle thermal policy: 0 - default, 1 - overboost, 2 - silent
+ */
+ static DEVICE_ATTR_RW(throttle_thermal_policy);
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ /* Platform profile ***********************************************************/
+ static int asus_wmi_platform_profile_get(struct device *dev,
+@@ -3810,7 +3948,7 @@ static int asus_wmi_platform_profile_get(struct device *dev,
+ *profile = PLATFORM_PROFILE_PERFORMANCE;
+ break;
+ case ASUS_THROTTLE_THERMAL_POLICY_SILENT:
+- *profile = PLATFORM_PROFILE_QUIET;
++ *profile = PLATFORM_PROFILE_LOW_POWER;
+ break;
+ default:
+ return -EINVAL;
+@@ -3834,7 +3972,7 @@ static int asus_wmi_platform_profile_set(struct device *dev,
+ case PLATFORM_PROFILE_BALANCED:
+ tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT;
+ break;
+- case PLATFORM_PROFILE_QUIET:
++ case PLATFORM_PROFILE_LOW_POWER:
+ tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT;
+ break;
+ default:
+@@ -3847,7 +3985,7 @@ static int asus_wmi_platform_profile_set(struct device *dev,
+
+ static int asus_wmi_platform_profile_probe(void *drvdata, unsigned long *choices)
+ {
+- set_bit(PLATFORM_PROFILE_QUIET, choices);
++ set_bit(PLATFORM_PROFILE_LOW_POWER, choices);
+ set_bit(PLATFORM_PROFILE_BALANCED, choices);
+ set_bit(PLATFORM_PROFILE_PERFORMANCE, choices);
+
+@@ -4100,43 +4238,37 @@ static int read_screenpad_brightness(struct backlight_device *bd)
+ return err;
+ /* The device brightness can only be read if powered, so return stored */
+ if (err == BACKLIGHT_POWER_OFF)
+- return asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
++ return bd->props.brightness;
+
+ err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &retval);
+ if (err < 0)
+ return err;
+
+- return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK) - ASUS_SCREENPAD_BRIGHT_MIN;
++ return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK);
+ }
+
+ static int update_screenpad_bl_status(struct backlight_device *bd)
+ {
+- struct asus_wmi *asus = bl_get_data(bd);
+- int power, err = 0;
++ int err = 0;
+ u32 ctrl_param;
+
+- power = read_screenpad_backlight_power(asus);
+- if (power < 0)
+- return power;
+-
+- if (bd->props.power != power) {
+- if (power != BACKLIGHT_POWER_ON) {
+- /* Only brightness > 0 can power it back on */
+- ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
+- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
+- ctrl_param, NULL);
+- } else {
+- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
+- }
+- } else if (power == BACKLIGHT_POWER_ON) {
+- /* Only set brightness if powered on or we get invalid/unsync state */
+- ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
++ ctrl_param = bd->props.brightness;
++ if (ctrl_param >= 0 && bd->props.power) {
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 1,
++ NULL);
++ if (err < 0)
++ return err;
++ ctrl_param = bd->props.brightness;
+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
++ if (err < 0)
++ return err;
+ }
+
+- /* Ensure brightness is stored to turn back on with */
+- if (err == 0)
+- asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
++ if (!bd->props.power) {
++ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
++ if (err < 0)
++ return err;
++ }
+
+ return err;
+ }
+@@ -4154,22 +4286,19 @@ static int asus_screenpad_init(struct asus_wmi *asus)
+ int err, power;
+ int brightness = 0;
+
+- power = read_screenpad_backlight_power(asus);
++ power = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_SCREENPAD_POWER);
+ if (power < 0)
+ return power;
+
+- if (power != BACKLIGHT_POWER_OFF) {
++ if (power) {
+ err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &brightness);
+ if (err < 0)
+ return err;
+ }
+- /* default to an acceptable min brightness on boot if too low */
+- if (brightness < ASUS_SCREENPAD_BRIGHT_MIN)
+- brightness = ASUS_SCREENPAD_BRIGHT_DEFAULT;
+
+ memset(&props, 0, sizeof(struct backlight_properties));
+ props.type = BACKLIGHT_RAW; /* ensure this bd is last to be picked */
+- props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX - ASUS_SCREENPAD_BRIGHT_MIN;
++ props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX;
+ bd = backlight_device_register("asus_screenpad",
+ &asus->platform_device->dev, asus,
+ &asus_screenpad_bl_ops, &props);
+@@ -4180,7 +4309,7 @@ static int asus_screenpad_init(struct asus_wmi *asus)
+
+ asus->screenpad_backlight_device = bd;
+ asus->driver->screenpad_brightness = brightness;
+- bd->props.brightness = brightness - ASUS_SCREENPAD_BRIGHT_MIN;
++ bd->props.brightness = brightness;
+ bd->props.power = power;
+ backlight_update_status(bd);
+
+@@ -4392,27 +4521,29 @@ static struct attribute *platform_attributes[] = {
+ &dev_attr_camera.attr,
+ &dev_attr_cardr.attr,
+ &dev_attr_touchpad.attr,
+- &dev_attr_charge_mode.attr,
+- &dev_attr_egpu_enable.attr,
+- &dev_attr_egpu_connected.attr,
+- &dev_attr_dgpu_disable.attr,
+- &dev_attr_gpu_mux_mode.attr,
+ &dev_attr_lid_resume.attr,
+ &dev_attr_als_enable.attr,
+ &dev_attr_fan_boost_mode.attr,
+- &dev_attr_throttle_thermal_policy.attr,
+- &dev_attr_ppt_pl2_sppt.attr,
+- &dev_attr_ppt_pl1_spl.attr,
+- &dev_attr_ppt_fppt.attr,
+- &dev_attr_ppt_apu_sppt.attr,
+- &dev_attr_ppt_platform_sppt.attr,
+- &dev_attr_nv_dynamic_boost.attr,
+- &dev_attr_nv_temp_target.attr,
+- &dev_attr_mcu_powersave.attr,
+- &dev_attr_boot_sound.attr,
+- &dev_attr_panel_od.attr,
+- &dev_attr_mini_led_mode.attr,
+- &dev_attr_available_mini_led_mode.attr,
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
++ &dev_attr_charge_mode.attr,
++ &dev_attr_egpu_enable.attr,
++ &dev_attr_egpu_connected.attr,
++ &dev_attr_dgpu_disable.attr,
++ &dev_attr_gpu_mux_mode.attr,
++ &dev_attr_ppt_pl2_sppt.attr,
++ &dev_attr_ppt_pl1_spl.attr,
++ &dev_attr_ppt_fppt.attr,
++ &dev_attr_ppt_apu_sppt.attr,
++ &dev_attr_ppt_platform_sppt.attr,
++ &dev_attr_nv_dynamic_boost.attr,
++ &dev_attr_nv_temp_target.attr,
++ &dev_attr_mcu_powersave.attr,
++ &dev_attr_boot_sound.attr,
++ &dev_attr_panel_od.attr,
++ &dev_attr_mini_led_mode.attr,
++ &dev_attr_available_mini_led_mode.attr,
++ &dev_attr_throttle_thermal_policy.attr,
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+ NULL
+ };
+
+@@ -4434,7 +4565,11 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
+ devid = ASUS_WMI_DEVID_LID_RESUME;
+ else if (attr == &dev_attr_als_enable.attr)
+ devid = ASUS_WMI_DEVID_ALS_ENABLE;
+- else if (attr == &dev_attr_charge_mode.attr)
++ else if (attr == &dev_attr_fan_boost_mode.attr)
++ ok = asus->fan_boost_mode_available;
++
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
++ if (attr == &dev_attr_charge_mode.attr)
+ devid = ASUS_WMI_DEVID_CHARGE_MODE;
+ else if (attr == &dev_attr_egpu_enable.attr)
+ ok = asus->egpu_enable_available;
+@@ -4472,6 +4607,7 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
+ ok = asus->mini_led_dev_id != 0;
+ else if (attr == &dev_attr_available_mini_led_mode.attr)
+ ok = asus->mini_led_dev_id != 0;
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ if (devid != -1) {
+ ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0);
+@@ -4711,7 +4847,23 @@ static int asus_wmi_add(struct platform_device *pdev)
+ if (err)
+ goto fail_platform;
+
++ if (use_ally_mcu_hack == ASUS_WMI_ALLY_MCU_HACK_INIT) {
++ if (acpi_has_method(NULL, ASUS_USB0_PWR_EC0_CSEE)
++ && dmi_check_system(asus_rog_ally_device))
++ use_ally_mcu_hack = ASUS_WMI_ALLY_MCU_HACK_ENABLED;
++ if (dmi_match(DMI_BOARD_NAME, "RC71")) {
++ /*
++ * These steps ensure the device is in a valid good state, this is
++ * especially important for the Ally 1 after a reboot.
++ */
++ acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE,
++ ASUS_USB0_PWR_EC0_CSEE_ON);
++ msleep(ASUS_USB0_PWR_EC0_CSEE_WAIT);
++ }
++ }
++
+ /* ensure defaults for tunables */
++#if IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS)
+ asus->ppt_pl2_sppt = 5;
+ asus->ppt_pl1_spl = 5;
+ asus->ppt_apu_sppt = 5;
+@@ -4723,8 +4875,6 @@ static int asus_wmi_add(struct platform_device *pdev)
+ asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
+ asus->dgpu_disable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_DGPU);
+ asus->kbd_rgb_state_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_STATE);
+- asus->ally_mcu_usb_switch = acpi_has_method(NULL, ASUS_USB0_PWR_EC0_CSEE)
+- && dmi_check_system(asus_ally_mcu_quirk);
+
+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_MINI_LED_MODE))
+ asus->mini_led_dev_id = ASUS_WMI_DEVID_MINI_LED_MODE;
+@@ -4735,17 +4885,18 @@ static int asus_wmi_add(struct platform_device *pdev)
+ asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX;
+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_GPU_MUX_VIVO))
+ asus->gpu_mux_dev = ASUS_WMI_DEVID_GPU_MUX_VIVO;
+-
+- if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE))
+- asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE;
+- else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE2))
+- asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE2;
++#endif /* IS_ENABLED(CONFIG_ASUS_WMI_DEPRECATED_ATTRS) */
+
+ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY))
+ asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY;
+ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO))
+ asus->throttle_thermal_policy_dev = ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO;
+
++ if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE))
++ asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE;
++ else if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE2))
++ asus->kbd_rgb_dev = ASUS_WMI_DEVID_TUF_RGB_MODE2;
++
+ err = fan_boost_mode_check_present(asus);
+ if (err)
+ goto fail_fan_boost_mode;
+@@ -4911,34 +5062,6 @@ static int asus_hotk_resume(struct device *device)
+ return 0;
+ }
+
+-static int asus_hotk_resume_early(struct device *device)
+-{
+- struct asus_wmi *asus = dev_get_drvdata(device);
+-
+- if (asus->ally_mcu_usb_switch) {
+- /* sleep required to prevent USB0 being yanked then reappearing rapidly */
+- if (ACPI_FAILURE(acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE, 0xB8)))
+- dev_err(device, "ROG Ally MCU failed to connect USB dev\n");
+- else
+- msleep(ASUS_USB0_PWR_EC0_CSEE_WAIT);
+- }
+- return 0;
+-}
+-
+-static int asus_hotk_prepare(struct device *device)
+-{
+- struct asus_wmi *asus = dev_get_drvdata(device);
+-
+- if (asus->ally_mcu_usb_switch) {
+- /* sleep required to ensure USB0 is disabled before sleep continues */
+- if (ACPI_FAILURE(acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE, 0xB7)))
+- dev_err(device, "ROG Ally MCU failed to disconnect USB dev\n");
+- else
+- msleep(ASUS_USB0_PWR_EC0_CSEE_WAIT);
+- }
+- return 0;
+-}
+-
+ static int asus_hotk_restore(struct device *device)
+ {
+ struct asus_wmi *asus = dev_get_drvdata(device);
+@@ -4979,11 +5102,34 @@ static int asus_hotk_restore(struct device *device)
+ return 0;
+ }
+
++static void asus_ally_s2idle_restore(void)
++{
++ if (use_ally_mcu_hack == ASUS_WMI_ALLY_MCU_HACK_ENABLED) {
++ acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE,
++ ASUS_USB0_PWR_EC0_CSEE_ON);
++ msleep(ASUS_USB0_PWR_EC0_CSEE_WAIT);
++ }
++}
++
++static int asus_hotk_prepare(struct device *device)
++{
++ if (use_ally_mcu_hack == ASUS_WMI_ALLY_MCU_HACK_ENABLED) {
++ acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE,
++ ASUS_USB0_PWR_EC0_CSEE_OFF);
++ msleep(ASUS_USB0_PWR_EC0_CSEE_WAIT);
++ }
++ return 0;
++}
++
++/* Use only for Ally devices due to the wake_on_ac */
++static struct acpi_s2idle_dev_ops asus_ally_s2idle_dev_ops = {
++ .restore = asus_ally_s2idle_restore,
++};
++
+ static const struct dev_pm_ops asus_pm_ops = {
+ .thaw = asus_hotk_thaw,
+ .restore = asus_hotk_restore,
+ .resume = asus_hotk_resume,
+- .resume_early = asus_hotk_resume_early,
+ .prepare = asus_hotk_prepare,
+ };
+
+@@ -5011,6 +5157,10 @@ static int asus_wmi_probe(struct platform_device *pdev)
+ return ret;
+ }
+
++ ret = acpi_register_lps0_dev(&asus_ally_s2idle_dev_ops);
++ if (ret)
++ pr_warn("failed to register LPS0 sleep handler in asus-wmi\n");
++
+ return asus_wmi_add(pdev);
+ }
+
+@@ -5043,6 +5193,7 @@ EXPORT_SYMBOL_GPL(asus_wmi_register_driver);
+
+ void asus_wmi_unregister_driver(struct asus_wmi_driver *driver)
+ {
++ acpi_unregister_lps0_dev(&asus_ally_s2idle_dev_ops);
+ platform_device_unregister(driver->platform_device);
+ platform_driver_unregister(&driver->platform_driver);
+ used = false;
+diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
+index 783e2a336861..78261ea49995 100644
+--- a/include/linux/platform_data/x86/asus-wmi.h
++++ b/include/linux/platform_data/x86/asus-wmi.h
+@@ -6,6 +6,9 @@
+ #include
+ #include
+
++#define ASUS_WMI_MGMT_GUID "97845ED0-4E6D-11DE-8A39-0800200C9A66"
++#define ASUS_ACPI_UID_ASUSWMI "ASUSWMI"
++
+ /* WMI Methods */
+ #define ASUS_WMI_METHODID_SPEC 0x43455053 /* BIOS SPECification */
+ #define ASUS_WMI_METHODID_SFBD 0x44424653 /* Set First Boot Device */
+@@ -73,12 +76,14 @@
+ #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
+
+ /* Misc */
++#define ASUS_WMI_DEVID_PANEL_HD 0x0005001C
+ #define ASUS_WMI_DEVID_PANEL_OD 0x00050019
+ #define ASUS_WMI_DEVID_CAMERA 0x00060013
+ #define ASUS_WMI_DEVID_LID_FLIP 0x00060062
+ #define ASUS_WMI_DEVID_LID_FLIP_ROG 0x00060077
+ #define ASUS_WMI_DEVID_MINI_LED_MODE 0x0005001E
+ #define ASUS_WMI_DEVID_MINI_LED_MODE2 0x0005002E
++#define ASUS_WMI_DEVID_SCREEN_AUTO_BRIGHTNESS 0x0005002A
+
+ /* Storage */
+ #define ASUS_WMI_DEVID_CARDREADER 0x00080013
+@@ -133,6 +138,16 @@
+ /* dgpu on/off */
+ #define ASUS_WMI_DEVID_DGPU 0x00090020
+
++/* Intel E-core and P-core configuration in a format 0x0[E]0[P] */
++#define ASUS_WMI_DEVID_CORES 0x001200D2
++ /* Maximum Intel E-core and P-core availability */
++#define ASUS_WMI_DEVID_CORES_MAX 0x001200D3
++
++#define ASUS_WMI_DEVID_APU_MEM 0x000600C1
++
++#define ASUS_WMI_DEVID_DGPU_BASE_TGP 0x00120099
++#define ASUS_WMI_DEVID_DGPU_SET_TGP 0x00120098
++
+ /* gpu mux switch, 0 = dGPU, 1 = Optimus */
+ #define ASUS_WMI_DEVID_GPU_MUX 0x00090016
+ #define ASUS_WMI_DEVID_GPU_MUX_VIVO 0x00090026
+@@ -157,9 +172,37 @@
+ #define ASUS_WMI_DSTS_MAX_BRIGTH_MASK 0x0000FF00
+ #define ASUS_WMI_DSTS_LIGHTBAR_MASK 0x0000000F
+
++enum asus_ally_mcu_hack {
++ ASUS_WMI_ALLY_MCU_HACK_INIT,
++ ASUS_WMI_ALLY_MCU_HACK_ENABLED,
++ ASUS_WMI_ALLY_MCU_HACK_DISABLED,
++};
++
+ #if IS_REACHABLE(CONFIG_ASUS_WMI)
++void set_ally_mcu_hack(enum asus_ally_mcu_hack status);
++void set_ally_mcu_powersave(bool enabled);
++int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval);
++int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval);
+ int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1, u32 *retval);
+ #else
++static inline void set_ally_mcu_hack(enum asus_ally_mcu_hack status)
++{
++}
++static inline void set_ally_mcu_powersave(bool enabled)
++{
++}
++static inline int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
++{
++ return -ENODEV;
++}
++static inline int asus_wmi_get_devstate_dsts(u32 dev_id, u32 *retval)
++{
++ return -ENODEV;
++}
++static inline int asus_wmi_set_devstate(u32 dev_id, u32 ctrl_param, u32 *retval)
++{
++ return -ENODEV;
++}
+ static inline int asus_wmi_evaluate_method(u32 method_id, u32 arg0, u32 arg1,
+ u32 *retval)
+ {
+--
+2.49.0.634.g8613c2bb6c
+
diff --git a/board/recalbox/kernel_patches/5.17/linux-wiimote-abs-not-hat.patch b/board/recalbox/x86/kernel_patches/linux-wiimote-abs-not-hat.patch
similarity index 100%
rename from board/recalbox/kernel_patches/5.17/linux-wiimote-abs-not-hat.patch
rename to board/recalbox/x86/kernel_patches/linux-wiimote-abs-not-hat.patch
diff --git a/configs/recalbox-odroidgo2_defconfig b/configs/recalbox-odroidgo2_defconfig
index 64725a7a7c352b8e9ab50c4b79f977758ef493e0..a639a268581c44b8897ee22fc6ada3095432ddb4 100644
--- a/configs/recalbox-odroidgo2_defconfig
+++ b/configs/recalbox-odroidgo2_defconfig
@@ -33,7 +33,7 @@ BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_GIT=y
BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/AmberELEC/kernel_rg351"
BR2_LINUX_KERNEL_CUSTOM_REPO_VERSION="b6ea5ceb1d833373b8a2a098d0f4f1415fd1cded"
-BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/odroidgo2/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)"
+BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/odroidgo2/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)"
BR2_LINUX_KERNEL_DEFCONFIG="odroidgoa"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/odroidgo2/linux-defconfig-fragment.config"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
@@ -300,7 +300,7 @@ BR2_PACKAGE_LIBRETRO_XMIL=y
BR2_PACKAGE_LIBRETRO_XRICK=y
BR2_PACKAGE_LIBRETRO_YABASANSHIRO=y
BR2_PACKAGE_LIBRETRO_WASM4=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_JSTEST2=y
BR2_PACKAGE_WSD=y
BR2_PACKAGE_LIBRETRO_CHEATS=y
diff --git a/configs/recalbox-rg353x_defconfig b/configs/recalbox-rg353x_defconfig
index 691a04d3265b8e9e5c1aac5d0c42879d261c31d1..25d1ac071e27d4660d0a66f5cc2885b3ae24783e 100644
--- a/configs/recalbox-rg353x_defconfig
+++ b/configs/recalbox-rg353x_defconfig
@@ -71,7 +71,7 @@ BR2_PACKAGE_NTFS_3G=y
BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_SDL_IMAGE_XPM=y
BR2_PACKAGE_SDL_MIXER=y
BR2_PACKAGE_SDL_NET=y
diff --git a/configs/recalbox-rpi3_defconfig b/configs/recalbox-rpi3_defconfig
index 48a345e0c5bb1418adbf7e515561b136057e7bef..fb273e7e81d7b2125aef11dbaf4672645f71cef3 100644
--- a/configs/recalbox-rpi3_defconfig
+++ b/configs/recalbox-rpi3_defconfig
@@ -31,7 +31,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/copy-
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16)/linux-3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16.tar.gz"
-BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
+BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
BR2_LINUX_KERNEL_DEFCONFIG="bcm2709"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel-6.12-defconfig-fragment.config"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
@@ -108,7 +108,7 @@ BR2_PACKAGE_NTFS_3G=y
BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_SDL_IMAGE_XPM=y
BR2_PACKAGE_SDL_MIXER=y
BR2_PACKAGE_SDL_NET=y
diff --git a/configs/recalbox-rpi4_64_defconfig b/configs/recalbox-rpi4_64_defconfig
index 40ddd8f25575cee464feaea8a7812210e74f0b76..585fc4acc627103e267dd2c5dbc989487803d8e5 100644
--- a/configs/recalbox-rpi4_64_defconfig
+++ b/configs/recalbox-rpi4_64_defconfig
@@ -30,7 +30,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/copy-
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16)/linux-3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16.tar.gz"
-BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
+BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
BR2_LINUX_KERNEL_DEFCONFIG="bcm2711"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel-6.12-defconfig-fragment.config"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
@@ -106,7 +106,7 @@ BR2_PACKAGE_NTFS_3G=y
BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_SDL_IMAGE_XPM=y
BR2_PACKAGE_SDL_MIXER=y
BR2_PACKAGE_SDL_NET=y
diff --git a/configs/recalbox-rpi5_64_defconfig b/configs/recalbox-rpi5_64_defconfig
index c6fe2646be9fa2d5d9e81dc4c290107840b13876..c2bd06efd29bddd7f15251dabbb85f7e843d3d67 100644
--- a/configs/recalbox-rpi5_64_defconfig
+++ b/configs/recalbox-rpi5_64_defconfig
@@ -31,7 +31,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/copy-
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16)/linux-3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16.tar.gz"
-BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
+BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
BR2_LINUX_KERNEL_DEFCONFIG="bcm2712"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel-6.12-defconfig-fragment.config"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
@@ -107,7 +107,7 @@ BR2_PACKAGE_NTFS_3G=y
BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_SDL_IMAGE_XPM=y
BR2_PACKAGE_SDL_MIXER=y
BR2_PACKAGE_SDL_NET=y
diff --git a/configs/recalbox-rpizero2_defconfig b/configs/recalbox-rpizero2_defconfig
index e2528ff92a3ec84019ba00a39008b40259e84d40..879080793d510dc02cd9cc4a6bbde6154bd035c1 100644
--- a/configs/recalbox-rpizero2_defconfig
+++ b/configs/recalbox-rpizero2_defconfig
@@ -31,7 +31,7 @@ BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/copy-
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL=y
BR2_LINUX_KERNEL_CUSTOM_TARBALL_LOCATION="$(call github,raspberrypi,linux,3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16)/linux-3dd2c2c507c271d411fab2e82a2b3b7e0b6d3f16.tar.gz"
-BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
+BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/6.12 $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel_patches/6.12"
BR2_LINUX_KERNEL_DEFCONFIG="bcm2709"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/rpi/kernel-6.12-defconfig-fragment.config"
BR2_LINUX_KERNEL_DTS_SUPPORT=y
@@ -108,7 +108,7 @@ BR2_PACKAGE_NTFS_3G=y
BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_SDL_IMAGE_XPM=y
BR2_PACKAGE_SDL_MIXER=y
BR2_PACKAGE_SDL_NET=y
diff --git a/configs/recalbox-x86_64_defconfig b/configs/recalbox-x86_64_defconfig
index d99a53dc4498b9c1560ab9a27cd06df5ad9c515d..80bb775f0cf49b4852eb70b360e55132d06546e2 100644
--- a/configs/recalbox-x86_64_defconfig
+++ b/configs/recalbox-x86_64_defconfig
@@ -26,9 +26,11 @@ BR2_ROOTFS_OVERLAY="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/fsoverlay $(BR2
BR2_ROOTFS_POST_BUILD_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/recalbox-patch-target.sh"
BR2_ROOTFS_POST_IMAGE_SCRIPT="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/copy-recalbox-archives.sh"
BR2_LINUX_KERNEL=y
-BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/x86/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST)"
+BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.14.4"
+BR2_LINUX_KERNEL_PATCH="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/x86/kernel_patches/$(BR2_TOOLCHAIN_HEADERS_AT_LEAST) $(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/x86/kernel_patches"
BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
-BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/x86/kernel-x86_64-6.1-defconfig.config"
+BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/x86/kernel-defconfig.config"
BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y
BR2_PACKAGE_BUSYBOX_CONFIG_FRAGMENT_FILES="$(BR2_EXTERNAL_RECALBOX_PATH)/board/recalbox/busybox.custom.config"
BR2_PACKAGE_ALSA_UTILS=y
@@ -104,7 +106,7 @@ BR2_PACKAGE_NTFS_3G_NTFSPROGS=y
BR2_PACKAGE_SPIRV_TOOLS=y
BR2_PACKAGE_FBDUMP=y
BR2_PACKAGE_FBGRAB=y
-BR2_PACKAGE_FBV_RECALBOX=y
+BR2_PACKAGE_RECALBOX-FBV=y
BR2_PACKAGE_SDL_IMAGE_XPM=y
BR2_PACKAGE_SDL_MIXER=y
BR2_PACKAGE_SDL_NET=y
@@ -396,10 +398,6 @@ BR2_PACKAGE_UTIL_LINUX_LOSETUP=y
BR2_PACKAGE_MPV=y
BR2_PACKAGE_KERNELFIRMWARES=y
BR2_PACKAGE_RTL8189FS=y
-BR2_PACKAGE_RTL8812AU=y
-BR2_PACKAGE_RTL8821CU=y
-BR2_PACKAGE_RTL88X2BU=y
-BR2_PACKAGE_RTW89=y
BR2_PACKAGE_JOYCOND=y
BR2_PACKAGE_FLUIDSYNTH_PULSEAUDIO=y
BR2_PACKAGE_KODI_PULSEAUDIO=y
@@ -422,3 +420,4 @@ BR2_PACKAGE_KODI_PLUGIN_VIDEO_ORANGE=y
BR2_PACKAGE_LIBRETRO_GEARGRAFX=y
BR2_PACKAGE_LIBRETRO_HOLANI=y
BR2_PACKAGE_TAITO_PT=y
+BR2_PACKAGE_STEAMDECK_SUPPORT=y
diff --git a/custom/list.hash b/custom/list.hash
index 41a6fae8274423c1f3ec9c852ad178267b01bdd7..b799e6726d06da74d5f3317fe28085143b5e2a1f 100644
--- a/custom/list.hash
+++ b/custom/list.hash
@@ -18,8 +18,6 @@
4c323a0fc6461ab2af66e1282fe4585a linux/Config.in
cb5b6a8c509a930d8e9815f97855613b linux/linux.mk
e18acb2d94df50bf67ca15ebc33ef590 package/Config.in
-5f30589736a71c2887e7b61aaa21ed40 package/alsa-plugins/Config.in
-6e5035da8b70ae310585a1d61a412bd6 package/alsa-plugins/alsa-plugins.mk
c17b2548c35cffbd487ade70e272015c package/bcm2835/Config.in
5a9deb88e7e597a746ee333e858caaca package/binutils/binutils.mk
62255bb520c60a3864a16c6e9fb3940b package/bluez5_utils/bluez5_utils.hash
diff --git a/custom/package/alsa-plugins/Config.in b/custom/package/alsa-plugins/Config.in
deleted file mode 100644
index 0897e9c1bf7d441918a8c9710b9ad04b9bbc0059..0000000000000000000000000000000000000000
--- a/custom/package/alsa-plugins/Config.in
+++ /dev/null
@@ -1,9 +0,0 @@
-config BR2_PACKAGE_ALSA_PLUGINS
- bool "alsa-plugins"
- depends on BR2_PACKAGE_ALSA_LIB
- depends on BR2_PACKAGE_PULSEAUDIO
- select BR2_PACKAGE_ALSA_LIB_HWDEP
- help
- Advanced Linux Sound Architecture Plugins
-
- http://www.alsa-project.org/
diff --git a/custom/package/alsa-plugins/Config.in.patch b/custom/package/alsa-plugins/Config.in.patch
deleted file mode 100644
index dea96da4be13293b04558a1367242c9217fef01e..0000000000000000000000000000000000000000
--- a/custom/package/alsa-plugins/Config.in.patch
+++ /dev/null
@@ -1,12 +0,0 @@
-diff --git a/package/alsa-plugins/Config.in b/package/alsa-plugins/Config.in
-index ee0fb4c1d5..0897e9c1bf 100644
---- a/package/alsa-plugins/Config.in
-+++ b/package/alsa-plugins/Config.in
-@@ -1,6 +1,7 @@
- config BR2_PACKAGE_ALSA_PLUGINS
- bool "alsa-plugins"
- depends on BR2_PACKAGE_ALSA_LIB
-+ depends on BR2_PACKAGE_PULSEAUDIO
- select BR2_PACKAGE_ALSA_LIB_HWDEP
- help
- Advanced Linux Sound Architecture Plugins
diff --git a/custom/package/alsa-plugins/alsa-plugins.mk b/custom/package/alsa-plugins/alsa-plugins.mk
deleted file mode 100644
index 06c0269764f5a02b0d7c3da5ae9282db1353ca50..0000000000000000000000000000000000000000
--- a/custom/package/alsa-plugins/alsa-plugins.mk
+++ /dev/null
@@ -1,41 +0,0 @@
-################################################################################
-#
-# alsa-plugins
-#
-################################################################################
-
-ALSA_PLUGINS_VERSION = 1.2.7.1
-ALSA_PLUGINS_SOURCE = alsa-plugins-$(ALSA_PLUGINS_VERSION).tar.bz2
-ALSA_PLUGINS_SITE = https://www.alsa-project.org/files/pub/plugins
-ALSA_PLUGINS_LICENSE = LGPL-2.1+
-ALSA_PLUGINS_LICENSE_FILES = COPYING
-ALSA_PLUGINS_DEPENDENCIES = host-pkgconf alsa-lib pulseaudio
-
-ALSA_PLUGINS_CONF_OPTS = \
- --disable-jack \
- --disable-usbstream \
- --disable-libav \
- --disable-maemo-plugin \
- --disable-maemo-resource-manager \
- --with-speex=no
-
-ifeq ($(BR2_PACKAGE_ALSA_UTILS),y)
-ALSA_PLUGINS_DEPENDENCIES += alsa-utils
-endif
-
-ifeq ($(BR2_PACKAGE_LIBSAMPLERATE),y)
-ALSA_PLUGINS_CONF_OPTS += --enable-samplerate
-ALSA_PLUGINS_DEPENDENCIES += libsamplerate
-ALSA_PLUGINS_LICENSE += , GPL-2.0+ (samplerate plugin)
-ALSA_PLUGINS_LICENSE_FILES += COPYING.GPL
-else
-ALSA_PLUGINS_CONF_OPTS += --disable-samplerate
-endif
-
-define ALSA_PLUGINS_ADD_DEFAULT_CONF
- mv $(TARGET_DIR)/etc/alsa/conf.d/99-pulseaudio-default.conf.example \
- $(TARGET_DIR)/etc/alsa/conf.d/99-pulseaudio-default.conf
-endef
-
-ALSA_PLUGINS_POST_INSTALL_TARGET_HOOKS += ALSA_PLUGINS_ADD_DEFAULT_CONF
-$(eval $(autotools-package))
diff --git a/custom/package/alsa-plugins/alsa-plugins.mk.patch b/custom/package/alsa-plugins/alsa-plugins.mk.patch
deleted file mode 100644
index 5fcc9a0f7ba5a7a50502549fab48ac7fd0343f32..0000000000000000000000000000000000000000
--- a/custom/package/alsa-plugins/alsa-plugins.mk.patch
+++ /dev/null
@@ -1,29 +0,0 @@
-diff --git a/package/alsa-plugins/alsa-plugins.mk b/package/alsa-plugins/alsa-plugins.mk
-index d23a81c5ee..06c0269764 100644
---- a/package/alsa-plugins/alsa-plugins.mk
-+++ b/package/alsa-plugins/alsa-plugins.mk
-@@ -9,12 +9,11 @@ ALSA_PLUGINS_SOURCE = alsa-plugins-$(ALSA_PLUGINS_VERSION).tar.bz2
- ALSA_PLUGINS_SITE = https://www.alsa-project.org/files/pub/plugins
- ALSA_PLUGINS_LICENSE = LGPL-2.1+
- ALSA_PLUGINS_LICENSE_FILES = COPYING
--ALSA_PLUGINS_DEPENDENCIES = host-pkgconf alsa-lib
-+ALSA_PLUGINS_DEPENDENCIES = host-pkgconf alsa-lib pulseaudio
-
- ALSA_PLUGINS_CONF_OPTS = \
- --disable-jack \
- --disable-usbstream \
-- --disable-pulseaudio \
- --disable-libav \
- --disable-maemo-plugin \
- --disable-maemo-resource-manager \
-@@ -33,4 +32,10 @@ else
- ALSA_PLUGINS_CONF_OPTS += --disable-samplerate
- endif
-
-+define ALSA_PLUGINS_ADD_DEFAULT_CONF
-+ mv $(TARGET_DIR)/etc/alsa/conf.d/99-pulseaudio-default.conf.example \
-+ $(TARGET_DIR)/etc/alsa/conf.d/99-pulseaudio-default.conf
-+endef
-+
-+ALSA_PLUGINS_POST_INSTALL_TARGET_HOOKS += ALSA_PLUGINS_ADD_DEFAULT_CONF
- $(eval $(autotools-package))
diff --git a/external.mk b/external.mk
index 86fe264e9cdd35c14293ecbc2af8ba0c6f603e84..25802c5bfc3facda30299b2576908b2b1da74b48 100644
--- a/external.mk
+++ b/external.mk
@@ -1,5 +1,8 @@
include $(BR2_EXTERNAL_RECALBOX_PATH)/package/download-packages/download-packages.mk
include $(BR2_EXTERNAL_RECALBOX_PATH)/package/compiler-commons/compiler-commons.mk
include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/*/*.mk))
-include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/libraries/*/*.mk))
+include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/audio/*/*.mk))
+include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/firmware/*/*.mk))
include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/hardware/*/*.mk))
+include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/libraries/*/*.mk))
+include $(sort $(wildcard $(BR2_EXTERNAL_RECALBOX_PATH)/package/utilities/*/*.mk))
diff --git a/package/audio/alsa-ucm-conf/Config.in b/package/audio/alsa-ucm-conf/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..ee6a946fef7d552715c3774e469887e66efc91bb
--- /dev/null
+++ b/package/audio/alsa-ucm-conf/Config.in
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_ALSA_UCM_CONF
+ bool "Alsa UCM Conf"
+ help
+ ALSA Use Case Manager configuration
+
+ https://github.com/alsa-project/alsa-ucm-conf
diff --git a/package/audio/alsa-ucm-conf/alsa-ucm-conf.mk b/package/audio/alsa-ucm-conf/alsa-ucm-conf.mk
new file mode 100644
index 0000000000000000000000000000000000000000..47f9735203a10551e35c2ce7f1c804446c4c94fd
--- /dev/null
+++ b/package/audio/alsa-ucm-conf/alsa-ucm-conf.mk
@@ -0,0 +1,18 @@
+################################################################################
+#
+# ALSA_UCM_CONF
+#
+################################################################################
+
+ALSA_UCM_CONF_VERSION = v1.2.13
+ALSA_UCM_CONF_SITE = $(call github,alsa-project,alsa-ucm-conf,$(ALSA_UCM_CONF_VERSION))
+ALSA_UCM_CONF_LICENSE = BSD-3
+ALSA_UCM_CONF_LICENSE_FILES = LICENSE
+
+define ALSA_UCM_CONF_INSTALL_TARGET_CMDS
+ $(INSTALL) -d $(TARGET_DIR)/usr/share/alsa
+ rsync -avP $(@D)/ucm $(TARGET_DIR)/usr/share/alsa/
+ rsync -avP $(@D)/ucm2 $(TARGET_DIR)/usr/share/alsa/
+endef
+
+$(eval $(generic-package))
diff --git a/package/dolphin-emu/5000-remove-hidapi-for-steamdeck.patch b/package/dolphin-emu/5000-remove-hidapi-for-steamdeck.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6640e431b286f9a5b75253db1cafc0e4b21eb4ae
--- /dev/null
+++ b/package/dolphin-emu/5000-remove-hidapi-for-steamdeck.patch
@@ -0,0 +1,12 @@
+--- dolphin-emu-1b85da9b85e72a555a08138aafcd2d75210ae078/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h 2025-10-01 23:48:23.604683789 +0200
++++ dolphin-emu-1b85da9b85e72a555a08138aafcd2d75210ae078/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h 2025-10-01 23:48:33.940155659 +0200
+@@ -34,9 +34,6 @@
+ #if defined(HAVE_SDL2)
+ #define CIFACE_USE_SDL
+ #endif
+-#if defined(HAVE_HIDAPI)
+-#define CIFACE_USE_STEAMDECK
+-#endif
+
+ namespace ciface
+ {
diff --git a/package/fbv-recalbox/fbv-recalbox.mk b/package/fbv-recalbox/fbv-recalbox.mk
deleted file mode 100644
index 81be61d6eca08171d5ef4e0e32a23c9d13176ff2..0000000000000000000000000000000000000000
--- a/package/fbv-recalbox/fbv-recalbox.mk
+++ /dev/null
@@ -1,31 +0,0 @@
-################################################################################
-#
-# fbv - Recalbox version
-#
-################################################################################
-
-FBV_RECALBOX_VERSION = 6157e3d4c8be5944688c4c2c2392a25c42f98f44
-FBV_RECALBOX_SITE = https://gitlab.com/Bkg2k/fbv.git
-FBV_RECALBOX_SITE_METHOD = git
-FBV_RECALBOX_LICENSE = GPL-2.0
-FBV_RECALBOX_LICENSE_FILES = COPYING
-FBV_RECALBOX_DEPENDENCIES = libpng jpeg giflib
-
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_C_ARCHIVE_CREATE=" qcs "
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_C_ARCHIVE_FINISH=true
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_CXX_ARCHIVE_CREATE=" qcs "
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_CXX_ARCHIVE_FINISH=true
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_AR="$(TARGET_CC)-ar"
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_C_COMPILER="$(TARGET_CC)"
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_CXX_COMPILER="$(TARGET_CXX)"
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_LINKER="$(TARGET_LD)"
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_C_FLAGS="$(COMPILER_COMMONS_CFLAGS_EXE)"
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(COMPILER_COMMONS_CXXFLAGS_EXE)"
-FBV_RECALBOX_CONF_OPTS += -DCMAKE_LINKER_EXE_FLAGS="$(COMPILER_COMMONS_LDFLAGS_EXE)"
-FBV_RECALBOX_CONF_OPTS += -DOPTION_RECALBOX_PRODUCTION_BUILD=true
-
-define FBV_RECALBOX_INSTALL_TARGET_CMDS
- $(INSTALL) -D $(@D)/fbv2 $(TARGET_DIR)/usr/bin/
-endef
-
-$(eval $(cmake-package))
diff --git a/package/firmware/sound-open-firmware/Config.in b/package/firmware/sound-open-firmware/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..026a962a3b85bd225b664793daf07122c6bb2d56
--- /dev/null
+++ b/package/firmware/sound-open-firmware/Config.in
@@ -0,0 +1,6 @@
+config BR2_PACKAGE_SOUND_OPEN_FIRMWARE
+ bool "Sound Open Firmware"
+ help
+ Open source audio DSP firmware
+
+ https://www.sofproject.org/
diff --git a/package/firmware/sound-open-firmware/sound-open-firmware.mk b/package/firmware/sound-open-firmware/sound-open-firmware.mk
new file mode 100644
index 0000000000000000000000000000000000000000..960c7622763e59b90989f3d2af797e33e0336be6
--- /dev/null
+++ b/package/firmware/sound-open-firmware/sound-open-firmware.mk
@@ -0,0 +1,18 @@
+################################################################################
+#
+# SOUND_OPEN_FIRMWARE
+#
+################################################################################
+
+SOUND_OPEN_FIRMWARE_VERSION = 2025.01.1
+SOUND_OPEN_FIRMWARE_SOURCE = sof-bin-$(SOUND_OPEN_FIRMWARE_VERSION).tar.gz
+SOUND_OPEN_FIRMWARE_SITE = https://github.com/thesofproject/sof-bin/releases/download/v$(SOUND_OPEN_FIRMWARE_VERSION)
+SOUND_OPEN_FIRMWARE_LICENSE = BSD-3-Clause
+SOUND_OPEN_FIRMWARE_LICENSE_FILES = LICENSE.Intel LICENSE.NXP
+
+define SOUND_OPEN_FIRMWARE_INSTALL_TARGET_CMDS
+ [ -d $(TARGET_DIR)/lib/firmware/intel ] || mkdir -p $(TARGET_DIR)/lib/firmware/intel ; \
+ rsync -av $(@D)/sof* $(TARGET_DIR)/lib/firmware/intel/
+endef
+
+$(eval $(generic-package))
diff --git a/package/firmware/valve-hardware-audio-processing/0001-remove-cset-tlv.patch b/package/firmware/valve-hardware-audio-processing/0001-remove-cset-tlv.patch
new file mode 100644
index 0000000000000000000000000000000000000000..178440d956a06e4b19cfd19eded6a4f9b9eced3a
--- /dev/null
+++ b/package/firmware/valve-hardware-audio-processing/0001-remove-cset-tlv.patch
@@ -0,0 +1,24 @@
+From 44fb8c28b9cc986823b6ad8e175061c0925431f7 Mon Sep 17 00:00:00 2001
+From: David Barbion
+Date: Wed, 17 Sep 2025 21:57:28 +0200
+Subject: [PATCH] remove cset-tlv
+
+---
+ ucm2/conf.d/sof-nau8821-max/HiFi.conf | 1 -
+ 1 file changed, 1 deletion(-)
+
+diff --git a/ucm2/conf.d/sof-nau8821-max/HiFi.conf b/ucm2/conf.d/sof-nau8821-max/HiFi.conf
+index 835dba3..48b07ec 100644
+--- a/ucm2/conf.d/sof-nau8821-max/HiFi.conf
++++ b/ucm2/conf.d/sof-nau8821-max/HiFi.conf
+@@ -114,7 +114,6 @@ SectionDevice."Speaker".0 {
+ ]
+ EnableSequence [
+ exec "echo Speaker EnableSequence"
+- cset-tlv "name='SMART_AMP1.0 Smart_amp Model' /etc/dsmparam.bin"
+ ]
+ DisableSequence [
+ exec "echo Speaker DisableSequence"
+--
+2.51.0
+
diff --git a/package/firmware/valve-hardware-audio-processing/Config.in b/package/firmware/valve-hardware-audio-processing/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..208e116653926298f7b1467f6ade60115bbec2ba
--- /dev/null
+++ b/package/firmware/valve-hardware-audio-processing/Config.in
@@ -0,0 +1,14 @@
+config BR2_PACKAGE_VALVE_HARDWARE_AUDIO_PROCESSING
+ bool ""
+ help
+ This repository contains any and all customizations audio configuration and processing we run on the Steam Deck.
+ This includes:
+
+ - Configurations for source and sink setups in Pipewire for Voyager/Jupiter and Galileo.
+ - Wireplumber scripts for routing those sources/sinks for Voyager/Jupiter and Galileo.
+ - Individual UCM configs for session policy for Voyager/Jupiter (coupled with the acp5x soundcard) and Galileo (coupled with the sof-nau8821-max soundcard)
+ - Faust scripts for generating a statically compiled speaker and microphone tuning.
+ - Prebuilt and presigned SOF firmware binaries for the audio co-processor on Galileo.
+ - Scripts and a submodule setup for compiling an unsigned version of the SOF firmware binary for Galileo from source.
+
+ https://gitlab.com/evlaV/valve-hardware-audio-processing
diff --git a/package/firmware/valve-hardware-audio-processing/valve-hardware-audio-processing.mk b/package/firmware/valve-hardware-audio-processing/valve-hardware-audio-processing.mk
new file mode 100644
index 0000000000000000000000000000000000000000..057db677e666f43376f5e874379fe0f24b767fcf
--- /dev/null
+++ b/package/firmware/valve-hardware-audio-processing/valve-hardware-audio-processing.mk
@@ -0,0 +1,20 @@
+################################################################################
+#
+# VALVE_HARDWARE_AUDIO_PROCESSING
+#
+################################################################################
+
+VALVE_HARDWARE_AUDIO_PROCESSING_VERSION = 0.61
+VALVE_HARDWARE_AUDIO_PROCESSING_SOURCE = valve-hardware-audio-processing-$(VALVE_HARDWARE_AUDIO_PROCESSING_VERSION).tar.gz
+VALVE_HARDWARE_AUDIO_PROCESSING_SITE = https://gitlab.com/evlaV/valve-hardware-audio-processing/-/archive/$(VALVE_HARDWARE_AUDIO_PROCESSING_VERSION)
+VALVE_HARDWARE_AUDIO_PROCESSING_LICENSE = GPL-2.0
+VALVE_HARDWARE_AUDIO_PROCESSING_LICENSE_FILES = LICENSE
+
+define VALVE_HARDWARE_AUDIO_PROCESSING_INSTALL_TARGET_CMDS
+ [ -d $(TARGET_DIR)/lib/firmware/ ] || mkdir -p $(TARGET_DIR)/lib/firmware/ ; \
+ rsync -av $(@D)/sof_fw/* $(TARGET_DIR)/lib/firmware/amd/ ; \
+ [ -d $(TARGET_DIR)/usr/share/alsa/ucm2/conf.d/ ] || mkdir -p $(TARGET_DIR)/usr/share/alsa/ucm2/conf.d/ \;
+ rsync -av $(@D)/ucm2/conf.d/ $(TARGET_DIR)/usr/share/alsa/ucm2/conf.d/
+endef
+
+$(eval $(generic-package))
diff --git a/package/kernelfirmwares/kernelfirmwares.mk b/package/kernelfirmwares/kernelfirmwares.mk
index 8f83b8dd7499d3cccd179cdd38141cc493bcfae9..a53df4996ec53703b4ac4520990134ebb9b870c0 100644
--- a/package/kernelfirmwares/kernelfirmwares.mk
+++ b/package/kernelfirmwares/kernelfirmwares.mk
@@ -4,7 +4,7 @@
#
################################################################################
-KERNELFIRMWARES_VERSION = 20230919
+KERNELFIRMWARES_VERSION = 20250311
KERNELFIRMWARES_SOURCE = linux-firmware-$(KERNELFIRMWARES_VERSION).tar.gz
KERNELFIRMWARES_SITE = https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git
KERNELFIRMWARES_SITE_METHOD = git
@@ -13,8 +13,8 @@ KERNELFIRMWARES_NON_COMMERCIAL = y
ifeq ($(BR2_PACKAGE_RECALBOX_TARGET_RPI3)$(BR2_PACKAGE_RECALBOX_TARGET_RPI4)$(BR2_PACKAGE_RECALBOX_TARGET_RPI4_64)$(BR2_PACKAGE_RECALBOX_TARGET_RPI5_64),y)
define KERNELFIRMWARES_REMOVE_BRCM_FOLDER_CMDS
- $(RM) -rf $(@D)/brcm/ $(@D)/nvidia/ $(@D)/amd $(@D)/amdgpu $(@D)/radeon $(@D)/i915 \
- $(@D)/iwlwifi-*
+ $(RM) -rf $(@D)/brcm/ $(@D)/nvidia/ $(@D)/amd* $(@D)/radeon $(@D)/i915 \
+ $(@D)/iwlwifi-* $(@D)/qcom $(@D)/intel
endef
KERNELFIRMWARES_PRE_INSTALL_TARGET_HOOKS += KERNELFIRMWARES_REMOVE_BRCM_FOLDER_CMDS
endif
@@ -32,7 +32,7 @@ define KERNELFIRMWARES_INSTALL_TARGET_CMDS
cd $(TARGET_DIR)/lib/firmware/ ; \
sed -r -e '/^Link: (.+) -> (.+)$$/!d; s//\1 \2/' $(@D)/WHENCE | \
while read f d; do \
- if test -f $$(readlink -m $$(dirname $$f)/$$d); then \
+ if test -f "$$(readlink -m $$(dirname $$f)/$$d)"; then \
mkdir -p $$(dirname $$f) || exit 1; \
ln -sf $$d $$f || exit 1; \
fi ; \
diff --git a/package/libretro-dolphin/5000-remove-hidapi-for-steamdeck.patch b/package/libretro-dolphin/5000-remove-hidapi-for-steamdeck.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0ab4701de8ad62f9a2ad46fe7c9f368839c57694
--- /dev/null
+++ b/package/libretro-dolphin/5000-remove-hidapi-for-steamdeck.patch
@@ -0,0 +1,12 @@
+--- libretro-dolphin-bbcc6eac9ff0027f3e5268c8d90cb0e0a58201e3/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h 2025-10-02 00:05:45.906554601 +0200
++++ libretro-dolphin-bbcc6eac9ff0027f3e5268c8d90cb0e0a58201e3/Source/Core/InputCommon/ControllerInterface/ControllerInterface.h 2025-10-02 00:05:58.357745788 +0200
+@@ -34,9 +34,6 @@
+ #if defined(HAVE_SDL2)
+ #define CIFACE_USE_SDL
+ #endif
+-#if defined(HAVE_HIDAPI)
+-#define CIFACE_USE_STEAMDECK
+-#endif
+
+ namespace ciface
+ {
diff --git a/package/nvidia-driver-legacy-recalbox/0001-Fix-conftest-to-ignore-implicit-function-declaration.patch b/package/nvidia-driver-legacy-recalbox/0001-Fix-conftest-to-ignore-implicit-function-declaration.patch
new file mode 100644
index 0000000000000000000000000000000000000000..290b559324f9959ed8e98db4dbce403d341f32e2
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/0001-Fix-conftest-to-ignore-implicit-function-declaration.patch
@@ -0,0 +1,27 @@
+From: Benjamin ROBIN
+Date: Sun, 12 May 2024 17:06:20 +0200
+Subject: [PATCH 1/3] Fix conftest to ignore implicit-function-declaration and
+ strict-prototypes warnings
+
+conftest rely on the fact that a missing prototype should build, but an invalid
+call to a function (missing function parameters) the build fail.
+---
+ conftest.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/conftest.sh b/conftest.sh
+--- a/kernel/conftest.sh
++++ b/kernel/conftest.sh
+@@ -101,7 +101,9 @@ test_header_presence() {
+ build_cflags() {
+ BASE_CFLAGS="-O2 -D__KERNEL__ \
+ -DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \
+--nostdinc -isystem $ISYSTEM"
++-nostdinc -isystem $ISYSTEM \
++-Wno-implicit-function-declaration -Wno-strict-prototypes \
++-Wno-incompatible-pointer-types"
+
+ if [ "$OUTPUT" != "$SOURCES" ]; then
+ OUTPUT_CFLAGS="-I$OUTPUT/include2 -I$OUTPUT/include"
+---
+2.45.0
diff --git a/package/nvidia-driver-legacy-recalbox/0001-use-LDFLAGS.patch b/package/nvidia-driver-legacy-recalbox/0001-use-LDFLAGS.patch
deleted file mode 100644
index c99ebb55d346bb0743ffe2a52f83eb422c471a3e..0000000000000000000000000000000000000000
--- a/package/nvidia-driver-legacy-recalbox/0001-use-LDFLAGS.patch
+++ /dev/null
@@ -1,48 +0,0 @@
-kernel: use LDFLAGS when linking modules
-
-Currently, linking module objects is simply using $(LD), assuming that
-the default emulation is correct for the current architecture.
-
-However, that might not be the case when the toolchain default is not
-the same as the current arch. For example, if the toolchain defaults to
-i386 and is capable of x86_64, and we're targetting x86_64 (or the
-opposite), the link would fail because the ld emulation is incorrect:
-
- .../i686-pc-linux-gnu-ld: Relocatable linking with relocations from
- format elf64-x86-64 (.../nvidia-driver-370.23/kernel/nvidia/nv-frontend.o)
- to format elf32-i386 (.../nvidia-driver-370.23/kernel/nvidia/nv-interface.o)
- is not supported
-
-Add use of $(LDFLAGS) when doing the link, as the kernel provides the
-proper emulation in those.
-
-Signed-off-by: "Yann E. MORIN"
-
----
-Issue reported upstream:
- https://devtalk.nvidia.com/default/topic/958653/
-
-diff -durN nvidia-driver-370.23.orig/kernel/nvidia/nvidia.Kbuild nvidia-driver-370.23/kernel/nvidia/nvidia.Kbuild
---- nvidia-driver-370.23.orig/kernel/nvidia/nvidia.Kbuild 2016-08-09 01:57:50.000000000 +0200
-+++ nvidia-driver-370.23/kernel/nvidia/nvidia.Kbuild 2016-08-20 12:25:02.780233423 +0200
-@@ -87,7 +87,7 @@
- always += $(NVIDIA_INTERFACE)
-
- $(obj)/$(NVIDIA_INTERFACE): $(addprefix $(obj)/,$(NVIDIA_OBJECTS))
-- $(LD) -r -o $@ $^
-+ $(LD) $(LDFLAGS) -r -o $@ $^
-
-
- #
-diff -durN nvidia-driver-370.23.orig/kernel/nvidia-modeset/nvidia-modeset.Kbuild nvidia-driver-370.23/kernel/nvidia-modeset/nvidia-modeset.Kbuild
---- nvidia-driver-370.23.orig/kernel/nvidia-modeset/nvidia-modeset.Kbuild 2016-08-09 01:43:19.000000000 +0200
-+++ nvidia-driver-370.23/kernel/nvidia-modeset/nvidia-modeset.Kbuild 2016-08-20 12:25:39.596772662 +0200
-@@ -70,7 +70,7 @@
- always += $(NVIDIA_MODESET_INTERFACE)
-
- $(obj)/$(NVIDIA_MODESET_INTERFACE): $(addprefix $(obj)/,$(NVIDIA_MODESET_OBJECTS))
-- $(LD) -r -o $@ $^
-+ $(LD) $(LDFLAGS) -r -o $@ $^
-
- #
-# Register the conftests needed by nvidia-modeset.ko
diff --git a/package/nvidia-driver-legacy-recalbox/0002-Fix-conftest-to-use-a-short-wchar_t.patch b/package/nvidia-driver-legacy-recalbox/0002-Fix-conftest-to-use-a-short-wchar_t.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5ca0581cd07264821a7615db3a2b6714763e5a63
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/0002-Fix-conftest-to-use-a-short-wchar_t.patch
@@ -0,0 +1,25 @@
+From: Benjamin ROBIN
+Date: Sun, 12 May 2024 17:45:43 +0200
+Subject: [PATCH 2/3] Fix conftest to use a short wchar_t
+
+Fix build error about ``const efi_char16_t *v = L"SecureBoot"``
+when including include/linux/efi.h
+---
+ conftest.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/conftest.sh b/conftest.sh
+--- a/kernel/conftest.sh
++++ b/kernel/conftest.sh
+@@ -101,7 +101,7 @@ test_header_presence() {
+ build_cflags() {
+ BASE_CFLAGS="-O2 -D__KERNEL__ \
+ -DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \
+--nostdinc -isystem $ISYSTEM \
++-nostdinc -isystem $ISYSTEM -fshort-wchar \
+ -Wno-implicit-function-declaration -Wno-strict-prototypes \
+ -Wno-incompatible-pointer-types"
+
+ if [ "$OUTPUT" != "$SOURCES" ]; then
+---
+2.45.0
diff --git a/package/nvidia-driver-legacy-recalbox/0002-compat-gcc10.patch b/package/nvidia-driver-legacy-recalbox/0002-compat-gcc10.patch
deleted file mode 100644
index df27c00736b70ea323c2cfa5f56921080ebf1851..0000000000000000000000000000000000000000
--- a/package/nvidia-driver-legacy-recalbox/0002-compat-gcc10.patch
+++ /dev/null
@@ -1,21 +0,0 @@
---- nvidia-driver-390-recalbox-390.138/kernel/conftest.sh.orig 2020-12-12 16:07:17.230697747 +0100
-+++ nvidia-driver-390-recalbox-390.138/kernel/conftest.sh 2020-12-12 16:08:14.943347971 +0100
-@@ -4214,7 +4214,7 @@
- echo "The kernel was built with ${kernel_cc_string}, but the" \
- "current compiler version is `$CC --version | head -n 1`.";
- fi
-- exit 1;
-+ exit 0;
- fi
- ;;
-
---- nvidia-driver-390-recalbox-390.138/kernel/Kbuild.orig 2020-12-12 16:17:03.781222655 +0100
-+++ nvidia-driver-390-recalbox-390.138/kernel/Kbuild 2020-12-12 16:23:01.797899646 +0100
-@@ -69,6 +69,7 @@
- EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wsign-compare -Wno-cast-qual -Wno-error
- EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"390.138\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE -Wno-sign-compare -Wno-format-extra-args
- EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
-+EXTRA_CFLAGS += $(call cc-disable-warning, incompatible-pointer-types)
- EXTRA_CFLAGS += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2)
-
- #
diff --git a/package/nvidia-driver-legacy-recalbox/0003-Fix-conftest-to-use-nv_drm_gem_vmap-which-has-the-se.patch b/package/nvidia-driver-legacy-recalbox/0003-Fix-conftest-to-use-nv_drm_gem_vmap-which-has-the-se.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2360c3925e3926c50b6a0f20efb8e4c500eeb3e3
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/0003-Fix-conftest-to-use-nv_drm_gem_vmap-which-has-the-se.patch
@@ -0,0 +1,30 @@
+From: Benjamin ROBIN
+Date: Sun, 12 May 2024 17:54:18 +0200
+Subject: [PATCH 3/3] Fix conftest to use nv_drm_gem_vmap() which has the
+ secondary map argument
+
+See https://forums.developer.nvidia.com/t/nvidia-modules-build-failure-with-upcoming-gcc-14-and-recent-kernels-due-to-misfiring-conftest-sh-test-heads-up/279072
+---
+ conftest.sh | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+diff --git a/conftest.sh b/conftest.sh
+--- a/kernel/conftest.sh
++++ b/kernel/conftest.sh
+@@ -4593,8 +4593,13 @@ compile_test() {
+ #
+ CODE="
+ #include
++ #if defined(NV_LINUX_IOSYS_MAP_H_PRESENT)
++ typedef struct iosys_map nv_sysio_map_t;
++ #else
++ typedef struct dma_buf_map nv_sysio_map_t;
++ #endif
+ int conftest_drm_gem_object_vmap_has_map_arg(
+- struct drm_gem_object *obj, struct dma_buf_map *map) {
++ struct drm_gem_object *obj, nv_sysio_map_t *map) {
+ return obj->funcs->vmap(obj, map);
+ }"
+
+---
+2.45.0
diff --git a/package/nvidia-driver-legacy-recalbox/0003-compat-gcc14.patch b/package/nvidia-driver-legacy-recalbox/0003-compat-gcc14.patch
deleted file mode 100644
index 8485ca4bbb9de3433841be1f5e469c201ea6e8ea..0000000000000000000000000000000000000000
--- a/package/nvidia-driver-legacy-recalbox/0003-compat-gcc14.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/kernel/conftest.sh b/kernel/conftest.sh
-index d533d36..ac4d32b 100755
---- a/kernel/conftest.sh
-+++ b/kernel/conftest.sh
-@@ -101,7 +101,9 @@ test_header_presence() {
- build_cflags() {
- BASE_CFLAGS="-O2 -D__KERNEL__ \
- -DKBUILD_BASENAME=\"#conftest$$\" -DKBUILD_MODNAME=\"#conftest$$\" \
---nostdinc -isystem $ISYSTEM"
-+-nostdinc -isystem $ISYSTEM \
-+-Wno-implicit-function-declaration -Wno-strict-prototypes -Wno-incompatible-pointer-types"
-+
-
- if [ "$OUTPUT" != "$SOURCES" ]; then
- OUTPUT_CFLAGS="-I$OUTPUT/include2 -I$OUTPUT/include"
diff --git a/package/nvidia-driver-legacy-recalbox/kernel-6.10.patch b/package/nvidia-driver-legacy-recalbox/kernel-6.10.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7639e4464ff8639887623b79958cbbc848383dad
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/kernel-6.10.patch
@@ -0,0 +1,61 @@
+diff -ruNb a/kernel/conftest.sh b/kernel/conftest.sh
+--- a/kernel/conftest.sh 2024-07-19 04:36:26.183701185 -0500
++++ b/kernel/conftest.sh 2024-07-19 04:36:26.230366381 -0500
+@@ -4464,20 +4464,22 @@
+ compile_check_conftest "$CODE" "NV_DRM_GEM_OBJECT_VMAP_HAS_MAP_ARG" "" "types"
+ ;;
+
+- unsafe_follow_pfn)
++ follow_pfn)
+ #
+- # Determine if unsafe_follow_pfn() is present.
++ # Determine if follow_pfn() is present.
+ #
+- # unsafe_follow_pfn() was added by commit 69bacee7f9ad
+- # ("mm: Add unsafe_follow_pfn") in v5.13-rc1.
++ # follow_pfn() was added by commit 3b6748e2dd69
++ # ("mm: introduce follow_pfn()") in v2.6.31-rc1, and removed
++ # by commit 233eb0bf3b94 ("mm: remove follow_pfn")
++ # from linux-next 233eb0bf3b94.
+ #
+ CODE="
+ #include
+- void conftest_unsafe_follow_pfn(void) {
+- unsafe_follow_pfn();
++ void conftest_follow_pfn(void) {
++ follow_pfn();
+ }"
+
+- compile_check_conftest "$CODE" "NV_UNSAFE_FOLLOW_PFN_PRESENT" "" "functions"
++ compile_check_conftest "$CODE" "NV_FOLLOW_PFN_PRESENT" "" "functions"
+ ;;
+
+ drm_plane_atomic_check_has_atomic_state_arg)
+diff -ruNb a/kernel/nvidia/nvidia.Kbuild b/kernel/nvidia/nvidia.Kbuild
+--- a/kernel/nvidia/nvidia.Kbuild 2022-10-12 04:29:57.000000000 -0500
++++ b/kernel/nvidia/nvidia.Kbuild 2024-07-19 05:17:39.148448922 -0500
+@@ -164,7 +164,7 @@ NV_CONFTEST_FUNCTION_COMPILE_TESTS += cc
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += iterate_fd
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += seq_read_iter
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += sg_page_iter_page
+-NV_CONFTEST_FUNCTION_COMPILE_TESTS += unsafe_follow_pfn
++NV_CONFTEST_FUNCTION_COMPILE_TESTS += follow_pfn
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_gem_object_get
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += drm_gem_object_put_unlocked
+ NV_CONFTEST_FUNCTION_COMPILE_TESTS += set_close_on_exec
+diff -ruNb a/kernel/nvidia/os-mlock.c b/kernel/nvidia/os-mlock.c
+--- a/kernel/nvidia/os-mlock.c 2022-10-12 04:30:26.000000000 -0500
++++ b/kernel/nvidia/os-mlock.c 2024-07-19 04:36:26.230366381 -0500
+@@ -18,10 +18,10 @@
+ unsigned long address,
+ unsigned long *pfn)
+ {
+-#if defined(NV_UNSAFE_FOLLOW_PFN_PRESENT)
+- return unsafe_follow_pfn(vma, address, pfn);
+-#else
++#if defined(NV_FOLLOW_PFN_PRESENT)
+ return follow_pfn(vma, address, pfn);
++#else
++ return -1;
+ #endif
+ }
diff --git a/package/nvidia-driver-legacy-recalbox/kernel-6.12.patch b/package/nvidia-driver-legacy-recalbox/kernel-6.12.patch
new file mode 100644
index 0000000000000000000000000000000000000000..98e0ffe6cbae8537871fa60ae89bcafcad2329a9
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/kernel-6.12.patch
@@ -0,0 +1,111 @@
+From 839b964bd5be20275a4d1add020e68e407380adb Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?=
+Date: Sat, 17 Aug 2024 14:26:04 +0000
+Subject: [PATCH] Tentative fix for NVIDIA 470.256.02 driver for Linux 6.12-rc1
+
+Note that the fix requires enabling DRM kernel mode setting
+(add the `nvidia-drm.modeset=1` parameter to the kernel command line).
+
+(Thanks xtexChooser for the memory management fixes!)
+---
+ nvidia-drm/nvidia-drm-drv.c | 47 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 47 insertions(+)
+
+diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
+index f350134..d6233a5 100644
+--- a/kernel/nvidia-drm/nvidia-drm-drv.c
++++ b/kernel/nvidia-drm/nvidia-drm-drv.c
+@@ -84,6 +84,11 @@
+ #include
+ #endif
+
++#include
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++#include
++#endif
++
+ static struct nv_drm_device *dev_list = NULL;
+
+ #if defined(NV_DRM_ATOMIC_MODESET_AVAILABLE)
+@@ -168,7 +173,12 @@ static const struct drm_mode_config_funcs nv_mode_config_funcs = {
+ .atomic_check = nv_drm_atomic_check,
+ .atomic_commit = nv_drm_atomic_commit,
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 12, 0)
++ // Rel. commit. "drm: Remove struct drm_mode_config_funcs.output_poll_changed" (Thomas Zimmermann, 12 Aug 2024)
++ // Replace this callback with a DRM client's hotplug callback.
++ // This is required for e.g. /sys/class/drm/card*/modes to work.
+ .output_poll_changed = nv_drm_output_poll_changed,
++#endif
+ };
+
+ static void nv_drm_event_callback(const struct NvKmsKapiEvent *event)
+@@ -739,6 +749,10 @@ static const struct file_operations nv_drm_fops = {
+ .read = drm_read,
+
+ .llseek = noop_llseek,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++ // Rel. commit. "fs: move FMODE_UNSIGNED_OFFSET to fop_flags" (Christian Brauner, 9 Aug 2024)
++ .fop_flags = FOP_UNSIGNED_OFFSET,
++#endif
+ };
+
+ static const struct drm_ioctl_desc nv_drm_ioctls[] = {
+@@ -906,7 +920,18 @@ static void nv_drm_update_drm_driver_features(void)
+ #endif /* NV_DRM_ATOMIC_MODESET_AVAILABLE */
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++static int hotplug_helper_client_hotplug(struct drm_client_dev *client)
++{
++ nv_drm_output_poll_changed(client->dev);
++ return 0;
++}
+
++static const struct drm_client_funcs nv_hotplug_helper_client_funcs = {
++ .owner = THIS_MODULE,
++ .hotplug = hotplug_helper_client_hotplug,
++};
++#endif
+
+ /*
+ * Helper function for allocate/register DRM device for given NVIDIA GPU ID.
+@@ -962,6 +987,20 @@ static void nv_drm_register_drm_device(const nv_gpu_info_t *gpu_info)
+ goto failed_drm_register;
+ }
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++ /* Register a DRM client for receiving hotplug events */
++ struct drm_client_dev *client = kzalloc(sizeof(*client), GFP_KERNEL);
++ if (client == NULL || drm_client_init(dev, client,
++ "nv-hotplug-helper", &nv_hotplug_helper_client_funcs)) {
++ printk(KERN_WARNING "Failed to initialize the nv-hotplug-helper DRM client"
++ " (ensure DRM kernel mode setting is enabled via nvidia-drm.modeset=1).\n");
++ goto failed_drm_client_init;
++ }
++
++ drm_client_register(client);
++ pr_info("Registered the nv-hotplug-helper DRM client.\n");
++#endif
++
+ /* Add NVIDIA-DRM device into list */
+
+ nv_dev->next = dev_list;
+@@ -969,6 +1008,14 @@ static void nv_drm_register_drm_device(const nv_gpu_info_t *gpu_info)
+
+ return; /* Success */
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 12, 0)
++failed_drm_client_init:
++
++ kfree(client);
++ drm_dev_unregister(dev);
++
++#endif
++
+ failed_drm_register:
+
+ nv_drm_dev_free(dev);
+--
+2.47.0
+
diff --git a/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.13.patch b/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.13.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b675cb0d4a0a3c9d2962585feb2ad267d055b202
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.13.patch
@@ -0,0 +1,58 @@
+From 9f91b171f680648647580c163bbc9cc1641e3920 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?=
+Date: Sat, 16 Nov 2024 22:45:21 +0000
+Subject: [PATCH] Tentative fix for NVIDIA 470.256.02 driver for Linux 6.13-rc1
+
+---
+ nvidia-modeset/nvidia-modeset.Kbuild | 8 +++++---
+ nvidia/nvidia.Kbuild | 8 +++++---
+ 2 files changed, 10 insertions(+), 6 deletions(-)
+
+diff --git a/nvidia-modeset/nvidia-modeset.Kbuild b/nvidia-modeset/nvidia-modeset.Kbuild
+index a7d84e0..d417c28 100644
+--- a/kernel/nvidia-modeset/nvidia-modeset.Kbuild
++++ b/kernel/nvidia-modeset/nvidia-modeset.Kbuild
+@@ -40,13 +40,15 @@ NV_KERNEL_MODULE_TARGETS += $(NVIDIA_MODESET_KO)
+ NVIDIA_MODESET_BINARY_OBJECT := $(src)/nvidia-modeset/nv-modeset-kernel.o_binary
+ NVIDIA_MODESET_BINARY_OBJECT_O := nvidia-modeset/nv-modeset-kernel.o
+
+-quiet_cmd_symlink = SYMLINK $@
+-cmd_symlink = ln -sf $< $@
++# Rel. commit 80f289101690 "kbuild: change working directory to external module directory with M=" (Masahiro Yamada, 10 Nov 2024)
++# Ensure `$<` is absolute, since the link target is resolved relative to its path, not from where `ln` is run from.
++quiet_cmd_symlinkabs = SYMLINK $@
++ cmd_symlinkabs = ln -sf $(abspath $<) $@
+
+ targets += $(NVIDIA_MODESET_BINARY_OBJECT_O)
+
+ $(obj)/$(NVIDIA_MODESET_BINARY_OBJECT_O): $(NVIDIA_MODESET_BINARY_OBJECT) FORCE
+- $(call if_changed,symlink)
++ $(call if_changed,symlinkabs)
+
+ nvidia-modeset-y += $(NVIDIA_MODESET_BINARY_OBJECT_O)
+
+diff --git a/nvidia/nvidia.Kbuild b/nvidia/nvidia.Kbuild
+index 31a6f92..62689f6 100644
+--- a/kernel/nvidia/nvidia.Kbuild
++++ b/kernel/nvidia/nvidia.Kbuild
+@@ -40,13 +40,15 @@ NVIDIA_KO = nvidia/nvidia.ko
+ NVIDIA_BINARY_OBJECT := $(src)/nvidia/nv-kernel.o_binary
+ NVIDIA_BINARY_OBJECT_O := nvidia/nv-kernel.o
+
+-quiet_cmd_symlink = SYMLINK $@
+- cmd_symlink = ln -sf $< $@
++# Rel. commit 80f289101690 "kbuild: change working directory to external module directory with M=" (Masahiro Yamada, 10 Nov 2024)
++# Ensure `$<` is absolute, since the link target is resolved relative to its path, not from where `ln` is run from.
++quiet_cmd_symlinkabs = SYMLINK $@
++ cmd_symlinkabs = ln -sf $(abspath $<) $@
+
+ targets += $(NVIDIA_BINARY_OBJECT_O)
+
+ $(obj)/$(NVIDIA_BINARY_OBJECT_O): $(NVIDIA_BINARY_OBJECT) FORCE
+- $(call if_changed,symlink)
++ $(call if_changed,symlinkabs)
+
+ nvidia-y += $(NVIDIA_BINARY_OBJECT_O)
+
+--
+2.47.0
diff --git a/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.14.patch b/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.14.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c8c7f94b986b47453d3ee3a6cc487d78ef7b0166
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.14.patch
@@ -0,0 +1,26 @@
+From bee3ff1153f7b42491d2a0552d6f9a66a307ec1a Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?=
+Date: Sun, 15 Dec 2024 17:56:03 +0000
+Subject: [PATCH] Tentative fix for NVIDIA 470.256.02 driver for Linux 6.14-rc1
+
+---
+ nvidia-drm/nvidia-drm-drv.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/nvidia-drm/nvidia-drm-drv.c b/nvidia-drm/nvidia-drm-drv.c
+index 0b1181d..b50b17a 100644
+--- a/kernel/nvidia-drm/nvidia-drm-drv.c
++++ b/kernel/nvidia-drm/nvidia-drm-drv.c
+@@ -882,7 +882,10 @@ static struct drm_driver nv_drm_driver = {
+ .name = "nvidia-drm",
+
+ .desc = "NVIDIA DRM driver",
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 14, 0)
++ // Rel. commit. "drm: remove driver date from struct drm_driver and all drivers" (Jani Nikula, 4 Dec 2024)
+ .date = "20160202",
++#endif
+
+ #if defined(NV_DRM_DRIVER_HAS_DEVICE_LIST)
+ .device_list = LIST_HEAD_INIT(nv_drm_driver.device_list),
+--
+2.48.1
diff --git a/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.15.patch b/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.15.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fe1d7f9f0001fc0f5a32ce9e648f86446f1156e5
--- /dev/null
+++ b/package/nvidia-driver-legacy-recalbox/nvidia-470xx-fix-linux-6.15.patch
@@ -0,0 +1,265 @@
+From c8980466f837b6c1e961bcfef3cfb70435394736 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Joan=20Bruguera=20Mic=C3=B3?=
+Date: Sat, 12 Apr 2025 22:46:59 +0000
+Subject: [PATCH] Tentative fix for NVIDIA 470.256.02 driver for Linux 6.15-rc1
+
+This is an experimental patch! Use at your own risk!
+TODO: Verify that the fix for vm_flags_(set|clear) is correct.
+EDIT 20250426: I don't believe that this patch is clean: the VMA flags
+ piggybacks on previous calls to acquire the VMA lock,
+ which is very hacky, and most likely doesn't happen 100%
+ of the time and in all code paths.
+
+Replacing EXTRA_CFLAGS with ccflags-y is rel. commit "kbuild: remove
+EXTRA_*FLAGS support" (Masahiro Yamada, 6 Feb 2025), according to which
+they have been deprecated since 2007, so no need to add any fallback.
+
+Thanks to Willy Frissen and Satadru Pramanik, who shared patches for
+various of the necessary changes.
+---
+ Kbuild | 25 +++++++++----------------
+ common/inc/nv-mm.h | 17 +++++++++++++++++
+ common/inc/nv-timer.h | 10 ++++++++++
+ nvidia-drm/nvidia-drm-connector.c | 8 ++++++++
+ nvidia-drm/nvidia-drm-linux.c | 1 +
+ nvidia-modeset/nvidia-modeset-linux.c | 5 +++--
+ nvidia-uvm/uvm.c | 1 +
+ nvidia/nv-frontend.c | 1 +
+ nvidia/nv.c | 4 ++--
+ 9 files changed, 52 insertions(+), 20 deletions(-)
+
+diff --git a/Kbuild b/Kbuild
+index eadd8b2..f333e0b 100644
+--- a/kernel/Kbuild
++++ b/kernel/Kbuild
+@@ -59,27 +59,21 @@ $(foreach _module, $(NV_KERNEL_MODULES), \
+ $(eval include $(src)/$(_module)/$(_module).Kbuild))
+
+
+-#
+-# Define CFLAGS that apply to all the NVIDIA kernel modules. EXTRA_CFLAGS
+-# is deprecated since 2.6.24 in favor of ccflags-y, but we need to support
+-# older kernels which do not have ccflags-y. Newer kernels append
+-# $(EXTRA_CFLAGS) to ccflags-y for compatibility.
+-#
+-
+-EXTRA_CFLAGS += -I$(src)/common/inc
+-EXTRA_CFLAGS += -I$(src)
+-EXTRA_CFLAGS += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
+-EXTRA_CFLAGS += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"470.256.02\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE
+-EXTRA_CFLAGS += $(call cc-option,-Werror=undef,)
+-EXTRA_CFLAGS += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2)
+-EXTRA_CFLAGS += -DNV_KERNEL_INTERFACE_LAYER
++ccflags-y += -I$(src)/common/inc
++ccflags-y += -I$(src)
++ccflags-y += -Wall -MD $(DEFINES) $(INCLUDES) -Wno-cast-qual -Wno-error -Wno-format-extra-args
++ccflags-y += -D__KERNEL__ -DMODULE -DNVRM -DNV_VERSION_STRING=\"470.256.02\" -Wno-unused-function -Wuninitialized -fno-strict-aliasing -mno-red-zone -mcmodel=kernel -DNV_UVM_ENABLE
++ccflags-y += $(call cc-option,-Werror=undef,)
++ccflags-y += -DNV_SPECTRE_V2=$(NV_SPECTRE_V2)
++ccflags-y += -DNV_KERNEL_INTERFACE_LAYER
++ccflags-y += -std=gnu17
+
+ #
+ # Detect SGI UV systems and apply system-specific optimizations.
+ #
+
+ ifneq ($(wildcard /proc/sgi_uv),)
+- EXTRA_CFLAGS += -DNV_CONFIG_X86_UV
++ ccflags-y += -DNV_CONFIG_X86_UV
+ endif
+
+
+@@ -107,7 +100,7 @@ NV_CONFTEST_CMD := /bin/sh $(NV_CONFTEST_SCRIPT) \
+
+ NV_CFLAGS_FROM_CONFTEST := $(shell $(NV_CONFTEST_CMD) build_cflags)
+
+-NV_CONFTEST_CFLAGS = $(NV_CFLAGS_FROM_CONFTEST) $(EXTRA_CFLAGS) -fno-pie
++NV_CONFTEST_CFLAGS = $(NV_CFLAGS_FROM_CONFTEST) $(ccflags-y) -fno-pie
+
+ NV_CONFTEST_COMPILE_TEST_HEADERS := $(obj)/conftest/macros.h
+ NV_CONFTEST_COMPILE_TEST_HEADERS += $(obj)/conftest/functions.h
+diff --git a/common/inc/nv-mm.h b/common/inc/nv-mm.h
+index da5065d..1960ce5 100644
+--- a/kernel/common/inc/nv-mm.h
++++ b/kernel/common/inc/nv-mm.h
+@@ -31,6 +31,7 @@ typedef int vm_fault_t;
+
+ #include
+ #include
++#include
+ /* get_user_pages
+ *
+ * The 8-argument version of get_user_pages was deprecated by commit
+@@ -248,12 +249,28 @@ static inline struct rw_semaphore *nv_mmap_get_lock(struct mm_struct *mm)
+ #if defined(NV_VM_AREA_STRUCT_HAS_CONST_VM_FLAGS)
+ static inline void nv_vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0)
++ // Rel. commit "mm: uninline the main body of vma_start_write()" (Suren Baghdasaryan, 13 Feb 2025)
++ // Since Linux 6.15, vm_flags_set and vm_flags_clear call a GPL-only symbol
++ // for locking (__vma_start_write), which can't be called from non-GPL code.
++ // However, it appears all uses on the driver are on VMAs being initially
++ // mapped / which are already locked, so we can use vm_flags_reset, which
++ // doesn't lock the VMA, but rather just asserts it is already write-locked.
++ vm_flags_reset(vma, vma->vm_flags | flags);
++#else
+ vm_flags_set(vma, flags);
++#endif
+ }
+
+ static inline void nv_vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags)
+ {
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0)
++ // Rel. commit "mm: uninline the main body of vma_start_write()" (Suren Baghdasaryan, 13 Feb 2025)
++ // See above
++ vm_flags_reset(vma, vma->vm_flags & ~flags);
++#else
+ vm_flags_clear(vma, flags);
++#endif
+ }
+ #else
+ static inline void nv_vm_flags_set(struct vm_area_struct *vma, unsigned long flags)
+diff --git a/common/inc/nv-timer.h b/common/inc/nv-timer.h
+index 18df6ea..396e121 100644
+--- a/kernel/common/inc/nv-timer.h
++++ b/kernel/common/inc/nv-timer.h
+@@ -25,6 +25,7 @@
+
+ #include
+ #include // For container_of
++#include
+
+ #include "conftest.h"
+
+@@ -63,4 +64,13 @@ static inline void nv_timer_setup(struct nv_timer *nv_timer,
+ #endif
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(6, 2, 0)
++// Rel. commit "treewide: Switch/rename to timer_delete[_sync]()" (Thomas Gleixner, 5 Apr 2025)
++// This provides a shim for ancient kernels before timer_delete_sync was introduced
++static inline int timer_delete_sync(struct timer_list *timer)
++{
++ return del_timer_sync(timer);
++}
++#endif
++
+ #endif // __NV_TIMER_H__
+diff --git a/nvidia-drm/nvidia-drm-connector.c b/nvidia-drm/nvidia-drm-connector.c
+index fe838ef..c35c9ec 100644
+--- a/kernel/nvidia-drm/nvidia-drm-connector.c
++++ b/kernel/nvidia-drm/nvidia-drm-connector.c
+@@ -44,6 +44,8 @@
+ #include
+ #include
+
++#include
++
+ static void nv_drm_connector_destroy(struct drm_connector *connector)
+ {
+ struct nv_drm_connector *nv_connector = to_nv_connector(connector);
+@@ -302,8 +304,14 @@ static int nv_drm_connector_get_modes(struct drm_connector *connector)
+ return count;
+ }
+
++// Rel. commit. "drm/connector: make mode_valid take a const struct drm_display_mode" (Dmitry Baryshkov, 14 Dec 2024)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 15, 0)
++static int nv_drm_connector_mode_valid(struct drm_connector *connector,
++ const struct drm_display_mode *mode)
++#else
+ static int nv_drm_connector_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
++#endif
+ {
+ struct drm_device *dev = connector->dev;
+ struct nv_drm_device *nv_dev = to_nv_device(dev);
+diff --git a/nvidia-drm/nvidia-drm-linux.c b/nvidia-drm/nvidia-drm-linux.c
+index 94e463e..2319640 100644
+--- a/kernel/nvidia-drm/nvidia-drm-linux.c
++++ b/kernel/nvidia-drm/nvidia-drm-linux.c
+@@ -182,6 +182,7 @@ static void __exit nv_linux_drm_exit(void)
+ module_init(nv_linux_drm_init);
+ module_exit(nv_linux_drm_exit);
+
++MODULE_DESCRIPTION("NVIDIA GPU DRM kernel module");
+ #if defined(MODULE_LICENSE)
+
+
+diff --git a/nvidia-modeset/nvidia-modeset-linux.c b/nvidia-modeset/nvidia-modeset-linux.c
+index de0c748..f6810d2 100644
+--- a/kernel/nvidia-modeset/nvidia-modeset-linux.c
++++ b/kernel/nvidia-modeset/nvidia-modeset-linux.c
+@@ -718,7 +718,7 @@ static void nvkms_kthread_q_callback(void *arg)
+ * pending timers and than waiting for workqueue callbacks.
+ */
+ if (timer->kernel_timer_created) {
+- del_timer_sync(&timer->kernel_timer);
++ timer_delete_sync(&timer->kernel_timer);
+ }
+
+ /*
+@@ -1740,7 +1740,7 @@ restart:
+ * completion, and we wait for queue completion with
+ * nv_kthread_q_stop below.
+ */
+- if (del_timer_sync(&timer->kernel_timer) == 1) {
++ if (timer_delete_sync(&timer->kernel_timer) == 1) {
+ /* We've deactivated timer so we need to clean after it */
+ list_del(&timer->timers_list);
+
+@@ -1778,6 +1778,7 @@ restart:
+ module_init(nvkms_init);
+ module_exit(nvkms_exit);
+
++MODULE_DESCRIPTION("NVIDIA GPU modeset kernel module");
+ #if defined(MODULE_LICENSE)
+
+
+diff --git a/nvidia-uvm/uvm.c b/nvidia-uvm/uvm.c
+index 73ceb70..c1e734f 100644
+--- a/kernel/nvidia-uvm/uvm.c
++++ b/nvidia-uvm/uvm.c
+@@ -1129,6 +1129,7 @@ static void __exit uvm_exit_entry(void)
+ module_init(uvm_init_entry);
+ module_exit(uvm_exit_entry);
+
++MODULE_DESCRIPTION("NVIDIA GPU UVM kernel module");
+ MODULE_LICENSE("Dual MIT/GPL");
+ MODULE_INFO(supported, "external");
+
+diff --git a/nvidia/nv-frontend.c b/nvidia/nv-frontend.c
+index 4d6d8af..ad82d6b 100644
+--- a/kernel/nvidia/nv-frontend.c
++++ b/kernel/nvidia/nv-frontend.c
+@@ -13,6 +13,7 @@
+ #include "nv-reg.h"
+ #include "nv-frontend.h"
+
++MODULE_DESCRIPTION("NVIDIA GPU frontend kernel module");
+ #if defined(MODULE_LICENSE)
+
+
+diff --git a/nvidia/nv.c b/nvidia/nv.c
+index 9d7da39..57b5024 100644
+--- a/kernel/nvidia/nv.c
++++ b/kernel/nvidia/nv.c
+@@ -3838,7 +3838,7 @@ int NV_API_CALL nv_stop_rc_timer(
+
+ nv_printf(NV_DBG_INFO, "NVRM: stopping rc timer\n");
+ nv->rc_timer_enabled = 0;
+- del_timer_sync(&nvl->rc_timer.kernel_timer);
++ timer_delete_sync(&nvl->rc_timer.kernel_timer);
+ nv_printf(NV_DBG_INFO, "NVRM: rc timer stopped\n");
+
+ return 0;
+@@ -3882,7 +3882,7 @@ void NV_API_CALL nv_stop_snapshot_timer(void)
+ NV_SPIN_UNLOCK_IRQRESTORE(&nvl->snapshot_timer_lock, flags);
+
+ if (timer_active)
+- del_timer_sync(&nvl->snapshot_timer.kernel_timer);
++ timer_delete_sync(&nvl->snapshot_timer.kernel_timer);
+ }
+
+ void NV_API_CALL nv_flush_snapshot_timer(void)
+--
+2.49.0
diff --git a/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.hash b/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.hash
index 8c95f3e4197355763b7071e1c8d83b4a326763ab..c224de5135c0d2a8041b4e960e8ea9ecc02d0a11 100644
--- a/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.hash
+++ b/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.hash
@@ -1,3 +1,3 @@
# Locally computed
-sha256 f2932c92fadd43c5b2341be453fc4f73f0ad7185c26bb7a43fbde81ae29f1fe3 NVIDIA-Linux-x86_64-560.35.03.run
+sha256 2d43e64c581be5ef554de9888b1aa90037ef6d45f54284d3d9dcedc08dc4dc26 NVIDIA-Linux-x86_64-570.133.07.run
sha256 bd28b0c5aeeb00eb11d3ec6f6f3449d4b3a40100914258332734a53527997526 LICENSE
diff --git a/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.mk b/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.mk
index 1fc97629f1a5c8c97f27a7d9fe2eee2aac0f2e23..52fb916952351653428334ece2458248fd67105c 100644
--- a/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.mk
+++ b/package/nvidia-driver-production-recalbox/nvidia-driver-production-recalbox.mk
@@ -4,7 +4,7 @@
#
################################################################################
-NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION = 560.35.03
+NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION = 570.133.07
NVIDIA_DRIVER_PRODUCTION_RECALBOX_SITE = http://download.nvidia.com/XFree86/Linux-x86_64/$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION)
NVIDIA_DRIVER_PRODUCTION_RECALBOX_SOURCE = NVIDIA-Linux-x86_64-$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION).run
NVIDIA_DRIVER_PRODUCTION_RECALBOX_LICENSE = NVIDIA Software License
@@ -14,7 +14,7 @@ NVIDIA_DRIVER_PRODUCTION_RECALBOX_INSTALL_STAGING = YES
NVIDIA_DRIVER_PRODUCTION_RECALBOX_DEPENDENCIES = xlib_libX11 xlib_libXext host-python3
NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION_GL = 1.7.0
-NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION_WAYLAND = 1.1.13
+NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION_WAYLAND = 1.1.18
ifeq ($(BR2_PACKAGE_NVIDIA_DRIVER_PRODUCTION_RECALBOX_XORG),y)
@@ -72,10 +72,10 @@ NVIDIA_DRIVER_PRODUCTION_RECALBOX_LIBS_MISC = \
libnvidia-api.so.1 \
libnvidia-cfg.so.$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION) \
libnvidia-eglcore.so.$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION) \
- libnvidia-egl-gbm.so.1.1.1 \
+ libnvidia-egl-gbm.so.1.1.2 \
libnvidia-egl-wayland.so.$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION_WAYLAND) \
- libnvidia-egl-xcb.so.1 \
- libnvidia-egl-xlib.so.1 \
+ libnvidia-egl-xcb.so.1.0.0 \
+ libnvidia-egl-xlib.so.1.0.0 \
libnvidia-glcore.so.$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION) \
libnvidia-glsi.so.$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION) \
libnvidia-glvkspirv.so.$(NVIDIA_DRIVER_PRODUCTION_RECALBOX_VERSION) \
diff --git a/package/recalbox-crt/S13crt b/package/recalbox-crt/S13crt
index c359077f1c2b419372e80707e9c0409aa44f8bda..59dc2ab51708c7e4df1dc8d1c12e9c4963c5714e 100644
--- a/package/recalbox-crt/S13crt
+++ b/package/recalbox-crt/S13crt
@@ -407,13 +407,6 @@ if test "$1" == "start"; then
exit 0
fi
manageHDMIPriority
- # RRGBJ volumed
- # cannot set it in S03 because pulse is not started
- for js in $(find /sys/class/input/ -name "event*"); do
- if [[ $(cat "$js/device/name") == "JammaControllerP1" ]]; then
- (sleep 5 && volumed "/dev/input/$(basename "$js")") &
- fi
- done
# Job is done
exit 0
fi
diff --git a/package/recalbox-drm-info/Config.in b/package/recalbox-drm-info/Config.in
new file mode 100644
index 0000000000000000000000000000000000000000..032810128bd492f9b1e0c90e4cc28360478f849b
--- /dev/null
+++ b/package/recalbox-drm-info/Config.in
@@ -0,0 +1,7 @@
+config BR2_PACKAGE_RECALBOX_DRM_INFO
+ bool "recalbox-drm-info"
+ depends on BR2_PACKAGE_XORG7
+ select BR2_PACKAGE_LIBDRM
+ select BR2_PACKAGE_XLIB_LIBXRANDR
+ help
+ Recalbox DRM information
diff --git a/package/recalbox-drm-info/recalbox-drm-info.mk b/package/recalbox-drm-info/recalbox-drm-info.mk
new file mode 100644
index 0000000000000000000000000000000000000000..5873b37a62d264afe8c1c03299283d023c4e212e
--- /dev/null
+++ b/package/recalbox-drm-info/recalbox-drm-info.mk
@@ -0,0 +1,15 @@
+################################################################################
+#
+# recalbox-drm-info
+#
+################################################################################
+
+RECALBOX_DRM_INFO_VERSION = custom
+RECALBOX_DRM_INFO_SITE = $(TOPDIR)/../projects/recalbox-drm-info
+RECALBOX_DRM_INFO_SITE_METHOD = local
+RECALBOX_DRM_INFO_DEPENDENCIES += libdrm xlib_libX11 xlib_libXrandr
+RECALBOX_DRM_INFO_LICENSE = GPL-3.0
+RECALBOX_DRM_INFO_LICENSE_FILES = COPYING
+RECALBOX_DRM_INFO_AUTORECONF += YES
+
+$(eval $(autotools-package))
diff --git a/package/recalbox-system/Config.in b/package/recalbox-system/Config.in
index 6851ef23e6b626b572d549e86a6d5b8604eac30b..9604d308cdbfecbf799dc83a8bc13f76410aa926 100644
--- a/package/recalbox-system/Config.in
+++ b/package/recalbox-system/Config.in
@@ -10,6 +10,8 @@ config BR2_PACKAGE_RECALBOX_SYSTEM
select BR2_PACKAGE_SAMBA4
select BR2_PACKAGE_RECALBOX_MANAGER3
select BR2_PACKAGE_RECALBOX_POSTCONF
+ select BR2_PACKAGE_RECALBOX_FBV
+ select BR2_PACKAGE_ALSA_UCM_CONF
help
Install the recalbox system files
@@ -127,6 +129,7 @@ config BR2_PACKAGE_RECALBOX_TARGET_X86_64
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R300
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_R600
select BR2_PACKAGE_MESA3D_GALLIUM_DRIVER_RADEONSI
+ select BR2_PACKAGE_SOUND_OPEN_FIRMWARE
endchoice
@@ -263,6 +266,7 @@ config BR2_PACKAGE_RECALBOX_VIDEO_XORG_SERVER
select BR2_PACKAGE_SDL2_X11
select BR2_PACKAGE_SDL2_OPENGL
select BR2_PACKAGE_XLIB_LIBXI
+ select BR2_PACKAGE_RECALBOX_DRM_INFO
config BR2_PACKAGE_RECALBOX_VIDEO_XWAYLAND
bool
@@ -302,3 +306,21 @@ config BR2_PACKAGE_RECALBOX_QT6
select BR2_PACKAGE_QT6BASE_EGLFS if BR2_PACKAGE_HAS_LIBEGL
select BR2_PACKAGE_QT6SVG
select BR2_PACKAGE_QT6WAYLAND if BR2_PACKAGE_WAYLAND
+
+config BR2_PACKAGE_STEAMDECK_SUPPORT
+ bool "Valve Steamdeck support"
+ depends on BR2_x86_64
+ select BR2_PACKAGE_VALVE_HARDWARE_AUDIO_PROCESSING
+
+config BR2_PACKAGE_USE_VOLUMED
+ bool "Recalbox volumed support"
+ default y if \
+ BR2_PACKAGE_RECALBOX_TARGET_RPI1 ||\
+ BR2_PACKAGE_RECALBOX_TARGET_RPIZERO2 ||\
+ BR2_PACKAGE_RECALBOX_TARGET_RPIZERO2LEGACY ||\
+ BR2_PACKAGE_RECALBOX_TARGET_RPI3 ||\
+ BR2_PACKAGE_RECALBOX_TARGET_RPI4 ||\
+ BR2_PACKAGE_RECALBOX_TARGET_RPI4_64 ||\
+ BR2_PACKAGE_RECALBOX_TARGET_RPI5_64 ||\
+ BR2_PACKAGE_RECALBOX_TARGET_X86_64
+ select BR2_PACKAGE_RECALBOX_VOLUMED
diff --git a/package/recalbox-system/rpi3/recalbox.conf b/package/recalbox-system/rpi3/recalbox.conf
index 12bdfc6e51e76c956c678e50202700239f751963..8253c7aec9c634cc106e46e524cd70e20d72fcb4 100644
--- a/package/recalbox-system/rpi3/recalbox.conf
+++ b/package/recalbox-system/rpi3/recalbox.conf
@@ -52,6 +52,19 @@ system.api.enabled=0
## openssl passwd -1 your_password
;system.default_password=
+## Volumed options
+## This option lets you configure a hotkey for volumed
+## The value is: Controller name:id of the button
+## pressing hotkey + vol+ or vol- will change backlight intensity instead of audio volume
+## Currently know hotkeys for handhelds:
+## Valve Steam Deck (both LCD & OLED): Steam Deck:316 <- should be set automatically
+## Asus Rog Ally: Microsoft X-Box 360 pad:314
+;system.volumed.hotkey=
+
+## This option (boolean) indicates to read volume from any EV_ABS/ABS_VOLUME devices
+## like the PiBoy DMG
+;system.volumed.enable_abs_volume=0
+
## EmulationStation
### menu style
### default -> default all options menu
diff --git a/package/recalbox-system/rpi4_64/recalbox.conf b/package/recalbox-system/rpi4_64/recalbox.conf
index 07303844f2d24792330543f75a43c0875ac2e0f3..371cc75eb2533af94c0cd04b5cb7e5918e136bbd 100644
--- a/package/recalbox-system/rpi4_64/recalbox.conf
+++ b/package/recalbox-system/rpi4_64/recalbox.conf
@@ -52,6 +52,19 @@ system.api.enabled=0
## openssl passwd -1 your_password
;system.default_password=
+## Volumed options
+## This option lets you configure a hotkey for volumed
+## The value is: Controller name:id of the button
+## pressing hotkey + vol+ or vol- will change backlight intensity instead of audio volume
+## Currently know hotkeys for handhelds:
+## Valve Steam Deck (both LCD & OLED): Steam Deck:316 <- should be set automatically
+## Asus Rog Ally: Microsoft X-Box 360 pad:314
+;system.volumed.hotkey=
+
+## This option (boolean) indicates to read volume from any EV_ABS/ABS_VOLUME devices
+## like the PiBoy DMG
+;system.volumed.enable_abs_volume=0
+
## EmulationStation
### menu style
### default -> default all options menu
diff --git a/package/recalbox-system/rpi5_64/recalbox.conf b/package/recalbox-system/rpi5_64/recalbox.conf
index bcf9580b0fa296bc0d312cdf00bab1c6bc4eb40b..0faa5e330cb859c74d6c0ff554f3e0170ddbb656 100644
--- a/package/recalbox-system/rpi5_64/recalbox.conf
+++ b/package/recalbox-system/rpi5_64/recalbox.conf
@@ -53,6 +53,19 @@ system.api.enabled=0
## openssl passwd -1 your_password
;system.default_password=
+## Volumed options
+## This option lets you configure a hotkey for volumed
+## The value is: Controller name:id of the button
+## pressing hotkey + vol+ or vol- will change backlight intensity instead of audio volume
+## Currently know hotkeys for handhelds:
+## Valve Steam Deck (both LCD & OLED): Steam Deck:316 <- should be set automatically
+## Asus Rog Ally: Microsoft X-Box 360 pad:314
+;system.volumed.hotkey=
+
+## This option (boolean) indicates to read volume from any EV_ABS/ABS_VOLUME devices
+## like the PiBoy DMG
+;system.volumed.enable_abs_volume=0
+
## EmulationStation
### menu style
### default -> default all options menu
diff --git a/package/recalbox-system/x86_64/recalbox.conf b/package/recalbox-system/x86_64/recalbox.conf
index 3dff6308b9b4a3600ab1b2ef3bedf6591f4ae138..9b5493ccfcae2648b24264b407ffb5ef53291139 100644
--- a/package/recalbox-system/x86_64/recalbox.conf
+++ b/package/recalbox-system/x86_64/recalbox.conf
@@ -42,6 +42,19 @@ system.api.enabled=0
## openssl passwd -1 your_password
;system.default_password=
+## Volumed options
+## This option lets you configure a hotkey for volumed
+## The value is: Controller name:id of the button
+## pressing hotkey + vol+ or vol- will change backlight intensity instead of audio volume
+## Currently know hotkeys for handhelds:
+## Valve Steam Deck (both LCD & OLED): Steam Deck:316 <- should be set automatically
+## Asus Rog Ally: Microsoft X-Box 360 pad:314
+;system.volumed.hotkey=
+
+## This option (boolean) indicates to read volume from any EV_ABS/ABS_VOLUME devices
+## like the PiBoy DMG
+;system.volumed.enable_abs_volume=0
+
## EmulationStation
### menu style
### default -> default all options menu
@@ -289,8 +302,9 @@ updates.type=stable
## is redefined in the emulator
## Set game resolution for emulators
-## Please don't modify this setting
-## This arch does not support the video mode switch
+## use 'default' for using the default resolution
+## use 'auto' : switches to 1280x720 if supported, else keep the current resolution
+## use any supported resolution, eg: 1280x720. This will force the screen resolution.
## (string)
global.videomode=default
diff --git a/package/recalbox-volumed/S06volumed b/package/recalbox-volumed/S06volumed
new file mode 100755
index 0000000000000000000000000000000000000000..f3e45ca044a84d66f8e85fe810c44f517d3627de
--- /dev/null
+++ b/package/recalbox-volumed/S06volumed
@@ -0,0 +1,44 @@
+#!/bin/bash
+#
+# Starts volumed.
+#
+systemsetting="recalbox_settings"
+[ -f /recalbox/share/system/recalbox.conf ] && RECALBOX_CONF=/recalbox/share/system/recalbox.conf || RECALBOX_CONF=/boot/recalbox-backup.conf
+
+start() {
+ printf "Starting volumed: "
+ HOTKEY="$($systemsetting -command load -key system.volumed.hotkey -source "$RECALBOX_CONF")"
+ ENABLE_ABS_VOLUME="$($systemsetting -command load -key system.volumed.enable_abs_volume -source "$RECALBOX_CONF")"
+ VOLUMED_OPTIONS=()
+ [ -n "$HOTKEY" ] && VOLUMED_OPTIONS+=("--hotkey-code" "$HOTKEY")
+ [ -n "$ENABLE_ABS_VOLUME" ] && VOLUMED_OPTIONS+=(--enable-abs-volume)
+ start-stop-daemon -S -x /usr/bin/volumed -- "${VOLUMED_OPTIONS[@]}"
+ echo "OK"
+}
+stop() {
+ printf "Stopping volumed: "
+ killall volumed
+ echo "OK"
+}
+restart() {
+ stop
+ start
+}
+
+case "$1" in
+ start)
+ start
+ ;;
+ stop)
+ stop
+ ;;
+ restart|reload)
+ restart
+ ;;
+ *)
+ echo "Usage: $0 {start|stop|restart}"
+ exit 1
+esac
+
+exit $?
+
diff --git a/package/recalbox-volumed/recalbox-volumed.mk b/package/recalbox-volumed/recalbox-volumed.mk
index f5c2e7c91f9b60d34c05d19ab0e9c8d1b569400b..05a2d6f216b2736d9a07b83a184bddb7520e5f07 100644
--- a/package/recalbox-volumed/recalbox-volumed.mk
+++ b/package/recalbox-volumed/recalbox-volumed.mk
@@ -12,4 +12,11 @@ RECALBOX_VOLUMED_LICENSE_FILES = LICENSE
RECALBOX_VOLUMED_DEPENDENCIES = pulseaudio
RECALBOX_VOLUMED_AUTORECONF = YES
+define RECALBOX_VOLUMED_INSTALL_INIT_CMDS
+ $(INSTALL) -D -m 0755 $(RECALBOX_VOLUMED_PKGDIR)/S06volumed $(TARGET_DIR)/etc/init.d/S06volumed
+ $(INSTALL) -D -m 0644 $(RECALBOX_VOLUMED_PKGDIR)/volumed.rules $(TARGET_DIR)/etc/udev/rules.d/99-volumed.rules
+endef
+
+RECALBOX_VOLUMED_POST_INSTALL_TARGET_HOOKS += RECALBOX_VOLUMED_INSTALL_INIT_CMDS
+
$(eval $(autotools-package))
diff --git a/package/recalbox-volumed/volumed.rules b/package/recalbox-volumed/volumed.rules
new file mode 100644
index 0000000000000000000000000000000000000000..e0d4e0b8d0f71c313be3778858c979ee0c784b9f
--- /dev/null
+++ b/package/recalbox-volumed/volumed.rules
@@ -0,0 +1 @@
+KERNEL=="event*", ACTION=="add|remove", SUBSYSTEM=="input", RUN+="/usr/bin/killall -sighup volumed"
diff --git a/package/fbv-recalbox/Config.in b/package/utilities/recalbox-fbv/Config.in
similarity index 84%
rename from package/fbv-recalbox/Config.in
rename to package/utilities/recalbox-fbv/Config.in
index 3d66b368a2e28419ba5ac0d7677500118a3c4c4b..69276917b53eb3e025c3ab872dd28df13906d304 100644
--- a/package/fbv-recalbox/Config.in
+++ b/package/utilities/recalbox-fbv/Config.in
@@ -1,5 +1,5 @@
-config BR2_PACKAGE_FBV_RECALBOX
- bool "fbv-recalbox"
+config BR2_PACKAGE_RECALBOX_FBV
+ bool "recalbox-fbv"
select BR2_PACKAGE_LIBPNG
select BR2_PACKAGE_JPEG
select BR2_PACKAGE_GIFLIB
diff --git a/package/utilities/recalbox-fbv/recalbox-fbv.mk b/package/utilities/recalbox-fbv/recalbox-fbv.mk
new file mode 100644
index 0000000000000000000000000000000000000000..56524c641fa50c55a3875744d57c389b54ccdd67
--- /dev/null
+++ b/package/utilities/recalbox-fbv/recalbox-fbv.mk
@@ -0,0 +1,31 @@
+################################################################################
+#
+# fbv - Recalbox version
+#
+################################################################################
+
+RECALBOX_FBV_VERSION = custom
+RECALBOX_FBV_SITE = $(TOPDIR)/../projects/recalbox-fbv
+RECALBOX_FBV_SITE_METHOD = local
+RECALBOX_FBV_LICENSE = GPL-2.0
+RECALBOX_FBV_LICENSE_FILES = COPYING
+RECALBOX_FBV_DEPENDENCIES = libpng jpeg giflib
+
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_C_ARCHIVE_CREATE=" qcs "
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_C_ARCHIVE_FINISH=true
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_CXX_ARCHIVE_CREATE=" qcs "
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_CXX_ARCHIVE_FINISH=true
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_AR="$(TARGET_CC)-ar"
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_C_COMPILER="$(TARGET_CC)"
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_CXX_COMPILER="$(TARGET_CXX)"
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_LINKER="$(TARGET_LD)"
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_C_FLAGS="$(COMPILER_COMMONS_CFLAGS_EXE)"
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_CXX_FLAGS="$(COMPILER_COMMONS_CXXFLAGS_EXE)"
+RECALBOX_FBV_CONF_OPTS += -DCMAKE_LINKER_EXE_FLAGS="$(COMPILER_COMMONS_LDFLAGS_EXE)"
+RECALBOX_FBV_CONF_OPTS += -DOPTION_RECALBOX_PRODUCTION_BUILD=true
+
+define RECALBOX_FBV_INSTALL_TARGET_CMDS
+ $(INSTALL) -D $(@D)/fbv2 $(TARGET_DIR)/usr/bin/
+endef
+
+$(eval $(cmake-package))
diff --git a/package/xpadneo/0001-btn-mode-brought-back.patch b/package/xpadneo/0001-btn-mode-brought-back.patch
deleted file mode 100644
index 619fbde39ef1b64b79b0d31442dc57d5016ad6ea..0000000000000000000000000000000000000000
--- a/package/xpadneo/0001-btn-mode-brought-back.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-diff --git a/hid-xpadneo/src/hid-xpadneo.c b/hid-xpadneo/src/hid-xpadneo.c
-index 31fc9ec..19e1991 100644
---- a/hid-xpadneo/src/hid-xpadneo.c
-+++ b/hid-xpadneo/src/hid-xpadneo.c
-@@ -1020,31 +1020,6 @@ static int xpadneo_event(struct hid_device *hdev, struct hid_field *field,
- xdata->last_abs_rz = value;
- goto combine_z_axes;
- }
-- } else if (!param_disable_shift_mode && (usage->type == EV_KEY)
-- && (usage->code == BTN_XBOX)) {
-- /*
-- * Handle the Xbox logo button: We want to cache the button
-- * down event to allow for profile switching. The button will
-- * act as a shift key and only send the input events when
-- * released without pressing an additional button.
-- */
-- if (!xdata->xbox_button_down && (value == 1)) {
-- /* cache this event */
-- xdata->xbox_button_down = true;
-- } else if (xdata->xbox_button_down && (value == 0)) {
-- xdata->xbox_button_down = false;
-- if (xdata->profile_switched) {
-- xdata->profile_switched = false;
-- } else {
-- /* replay cached event */
-- input_report_key(gamepad, BTN_XBOX, 1);
-- input_sync(gamepad);
-- /* synthesize the release to remove the scan code */
-- input_report_key(gamepad, BTN_XBOX, 0);
-- input_sync(gamepad);
-- }
-- }
-- goto stop_processing;
- } else if ((usage->type == EV_KEY) && (usage->code == BTN_SHARE)) {
- /* move the Share button to the keyboard device */
- if (!keyboard)
-@@ -1052,31 +1027,6 @@ static int xpadneo_event(struct hid_device *hdev, struct hid_field *field,
- input_report_key(keyboard, BTN_SHARE, value);
- xdata->keyboard_sync = true;
- goto stop_processing;
-- } else if (xdata->xbox_button_down && (usage->type == EV_KEY)) {
-- if (!(xdata->quirks & XPADNEO_QUIRK_USE_HW_PROFILES)) {
-- switch (usage->code) {
-- case BTN_A:
-- if (value == 1)
-- xpadneo_switch_profile(xdata, 0, true);
-- goto stop_processing;
-- case BTN_B:
-- if (value == 1)
-- xpadneo_switch_profile(xdata, 1, true);
-- goto stop_processing;
-- case BTN_X:
-- if (value == 1)
-- xpadneo_switch_profile(xdata, 2, true);
-- goto stop_processing;
-- case BTN_Y:
-- if (value == 1)
-- xpadneo_switch_profile(xdata, 3, true);
-- goto stop_processing;
-- case BTN_SELECT:
-- if (value == 1)
-- xpadneo_toggle_mouse(xdata);
-- goto stop_processing;
-- }
-- }
- }
-
- /* Let hid-core handle the event */
diff --git a/package/xpadneo/xpadneo.mk b/package/xpadneo/xpadneo.mk
index e1dff3a87352ba5210f507224270aa30eb7f18df..b0d05783cc8d095b3271f946a92a0587ee9347b3 100644
--- a/package/xpadneo/xpadneo.mk
+++ b/package/xpadneo/xpadneo.mk
@@ -4,7 +4,7 @@
#
################################################################################
-XPADNEO_VERSION = cd256807c5f916735ae18749c43d5b0bd73240fa
+XPADNEO_VERSION = a16acb03e7be191d47ebfbc8ca1d5223422dac3e
XPADNEO_SITE = https://github.com/atar-axis/xpadneo
XPADNEO_SITE_METHOD = git
XPADNEO_LICENSE = GPL-3.0
@@ -12,6 +12,7 @@ XPADNEO_MODULE_SUBDIRS = hid-xpadneo/src
define XPADNEO_COPY_CMDS
$(INSTALL) -D -m 0644 -t $(TARGET_DIR)/etc/modprobe.d $(@D)/hid-xpadneo/etc-modprobe.d/xpadneo.conf
+ echo "options hid_xpadneo disable_shift_mode=1" >>$(TARGET_DIR)/etc/modprobe.d/xpadneo.conf
$(INSTALL) -D -m 0644 -t $(TARGET_DIR)/etc/udev/rules.d $(@D)/hid-xpadneo/etc-udev-rules.d/60-xpadneo.rules
endef
diff --git a/projects/configgen/configgen/generators/dolphin/dolphinGenerator.py b/projects/configgen/configgen/generators/dolphin/dolphinGenerator.py
index ab9a9b588c3200970e456ce9cb68227bc73329c6..8991618adf2cc05a580587053107a2ea83fafe2a 100644
--- a/projects/configgen/configgen/generators/dolphin/dolphinGenerator.py
+++ b/projects/configgen/configgen/generators/dolphin/dolphinGenerator.py
@@ -396,4 +396,4 @@ class DolphinGenerator(Generator):
commandArray = [recalboxFiles.recalboxBins[system.Emulator], "-v", video_driver, "-C", "Logger.Options.Verbosity=5", "-C", "Logger.Logs.CONSOLE=true", "-C", "Logger.Logs.CORE=true", "-C", "Logger.Logs.Video=true", "-e", args.rom]
if system.HasArgs: commandArray.extend(system.Args)
- return Command(videomode=system.VideoMode, array=commandArray, env={"XDG_CONFIG_HOME": recalboxFiles.CONF, "XDG_DATA_HOME": recalboxFiles.SAVES, "QT_QPA_PLATFORM": "xcb"}, postExec=[deleteCrtDesktopRes])
+ return Command(videomode=system.VideoMode, array=commandArray, env={"SDL_JOYSTICK_HIDAPI": "0", "SDL_GAMEPAD_HIDAPI": "0", "XDG_CONFIG_HOME": recalboxFiles.CONF, "XDG_DATA_HOME": recalboxFiles.SAVES, "QT_QPA_PLATFORM": "xcb"}, postExec=[deleteCrtDesktopRes])
diff --git a/projects/configgen/configgen/generators/libretro/libretroCores.py b/projects/configgen/configgen/generators/libretro/libretroCores.py
index ff2657a2e9dcf01d2160ff97b2f82232803c7554..0755b499c814f7c54531df9250b793a60f9cc5ef 100644
--- a/projects/configgen/configgen/generators/libretro/libretroCores.py
+++ b/projects/configgen/configgen/generators/libretro/libretroCores.py
@@ -396,6 +396,30 @@ class LibretroCores:
else:
coreSetting.setString("dolphin_skip_ipl", '"enabled"')
+ @staticmethod
+ def configureMelonDS(coreSettings: keyValueSettings):
+ if LibretroCores.touchscreen():
+ coreSettings.setString('melonds_touch_mode', '"Touch"')
+ pass
+
+ @staticmethod
+ def configureDesmume(coreSettings: keyValueSettings):
+ if LibretroCores.touchscreen():
+ coreSettings.setString('desmume_pointer_type', '"touch"')
+ pass
+
+ @staticmethod
+ def touchscreen() -> bool:
+ import pyudev
+
+ context = pyudev.Context()
+ for device in context.list_devices(subsystem='input'):
+ if device.device_node and "event" in device.device_node:
+ if device.properties.get("ID_INPUT_TOUCHSCREEN") == "1":
+ return True
+
+ return False
+
# Fill cores configuration
def fillCoresConfiguration(self):
settings = self.settings
@@ -419,6 +443,8 @@ class LibretroCores:
"scummvm": self.configureScummvm,
"hatari": self.configureAtariST,
"hatarib": self.configureAtariSTNew,
+ "melonds": LibretroCores.configureMelonDS,
+ "desmume": LibretroCores.configureDesmume,
}
# Get handler and execute
diff --git a/projects/frontend/data/resources/menu.xml b/projects/frontend/data/resources/menu.xml
index 1ec267e4c73aeb701af891aac2f6c3eda48eee76..c95a35bac7b8970513f347a4ff2e05a526c557ad 100644
--- a/projects/frontend/data/resources/menu.xml
+++ b/projects/frontend/data/resources/menu.xml
@@ -271,8 +271,8 @@
-
-
+
+
@@ -459,9 +459,9 @@
-->