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 @@ --> - +
- +