From 1d8f8a9a597e311646bbd023eda102adb51d6c08 Mon Sep 17 00:00:00 2001 From: Sasha Levin Date: Sun, 13 Oct 2024 16:03:29 -0400 Subject: [PATCH] Fixes for 6.6 Signed-off-by: Sasha Levin --- ...s-add-rog-ally-n-key-id-and-keycodes.patch | 63 +++ ...add-rog-ally-x-prod-id-to-quirk-list.patch | 49 ++ queue-6.6/hid-asus-add-rog-z13-lightbar.patch | 49 ++ ...ve-i2c_hid_quirk_set_pwr_wakeup_dev-.patch | 56 ++ ...-hid-renumber-i2c_hid_quirk_-defines.patch | 46 ++ ...-set_power-sleep-for-cirque-touchpad.patch | 83 +++ ...00-added-driver-for-gpios-of-mcp2200.patch | 480 ++++++++++++++++++ ...add-missing-dependency-on-regmap_i2c.patch | 36 ++ ...add-missing-dependency-on-regmap_i2c.patch | 36 ++ ...bmc-hwmon-relabel-columbiaville-to-c.patch | 39 ++ ...add-missing-dependency-on-regmap_i2c.patch | 36 ++ ...add-missing-dependency-on-regmap_i2c.patch | 45 ++ queue-6.6/series | 13 + ...oid-address-calculations-via-out-of-.patch | 101 ++++ 14 files changed, 1132 insertions(+) create mode 100644 queue-6.6/hid-asus-add-rog-ally-n-key-id-and-keycodes.patch create mode 100644 queue-6.6/hid-asus-add-rog-ally-x-prod-id-to-quirk-list.patch create mode 100644 queue-6.6/hid-asus-add-rog-z13-lightbar.patch create mode 100644 queue-6.6/hid-i2c-hid-remove-i2c_hid_quirk_set_pwr_wakeup_dev-.patch create mode 100644 queue-6.6/hid-i2c-hid-renumber-i2c_hid_quirk_-defines.patch create mode 100644 queue-6.6/hid-i2c-hid-skip-set_power-sleep-for-cirque-touchpad.patch create mode 100644 queue-6.6/hid-mcp2200-added-driver-for-gpios-of-mcp2200.patch create mode 100644 queue-6.6/hwmon-adm9240-add-missing-dependency-on-regmap_i2c.patch create mode 100644 queue-6.6/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch create mode 100644 queue-6.6/hwmon-intel-m10-bmc-hwmon-relabel-columbiaville-to-c.patch create mode 100644 queue-6.6/hwmon-mc34vr500-add-missing-dependency-on-regmap_i2c.patch create mode 100644 queue-6.6/hwmon-tmp513-add-missing-dependency-on-regmap_i2c.patch create mode 100644 queue-6.6/wifi-mac80211-avoid-address-calculations-via-out-of-.patch diff --git a/queue-6.6/hid-asus-add-rog-ally-n-key-id-and-keycodes.patch b/queue-6.6/hid-asus-add-rog-ally-n-key-id-and-keycodes.patch new file mode 100644 index 00000000000..b88fa2e76b6 --- /dev/null +++ b/queue-6.6/hid-asus-add-rog-ally-n-key-id-and-keycodes.patch @@ -0,0 +1,63 @@ +From e421bf2d3a9e1ae62ed0eb5d00f0d229ccddfe67 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 Apr 2024 21:04:01 +1200 +Subject: HID: asus: add ROG Ally N-Key ID and keycodes + +From: Luke D. Jones + +[ Upstream commit 08b50c6b0b0940a304b481346cc187d489c6a751 ] + +A handful of buttons on the ROG Ally are not actually part of the xpad +device and are instead keyboard keys (a typical use of the MCU that asus +uses). We attach a group of F key codes which aren't used much and +which the handheld community has already accepted as defaults here. + +Signed-off-by: Luke D. Jones +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-asus.c | 8 +++++++- + drivers/hid/hid-ids.h | 1 + + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c +index 88cbb2fe6ac8c..0616df83adc75 100644 +--- a/drivers/hid/hid-asus.c ++++ b/drivers/hid/hid-asus.c +@@ -881,7 +881,10 @@ static int asus_input_mapping(struct hid_device *hdev, + case 0xb3: asus_map_key_clear(KEY_PROG3); break; /* Fn+Left next aura */ + case 0x6a: asus_map_key_clear(KEY_F13); break; /* Screenpad toggle */ + case 0x4b: asus_map_key_clear(KEY_F14); break; /* Arrows/Pg-Up/Dn toggle */ +- ++ case 0xa5: asus_map_key_clear(KEY_F15); break; /* ROG Ally left back */ ++ case 0xa6: asus_map_key_clear(KEY_F16); break; /* ROG Ally QAM button */ ++ case 0xa7: asus_map_key_clear(KEY_F17); break; /* ROG Ally ROG long-press */ ++ case 0xa8: asus_map_key_clear(KEY_F18); break; /* ROG Ally ROG long-press-release */ + + default: + /* ASUS lazily declares 256 usages, ignore the rest, +@@ -1273,6 +1276,9 @@ static const struct hid_device_id asus_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3), + QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, ++ USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY), ++ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD), + QUIRK_ROG_CLAYMORE_II_KEYBOARD }, +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index f1d49db9fddce..1301d15e5680b 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -208,6 +208,7 @@ + #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD 0x1866 + #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD2 0x19b6 + #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3 0x1a30 ++#define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY 0x1abe + #define USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD 0x196b + #define USB_DEVICE_ID_ASUSTEK_FX503VD_KEYBOARD 0x1869 + +-- +2.43.0 + diff --git a/queue-6.6/hid-asus-add-rog-ally-x-prod-id-to-quirk-list.patch b/queue-6.6/hid-asus-add-rog-ally-x-prod-id-to-quirk-list.patch new file mode 100644 index 00000000000..2a8fc6ab58c --- /dev/null +++ b/queue-6.6/hid-asus-add-rog-ally-x-prod-id-to-quirk-list.patch @@ -0,0 +1,49 @@ +From 2cf24a6846682f82612e3641ddecd939bb0e4cb6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 25 Jul 2024 10:31:25 +1200 +Subject: hid-asus: add ROG Ally X prod ID to quirk list + +From: Luke D. Jones + +[ Upstream commit d1aa95e86f178dc597e80228cd9bd81fc3510f34 ] + +The new ASUS ROG Ally X functions almost exactly the same as the previous +model, so we can use the same quirks. + +Signed-off-by: Luke D. Jones +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-asus.c | 3 +++ + drivers/hid/hid-ids.h | 1 + + 2 files changed, 4 insertions(+) + +diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c +index fde6307d1db0c..84625e817ce95 100644 +--- a/drivers/hid/hid-asus.c ++++ b/drivers/hid/hid-asus.c +@@ -1282,6 +1282,9 @@ static const struct hid_device_id asus_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY), + QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, ++ USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X), ++ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD), + QUIRK_ROG_CLAYMORE_II_KEYBOARD }, +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 17f7d3a3f57b0..567000a5888b7 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -210,6 +210,7 @@ + #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3 0x1a30 + #define USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR 0x18c6 + #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 + #define USB_DEVICE_ID_ASUSTEK_FX503VD_KEYBOARD 0x1869 + +-- +2.43.0 + diff --git a/queue-6.6/hid-asus-add-rog-z13-lightbar.patch b/queue-6.6/hid-asus-add-rog-z13-lightbar.patch new file mode 100644 index 00000000000..8370ff1fac4 --- /dev/null +++ b/queue-6.6/hid-asus-add-rog-z13-lightbar.patch @@ -0,0 +1,49 @@ +From 09bd79b9f288376555f58a9a101ec1883ab8905b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 16 Apr 2024 21:04:02 +1200 +Subject: HID: asus: add ROG Z13 lightbar + +From: Luke D. Jones + +[ Upstream commit e901f10adb1f387fff1082297065a0da0191b83d ] + +Add init of the lightbar which is a small panel on the back of the ASUS +ROG Z13 and uses the same MCU as keyboards. + +Signed-off-by: Luke D. Jones +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-asus.c | 3 +++ + drivers/hid/hid-ids.h | 1 + + 2 files changed, 4 insertions(+) + +diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c +index 0616df83adc75..fde6307d1db0c 100644 +--- a/drivers/hid/hid-asus.c ++++ b/drivers/hid/hid-asus.c +@@ -1276,6 +1276,9 @@ static const struct hid_device_id asus_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD3), + QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, ++ USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR), ++ QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, + { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, + USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY), + QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index 1301d15e5680b..17f7d3a3f57b0 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -208,6 +208,7 @@ + #define USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD 0x1866 + #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_NKEY_ALLY 0x1abe + #define USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD 0x196b + #define USB_DEVICE_ID_ASUSTEK_FX503VD_KEYBOARD 0x1869 +-- +2.43.0 + diff --git a/queue-6.6/hid-i2c-hid-remove-i2c_hid_quirk_set_pwr_wakeup_dev-.patch b/queue-6.6/hid-i2c-hid-remove-i2c_hid_quirk_set_pwr_wakeup_dev-.patch new file mode 100644 index 00000000000..31b3adbab05 --- /dev/null +++ b/queue-6.6/hid-i2c-hid-remove-i2c_hid_quirk_set_pwr_wakeup_dev-.patch @@ -0,0 +1,56 @@ +From 3bc0d71cbc21f540ebd92240e0bb5d1a80de02ac Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 2 Dec 2023 23:46:13 +0100 +Subject: HID: i2c-hid: Remove I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV quirk + +From: Hans de Goede + +[ Upstream commit bd008acdac45011f2246ec2518ef19c2da9e6008 ] + +Re-trying the power-on command on failure on all devices should +not be a problem, drop the I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV quirk +and simply retry power-on on all devices. + +Reviewed-by: Douglas Anderson +Signed-off-by: Hans de Goede +Signed-off-by: Jiri Kosina +Stable-dep-of: 26dd6a5667f5 ("HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system suspend") +Signed-off-by: Sasha Levin +--- + drivers/hid/i2c-hid/i2c-hid-core.c | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c +index 799ad0ef9c4af..59dececbb340e 100644 +--- a/drivers/hid/i2c-hid/i2c-hid-core.c ++++ b/drivers/hid/i2c-hid/i2c-hid-core.c +@@ -44,7 +44,6 @@ + #include "i2c-hid.h" + + /* quirks to control the device */ +-#define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV BIT(0) + #define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1) + #define I2C_HID_QUIRK_BOGUS_IRQ BIT(4) + #define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5) +@@ -119,8 +118,6 @@ static const struct i2c_hid_quirks { + __u16 idProduct; + __u32 quirks; + } i2c_hid_quirks[] = { +- { USB_VENDOR_ID_WEIDA, HID_ANY_ID, +- I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV }, + { I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288, + I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, + { I2C_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_VOYO_WINPAD_A15, +@@ -389,8 +386,7 @@ static int i2c_hid_set_power(struct i2c_hid *ihid, int power_state) + * The call will get a return value (EREMOTEIO) but device will be + * triggered and activated. After that, it goes like a normal device. + */ +- if (power_state == I2C_HID_PWR_ON && +- ihid->quirks & I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV) { ++ if (power_state == I2C_HID_PWR_ON) { + ret = i2c_hid_set_power_command(ihid, I2C_HID_PWR_ON); + + /* Device was already activated */ +-- +2.43.0 + diff --git a/queue-6.6/hid-i2c-hid-renumber-i2c_hid_quirk_-defines.patch b/queue-6.6/hid-i2c-hid-renumber-i2c_hid_quirk_-defines.patch new file mode 100644 index 00000000000..d4e1b763e7e --- /dev/null +++ b/queue-6.6/hid-i2c-hid-renumber-i2c_hid_quirk_-defines.patch @@ -0,0 +1,46 @@ +From 6fcec6b4443ae0a3012f750c9f6f8fba68a07225 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Sat, 2 Dec 2023 23:46:14 +0100 +Subject: HID: i2c-hid: Renumber I2C_HID_QUIRK_ defines + +From: Hans de Goede + +[ Upstream commit 7d7a252842ecafb9b4541dc8470907e97bc6df62 ] + +The quirks variable and the I2C_HID_QUIRK_ defines are never used / +exported outside of the i2c-hid code renumber them to start at +BIT(0) again. + +Reviewed-by: Douglas Anderson +Signed-off-by: Hans de Goede +Signed-off-by: Jiri Kosina +Stable-dep-of: 26dd6a5667f5 ("HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system suspend") +Signed-off-by: Sasha Levin +--- + drivers/hid/i2c-hid/i2c-hid-core.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c +index 59dececbb340e..6f1eb77cbcded 100644 +--- a/drivers/hid/i2c-hid/i2c-hid-core.c ++++ b/drivers/hid/i2c-hid/i2c-hid-core.c +@@ -44,11 +44,11 @@ + #include "i2c-hid.h" + + /* quirks to control the device */ +-#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1) +-#define I2C_HID_QUIRK_BOGUS_IRQ BIT(4) +-#define I2C_HID_QUIRK_RESET_ON_RESUME BIT(5) +-#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(6) +-#define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(7) ++#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(0) ++#define I2C_HID_QUIRK_BOGUS_IRQ BIT(1) ++#define I2C_HID_QUIRK_RESET_ON_RESUME BIT(2) ++#define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(3) ++#define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(4) + + /* Command opcodes */ + #define I2C_HID_OPCODE_RESET 0x01 +-- +2.43.0 + diff --git a/queue-6.6/hid-i2c-hid-skip-set_power-sleep-for-cirque-touchpad.patch b/queue-6.6/hid-i2c-hid-skip-set_power-sleep-for-cirque-touchpad.patch new file mode 100644 index 00000000000..d2fd30167b8 --- /dev/null +++ b/queue-6.6/hid-i2c-hid-skip-set_power-sleep-for-cirque-touchpad.patch @@ -0,0 +1,83 @@ +From 8dd39ae5bed9ae36ecf63d663095ba7cb7259d74 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Mon, 15 Jan 2024 12:50:51 +0800 +Subject: HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system + suspend + +From: Kai-Heng Feng + +[ Upstream commit 26dd6a5667f500c5d991f90a9ac5998a71afaf5c ] + +There's a Cirque touchpad that wakes system up without anything touched +the touchpad. The input report is empty when this happens. +The reason is stated in HID over I2C spec, 7.2.8.2: +"If the DEVICE wishes to wake the HOST from its low power state, it can +issue a wake by asserting the interrupt." + +This is fine if OS can put system back to suspend by identifying input +wakeup count stays the same on resume, like Chrome OS Dark Resume [0]. +But for regular distro such policy is lacking. + +Though the change doesn't bring any impact on power consumption for +touchpad is minimal, other i2c-hid device may depends on SLEEP control +power. So use a quirk to limit the change scope. + +[0] https://chromium.googlesource.com/chromiumos/platform2/+/HEAD/power_manager/docs/dark_resume.md + +Signed-off-by: Kai-Heng Feng +Reviewed-by: Douglas Anderson +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/hid-ids.h | 3 +++ + drivers/hid/i2c-hid/i2c-hid-core.c | 6 +++++- + 2 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index f7bf744ba7548..f1d49db9fddce 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -298,6 +298,9 @@ + + #define USB_VENDOR_ID_CIDC 0x1677 + ++#define I2C_VENDOR_ID_CIRQUE 0x0488 ++#define I2C_PRODUCT_ID_CIRQUE_1063 0x1063 ++ + #define USB_VENDOR_ID_CJTOUCH 0x24b8 + #define USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0020 0x0020 + #define USB_DEVICE_ID_CJTOUCH_MULTI_TOUCH_0040 0x0040 +diff --git a/drivers/hid/i2c-hid/i2c-hid-core.c b/drivers/hid/i2c-hid/i2c-hid-core.c +index 6f1eb77cbcded..045db6f0fb4c4 100644 +--- a/drivers/hid/i2c-hid/i2c-hid-core.c ++++ b/drivers/hid/i2c-hid/i2c-hid-core.c +@@ -49,6 +49,7 @@ + #define I2C_HID_QUIRK_RESET_ON_RESUME BIT(2) + #define I2C_HID_QUIRK_BAD_INPUT_SIZE BIT(3) + #define I2C_HID_QUIRK_NO_WAKEUP_AFTER_RESET BIT(4) ++#define I2C_HID_QUIRK_NO_SLEEP_ON_SUSPEND BIT(5) + + /* Command opcodes */ + #define I2C_HID_OPCODE_RESET 0x01 +@@ -130,6 +131,8 @@ static const struct i2c_hid_quirks { + I2C_HID_QUIRK_RESET_ON_RESUME }, + { USB_VENDOR_ID_ITE, I2C_DEVICE_ID_ITE_LENOVO_LEGION_Y720, + I2C_HID_QUIRK_BAD_INPUT_SIZE }, ++ { I2C_VENDOR_ID_CIRQUE, I2C_PRODUCT_ID_CIRQUE_1063, ++ I2C_HID_QUIRK_NO_SLEEP_ON_SUSPEND }, + /* + * Sending the wakeup after reset actually break ELAN touchscreen controller + */ +@@ -945,7 +948,8 @@ static int i2c_hid_core_suspend(struct i2c_hid *ihid, bool force_poweroff) + return ret; + + /* Save some power */ +- i2c_hid_set_power(ihid, I2C_HID_PWR_SLEEP); ++ if (!(ihid->quirks & I2C_HID_QUIRK_NO_SLEEP_ON_SUSPEND)) ++ i2c_hid_set_power(ihid, I2C_HID_PWR_SLEEP); + + disable_irq(client->irq); + +-- +2.43.0 + diff --git a/queue-6.6/hid-mcp2200-added-driver-for-gpios-of-mcp2200.patch b/queue-6.6/hid-mcp2200-added-driver-for-gpios-of-mcp2200.patch new file mode 100644 index 00000000000..5574747b036 --- /dev/null +++ b/queue-6.6/hid-mcp2200-added-driver-for-gpios-of-mcp2200.patch @@ -0,0 +1,480 @@ +From a23b61ba38158deadb1529a59f4cbdc098b4c576 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 21 Sep 2023 18:49:28 +0200 +Subject: HID: mcp2200: added driver for GPIOs of MCP2200 + +From: Johannes Roith + +[ Upstream commit 740329d7120f8608ead64b0f3417c02ca1d6b32f ] + +Added a gpiochip compatible driver to control the 8 GPIOs of +the MCP2200 by using the HID interface. + +Using GPIOs with alternative functions (GP0<->SSPND, GP1<->USBCFG, +GP6<->RXLED, GP7<->TXLED) will reset the functions, if set (unset by +default). + +The driver was tested while also using the UART of the chip. Setting +and reading the GPIOs has no effect on the UART communication. However, +a reset is triggered after the CONFIGURE command. If the GPIO Direction +is constantly changed, this will affect the communication at low baud +rates. This is a hardware problem of the MCP2200 and is not caused by +the driver. + +Signed-off-by: Johannes Roith +Reviewed-by: Rahul Rameshbabu +Signed-off-by: Jiri Kosina +Signed-off-by: Sasha Levin +--- + drivers/hid/Kconfig | 9 + + drivers/hid/Makefile | 1 + + drivers/hid/hid-ids.h | 1 + + drivers/hid/hid-mcp2200.c | 392 ++++++++++++++++++++++++++++++++++++++ + 4 files changed, 403 insertions(+) + create mode 100644 drivers/hid/hid-mcp2200.c + +diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig +index 790aa908e2a78..9e2cde55b465c 100644 +--- a/drivers/hid/Kconfig ++++ b/drivers/hid/Kconfig +@@ -1300,6 +1300,15 @@ config HID_ALPS + Say Y here if you have a Alps touchpads over i2c-hid or usbhid + and want support for its special functionalities. + ++config HID_MCP2200 ++ tristate "Microchip MCP2200 HID USB-to-GPIO bridge" ++ depends on USB_HID && GPIOLIB ++ help ++ Provides GPIO functionality over USB-HID through MCP2200 device. ++ ++ To compile this driver as a module, choose M here: the module ++ will be called hid-mcp2200.ko. ++ + config HID_MCP2221 + tristate "Microchip MCP2221 HID USB-to-I2C/SMbus host support" + depends on USB_HID && I2C +diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile +index 8a06d0f840bcb..082a728eac600 100644 +--- a/drivers/hid/Makefile ++++ b/drivers/hid/Makefile +@@ -79,6 +79,7 @@ obj-$(CONFIG_HID_LOGITECH_HIDPP) += hid-logitech-hidpp.o + obj-$(CONFIG_HID_MACALLY) += hid-macally.o + obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o + obj-$(CONFIG_HID_MALTRON) += hid-maltron.o ++obj-$(CONFIG_HID_MCP2200) += hid-mcp2200.o + obj-$(CONFIG_HID_MCP2221) += hid-mcp2221.o + obj-$(CONFIG_HID_MAYFLASH) += hid-mf.o + obj-$(CONFIG_HID_MEGAWORLD_FF) += hid-megaworld.o +diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h +index f2e8fb357590f..f7bf744ba7548 100644 +--- a/drivers/hid/hid-ids.h ++++ b/drivers/hid/hid-ids.h +@@ -907,6 +907,7 @@ + #define USB_DEVICE_ID_PICK16F1454 0x0042 + #define USB_DEVICE_ID_PICK16F1454_V2 0xf2f7 + #define USB_DEVICE_ID_LUXAFOR 0xf372 ++#define USB_DEVICE_ID_MCP2200 0x00df + #define USB_DEVICE_ID_MCP2221 0x00dd + + #define USB_VENDOR_ID_MICROSOFT 0x045e +diff --git a/drivers/hid/hid-mcp2200.c b/drivers/hid/hid-mcp2200.c +new file mode 100644 +index 0000000000000..bf57f7f6caa08 +--- /dev/null ++++ b/drivers/hid/hid-mcp2200.c +@@ -0,0 +1,392 @@ ++// SPDX-License-Identifier: GPL-2.0-only ++/* ++ * MCP2200 - Microchip USB to GPIO bridge ++ * ++ * Copyright (c) 2023, Johannes Roith ++ * ++ * Datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/22228A.pdf ++ * App Note for HID: https://ww1.microchip.com/downloads/en/DeviceDoc/93066A.pdf ++ */ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "hid-ids.h" ++ ++/* Commands codes in a raw output report */ ++#define SET_CLEAR_OUTPUTS 0x08 ++#define CONFIGURE 0x10 ++#define READ_EE 0x20 ++#define WRITE_EE 0x40 ++#define READ_ALL 0x80 ++ ++/* MCP GPIO direction encoding */ ++enum MCP_IO_DIR { ++ MCP2200_DIR_OUT = 0x00, ++ MCP2200_DIR_IN = 0x01, ++}; ++ ++/* Altternative pin assignments */ ++#define TXLED 2 ++#define RXLED 3 ++#define USBCFG 6 ++#define SSPND 7 ++#define MCP_NGPIO 8 ++ ++/* CMD to set or clear a GPIO output */ ++struct mcp_set_clear_outputs { ++ u8 cmd; ++ u8 dummys1[10]; ++ u8 set_bmap; ++ u8 clear_bmap; ++ u8 dummys2[3]; ++} __packed; ++ ++/* CMD to configure the IOs */ ++struct mcp_configure { ++ u8 cmd; ++ u8 dummys1[3]; ++ u8 io_bmap; ++ u8 config_alt_pins; ++ u8 io_default_val_bmap; ++ u8 config_alt_options; ++ u8 baud_h; ++ u8 baud_l; ++ u8 dummys2[6]; ++} __packed; ++ ++/* CMD to read all parameters */ ++struct mcp_read_all { ++ u8 cmd; ++ u8 dummys[15]; ++} __packed; ++ ++/* Response to the read all cmd */ ++struct mcp_read_all_resp { ++ u8 cmd; ++ u8 eep_addr; ++ u8 dummy; ++ u8 eep_val; ++ u8 io_bmap; ++ u8 config_alt_pins; ++ u8 io_default_val_bmap; ++ u8 config_alt_options; ++ u8 baud_h; ++ u8 baud_l; ++ u8 io_port_val_bmap; ++ u8 dummys[5]; ++} __packed; ++ ++struct mcp2200 { ++ struct hid_device *hdev; ++ struct mutex lock; ++ struct completion wait_in_report; ++ u8 gpio_dir; ++ u8 gpio_val; ++ u8 gpio_inval; ++ u8 baud_h; ++ u8 baud_l; ++ u8 config_alt_pins; ++ u8 gpio_reset_val; ++ u8 config_alt_options; ++ int status; ++ struct gpio_chip gc; ++ u8 hid_report[16]; ++}; ++ ++/* this executes the READ_ALL cmd */ ++static int mcp_cmd_read_all(struct mcp2200 *mcp) ++{ ++ struct mcp_read_all *read_all; ++ int len, t; ++ ++ reinit_completion(&mcp->wait_in_report); ++ ++ mutex_lock(&mcp->lock); ++ ++ read_all = (struct mcp_read_all *) mcp->hid_report; ++ read_all->cmd = READ_ALL; ++ len = hid_hw_output_report(mcp->hdev, (u8 *) read_all, ++ sizeof(struct mcp_read_all)); ++ ++ mutex_unlock(&mcp->lock); ++ ++ if (len != sizeof(struct mcp_read_all)) ++ return -EINVAL; ++ ++ t = wait_for_completion_timeout(&mcp->wait_in_report, ++ msecs_to_jiffies(4000)); ++ if (!t) ++ return -ETIMEDOUT; ++ ++ /* return status, negative value if wrong response was received */ ++ return mcp->status; ++} ++ ++static void mcp_set_multiple(struct gpio_chip *gc, unsigned long *mask, ++ unsigned long *bits) ++{ ++ struct mcp2200 *mcp = gpiochip_get_data(gc); ++ u8 value; ++ int status; ++ struct mcp_set_clear_outputs *cmd; ++ ++ mutex_lock(&mcp->lock); ++ cmd = (struct mcp_set_clear_outputs *) mcp->hid_report; ++ ++ value = mcp->gpio_val & ~*mask; ++ value |= (*mask & *bits); ++ ++ cmd->cmd = SET_CLEAR_OUTPUTS; ++ cmd->set_bmap = value; ++ cmd->clear_bmap = ~(value); ++ ++ status = hid_hw_output_report(mcp->hdev, (u8 *) cmd, ++ sizeof(struct mcp_set_clear_outputs)); ++ ++ if (status == sizeof(struct mcp_set_clear_outputs)) ++ mcp->gpio_val = value; ++ ++ mutex_unlock(&mcp->lock); ++} ++ ++static void mcp_set(struct gpio_chip *gc, unsigned int gpio_nr, int value) ++{ ++ unsigned long mask = 1 << gpio_nr; ++ unsigned long bmap_value = value << gpio_nr; ++ ++ mcp_set_multiple(gc, &mask, &bmap_value); ++} ++ ++static int mcp_get_multiple(struct gpio_chip *gc, unsigned long *mask, ++ unsigned long *bits) ++{ ++ u32 val; ++ struct mcp2200 *mcp = gpiochip_get_data(gc); ++ int status; ++ ++ status = mcp_cmd_read_all(mcp); ++ if (status) ++ return status; ++ ++ val = mcp->gpio_inval; ++ *bits = (val & *mask); ++ return 0; ++} ++ ++static int mcp_get(struct gpio_chip *gc, unsigned int gpio_nr) ++{ ++ unsigned long mask = 0, bits = 0; ++ ++ mask = (1 << gpio_nr); ++ mcp_get_multiple(gc, &mask, &bits); ++ return bits > 0; ++} ++ ++static int mcp_get_direction(struct gpio_chip *gc, unsigned int gpio_nr) ++{ ++ struct mcp2200 *mcp = gpiochip_get_data(gc); ++ ++ return (mcp->gpio_dir & (MCP2200_DIR_IN << gpio_nr)) ++ ? GPIO_LINE_DIRECTION_IN : GPIO_LINE_DIRECTION_OUT; ++} ++ ++static int mcp_set_direction(struct gpio_chip *gc, unsigned int gpio_nr, ++ enum MCP_IO_DIR io_direction) ++{ ++ struct mcp2200 *mcp = gpiochip_get_data(gc); ++ struct mcp_configure *conf; ++ int status; ++ /* after the configure cmd we will need to set the outputs again */ ++ unsigned long mask = ~(mcp->gpio_dir); /* only set outputs */ ++ unsigned long bits = mcp->gpio_val; ++ /* Offsets of alternative pins in config_alt_pins, 0 is not used */ ++ u8 alt_pin_conf[8] = {SSPND, USBCFG, 0, 0, 0, 0, RXLED, TXLED}; ++ u8 config_alt_pins = mcp->config_alt_pins; ++ ++ /* Read in the reset baudrate first, we need it later */ ++ status = mcp_cmd_read_all(mcp); ++ if (status != 0) ++ return status; ++ ++ mutex_lock(&mcp->lock); ++ conf = (struct mcp_configure *) mcp->hid_report; ++ ++ /* configure will reset the chip! */ ++ conf->cmd = CONFIGURE; ++ conf->io_bmap = (mcp->gpio_dir & ~(1 << gpio_nr)) ++ | (io_direction << gpio_nr); ++ /* Don't overwrite the reset parameters */ ++ conf->baud_h = mcp->baud_h; ++ conf->baud_l = mcp->baud_l; ++ conf->config_alt_options = mcp->config_alt_options; ++ conf->io_default_val_bmap = mcp->gpio_reset_val; ++ /* Adjust alt. func if necessary */ ++ if (alt_pin_conf[gpio_nr]) ++ config_alt_pins &= ~(1 << alt_pin_conf[gpio_nr]); ++ conf->config_alt_pins = config_alt_pins; ++ ++ status = hid_hw_output_report(mcp->hdev, (u8 *) conf, ++ sizeof(struct mcp_set_clear_outputs)); ++ ++ if (status == sizeof(struct mcp_set_clear_outputs)) { ++ mcp->gpio_dir = conf->io_bmap; ++ mcp->config_alt_pins = config_alt_pins; ++ } else { ++ mutex_unlock(&mcp->lock); ++ return -EIO; ++ } ++ ++ mutex_unlock(&mcp->lock); ++ ++ /* Configure CMD will clear all IOs -> rewrite them */ ++ mcp_set_multiple(gc, &mask, &bits); ++ return 0; ++} ++ ++static int mcp_direction_input(struct gpio_chip *gc, unsigned int gpio_nr) ++{ ++ return mcp_set_direction(gc, gpio_nr, MCP2200_DIR_IN); ++} ++ ++static int mcp_direction_output(struct gpio_chip *gc, unsigned int gpio_nr, ++ int value) ++{ ++ int ret; ++ unsigned long mask, bmap_value; ++ ++ mask = 1 << gpio_nr; ++ bmap_value = value << gpio_nr; ++ ++ ret = mcp_set_direction(gc, gpio_nr, MCP2200_DIR_OUT); ++ if (!ret) ++ mcp_set_multiple(gc, &mask, &bmap_value); ++ return ret; ++} ++ ++static const struct gpio_chip template_chip = { ++ .label = "mcp2200", ++ .owner = THIS_MODULE, ++ .get_direction = mcp_get_direction, ++ .direction_input = mcp_direction_input, ++ .direction_output = mcp_direction_output, ++ .set = mcp_set, ++ .set_multiple = mcp_set_multiple, ++ .get = mcp_get, ++ .get_multiple = mcp_get_multiple, ++ .base = -1, ++ .ngpio = MCP_NGPIO, ++ .can_sleep = true, ++}; ++ ++/* ++ * MCP2200 uses interrupt endpoint for input reports. This function ++ * is called by HID layer when it receives i/p report from mcp2200, ++ * which is actually a response to the previously sent command. ++ */ ++static int mcp2200_raw_event(struct hid_device *hdev, struct hid_report *report, ++ u8 *data, int size) ++{ ++ struct mcp2200 *mcp = hid_get_drvdata(hdev); ++ struct mcp_read_all_resp *all_resp; ++ ++ switch (data[0]) { ++ case READ_ALL: ++ all_resp = (struct mcp_read_all_resp *) data; ++ mcp->status = 0; ++ mcp->gpio_inval = all_resp->io_port_val_bmap; ++ mcp->baud_h = all_resp->baud_h; ++ mcp->baud_l = all_resp->baud_l; ++ mcp->gpio_reset_val = all_resp->io_default_val_bmap; ++ mcp->config_alt_pins = all_resp->config_alt_pins; ++ mcp->config_alt_options = all_resp->config_alt_options; ++ break; ++ default: ++ mcp->status = -EIO; ++ break; ++ } ++ ++ complete(&mcp->wait_in_report); ++ return 0; ++} ++ ++static int mcp2200_probe(struct hid_device *hdev, const struct hid_device_id *id) ++{ ++ int ret; ++ struct mcp2200 *mcp; ++ ++ mcp = devm_kzalloc(&hdev->dev, sizeof(*mcp), GFP_KERNEL); ++ if (!mcp) ++ return -ENOMEM; ++ ++ ret = hid_parse(hdev); ++ if (ret) { ++ hid_err(hdev, "can't parse reports\n"); ++ return ret; ++ } ++ ++ ret = hid_hw_start(hdev, 0); ++ if (ret) { ++ hid_err(hdev, "can't start hardware\n"); ++ return ret; ++ } ++ ++ hid_info(hdev, "USB HID v%x.%02x Device [%s] on %s\n", hdev->version >> 8, ++ hdev->version & 0xff, hdev->name, hdev->phys); ++ ++ ret = hid_hw_open(hdev); ++ if (ret) { ++ hid_err(hdev, "can't open device\n"); ++ hid_hw_stop(hdev); ++ return ret; ++ } ++ ++ mutex_init(&mcp->lock); ++ init_completion(&mcp->wait_in_report); ++ hid_set_drvdata(hdev, mcp); ++ mcp->hdev = hdev; ++ ++ mcp->gc = template_chip; ++ mcp->gc.parent = &hdev->dev; ++ ++ ret = devm_gpiochip_add_data(&hdev->dev, &mcp->gc, mcp); ++ if (ret < 0) { ++ hid_err(hdev, "Unable to register gpiochip\n"); ++ hid_hw_close(hdev); ++ hid_hw_stop(hdev); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static void mcp2200_remove(struct hid_device *hdev) ++{ ++ hid_hw_close(hdev); ++ hid_hw_stop(hdev); ++} ++ ++static const struct hid_device_id mcp2200_devices[] = { ++ { HID_USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_DEVICE_ID_MCP2200) }, ++ { } ++}; ++MODULE_DEVICE_TABLE(hid, mcp2200_devices); ++ ++static struct hid_driver mcp2200_driver = { ++ .name = "mcp2200", ++ .id_table = mcp2200_devices, ++ .probe = mcp2200_probe, ++ .remove = mcp2200_remove, ++ .raw_event = mcp2200_raw_event, ++}; ++ ++/* Register with HID core */ ++module_hid_driver(mcp2200_driver); ++ ++MODULE_AUTHOR("Johannes Roith "); ++MODULE_DESCRIPTION("MCP2200 Microchip HID USB to GPIO bridge"); ++MODULE_LICENSE("GPL"); +-- +2.43.0 + diff --git a/queue-6.6/hwmon-adm9240-add-missing-dependency-on-regmap_i2c.patch b/queue-6.6/hwmon-adm9240-add-missing-dependency-on-regmap_i2c.patch new file mode 100644 index 00000000000..5ab910887aa --- /dev/null +++ b/queue-6.6/hwmon-adm9240-add-missing-dependency-on-regmap_i2c.patch @@ -0,0 +1,36 @@ +From 073e51e8cd4b81ad86718170447a0c8387a0686b Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 2 Oct 2024 03:08:08 +0200 +Subject: hwmon: (adm9240) Add missing dependency on REGMAP_I2C + +From: Javier Carrasco + +[ Upstream commit 14849a2ec175bb8a2280ce20efe002bb19f1e274 ] + +This driver requires REGMAP_I2C to be selected in order to get access to +regmap_config and devm_regmap_init_i2c. Add the missing dependency. + +Fixes: df885d912f67 ("hwmon: (adm9240) Convert to regmap") +Signed-off-by: Javier Carrasco +Message-ID: <20241002-hwmon-select-regmap-v1-1-548d03268934@gmail.com> +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig +index 393ac124012ec..5121005649fec 100644 +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -174,6 +174,7 @@ config SENSORS_ADM9240 + tristate "Analog Devices ADM9240 and compatibles" + depends on I2C + select HWMON_VID ++ select REGMAP_I2C + help + If you say yes here you get support for Analog Devices ADM9240, + Dallas DS1780, National Semiconductor LM81 sensor chips. +-- +2.43.0 + diff --git a/queue-6.6/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch b/queue-6.6/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch new file mode 100644 index 00000000000..33268b4575c --- /dev/null +++ b/queue-6.6/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch @@ -0,0 +1,36 @@ +From a4066d8f0b01860695a0401f743d46b1ddfbf7b6 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 2 Oct 2024 03:08:09 +0200 +Subject: hwmon: (adt7470) Add missing dependency on REGMAP_I2C + +From: Javier Carrasco + +[ Upstream commit b6abcc19566509ab4812bd5ae5df46515d0c1d70 ] + +This driver requires REGMAP_I2C to be selected in order to get access to +regmap_config and devm_regmap_init_i2c. Add the missing dependency. + +Fixes: ef67959c4253 ("hwmon: (adt7470) Convert to use regmap") +Signed-off-by: Javier Carrasco +Message-ID: <20241002-hwmon-select-regmap-v1-2-548d03268934@gmail.com> +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig +index 5121005649fec..a4c361b6619c1 100644 +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -236,6 +236,7 @@ config SENSORS_ADT7462 + config SENSORS_ADT7470 + tristate "Analog Devices ADT7470" + depends on I2C ++ select REGMAP_I2C + help + If you say yes here you get support for the Analog Devices + ADT7470 temperature monitoring chips. +-- +2.43.0 + diff --git a/queue-6.6/hwmon-intel-m10-bmc-hwmon-relabel-columbiaville-to-c.patch b/queue-6.6/hwmon-intel-m10-bmc-hwmon-relabel-columbiaville-to-c.patch new file mode 100644 index 00000000000..06aabd04f6f --- /dev/null +++ b/queue-6.6/hwmon-intel-m10-bmc-hwmon-relabel-columbiaville-to-c.patch @@ -0,0 +1,39 @@ +From 79de0da1feaa41c25e29d26cdf6347f7189ca1ce Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 19 Sep 2024 13:34:17 -0400 +Subject: hwmon: intel-m10-bmc-hwmon: relabel Columbiaville to CVL Die + Temperature + +From: Peter Colberg + +[ Upstream commit a017616fafc6b2a6b3043bf46f6381ef2611c188 ] + +Consistently use CVL instead of Columbiaville, since CVL is already +being used in all other sensor labels for the Intel N6000 card. + +Fixes: e1983220ae14 ("hwmon: intel-m10-bmc-hwmon: Add N6000 sensors") +Signed-off-by: Peter Colberg +Reviewed-by: Michael Adler +Message-ID: <20240919173417.867640-1-peter.colberg@intel.com> +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/intel-m10-bmc-hwmon.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/hwmon/intel-m10-bmc-hwmon.c b/drivers/hwmon/intel-m10-bmc-hwmon.c +index ca2dff1589251..96397ae6ff18f 100644 +--- a/drivers/hwmon/intel-m10-bmc-hwmon.c ++++ b/drivers/hwmon/intel-m10-bmc-hwmon.c +@@ -358,7 +358,7 @@ static const struct m10bmc_sdata n6000bmc_temp_tbl[] = { + { 0x4f0, 0x4f4, 0x4f8, 0x52c, 0x0, 500, "Board Top Near FPGA Temperature" }, + { 0x4fc, 0x500, 0x504, 0x52c, 0x0, 500, "Board Bottom Near CVL Temperature" }, + { 0x508, 0x50c, 0x510, 0x52c, 0x0, 500, "Board Top East Near VRs Temperature" }, +- { 0x514, 0x518, 0x51c, 0x52c, 0x0, 500, "Columbiaville Die Temperature" }, ++ { 0x514, 0x518, 0x51c, 0x52c, 0x0, 500, "CVL Die Temperature" }, + { 0x520, 0x524, 0x528, 0x52c, 0x0, 500, "Board Rear Side Temperature" }, + { 0x530, 0x534, 0x538, 0x52c, 0x0, 500, "Board Front Side Temperature" }, + { 0x53c, 0x540, 0x544, 0x0, 0x0, 500, "QSFP1 Case Temperature" }, +-- +2.43.0 + diff --git a/queue-6.6/hwmon-mc34vr500-add-missing-dependency-on-regmap_i2c.patch b/queue-6.6/hwmon-mc34vr500-add-missing-dependency-on-regmap_i2c.patch new file mode 100644 index 00000000000..8687785f869 --- /dev/null +++ b/queue-6.6/hwmon-mc34vr500-add-missing-dependency-on-regmap_i2c.patch @@ -0,0 +1,36 @@ +From ab063b93d1720f985eb5149ffd3dfd31d8fd8ca9 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 2 Oct 2024 02:31:25 +0200 +Subject: hwmon: (mc34vr500) Add missing dependency on REGMAP_I2C + +From: Javier Carrasco + +[ Upstream commit 56c77c0f4a7c9043e7d1d94e0aace264361e6717 ] + +This driver requires REGMAP_I2C to be selected in order to get access to +regmap_config and devm_regmap_init_i2c. Add the missing dependency. + +Fixes: 07830d9ab34c ("hwmon: add initial NXP MC34VR500 PMIC monitoring support") +Signed-off-by: Javier Carrasco +Message-ID: <20241002-mc34vr500-select-regmap_i2c-v1-1-a01875d0a2e5@gmail.com> +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig +index b46c85e2197c0..393ac124012ec 100644 +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -1200,6 +1200,7 @@ config SENSORS_MAX31790 + config SENSORS_MC34VR500 + tristate "NXP MC34VR500 hardware monitoring driver" + depends on I2C ++ select REGMAP_I2C + help + If you say yes here you get support for the temperature and input + voltage sensors of the NXP MC34VR500. +-- +2.43.0 + diff --git a/queue-6.6/hwmon-tmp513-add-missing-dependency-on-regmap_i2c.patch b/queue-6.6/hwmon-tmp513-add-missing-dependency-on-regmap_i2c.patch new file mode 100644 index 00000000000..c7061b1de30 --- /dev/null +++ b/queue-6.6/hwmon-tmp513-add-missing-dependency-on-regmap_i2c.patch @@ -0,0 +1,45 @@ +From 91ed342fc95567f06911aeb701b8d7b35e6549af Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 1 Oct 2024 11:37:15 -0700 +Subject: hwmon: (tmp513) Add missing dependency on REGMAP_I2C + +From: Guenter Roeck + +[ Upstream commit 193bc02c664999581a1f38c152f379fce91afc0c ] + +0-day reports: + +drivers/hwmon/tmp513.c:162:21: error: + variable 'tmp51x_regmap_config' has initializer but incomplete type +162 | static const struct regmap_config tmp51x_regmap_config = { + | ^ + +struct regmap_config is only available if REGMAP is enabled. +Add the missing Kconfig dependency to fix the problem. + +Reported-by: kernel test robot +Closes: https://lore.kernel.org/oe-kbuild-all/202410020246.2cTDDx0X-lkp@intel.com/ +Fixes: 59dfa75e5d82 ("hwmon: Add driver for Texas Instruments TMP512/513 sensor chips.") +Cc: Eric Tremblay +Reviewed-by: Javier Carrasco +Signed-off-by: Guenter Roeck +Signed-off-by: Sasha Levin +--- + drivers/hwmon/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig +index ec38c88921589..b46c85e2197c0 100644 +--- a/drivers/hwmon/Kconfig ++++ b/drivers/hwmon/Kconfig +@@ -2137,6 +2137,7 @@ config SENSORS_TMP464 + config SENSORS_TMP513 + tristate "Texas Instruments TMP513 and compatibles" + depends on I2C ++ select REGMAP_I2C + help + If you say yes here you get support for Texas Instruments TMP512, + and TMP513 temperature and power supply sensor chips. +-- +2.43.0 + diff --git a/queue-6.6/series b/queue-6.6/series index fa805a4357d..48b22eef0e7 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -165,3 +165,16 @@ ppp-fix-ppp_async_encode-illegal-access.patch slip-make-slhc_remember-more-robust-against-maliciou.patch rcu-nocb-make-irqs-disablement-symmetric.patch rcu-nocb-fix-rcuog-wake-up-from-offline-softirq.patch +hid-mcp2200-added-driver-for-gpios-of-mcp2200.patch +hid-i2c-hid-remove-i2c_hid_quirk_set_pwr_wakeup_dev-.patch +hid-i2c-hid-renumber-i2c_hid_quirk_-defines.patch +hid-i2c-hid-skip-set_power-sleep-for-cirque-touchpad.patch +hid-asus-add-rog-ally-n-key-id-and-keycodes.patch +hid-asus-add-rog-z13-lightbar.patch +hid-asus-add-rog-ally-x-prod-id-to-quirk-list.patch +wifi-mac80211-avoid-address-calculations-via-out-of-.patch +hwmon-intel-m10-bmc-hwmon-relabel-columbiaville-to-c.patch +hwmon-tmp513-add-missing-dependency-on-regmap_i2c.patch +hwmon-mc34vr500-add-missing-dependency-on-regmap_i2c.patch +hwmon-adm9240-add-missing-dependency-on-regmap_i2c.patch +hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch diff --git a/queue-6.6/wifi-mac80211-avoid-address-calculations-via-out-of-.patch b/queue-6.6/wifi-mac80211-avoid-address-calculations-via-out-of-.patch new file mode 100644 index 00000000000..e301b51b58d --- /dev/null +++ b/queue-6.6/wifi-mac80211-avoid-address-calculations-via-out-of-.patch @@ -0,0 +1,101 @@ +From 4ffff299550f35be9c2482d93268525a2efd0284 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 10 Oct 2024 14:50:09 +0800 +Subject: wifi: mac80211: Avoid address calculations via out of bounds array + indexing + +From: Kenton Groombridge + +[ Upstream commit 2663d0462eb32ae7c9b035300ab6b1523886c718 ] + +req->n_channels must be set before req->channels[] can be used. + +This patch fixes one of the issues encountered in [1]. + +[ 83.964255] UBSAN: array-index-out-of-bounds in net/mac80211/scan.c:364:4 +[ 83.964258] index 0 is out of range for type 'struct ieee80211_channel *[]' +[...] +[ 83.964264] Call Trace: +[ 83.964267] +[ 83.964269] dump_stack_lvl+0x3f/0xc0 +[ 83.964274] __ubsan_handle_out_of_bounds+0xec/0x110 +[ 83.964278] ieee80211_prep_hw_scan+0x2db/0x4b0 +[ 83.964281] __ieee80211_start_scan+0x601/0x990 +[ 83.964291] nl80211_trigger_scan+0x874/0x980 +[ 83.964295] genl_family_rcv_msg_doit+0xe8/0x160 +[ 83.964298] genl_rcv_msg+0x240/0x270 +[...] + +[1] https://bugzilla.kernel.org/show_bug.cgi?id=218810 + +Co-authored-by: Kees Cook +Signed-off-by: Kees Cook +Signed-off-by: Kenton Groombridge +Link: https://msgid.link/20240605152218.236061-1-concord@gentoo.org +Signed-off-by: Johannes Berg +[Xiangyu: Modified to apply on 6.1.y and 6.6.y] +Signed-off-by: Xiangyu Chen +Signed-off-by: Sasha Levin +--- + net/mac80211/scan.c | 17 +++++++++-------- + 1 file changed, 9 insertions(+), 8 deletions(-) + +diff --git a/net/mac80211/scan.c b/net/mac80211/scan.c +index 933a58895432f..d4a032f345773 100644 +--- a/net/mac80211/scan.c ++++ b/net/mac80211/scan.c +@@ -346,7 +346,8 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_sub_if_data *sdata) + struct cfg80211_scan_request *req; + struct cfg80211_chan_def chandef; + u8 bands_used = 0; +- int i, ielen, n_chans; ++ int i, ielen; ++ u32 *n_chans; + u32 flags = 0; + + req = rcu_dereference_protected(local->scan_req, +@@ -356,34 +357,34 @@ static bool ieee80211_prep_hw_scan(struct ieee80211_sub_if_data *sdata) + return false; + + if (ieee80211_hw_check(&local->hw, SINGLE_SCAN_ON_ALL_BANDS)) { ++ local->hw_scan_req->req.n_channels = req->n_channels; ++ + for (i = 0; i < req->n_channels; i++) { + local->hw_scan_req->req.channels[i] = req->channels[i]; + bands_used |= BIT(req->channels[i]->band); + } +- +- n_chans = req->n_channels; + } else { + do { + if (local->hw_scan_band == NUM_NL80211_BANDS) + return false; + +- n_chans = 0; ++ n_chans = &local->hw_scan_req->req.n_channels; ++ *n_chans = 0; + + for (i = 0; i < req->n_channels; i++) { + if (req->channels[i]->band != + local->hw_scan_band) + continue; +- local->hw_scan_req->req.channels[n_chans] = ++ local->hw_scan_req->req.channels[(*n_chans)++] = + req->channels[i]; +- n_chans++; ++ + bands_used |= BIT(req->channels[i]->band); + } + + local->hw_scan_band++; +- } while (!n_chans); ++ } while (!*n_chans); + } + +- local->hw_scan_req->req.n_channels = n_chans; + ieee80211_prepare_scan_chandef(&chandef, req->scan_width); + + if (req->flags & NL80211_SCAN_FLAG_MIN_PREQ_CONTENT) +-- +2.43.0 + -- 2.47.2