]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
Fixes for 6.6
authorSasha Levin <sashal@kernel.org>
Sun, 13 Oct 2024 20:03:29 +0000 (16:03 -0400)
committerSasha Levin <sashal@kernel.org>
Sun, 13 Oct 2024 20:03:29 +0000 (16:03 -0400)
Signed-off-by: Sasha Levin <sashal@kernel.org>
14 files changed:
queue-6.6/hid-asus-add-rog-ally-n-key-id-and-keycodes.patch [new file with mode: 0644]
queue-6.6/hid-asus-add-rog-ally-x-prod-id-to-quirk-list.patch [new file with mode: 0644]
queue-6.6/hid-asus-add-rog-z13-lightbar.patch [new file with mode: 0644]
queue-6.6/hid-i2c-hid-remove-i2c_hid_quirk_set_pwr_wakeup_dev-.patch [new file with mode: 0644]
queue-6.6/hid-i2c-hid-renumber-i2c_hid_quirk_-defines.patch [new file with mode: 0644]
queue-6.6/hid-i2c-hid-skip-set_power-sleep-for-cirque-touchpad.patch [new file with mode: 0644]
queue-6.6/hid-mcp2200-added-driver-for-gpios-of-mcp2200.patch [new file with mode: 0644]
queue-6.6/hwmon-adm9240-add-missing-dependency-on-regmap_i2c.patch [new file with mode: 0644]
queue-6.6/hwmon-adt7470-add-missing-dependency-on-regmap_i2c.patch [new file with mode: 0644]
queue-6.6/hwmon-intel-m10-bmc-hwmon-relabel-columbiaville-to-c.patch [new file with mode: 0644]
queue-6.6/hwmon-mc34vr500-add-missing-dependency-on-regmap_i2c.patch [new file with mode: 0644]
queue-6.6/hwmon-tmp513-add-missing-dependency-on-regmap_i2c.patch [new file with mode: 0644]
queue-6.6/series
queue-6.6/wifi-mac80211-avoid-address-calculations-via-out-of-.patch [new file with mode: 0644]

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 (file)
index 0000000..b88fa2e
--- /dev/null
@@ -0,0 +1,63 @@
+From e421bf2d3a9e1ae62ed0eb5d00f0d229ccddfe67 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Apr 2024 21:04:01 +1200
+Subject: HID: asus: add ROG Ally N-Key ID and keycodes
+
+From: Luke D. Jones <luke@ljones.dev>
+
+[ 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<num> key codes which aren't used much and
+which the handheld community has already accepted as defaults here.
+
+Signed-off-by: Luke D. Jones <luke@ljones.dev>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..2a8fc6a
--- /dev/null
@@ -0,0 +1,49 @@
+From 2cf24a6846682f82612e3641ddecd939bb0e4cb6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+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 <luke@ljones.dev>
+
+[ 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 <luke@ljones.dev>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..8370ff1
--- /dev/null
@@ -0,0 +1,49 @@
+From 09bd79b9f288376555f58a9a101ec1883ab8905b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 16 Apr 2024 21:04:02 +1200
+Subject: HID: asus: add ROG Z13 lightbar
+
+From: Luke D. Jones <luke@ljones.dev>
+
+[ 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 <luke@ljones.dev>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..31b3adb
--- /dev/null
@@ -0,0 +1,56 @@
+From 3bc0d71cbc21f540ebd92240e0bb5d1a80de02ac Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+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 <hdegoede@redhat.com>
+
+[ 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 <dianders@chromium.org>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Stable-dep-of: 26dd6a5667f5 ("HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system suspend")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..d4e1b76
--- /dev/null
@@ -0,0 +1,46 @@
+From 6fcec6b4443ae0a3012f750c9f6f8fba68a07225 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sat, 2 Dec 2023 23:46:14 +0100
+Subject: HID: i2c-hid: Renumber I2C_HID_QUIRK_ defines
+
+From: Hans de Goede <hdegoede@redhat.com>
+
+[ 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 <dianders@chromium.org>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Stable-dep-of: 26dd6a5667f5 ("HID: i2c-hid: Skip SET_POWER SLEEP for Cirque touchpad on system suspend")
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..d2fd301
--- /dev/null
@@ -0,0 +1,83 @@
+From 8dd39ae5bed9ae36ecf63d663095ba7cb7259d74 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+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 <kai.heng.feng@canonical.com>
+
+[ 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 <kai.heng.feng@canonical.com>
+Reviewed-by: Douglas Anderson <dianders@chromium.org>
+Signed-off-by: Jiri Kosina <jkosina@suse.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..5574747
--- /dev/null
@@ -0,0 +1,480 @@
+From a23b61ba38158deadb1529a59f4cbdc098b4c576 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 21 Sep 2023 18:49:28 +0200
+Subject: HID: mcp2200: added driver for GPIOs of MCP2200
+
+From: Johannes Roith <johannes@gnu-linux.rocks>
+
+[ 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 <johannes@gnu-linux.rocks>
+Reviewed-by: Rahul Rameshbabu <sergeantsagara@protonmail.com>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 <johannes@gnu-linux.rocks>
++ *
++ * Datasheet: https://ww1.microchip.com/downloads/en/DeviceDoc/22228A.pdf
++ * App Note for HID: https://ww1.microchip.com/downloads/en/DeviceDoc/93066A.pdf
++ */
++#include <linux/completion.h>
++#include <linux/delay.h>
++#include <linux/err.h>
++#include <linux/gpio/driver.h>
++#include <linux/hid.h>
++#include <linux/hidraw.h>
++#include <linux/module.h>
++#include <linux/mutex.h>
++#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 <johannes@gnu-linux.rocks>");
++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 (file)
index 0000000..5ab9108
--- /dev/null
@@ -0,0 +1,36 @@
+From 073e51e8cd4b81ad86718170447a0c8387a0686b Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 2 Oct 2024 03:08:08 +0200
+Subject: hwmon: (adm9240) Add missing dependency on REGMAP_I2C
+
+From: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+
+[ 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 <javier.carrasco.cruz@gmail.com>
+Message-ID: <20241002-hwmon-select-regmap-v1-1-548d03268934@gmail.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..33268b4
--- /dev/null
@@ -0,0 +1,36 @@
+From a4066d8f0b01860695a0401f743d46b1ddfbf7b6 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 2 Oct 2024 03:08:09 +0200
+Subject: hwmon: (adt7470) Add missing dependency on REGMAP_I2C
+
+From: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+
+[ 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 <javier.carrasco.cruz@gmail.com>
+Message-ID: <20241002-hwmon-select-regmap-v1-2-548d03268934@gmail.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..06aabd0
--- /dev/null
@@ -0,0 +1,39 @@
+From 79de0da1feaa41c25e29d26cdf6347f7189ca1ce Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 19 Sep 2024 13:34:17 -0400
+Subject: hwmon: intel-m10-bmc-hwmon: relabel Columbiaville to CVL Die
+ Temperature
+
+From: Peter Colberg <peter.colberg@intel.com>
+
+[ 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 <peter.colberg@intel.com>
+Reviewed-by: Michael Adler <michael.adler@intel.com>
+Message-ID: <20240919173417.867640-1-peter.colberg@intel.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..8687785
--- /dev/null
@@ -0,0 +1,36 @@
+From ab063b93d1720f985eb5149ffd3dfd31d8fd8ca9 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Wed, 2 Oct 2024 02:31:25 +0200
+Subject: hwmon: (mc34vr500) Add missing dependency on REGMAP_I2C
+
+From: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+
+[ 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 <javier.carrasco.cruz@gmail.com>
+Message-ID: <20241002-mc34vr500-select-regmap_i2c-v1-1-a01875d0a2e5@gmail.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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 (file)
index 0000000..c7061b1
--- /dev/null
@@ -0,0 +1,45 @@
+From 91ed342fc95567f06911aeb701b8d7b35e6549af Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Tue, 1 Oct 2024 11:37:15 -0700
+Subject: hwmon: (tmp513) Add missing dependency on REGMAP_I2C
+
+From: Guenter Roeck <linux@roeck-us.net>
+
+[ 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 <lkp@intel.com>
+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 <etremblay@distech-controls.com>
+Reviewed-by: Javier Carrasco <javier.carrasco.cruz@gmail.com>
+Signed-off-by: Guenter Roeck <linux@roeck-us.net>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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
+
index fa805a4357db52f652c50ac6fec9642f80e92b79..48b22eef0e768dc6245ee93c6c3c9bb554f4cb9d 100644 (file)
@@ -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 (file)
index 0000000..e301b51
--- /dev/null
@@ -0,0 +1,101 @@
+From 4ffff299550f35be9c2482d93268525a2efd0284 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Thu, 10 Oct 2024 14:50:09 +0800
+Subject: wifi: mac80211: Avoid address calculations via out of bounds array
+ indexing
+
+From: Kenton Groombridge <concord@gentoo.org>
+
+[ 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]  <TASK>
+[   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 <keescook@chromium.org>
+Signed-off-by: Kees Cook <kees@kernel.org>
+Signed-off-by: Kenton Groombridge <concord@gentoo.org>
+Link: https://msgid.link/20240605152218.236061-1-concord@gentoo.org
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+[Xiangyu: Modified to apply on 6.1.y and 6.6.y]
+Signed-off-by: Xiangyu Chen <xiangyu.chen@windriver.com>
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ 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
+