Linux Input/HID development
 help / color / mirror / Atom feed
* Re: [PATCH 2/2] HID: logitech-hidpp: Add support for the Pro X Superlight
From: Bastien Nocera @ 2023-02-23  9:30 UTC (permalink / raw)
  To: Mavroudis Chatzilazaridis, linux-input; +Cc: jikos, benjamin.tissoires, lains
In-Reply-To: <20230222222800.83077-2-mavchatz@protonmail.com>

On Wed, 2023-02-22 at 22:29 +0000, Mavroudis Chatzilazaridis wrote:
> This patch adds support for the Pro X Superlight. Tested over USB.
> 
> Co-developed-by: Filipe Laíns <lains@riseup.net>
> Signed-off-by: Filipe Laíns <lains@riseup.net>
> Signed-off-by: Mavroudis Chatzilazaridis <mavchatz@protonmail.com>

This patch is:
Reviewed-by: Bastien Nocera <hadess@hadess.net>

> ---
>  drivers/hid/hid-logitech-hidpp.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-
> logitech-hidpp.c
> index 9c1ee8e91e0c..62683a712f8e 100644
> --- a/drivers/hid/hid-logitech-hidpp.c
> +++ b/drivers/hid/hid-logitech-hidpp.c
> @@ -4350,6 +4350,8 @@ static const struct hid_device_id
> hidpp_devices[] = {
>                 .driver_data = HIDPP_QUIRK_CLASS_G920 |
> HIDPP_QUIRK_FORCE_OUTPUT_REPORTS},
>         { /* Logitech G Pro Gaming Mouse over USB */
>           HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 0xC088) },
> +       { /* Logitech G Pro X Superlight Gaming Mouse over USB */
> +         HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 0xC094) },
> 
>         { /* MX5000 keyboard over Bluetooth */
>           HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb305),
> --
> 2.34.1
> 
> 


^ permalink raw reply

* Re: [PATCH] HID: usbhid: enable remote wakeup for mice
From: Michael Wu @ 2023-02-23  4:01 UTC (permalink / raw)
  To: Sergei Shtylyov, jikos, benjamin.tissoires
  Cc: linux-usb, linux-input, linux-kernel
In-Reply-To: <0b6f1b7b-9275-6947-b1b9-73d60ce095ab@gmail.com>

Dear Sergei:

On 2/22/2023 4:59 PM, Sergei Shtylyov wrote:
> Hello!
> 
> On 2/22/23 4:39 AM, Michael Wu wrote:
> 
>> This patch fixes a problem that USB mouse can't wake up the device that
>> enters standby.
>>
>> At present, the kernel only checks whether certain USB manufacturers
>> support wake-up, which will easily cause inconvenience to the
>> development work of other manufacturers and add unnecessary work to the
>> maintenance of kernel.
>>
>> The USB protocol supports judging whether a usb supports the wake-up
>> function, so it should be more reasonable to add a wake-up source by
>> directly checking the settings from the USB protocol.
>>
>> There was a similar issue on the keyboard before, which was fixed by
>> this patch (3d61510f4eca), but now the problem happened on the mouse.
>> This patch uses a similar idea to fix this problem.
>>
>> Signed-off-by: Michael Wu <michael@allwinnertech.com>
>> ---
>>   drivers/hid/usbhid/hid-core.c | 8 ++++++++
>>   drivers/hid/usbhid/usbmouse.c | 1 +
>>   2 files changed, 9 insertions(+)
>>
>> diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
>> index be4c731aaa65..d3a6755cca09 100644
>> --- a/drivers/hid/usbhid/hid-core.c
>> +++ b/drivers/hid/usbhid/hid-core.c
>> @@ -1189,6 +1189,14 @@ static int usbhid_start(struct hid_device *hid)
>>   		device_set_wakeup_enable(&dev->dev, 1);
>>   	}
>>   
>> +	/**
> 

>     The kernel-doc comments should not be used here in the function body.

We will remove the NOTE comments.

> 
>> +	 * NOTE: enable remote wakeup by default for all mouse devices
>> +	 * supporting the boot protocol.
>> +	 */
>> +	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
>> +	    interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
>> +		device_set_wakeup_enable(&dev->dev, 1);
>> +
>>   	mutex_unlock(&usbhid->mutex);
>>   	return 0;
>>   
> [...]
> 
> MBR, Sergey

-- 
Regards,
Michael Wu

^ permalink raw reply

* [PATCH 2/2] HID: logitech-hidpp: Add support for the Pro X Superlight
From: Mavroudis Chatzilazaridis @ 2023-02-22 22:29 UTC (permalink / raw)
  To: linux-input; +Cc: jikos, benjamin.tissoires, lains, Mavroudis Chatzilazaridis
In-Reply-To: <20230222222800.83077-1-mavchatz@protonmail.com>

This patch adds support for the Pro X Superlight. Tested over USB.

Co-developed-by: Filipe Laíns <lains@riseup.net>
Signed-off-by: Filipe Laíns <lains@riseup.net>
Signed-off-by: Mavroudis Chatzilazaridis <mavchatz@protonmail.com>
---
 drivers/hid/hid-logitech-hidpp.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/hid/hid-logitech-hidpp.c b/drivers/hid/hid-logitech-hidpp.c
index 9c1ee8e91e0c..62683a712f8e 100644
--- a/drivers/hid/hid-logitech-hidpp.c
+++ b/drivers/hid/hid-logitech-hidpp.c
@@ -4350,6 +4350,8 @@ static const struct hid_device_id hidpp_devices[] = {
 		.driver_data = HIDPP_QUIRK_CLASS_G920 | HIDPP_QUIRK_FORCE_OUTPUT_REPORTS},
 	{ /* Logitech G Pro Gaming Mouse over USB */
 	  HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 0xC088) },
+	{ /* Logitech G Pro X Superlight Gaming Mouse over USB */
+	  HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, 0xC094) },

 	{ /* MX5000 keyboard over Bluetooth */
 	  HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb305),
--
2.34.1



^ permalink raw reply related

* [PATCH 1/2] HID: logitech-dj: Add support for new lightspeed receiver iteration
From: Mavroudis Chatzilazaridis @ 2023-02-22 22:29 UTC (permalink / raw)
  To: linux-input; +Cc: jikos, benjamin.tissoires, lains, Mavroudis Chatzilazaridis

The lightspeed receiver for the Pro X Superlight uses 13 byte mouse reports
without a report id. The workaround for such cases has been adjusted to
handle these larger packets.

libratbag recognizes the device and input events are passing through.

https://github.com/libratbag/libratbag/pull/1122

Co-developed-by: Filipe Laíns <lains@riseup.net>
Signed-off-by: Filipe Laíns <lains@riseup.net>
Signed-off-by: Mavroudis Chatzilazaridis <mavchatz@protonmail.com>
---
 drivers/hid/hid-ids.h         |  1 +
 drivers/hid/hid-logitech-dj.c | 11 ++++++++---
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 9e36b4cd905e..030524ed4548 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -848,6 +848,7 @@
 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_2		0xc534
 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1	0xc539
 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_1	0xc53f
+#define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_2	0xc547
 #define USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_POWERPLAY	0xc53a
 #define USB_DEVICE_ID_SPACETRAVELLER	0xc623
 #define USB_DEVICE_ID_SPACENAVIGATOR	0xc626
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index c358778e070b..82fe64ef4dbe 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -1692,11 +1692,12 @@ static int logi_dj_raw_event(struct hid_device *hdev,
 		}
 		/*
 		 * Mouse-only receivers send unnumbered mouse data. The 27 MHz
-		 * receiver uses 6 byte packets, the nano receiver 8 bytes.
+		 * receiver uses 6 byte packets, the nano receiver 8 bytes,
+		 * the lightspeed receiver (Pro X Superlight) 13 bytes.
 		 */
 		if (djrcv_dev->unnumbered_application == HID_GD_MOUSE &&
-		    size <= 8) {
-			u8 mouse_report[9];
+		    size <= 13){
+			u8 mouse_report[14];

 			/* Prepend report id */
 			mouse_report[0] = REPORT_TYPE_MOUSE;
@@ -1980,6 +1981,10 @@ static const struct hid_device_id logi_dj_receivers[] = {
 	  HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH,
 		USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_1),
 	 .driver_data = recvr_type_gaming_hidpp},
+	{ /* Logitech lightspeed receiver (0xc547) */
+	  HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH,
+		USB_DEVICE_ID_LOGITECH_NANO_RECEIVER_LIGHTSPEED_1_2),
+	 .driver_data = recvr_type_gaming_hidpp},

 	{ /* Logitech 27 MHz HID++ 1.0 receiver (0xc513) */
 	  HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER),
--
2.34.1



^ permalink raw reply related

* Re: [PATCH v4 1/3] Input: gpio-keys - add support for linux,input-value DTS property
From: Konrad Dybcio @ 2023-02-22 20:54 UTC (permalink / raw)
  To: Gergo Koteles, Dmitry Torokhov, Jonathan Corbet, Andy Gross,
	Bjorn Andersson, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly
In-Reply-To: <3519a11b0ef5324a2befbd137cd2aa0cb8fd057d.1677022414.git.soyer@irl.hu>



On 22.02.2023 01:10, Gergo Koteles wrote:
> Allows setting the value of EV_ABS events from DTS.
> This property is included in the gpio-keys.yaml scheme, but was only
> implemented for gpio-keys-polled.
> 
> Signed-off-by: Gergo Koteles <soyer@irl.hu>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Konrad
>  drivers/input/keyboard/gpio_keys.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
> index 5496482a38c1..c42f86ad0766 100644
> --- a/drivers/input/keyboard/gpio_keys.c
> +++ b/drivers/input/keyboard/gpio_keys.c
> @@ -770,6 +770,9 @@ gpio_keys_get_devtree_pdata(struct device *dev)
>  					     &button->type))
>  			button->type = EV_KEY;
>  
> +		fwnode_property_read_u32(child, "linux,input-value",
> +					 (u32 *)&button->value);
> +
>  		button->wakeup =
>  			fwnode_property_read_bool(child, "wakeup-source") ||
>  			/* legacy name */

^ permalink raw reply

* Re: [PATCH] HID: usbhid: enable remote wakeup for mice
From: Limonciello, Mario @ 2023-02-22 19:50 UTC (permalink / raw)
  To: Greg KH, Michael Wu, Richard Gong
  Cc: jikos, benjamin.tissoires, linux-usb, linux-input, linux-kernel
In-Reply-To: <Y/WwXBF37hoZBbQa@kroah.com>

+Richard

On 2/22/2023 00:04, Greg KH wrote:
> On Wed, Feb 22, 2023 at 09:39:44AM +0800, Michael Wu wrote:
>> This patch fixes a problem that USB mouse can't wake up the device that
>> enters standby.
> 
> This not a problem, it is that way by design.
> 
>> At present, the kernel only checks whether certain USB manufacturers
>> support wake-up, which will easily cause inconvenience to the
>> development work of other manufacturers and add unnecessary work to the
>> maintenance of kernel.
>>
>> The USB protocol supports judging whether a usb supports the wake-up
>> function, so it should be more reasonable to add a wake-up source by
>> directly checking the settings from the USB protocol.
> 
> But you do not do that in this patch, why not?
> 
>> There was a similar issue on the keyboard before, which was fixed by
>> this patch (3d61510f4eca), but now the problem happened on the mouse.
>> This patch uses a similar idea to fix this problem.
>>
>> Signed-off-by: Michael Wu <michael@allwinnertech.com>
>> ---
>>   drivers/hid/usbhid/hid-core.c | 8 ++++++++
>>   drivers/hid/usbhid/usbmouse.c | 1 +
>>   2 files changed, 9 insertions(+)
>>
>> diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
>> index be4c731aaa65..d3a6755cca09 100644
>> --- a/drivers/hid/usbhid/hid-core.c
>> +++ b/drivers/hid/usbhid/hid-core.c
>> @@ -1189,6 +1189,14 @@ static int usbhid_start(struct hid_device *hid)
>>   		device_set_wakeup_enable(&dev->dev, 1);
>>   	}
>>   
>> +	/**
>> +	 * NOTE: enable remote wakeup by default for all mouse devices
>> +	 * supporting the boot protocol.
>> +	 */
>> +	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
>> +	    interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
>> +		device_set_wakeup_enable(&dev->dev, 1);
> 
> Sorry, but we can not take this unless it is proven that this will work
> properly for all of these devices.  Other operating systems do not do
> this last I checked, so there will be problems.
> 
> thanks,
> 
> greg k-h
> 

Richard and I both sent out relatively similar patches in the past, but 
they never went anywhere.
We did confirm that Windows does set a similar policy as well though, 
which is what prompted us to attempt this.

As there is more interest again maybe we can revive that discussion and 
merge together some ideas from the sets of patches.

Previous submissions:

v4:
https://lore.kernel.org/linux-usb/20220825045517.16791-1-mario.limonciello@amd.com/

v3:
https://lore.kernel.org/linux-usb/20220701023328.2783-10-mario.limonciello@amd.com/

v2:
https://lore.kernel.org/linux-usb/20220616183142.14472-1-mario.limonciello@amd.com/

v1:
https://lore.kernel.org/linux-usb/20220404214557.3329796-1-richard.gong@amd.com/


^ permalink raw reply

* Re: [PATCH v2 01/16] thermal/core: Add a thermal zone 'devdata' accessor
From: Florian Fainelli @ 2023-02-22 19:20 UTC (permalink / raw)
  To: Daniel Lezcano, rafael
  Cc: linux-pm, linux-kernel, Guenter Roeck, Niklas Söderlund,
	Mark Brown, Ido Schimmel, AngeloGioacchino Del Regno,
	Balsam CHIHI, Gregory Greenman, Adam Ward, Baolin Wang,
	Sebastian Reichel, Zhang Rui, Len Brown, Damien Le Moal,
	Shawn Guo, Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam,
	NXP Linux Team, Jean Delvare, Jonathan Cameron,
	Lars-Peter Clausen, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
	Dmitry Torokhov, Raju Rangoju, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Petr Machata, Kalle Valo,
	Sebastian Reichel, Liam Girdwood, Miquel Raynal, Amit Kucheria,
	Broadcom internal kernel review list, Ray Jui, Scott Branden,
	Markus Mayer, Support Opensource, Thara Gopinath, Andy Gross,
	Bjorn Andersson, Konrad Dybcio, Niklas Söderlund,
	Heiko Stuebner, Bartlomiej Zolnierkiewicz, Krzysztof Kozlowski,
	Alim Akhtar, Orson Zhai, Chunyan Zhang, Vasily Khoruzhick,
	Yangtao Li, Thierry Reding, Jonathan Hunter, Talel Shenhar,
	Eduardo Valentin, Keerthy, Kunihiko Hayashi, Masami Hiramatsu,
	Matthias Brugger, Stefan Wahren, ye xingchen, Zheng Yongjun,
	Tim Zimmermann, Yang Li, Srinivas Pandruvada, Jiang Jian,
	Daniel Golle, Randy Dunlap, Mikko Perttunen,
	open list:ACPI THERMAL DRIVER,
	open list:LIBATA SUBSYSTEM (Serial and Parallel ATA drivers),
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	open list:HARDWARE MONITORING,
	open list:IIO SUBSYSTEM AND DRIVERS,
	open list:ARM/Allwinner sunXi SoC support,
	open list:INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN)...,
	open list:CXGB4 ETHERNET DRIVER (CXGB4),
	open list:INTEL WIRELESS WIFI LINK (iwlwifi),
	moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE,
	open list:QUALCOMM TSENS THERMAL DRIVER,
	open list:RENESAS R-CAR THERMAL DRIVERS,
	open list:ARM/Rockchip SoC support,
	open list:SAMSUNG THERMAL DRIVER,
	open list:TEGRA ARCHITECTURE SUPPORT,
	open list:TI BANDGAP AND THERMAL DRIVER,
	moderated list:ARM/Mediatek SoC support
In-Reply-To: <20230221180710.2781027-2-daniel.lezcano@linaro.org>

On 2/21/23 10:06, Daniel Lezcano wrote:
> The thermal zone device structure is exposed to the different drivers
> and obviously they access the internals while that should be
> restricted to the core thermal code.
> 
> In order to self-encapsulate the thermal core code, we need to prevent
> the drivers accessing directly the thermal zone structure and provide
> accessor functions to deal with.
> 
> Provide an accessor to the 'devdata' structure and make use of it in
> the different drivers.
> 
> No functional changes intended.
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> Acked-by: Guenter Roeck <linux@roeck-us.net> #hwmon
> Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> #R-Car
> Acked-by: Mark Brown <broonie@kernel.org>
> Reviewed-by: Ido Schimmel <idosch@nvidia.com> #mlxsw
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> #MediaTek auxadc and lvts
> Reviewed-by: Balsam CHIHI <bchihi@baylibre.com> #Mediatek lvts
> Acked-by: Gregory Greenman <gregory.greenman@intel.com> #iwlwifi
> Reviewed-by: Adam Ward <DLG-Adam.Ward.opensource@dm.renesas.com> #da9062
> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>  #spread
> Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com> #power_supply

Acked-by: Florian Fainelli <f.fainelli@gmail.com> #Broadcom
-- 
Florian


^ permalink raw reply

* Re: [PATCH v2 01/16] thermal/core: Add a thermal zone 'devdata' accessor
From: Rafael J. Wysocki @ 2023-02-22 19:19 UTC (permalink / raw)
  To: Daniel Lezcano
  Cc: rafael, linux-pm, linux-kernel, Guenter Roeck,
	Niklas Söderlund, Mark Brown, Ido Schimmel,
	AngeloGioacchino Del Regno, Balsam CHIHI, Gregory Greenman,
	Adam Ward, Baolin Wang, Sebastian Reichel, Zhang Rui, Len Brown,
	Damien Le Moal, Shawn Guo, Sascha Hauer, Pengutronix Kernel Team,
	Fabio Estevam, NXP Linux Team, Jean Delvare, Jonathan Cameron,
	Lars-Peter Clausen, Chen-Yu Tsai, Jernej Skrabec, Samuel Holland,
	Dmitry Torokhov, Raju Rangoju, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Petr Machata, Kalle Valo,
	Sebastian Reichel, Liam Girdwood, Miquel Raynal, Amit Kucheria,
	Florian Fainelli, Broadcom internal kernel review list, Ray Jui,
	Scott Branden, Markus Mayer, Support Opensource, Thara Gopinath,
	Andy Gross, Bjorn Andersson, Konrad Dybcio, Niklas Söderlund,
	Heiko Stuebner, Bartlomiej Zolnierkiewicz, Krzysztof Kozlowski,
	Alim Akhtar, Orson Zhai, Chunyan Zhang, Vasily Khoruzhick,
	Yangtao Li, Thierry Reding, Jonathan Hunter, Talel Shenhar,
	Eduardo Valentin, Keerthy, Kunihiko Hayashi, Masami Hiramatsu,
	Matthias Brugger, Stefan Wahren, ye xingchen, Zheng Yongjun,
	Tim Zimmermann, Yang Li, Srinivas Pandruvada, Jiang Jian,
	Daniel Golle, Randy Dunlap, Mikko Perttunen,
	open list:ACPI THERMAL DRIVER,
	open list:LIBATA SUBSYSTEM (Serial and Parallel ATA drivers),
	moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE,
	open list:HARDWARE MONITORING,
	open list:IIO SUBSYSTEM AND DRIVERS,
	open list:ARM/Allwinner sunXi SoC support,
	open list:INPUT (KEYBOARD, MOUSE, JOYSTICK, TOUCHSCREEN)...,
	open list:CXGB4 ETHERNET DRIVER (CXGB4),
	open list:INTEL WIRELESS WIFI LINK (iwlwifi),
	moderated list:BROADCOM BCM2711/BCM2835 ARM ARCHITECTURE,
	open list:QUALCOMM TSENS THERMAL DRIVER,
	open list:RENESAS R-CAR THERMAL DRIVERS,
	open list:ARM/Rockchip SoC support,
	open list:SAMSUNG THERMAL DRIVER,
	open list:TEGRA ARCHITECTURE SUPPORT,
	open list:TI BANDGAP AND THERMAL DRIVER,
	moderated list:ARM/Mediatek SoC support
In-Reply-To: <20230221180710.2781027-2-daniel.lezcano@linaro.org>

On Tue, Feb 21, 2023 at 7:07 PM Daniel Lezcano
<daniel.lezcano@linaro.org> wrote:
>
> The thermal zone device structure is exposed to the different drivers
> and obviously they access the internals while that should be
> restricted to the core thermal code.
>
> In order to self-encapsulate the thermal core code, we need to prevent
> the drivers accessing directly the thermal zone structure and provide
> accessor functions to deal with.
>
> Provide an accessor to the 'devdata' structure and make use of it in
> the different drivers.
>
> No functional changes intended.
>
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> Acked-by: Guenter Roeck <linux@roeck-us.net> #hwmon
> Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> #R-Car
> Acked-by: Mark Brown <broonie@kernel.org>
> Reviewed-by: Ido Schimmel <idosch@nvidia.com> #mlxsw
> Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com> #MediaTek auxadc and lvts
> Reviewed-by: Balsam CHIHI <bchihi@baylibre.com> #Mediatek lvts
> Acked-by: Gregory Greenman <gregory.greenman@intel.com> #iwlwifi
> Reviewed-by: Adam Ward <DLG-Adam.Ward.opensource@dm.renesas.com> #da9062
> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com>  #spread
> Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com> #power_supply

Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

> ---
>  drivers/acpi/thermal.c                           | 16 ++++++++--------
>  drivers/ata/ahci_imx.c                           |  2 +-
>  drivers/hwmon/hwmon.c                            |  4 ++--
>  drivers/hwmon/pmbus/pmbus_core.c                 |  2 +-
>  drivers/hwmon/scmi-hwmon.c                       |  2 +-
>  drivers/hwmon/scpi-hwmon.c                       |  2 +-
>  drivers/iio/adc/sun4i-gpadc-iio.c                |  2 +-
>  drivers/input/touchscreen/sun4i-ts.c             |  2 +-
>  .../net/ethernet/chelsio/cxgb4/cxgb4_thermal.c   |  2 +-
>  .../net/ethernet/mellanox/mlxsw/core_thermal.c   | 14 +++++++-------
>  drivers/net/wireless/intel/iwlwifi/mvm/tt.c      |  4 ++--
>  drivers/power/supply/power_supply_core.c         |  2 +-
>  drivers/regulator/max8973-regulator.c            |  2 +-
>  drivers/thermal/armada_thermal.c                 |  4 ++--
>  drivers/thermal/broadcom/bcm2711_thermal.c       |  2 +-
>  drivers/thermal/broadcom/bcm2835_thermal.c       |  2 +-
>  drivers/thermal/broadcom/brcmstb_thermal.c       |  4 ++--
>  drivers/thermal/broadcom/ns-thermal.c            |  2 +-
>  drivers/thermal/broadcom/sr-thermal.c            |  2 +-
>  drivers/thermal/da9062-thermal.c                 |  2 +-
>  drivers/thermal/dove_thermal.c                   |  2 +-
>  drivers/thermal/hisi_thermal.c                   |  2 +-
>  drivers/thermal/imx8mm_thermal.c                 |  2 +-
>  drivers/thermal/imx_sc_thermal.c                 |  2 +-
>  drivers/thermal/imx_thermal.c                    |  6 +++---
>  drivers/thermal/intel/intel_pch_thermal.c        |  2 +-
>  drivers/thermal/intel/intel_soc_dts_iosf.c       | 13 +++++--------
>  drivers/thermal/intel/x86_pkg_temp_thermal.c     |  4 ++--
>  drivers/thermal/k3_bandgap.c                     |  2 +-
>  drivers/thermal/k3_j72xx_bandgap.c               |  2 +-
>  drivers/thermal/kirkwood_thermal.c               |  2 +-
>  drivers/thermal/max77620_thermal.c               |  2 +-
>  drivers/thermal/mediatek/auxadc_thermal.c        |  2 +-
>  drivers/thermal/mediatek/lvts_thermal.c          |  4 ++--
>  drivers/thermal/qcom/qcom-spmi-adc-tm5.c         |  4 ++--
>  drivers/thermal/qcom/qcom-spmi-temp-alarm.c      |  4 ++--
>  drivers/thermal/qoriq_thermal.c                  |  2 +-
>  drivers/thermal/rcar_gen3_thermal.c              |  4 ++--
>  drivers/thermal/rcar_thermal.c                   |  3 +--
>  drivers/thermal/rockchip_thermal.c               |  4 ++--
>  drivers/thermal/rzg2l_thermal.c                  |  2 +-
>  drivers/thermal/samsung/exynos_tmu.c             |  4 ++--
>  drivers/thermal/spear_thermal.c                  |  8 ++++----
>  drivers/thermal/sprd_thermal.c                   |  2 +-
>  drivers/thermal/sun8i_thermal.c                  |  2 +-
>  drivers/thermal/tegra/tegra-bpmp-thermal.c       |  6 ++++--
>  drivers/thermal/tegra/tegra30-tsensor.c          |  4 ++--
>  drivers/thermal/thermal-generic-adc.c            |  2 +-
>  drivers/thermal/thermal_core.c                   |  6 ++++++
>  drivers/thermal/thermal_mmio.c                   |  2 +-
>  .../thermal/ti-soc-thermal/ti-thermal-common.c   |  4 ++--
>  drivers/thermal/uniphier_thermal.c               |  2 +-
>  include/linux/thermal.h                          |  7 +++++++
>  53 files changed, 102 insertions(+), 91 deletions(-)
>
> diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
> index 0b4b844f9d4c..392b73b3e269 100644
> --- a/drivers/acpi/thermal.c
> +++ b/drivers/acpi/thermal.c
> @@ -498,7 +498,7 @@ static int acpi_thermal_get_trip_points(struct acpi_thermal *tz)
>
>  static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>         int result;
>
>         if (!tz)
> @@ -516,7 +516,7 @@ static int thermal_get_temp(struct thermal_zone_device *thermal, int *temp)
>  static int thermal_get_trip_type(struct thermal_zone_device *thermal,
>                                  int trip, enum thermal_trip_type *type)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>         int i;
>
>         if (!tz || trip < 0)
> @@ -560,7 +560,7 @@ static int thermal_get_trip_type(struct thermal_zone_device *thermal,
>  static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
>                                  int trip, int *temp)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>         int i;
>
>         if (!tz || trip < 0)
> @@ -613,7 +613,7 @@ static int thermal_get_trip_temp(struct thermal_zone_device *thermal,
>  static int thermal_get_crit_temp(struct thermal_zone_device *thermal,
>                                 int *temperature)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>
>         if (tz->trips.critical.flags.valid) {
>                 *temperature = deci_kelvin_to_millicelsius_with_offset(
> @@ -628,7 +628,7 @@ static int thermal_get_crit_temp(struct thermal_zone_device *thermal,
>  static int thermal_get_trend(struct thermal_zone_device *thermal,
>                              int trip, enum thermal_trend *trend)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>         enum thermal_trip_type type;
>         int i;
>
> @@ -670,7 +670,7 @@ static int thermal_get_trend(struct thermal_zone_device *thermal,
>
>  static void acpi_thermal_zone_device_hot(struct thermal_zone_device *thermal)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>
>         acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
>                                         dev_name(&tz->device->dev),
> @@ -679,7 +679,7 @@ static void acpi_thermal_zone_device_hot(struct thermal_zone_device *thermal)
>
>  static void acpi_thermal_zone_device_critical(struct thermal_zone_device *thermal)
>  {
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>
>         acpi_bus_generate_netlink_event(tz->device->pnp.device_class,
>                                         dev_name(&tz->device->dev),
> @@ -693,7 +693,7 @@ static int acpi_thermal_cooling_device_cb(struct thermal_zone_device *thermal,
>                                           bool bind)
>  {
>         struct acpi_device *device = cdev->devdata;
> -       struct acpi_thermal *tz = thermal->devdata;
> +       struct acpi_thermal *tz = thermal_zone_device_priv(thermal);
>         struct acpi_device *dev;
>         acpi_handle handle;
>         int i;
> diff --git a/drivers/ata/ahci_imx.c b/drivers/ata/ahci_imx.c
> index a950767f7948..e45e91f5e703 100644
> --- a/drivers/ata/ahci_imx.c
> +++ b/drivers/ata/ahci_imx.c
> @@ -418,7 +418,7 @@ static int __sata_ahci_read_temperature(void *dev, int *temp)
>
>  static int sata_ahci_read_temperature(struct thermal_zone_device *tz, int *temp)
>  {
> -       return __sata_ahci_read_temperature(tz->devdata, temp);
> +       return __sata_ahci_read_temperature(thermal_zone_device_priv(tz), temp);
>  }
>
>  static ssize_t sata_ahci_show_temp(struct device *dev,
> diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c
> index 33edb5c02f7d..3adf5c3c75ed 100644
> --- a/drivers/hwmon/hwmon.c
> +++ b/drivers/hwmon/hwmon.c
> @@ -154,7 +154,7 @@ static DEFINE_IDA(hwmon_ida);
>  #ifdef CONFIG_THERMAL_OF
>  static int hwmon_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct hwmon_thermal_data *tdata = tz->devdata;
> +       struct hwmon_thermal_data *tdata = thermal_zone_device_priv(tz);
>         struct hwmon_device *hwdev = to_hwmon_device(tdata->dev);
>         int ret;
>         long t;
> @@ -171,7 +171,7 @@ static int hwmon_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>
>  static int hwmon_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct hwmon_thermal_data *tdata = tz->devdata;
> +       struct hwmon_thermal_data *tdata = thermal_zone_device_priv(tz);
>         struct hwmon_device *hwdev = to_hwmon_device(tdata->dev);
>         const struct hwmon_chip_info *chip = hwdev->chip;
>         const struct hwmon_channel_info **info = chip->info;
> diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c
> index 95e95783972a..e39a327ac2a1 100644
> --- a/drivers/hwmon/pmbus/pmbus_core.c
> +++ b/drivers/hwmon/pmbus/pmbus_core.c
> @@ -1272,7 +1272,7 @@ struct pmbus_thermal_data {
>
>  static int pmbus_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct pmbus_thermal_data *tdata = tz->devdata;
> +       struct pmbus_thermal_data *tdata = thermal_zone_device_priv(tz);
>         struct pmbus_sensor *sensor = tdata->sensor;
>         struct pmbus_data *pmbus_data = tdata->pmbus_data;
>         struct i2c_client *client = to_i2c_client(pmbus_data->dev);
> diff --git a/drivers/hwmon/scmi-hwmon.c b/drivers/hwmon/scmi-hwmon.c
> index e192f0c67146..046ac157749d 100644
> --- a/drivers/hwmon/scmi-hwmon.c
> +++ b/drivers/hwmon/scmi-hwmon.c
> @@ -141,7 +141,7 @@ static int scmi_hwmon_thermal_get_temp(struct thermal_zone_device *tz,
>  {
>         int ret;
>         long value;
> -       struct scmi_thermal_sensor *th_sensor = tz->devdata;
> +       struct scmi_thermal_sensor *th_sensor = thermal_zone_device_priv(tz);
>
>         ret = scmi_hwmon_read_scaled_value(th_sensor->ph, th_sensor->info,
>                                            &value);
> diff --git a/drivers/hwmon/scpi-hwmon.c b/drivers/hwmon/scpi-hwmon.c
> index 4d75385f7d5e..121e5e9f487f 100644
> --- a/drivers/hwmon/scpi-hwmon.c
> +++ b/drivers/hwmon/scpi-hwmon.c
> @@ -64,7 +64,7 @@ static void scpi_scale_reading(u64 *value, struct sensor_data *sensor)
>
>  static int scpi_read_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct scpi_thermal_zone *zone = tz->devdata;
> +       struct scpi_thermal_zone *zone = thermal_zone_device_priv(tz);
>         struct scpi_sensors *scpi_sensors = zone->scpi_sensors;
>         struct scpi_ops *scpi_ops = scpi_sensors->scpi_ops;
>         struct sensor_data *sensor = &scpi_sensors->data[zone->sensor_id];
> diff --git a/drivers/iio/adc/sun4i-gpadc-iio.c b/drivers/iio/adc/sun4i-gpadc-iio.c
> index a6ade70dedf8..a5322550c422 100644
> --- a/drivers/iio/adc/sun4i-gpadc-iio.c
> +++ b/drivers/iio/adc/sun4i-gpadc-iio.c
> @@ -414,7 +414,7 @@ static int sun4i_gpadc_runtime_resume(struct device *dev)
>
>  static int sun4i_gpadc_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct sun4i_gpadc_iio *info = tz->devdata;
> +       struct sun4i_gpadc_iio *info = thermal_zone_device_priv(tz);
>         int val, scale, offset;
>
>         if (sun4i_gpadc_temp_read(info->indio_dev, &val))
> diff --git a/drivers/input/touchscreen/sun4i-ts.c b/drivers/input/touchscreen/sun4i-ts.c
> index 73eb8f80be6e..1117fba30020 100644
> --- a/drivers/input/touchscreen/sun4i-ts.c
> +++ b/drivers/input/touchscreen/sun4i-ts.c
> @@ -194,7 +194,7 @@ static int sun4i_get_temp(const struct sun4i_ts_data *ts, int *temp)
>
>  static int sun4i_get_tz_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       return sun4i_get_temp(tz->devdata, temp);
> +       return sun4i_get_temp(thermal_zone_device_priv(tz), temp);
>  }
>
>  static const struct thermal_zone_device_ops sun4i_ts_tz_ops = {
> diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c
> index 95e1b415ba13..dea9d2907666 100644
> --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c
> +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_thermal.c
> @@ -12,7 +12,7 @@
>  static int cxgb4_thermal_get_temp(struct thermal_zone_device *tzdev,
>                                   int *temp)
>  {
> -       struct adapter *adap = tzdev->devdata;
> +       struct adapter *adap = thermal_zone_device_priv(tzdev);
>         u32 param, val;
>         int ret;
>
> diff --git a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
> index c5240d38c9db..722e4a40afef 100644
> --- a/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
> +++ b/drivers/net/ethernet/mellanox/mlxsw/core_thermal.c
> @@ -201,7 +201,7 @@ mlxsw_thermal_module_trips_update(struct device *dev, struct mlxsw_core *core,
>  static int mlxsw_thermal_bind(struct thermal_zone_device *tzdev,
>                               struct thermal_cooling_device *cdev)
>  {
> -       struct mlxsw_thermal *thermal = tzdev->devdata;
> +       struct mlxsw_thermal *thermal = thermal_zone_device_priv(tzdev);
>         struct device *dev = thermal->bus_info->dev;
>         int i, err;
>
> @@ -227,7 +227,7 @@ static int mlxsw_thermal_bind(struct thermal_zone_device *tzdev,
>  static int mlxsw_thermal_unbind(struct thermal_zone_device *tzdev,
>                                 struct thermal_cooling_device *cdev)
>  {
> -       struct mlxsw_thermal *thermal = tzdev->devdata;
> +       struct mlxsw_thermal *thermal = thermal_zone_device_priv(tzdev);
>         struct device *dev = thermal->bus_info->dev;
>         int i;
>         int err;
> @@ -249,7 +249,7 @@ static int mlxsw_thermal_unbind(struct thermal_zone_device *tzdev,
>  static int mlxsw_thermal_get_temp(struct thermal_zone_device *tzdev,
>                                   int *p_temp)
>  {
> -       struct mlxsw_thermal *thermal = tzdev->devdata;
> +       struct mlxsw_thermal *thermal = thermal_zone_device_priv(tzdev);
>         struct device *dev = thermal->bus_info->dev;
>         char mtmp_pl[MLXSW_REG_MTMP_LEN];
>         int temp;
> @@ -281,7 +281,7 @@ static struct thermal_zone_device_ops mlxsw_thermal_ops = {
>  static int mlxsw_thermal_module_bind(struct thermal_zone_device *tzdev,
>                                      struct thermal_cooling_device *cdev)
>  {
> -       struct mlxsw_thermal_module *tz = tzdev->devdata;
> +       struct mlxsw_thermal_module *tz = thermal_zone_device_priv(tzdev);
>         struct mlxsw_thermal *thermal = tz->parent;
>         int i, j, err;
>
> @@ -310,7 +310,7 @@ static int mlxsw_thermal_module_bind(struct thermal_zone_device *tzdev,
>  static int mlxsw_thermal_module_unbind(struct thermal_zone_device *tzdev,
>                                        struct thermal_cooling_device *cdev)
>  {
> -       struct mlxsw_thermal_module *tz = tzdev->devdata;
> +       struct mlxsw_thermal_module *tz = thermal_zone_device_priv(tzdev);
>         struct mlxsw_thermal *thermal = tz->parent;
>         int i;
>         int err;
> @@ -356,7 +356,7 @@ mlxsw_thermal_module_temp_and_thresholds_get(struct mlxsw_core *core,
>  static int mlxsw_thermal_module_temp_get(struct thermal_zone_device *tzdev,
>                                          int *p_temp)
>  {
> -       struct mlxsw_thermal_module *tz = tzdev->devdata;
> +       struct mlxsw_thermal_module *tz = thermal_zone_device_priv(tzdev);
>         struct mlxsw_thermal *thermal = tz->parent;
>         int temp, crit_temp, emerg_temp;
>         struct device *dev;
> @@ -391,7 +391,7 @@ static struct thermal_zone_device_ops mlxsw_thermal_module_ops = {
>  static int mlxsw_thermal_gearbox_temp_get(struct thermal_zone_device *tzdev,
>                                           int *p_temp)
>  {
> -       struct mlxsw_thermal_module *tz = tzdev->devdata;
> +       struct mlxsw_thermal_module *tz = thermal_zone_device_priv(tzdev);
>         struct mlxsw_thermal *thermal = tz->parent;
>         char mtmp_pl[MLXSW_REG_MTMP_LEN];
>         u16 index;
> diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> index 232c200af38f..354d95222b1b 100644
> --- a/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> +++ b/drivers/net/wireless/intel/iwlwifi/mvm/tt.c
> @@ -615,7 +615,7 @@ int iwl_mvm_send_temp_report_ths_cmd(struct iwl_mvm *mvm)
>  static int iwl_mvm_tzone_get_temp(struct thermal_zone_device *device,
>                                   int *temperature)
>  {
> -       struct iwl_mvm *mvm = (struct iwl_mvm *)device->devdata;
> +       struct iwl_mvm *mvm = thermal_zone_device_priv(device);
>         int ret;
>         int temp;
>
> @@ -641,7 +641,7 @@ static int iwl_mvm_tzone_get_temp(struct thermal_zone_device *device,
>  static int iwl_mvm_tzone_set_trip_temp(struct thermal_zone_device *device,
>                                        int trip, int temp)
>  {
> -       struct iwl_mvm *mvm = (struct iwl_mvm *)device->devdata;
> +       struct iwl_mvm *mvm = thermal_zone_device_priv(device);
>         struct iwl_mvm_thermal_device *tzone;
>         int ret;
>
> diff --git a/drivers/power/supply/power_supply_core.c b/drivers/power/supply/power_supply_core.c
> index 7c790c41e2fe..83fd19079d8b 100644
> --- a/drivers/power/supply/power_supply_core.c
> +++ b/drivers/power/supply/power_supply_core.c
> @@ -1142,7 +1142,7 @@ static int power_supply_read_temp(struct thermal_zone_device *tzd,
>         int ret;
>
>         WARN_ON(tzd == NULL);
> -       psy = tzd->devdata;
> +       psy = thermal_zone_device_priv(tzd);
>         ret = power_supply_get_property(psy, POWER_SUPPLY_PROP_TEMP, &val);
>         if (ret)
>                 return ret;
> diff --git a/drivers/regulator/max8973-regulator.c b/drivers/regulator/max8973-regulator.c
> index 7e00a45db26a..303426135276 100644
> --- a/drivers/regulator/max8973-regulator.c
> +++ b/drivers/regulator/max8973-regulator.c
> @@ -436,7 +436,7 @@ static int max8973_init_dcdc(struct max8973_chip *max,
>
>  static int max8973_thermal_read_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct max8973_chip *mchip = tz->devdata;
> +       struct max8973_chip *mchip = thermal_zone_device_priv(tz);
>         unsigned int val;
>         int ret;
>
> diff --git a/drivers/thermal/armada_thermal.c b/drivers/thermal/armada_thermal.c
> index 2efc222a379b..ebd606861a61 100644
> --- a/drivers/thermal/armada_thermal.c
> +++ b/drivers/thermal/armada_thermal.c
> @@ -398,7 +398,7 @@ static int armada_read_sensor(struct armada_thermal_priv *priv, int *temp)
>  static int armada_get_temp_legacy(struct thermal_zone_device *thermal,
>                                   int *temp)
>  {
> -       struct armada_thermal_priv *priv = thermal->devdata;
> +       struct armada_thermal_priv *priv = thermal_zone_device_priv(thermal);
>         int ret;
>
>         /* Valid check */
> @@ -420,7 +420,7 @@ static struct thermal_zone_device_ops legacy_ops = {
>
>  static int armada_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct armada_thermal_sensor *sensor = tz->devdata;
> +       struct armada_thermal_sensor *sensor = thermal_zone_device_priv(tz);
>         struct armada_thermal_priv *priv = sensor->priv;
>         int ret;
>
> diff --git a/drivers/thermal/broadcom/bcm2711_thermal.c b/drivers/thermal/broadcom/bcm2711_thermal.c
> index 1f8651d15160..fcfcbbf044a4 100644
> --- a/drivers/thermal/broadcom/bcm2711_thermal.c
> +++ b/drivers/thermal/broadcom/bcm2711_thermal.c
> @@ -33,7 +33,7 @@ struct bcm2711_thermal_priv {
>
>  static int bcm2711_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct bcm2711_thermal_priv *priv = tz->devdata;
> +       struct bcm2711_thermal_priv *priv = thermal_zone_device_priv(tz);
>         int slope = thermal_zone_get_slope(tz);
>         int offset = thermal_zone_get_offset(tz);
>         u32 val;
> diff --git a/drivers/thermal/broadcom/bcm2835_thermal.c b/drivers/thermal/broadcom/bcm2835_thermal.c
> index 23918bb76ae6..86aaf459de37 100644
> --- a/drivers/thermal/broadcom/bcm2835_thermal.c
> +++ b/drivers/thermal/broadcom/bcm2835_thermal.c
> @@ -90,7 +90,7 @@ static int bcm2835_thermal_temp2adc(int temp, int offset, int slope)
>
>  static int bcm2835_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct bcm2835_thermal_data *data = tz->devdata;
> +       struct bcm2835_thermal_data *data = thermal_zone_device_priv(tz);
>         u32 val = readl(data->regs + BCM2835_TS_TSENSSTAT);
>
>         if (!(val & BCM2835_TS_TSENSSTAT_VALID))
> diff --git a/drivers/thermal/broadcom/brcmstb_thermal.c b/drivers/thermal/broadcom/brcmstb_thermal.c
> index 4d02c28331e3..60173cc83c46 100644
> --- a/drivers/thermal/broadcom/brcmstb_thermal.c
> +++ b/drivers/thermal/broadcom/brcmstb_thermal.c
> @@ -152,7 +152,7 @@ static inline u32 avs_tmon_temp_to_code(struct brcmstb_thermal_priv *priv,
>
>  static int brcmstb_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct brcmstb_thermal_priv *priv = tz->devdata;
> +       struct brcmstb_thermal_priv *priv = thermal_zone_device_priv(tz);
>         u32 val;
>         long t;
>
> @@ -262,7 +262,7 @@ static irqreturn_t brcmstb_tmon_irq_thread(int irq, void *data)
>
>  static int brcmstb_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct brcmstb_thermal_priv *priv = tz->devdata;
> +       struct brcmstb_thermal_priv *priv = thermal_zone_device_priv(tz);
>
>         dev_dbg(priv->dev, "set trips %d <--> %d\n", low, high);
>
> diff --git a/drivers/thermal/broadcom/ns-thermal.c b/drivers/thermal/broadcom/ns-thermal.c
> index 07a8a3f49bd0..d255aa879fc0 100644
> --- a/drivers/thermal/broadcom/ns-thermal.c
> +++ b/drivers/thermal/broadcom/ns-thermal.c
> @@ -16,7 +16,7 @@
>
>  static int ns_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       void __iomem *pvtmon = tz->devdata;
> +       void __iomem *pvtmon = thermal_zone_device_priv(tz);
>         int offset = thermal_zone_get_offset(tz);
>         int slope = thermal_zone_get_slope(tz);
>         u32 val;
> diff --git a/drivers/thermal/broadcom/sr-thermal.c b/drivers/thermal/broadcom/sr-thermal.c
> index 2b93502543ff..747915890022 100644
> --- a/drivers/thermal/broadcom/sr-thermal.c
> +++ b/drivers/thermal/broadcom/sr-thermal.c
> @@ -32,7 +32,7 @@ struct sr_thermal {
>
>  static int sr_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct sr_tmon *tmon = tz->devdata;
> +       struct sr_tmon *tmon = thermal_zone_device_priv(tz);
>         struct sr_thermal *sr_thermal = tmon->priv;
>
>         *temp = readl(sr_thermal->regs + SR_TMON_TEMP_BASE(tmon->tmon_id));
> diff --git a/drivers/thermal/da9062-thermal.c b/drivers/thermal/da9062-thermal.c
> index a805a6666c44..e7097f354750 100644
> --- a/drivers/thermal/da9062-thermal.c
> +++ b/drivers/thermal/da9062-thermal.c
> @@ -123,7 +123,7 @@ static irqreturn_t da9062_thermal_irq_handler(int irq, void *data)
>  static int da9062_thermal_get_temp(struct thermal_zone_device *z,
>                                    int *temp)
>  {
> -       struct da9062_thermal *thermal = z->devdata;
> +       struct da9062_thermal *thermal = thermal_zone_device_priv(z);
>
>         mutex_lock(&thermal->lock);
>         *temp = thermal->temperature;
> diff --git a/drivers/thermal/dove_thermal.c b/drivers/thermal/dove_thermal.c
> index 056622a58d00..6db1882e8229 100644
> --- a/drivers/thermal/dove_thermal.c
> +++ b/drivers/thermal/dove_thermal.c
> @@ -87,7 +87,7 @@ static int dove_get_temp(struct thermal_zone_device *thermal,
>                           int *temp)
>  {
>         unsigned long reg;
> -       struct dove_thermal_priv *priv = thermal->devdata;
> +       struct dove_thermal_priv *priv = thermal_zone_device_priv(thermal);
>
>         /* Valid check */
>         reg = readl_relaxed(priv->control + PMU_TEMP_DIOD_CTRL1_REG);
> diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
> index 32a7c3cf073d..f3a374266fa0 100644
> --- a/drivers/thermal/hisi_thermal.c
> +++ b/drivers/thermal/hisi_thermal.c
> @@ -431,7 +431,7 @@ static int hi3660_thermal_probe(struct hisi_thermal_data *data)
>
>  static int hisi_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct hisi_thermal_sensor *sensor = tz->devdata;
> +       struct hisi_thermal_sensor *sensor = thermal_zone_device_priv(tz);
>         struct hisi_thermal_data *data = sensor->data;
>
>         *temp = data->ops->get_temp(sensor);
> diff --git a/drivers/thermal/imx8mm_thermal.c b/drivers/thermal/imx8mm_thermal.c
> index 72b5d6f319c1..efa1a4ffc368 100644
> --- a/drivers/thermal/imx8mm_thermal.c
> +++ b/drivers/thermal/imx8mm_thermal.c
> @@ -141,7 +141,7 @@ static int imx8mp_tmu_get_temp(void *data, int *temp)
>
>  static int tmu_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct tmu_sensor *sensor = tz->devdata;
> +       struct tmu_sensor *sensor = thermal_zone_device_priv(tz);
>         struct imx8mm_tmu *tmu = sensor->priv;
>
>         return tmu->socdata->get_temp(sensor, temp);
> diff --git a/drivers/thermal/imx_sc_thermal.c b/drivers/thermal/imx_sc_thermal.c
> index f32e59e74623..ddde4bdfc94a 100644
> --- a/drivers/thermal/imx_sc_thermal.c
> +++ b/drivers/thermal/imx_sc_thermal.c
> @@ -46,7 +46,7 @@ static int imx_sc_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
>         struct imx_sc_msg_misc_get_temp msg;
>         struct imx_sc_rpc_msg *hdr = &msg.hdr;
> -       struct imx_sc_sensor *sensor = tz->devdata;
> +       struct imx_sc_sensor *sensor = thermal_zone_device_priv(tz);
>         int ret;
>
>         msg.data.req.resource_id = sensor->resource_id;
> diff --git a/drivers/thermal/imx_thermal.c b/drivers/thermal/imx_thermal.c
> index fb0d5cab70af..a22b8086a209 100644
> --- a/drivers/thermal/imx_thermal.c
> +++ b/drivers/thermal/imx_thermal.c
> @@ -252,7 +252,7 @@ static void imx_set_alarm_temp(struct imx_thermal_data *data,
>
>  static int imx_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct imx_thermal_data *data = tz->devdata;
> +       struct imx_thermal_data *data = thermal_zone_device_priv(tz);
>         const struct thermal_soc_data *soc_data = data->socdata;
>         struct regmap *map = data->tempmon;
>         unsigned int n_meas;
> @@ -311,7 +311,7 @@ static int imx_get_temp(struct thermal_zone_device *tz, int *temp)
>  static int imx_change_mode(struct thermal_zone_device *tz,
>                            enum thermal_device_mode mode)
>  {
> -       struct imx_thermal_data *data = tz->devdata;
> +       struct imx_thermal_data *data = thermal_zone_device_priv(tz);
>
>         if (mode == THERMAL_DEVICE_ENABLED) {
>                 pm_runtime_get(data->dev);
> @@ -342,7 +342,7 @@ static int imx_get_crit_temp(struct thermal_zone_device *tz, int *temp)
>  static int imx_set_trip_temp(struct thermal_zone_device *tz, int trip,
>                              int temp)
>  {
> -       struct imx_thermal_data *data = tz->devdata;
> +       struct imx_thermal_data *data = thermal_zone_device_priv(tz);
>         int ret;
>
>         ret = pm_runtime_resume_and_get(data->dev);
> diff --git a/drivers/thermal/intel/intel_pch_thermal.c b/drivers/thermal/intel/intel_pch_thermal.c
> index b855d031a855..dce50d239357 100644
> --- a/drivers/thermal/intel/intel_pch_thermal.c
> +++ b/drivers/thermal/intel/intel_pch_thermal.c
> @@ -119,7 +119,7 @@ static int pch_wpt_add_acpi_psv_trip(struct pch_thermal_device *ptd, int trip)
>
>  static int pch_thermal_get_temp(struct thermal_zone_device *tzd, int *temp)
>  {
> -       struct pch_thermal_device *ptd = tzd->devdata;
> +       struct pch_thermal_device *ptd = thermal_zone_device_priv(tzd);
>
>         *temp = GET_WPT_TEMP(WPT_TEMP_TSR & readw(ptd->hw_base + WPT_TEMP));
>         return 0;
> diff --git a/drivers/thermal/intel/intel_soc_dts_iosf.c b/drivers/thermal/intel/intel_soc_dts_iosf.c
> index 8c26f7b2316b..f99dc7e4ae89 100644
> --- a/drivers/thermal/intel/intel_soc_dts_iosf.c
> +++ b/drivers/thermal/intel/intel_soc_dts_iosf.c
> @@ -54,7 +54,7 @@ static int sys_get_trip_temp(struct thermal_zone_device *tzd, int trip,
>         struct intel_soc_dts_sensor_entry *dts;
>         struct intel_soc_dts_sensors *sensors;
>
> -       dts = tzd->devdata;
> +       dts = thermal_zone_device_priv(tzd);
>         sensors = dts->sensors;
>         mutex_lock(&sensors->dts_update_lock);
>         status = iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_REG_READ,
> @@ -168,7 +168,7 @@ static int update_trip_temp(struct intel_soc_dts_sensor_entry *dts,
>  static int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
>                              int temp)
>  {
> -       struct intel_soc_dts_sensor_entry *dts = tzd->devdata;
> +       struct intel_soc_dts_sensor_entry *dts = thermal_zone_device_priv(tzd);
>         struct intel_soc_dts_sensors *sensors = dts->sensors;
>         int status;
>
> @@ -176,7 +176,7 @@ static int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
>                 return -EINVAL;
>
>         mutex_lock(&sensors->dts_update_lock);
> -       status = update_trip_temp(tzd->devdata, trip, temp,
> +       status = update_trip_temp(dts, trip, temp,
>                                   dts->trip_types[trip]);
>         mutex_unlock(&sensors->dts_update_lock);
>
> @@ -186,9 +186,7 @@ static int sys_set_trip_temp(struct thermal_zone_device *tzd, int trip,
>  static int sys_get_trip_type(struct thermal_zone_device *tzd,
>                              int trip, enum thermal_trip_type *type)
>  {
> -       struct intel_soc_dts_sensor_entry *dts;
> -
> -       dts = tzd->devdata;
> +       struct intel_soc_dts_sensor_entry *dts = thermal_zone_device_priv(tzd);
>
>         *type = dts->trip_types[trip];
>
> @@ -200,11 +198,10 @@ static int sys_get_curr_temp(struct thermal_zone_device *tzd,
>  {
>         int status;
>         u32 out;
> -       struct intel_soc_dts_sensor_entry *dts;
> +       struct intel_soc_dts_sensor_entry *dts = thermal_zone_device_priv(tzd);
>         struct intel_soc_dts_sensors *sensors;
>         unsigned long raw;
>
> -       dts = tzd->devdata;
>         sensors = dts->sensors;
>         status = iosf_mbi_read(BT_MBI_UNIT_PMC, MBI_REG_READ,
>                                SOC_DTS_OFFSET_TEMP, &out);
> diff --git a/drivers/thermal/intel/x86_pkg_temp_thermal.c b/drivers/thermal/intel/x86_pkg_temp_thermal.c
> index 1c2de84742df..c4ec314441be 100644
> --- a/drivers/thermal/intel/x86_pkg_temp_thermal.c
> +++ b/drivers/thermal/intel/x86_pkg_temp_thermal.c
> @@ -107,7 +107,7 @@ static struct zone_device *pkg_temp_thermal_get_dev(unsigned int cpu)
>
>  static int sys_get_curr_temp(struct thermal_zone_device *tzd, int *temp)
>  {
> -       struct zone_device *zonedev = tzd->devdata;
> +       struct zone_device *zonedev = thermal_zone_device_priv(tzd);
>         int val;
>
>         val = intel_tcc_get_temp(zonedev->cpu, true);
> @@ -122,7 +122,7 @@ static int sys_get_curr_temp(struct thermal_zone_device *tzd, int *temp)
>  static int
>  sys_set_trip_temp(struct thermal_zone_device *tzd, int trip, int temp)
>  {
> -       struct zone_device *zonedev = tzd->devdata;
> +       struct zone_device *zonedev = thermal_zone_device_priv(tzd);
>         u32 l, h, mask, shift, intr;
>         int tj_max, ret;
>
> diff --git a/drivers/thermal/k3_bandgap.c b/drivers/thermal/k3_bandgap.c
> index 22c9bcb899c3..b5cd2c85e0c3 100644
> --- a/drivers/thermal/k3_bandgap.c
> +++ b/drivers/thermal/k3_bandgap.c
> @@ -141,7 +141,7 @@ static int k3_bgp_read_temp(struct k3_thermal_data *devdata,
>
>  static int k3_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct k3_thermal_data *data = tz->devdata;
> +       struct k3_thermal_data *data = thermal_zone_device_priv(tz);
>         int ret = 0;
>
>         ret = k3_bgp_read_temp(data, temp);
> diff --git a/drivers/thermal/k3_j72xx_bandgap.c b/drivers/thermal/k3_j72xx_bandgap.c
> index 031ea1091909..5be1f09eeb2c 100644
> --- a/drivers/thermal/k3_j72xx_bandgap.c
> +++ b/drivers/thermal/k3_j72xx_bandgap.c
> @@ -248,7 +248,7 @@ static inline int k3_bgp_read_temp(struct k3_thermal_data *devdata,
>  /* Get temperature callback function for thermal zone */
>  static int k3_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       return k3_bgp_read_temp(tz->devdata, temp);
> +       return k3_bgp_read_temp(thermal_zone_device_priv(tz), temp);
>  }
>
>  static const struct thermal_zone_device_ops k3_of_thermal_ops = {
> diff --git a/drivers/thermal/kirkwood_thermal.c b/drivers/thermal/kirkwood_thermal.c
> index bec7ec20e79d..92b3ce426b9d 100644
> --- a/drivers/thermal/kirkwood_thermal.c
> +++ b/drivers/thermal/kirkwood_thermal.c
> @@ -27,7 +27,7 @@ static int kirkwood_get_temp(struct thermal_zone_device *thermal,
>                           int *temp)
>  {
>         unsigned long reg;
> -       struct kirkwood_thermal_priv *priv = thermal->devdata;
> +       struct kirkwood_thermal_priv *priv = thermal_zone_device_priv(thermal);
>
>         reg = readl_relaxed(priv->sensor);
>
> diff --git a/drivers/thermal/max77620_thermal.c b/drivers/thermal/max77620_thermal.c
> index 6451a55eb582..bf1679765f1b 100644
> --- a/drivers/thermal/max77620_thermal.c
> +++ b/drivers/thermal/max77620_thermal.c
> @@ -46,7 +46,7 @@ struct max77620_therm_info {
>
>  static int max77620_thermal_read_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct max77620_therm_info *mtherm = tz->devdata;
> +       struct max77620_therm_info *mtherm = thermal_zone_device_priv(tz);
>         unsigned int val;
>         int ret;
>
> diff --git a/drivers/thermal/mediatek/auxadc_thermal.c b/drivers/thermal/mediatek/auxadc_thermal.c
> index ab730f9552d0..755baa4e5bd2 100644
> --- a/drivers/thermal/mediatek/auxadc_thermal.c
> +++ b/drivers/thermal/mediatek/auxadc_thermal.c
> @@ -763,7 +763,7 @@ static int mtk_thermal_bank_temperature(struct mtk_thermal_bank *bank)
>
>  static int mtk_read_temp(struct thermal_zone_device *tz, int *temperature)
>  {
> -       struct mtk_thermal *mt = tz->devdata;
> +       struct mtk_thermal *mt = thermal_zone_device_priv(tz);
>         int i;
>         int tempmax = INT_MIN;
>
> diff --git a/drivers/thermal/mediatek/lvts_thermal.c b/drivers/thermal/mediatek/lvts_thermal.c
> index 84ba65a27acf..fb4b1b4db245 100644
> --- a/drivers/thermal/mediatek/lvts_thermal.c
> +++ b/drivers/thermal/mediatek/lvts_thermal.c
> @@ -252,7 +252,7 @@ static u32 lvts_temp_to_raw(int temperature)
>
>  static int lvts_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct lvts_sensor *lvts_sensor = tz->devdata;
> +       struct lvts_sensor *lvts_sensor = thermal_zone_device_priv(tz);
>         void __iomem *msr = lvts_sensor->msr;
>         u32 value;
>
> @@ -290,7 +290,7 @@ static int lvts_get_temp(struct thermal_zone_device *tz, int *temp)
>
>  static int lvts_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct lvts_sensor *lvts_sensor = tz->devdata;
> +       struct lvts_sensor *lvts_sensor = thermal_zone_device_priv(tz);
>         void __iomem *base = lvts_sensor->base;
>         u32 raw_low = lvts_temp_to_raw(low);
>         u32 raw_high = lvts_temp_to_raw(high);
> diff --git a/drivers/thermal/qcom/qcom-spmi-adc-tm5.c b/drivers/thermal/qcom/qcom-spmi-adc-tm5.c
> index 31164ade2dd1..ed204489a950 100644
> --- a/drivers/thermal/qcom/qcom-spmi-adc-tm5.c
> +++ b/drivers/thermal/qcom/qcom-spmi-adc-tm5.c
> @@ -360,7 +360,7 @@ static irqreturn_t adc_tm5_gen2_isr(int irq, void *data)
>
>  static int adc_tm5_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct adc_tm5_channel *channel = tz->devdata;
> +       struct adc_tm5_channel *channel = thermal_zone_device_priv(tz);
>         int ret;
>
>         if (!channel || !channel->iio)
> @@ -642,7 +642,7 @@ static int adc_tm5_gen2_configure(struct adc_tm5_channel *channel, int low, int
>
>  static int adc_tm5_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct adc_tm5_channel *channel = tz->devdata;
> +       struct adc_tm5_channel *channel = thermal_zone_device_priv(tz);
>         struct adc_tm5_chip *chip;
>         int ret;
>
> diff --git a/drivers/thermal/qcom/qcom-spmi-temp-alarm.c b/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> index 101c75d0e13f..b196d8d01726 100644
> --- a/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> +++ b/drivers/thermal/qcom/qcom-spmi-temp-alarm.c
> @@ -187,7 +187,7 @@ static int qpnp_tm_update_temp_no_adc(struct qpnp_tm_chip *chip)
>
>  static int qpnp_tm_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct qpnp_tm_chip *chip = tz->devdata;
> +       struct qpnp_tm_chip *chip = thermal_zone_device_priv(tz);
>         int ret, mili_celsius;
>
>         if (!temp)
> @@ -265,7 +265,7 @@ static int qpnp_tm_update_critical_trip_temp(struct qpnp_tm_chip *chip,
>
>  static int qpnp_tm_set_trip_temp(struct thermal_zone_device *tz, int trip_id, int temp)
>  {
> -       struct qpnp_tm_chip *chip = tz->devdata;
> +       struct qpnp_tm_chip *chip = thermal_zone_device_priv(tz);
>         struct thermal_trip trip;
>         int ret;
>
> diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c
> index 431c29c0898a..d2dc99247f61 100644
> --- a/drivers/thermal/qoriq_thermal.c
> +++ b/drivers/thermal/qoriq_thermal.c
> @@ -83,7 +83,7 @@ static struct qoriq_tmu_data *qoriq_sensor_to_data(struct qoriq_sensor *s)
>
>  static int tmu_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct qoriq_sensor *qsensor = tz->devdata;
> +       struct qoriq_sensor *qsensor = thermal_zone_device_priv(tz);
>         struct qoriq_tmu_data *qdata = qoriq_sensor_to_data(qsensor);
>         u32 val;
>         /*
> diff --git a/drivers/thermal/rcar_gen3_thermal.c b/drivers/thermal/rcar_gen3_thermal.c
> index d6b5b59c5c53..2b7537ef141d 100644
> --- a/drivers/thermal/rcar_gen3_thermal.c
> +++ b/drivers/thermal/rcar_gen3_thermal.c
> @@ -167,7 +167,7 @@ static int rcar_gen3_thermal_round(int temp)
>
>  static int rcar_gen3_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct rcar_gen3_thermal_tsc *tsc = tz->devdata;
> +       struct rcar_gen3_thermal_tsc *tsc = thermal_zone_device_priv(tz);
>         int mcelsius, val;
>         int reg;
>
> @@ -206,7 +206,7 @@ static int rcar_gen3_thermal_mcelsius_to_temp(struct rcar_gen3_thermal_tsc *tsc,
>
>  static int rcar_gen3_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct rcar_gen3_thermal_tsc *tsc = tz->devdata;
> +       struct rcar_gen3_thermal_tsc *tsc = thermal_zone_device_priv(tz);
>         u32 irqmsk = 0;
>
>         if (low != -INT_MAX) {
> diff --git a/drivers/thermal/rcar_thermal.c b/drivers/thermal/rcar_thermal.c
> index 436f5f9cf729..e0440f63ae77 100644
> --- a/drivers/thermal/rcar_thermal.c
> +++ b/drivers/thermal/rcar_thermal.c
> @@ -101,7 +101,6 @@ struct rcar_thermal_priv {
>         list_for_each_entry(pos, &common->head, list)
>
>  #define MCELSIUS(temp)                 ((temp) * 1000)
> -#define rcar_zone_to_priv(zone)                ((zone)->devdata)
>  #define rcar_priv_to_dev(priv)         ((priv)->common->dev)
>  #define rcar_has_irq_support(priv)     ((priv)->common->base)
>  #define rcar_id_to_shift(priv)         ((priv)->id * 8)
> @@ -273,7 +272,7 @@ static int rcar_thermal_get_current_temp(struct rcar_thermal_priv *priv,
>
>  static int rcar_thermal_get_temp(struct thermal_zone_device *zone, int *temp)
>  {
> -       struct rcar_thermal_priv *priv = rcar_zone_to_priv(zone);
> +       struct rcar_thermal_priv *priv = thermal_zone_device_priv(zone);
>
>         return rcar_thermal_get_current_temp(priv, temp);
>  }
> diff --git a/drivers/thermal/rockchip_thermal.c b/drivers/thermal/rockchip_thermal.c
> index 4b7c43f34d1a..8a51eb26e798 100644
> --- a/drivers/thermal/rockchip_thermal.c
> +++ b/drivers/thermal/rockchip_thermal.c
> @@ -1213,7 +1213,7 @@ static irqreturn_t rockchip_thermal_alarm_irq_thread(int irq, void *dev)
>
>  static int rockchip_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct rockchip_thermal_sensor *sensor = tz->devdata;
> +       struct rockchip_thermal_sensor *sensor = thermal_zone_device_priv(tz);
>         struct rockchip_thermal_data *thermal = sensor->thermal;
>         const struct rockchip_tsadc_chip *tsadc = thermal->chip;
>
> @@ -1226,7 +1226,7 @@ static int rockchip_thermal_set_trips(struct thermal_zone_device *tz, int low, i
>
>  static int rockchip_thermal_get_temp(struct thermal_zone_device *tz, int *out_temp)
>  {
> -       struct rockchip_thermal_sensor *sensor = tz->devdata;
> +       struct rockchip_thermal_sensor *sensor = thermal_zone_device_priv(tz);
>         struct rockchip_thermal_data *thermal = sensor->thermal;
>         const struct rockchip_tsadc_chip *tsadc = sensor->thermal->chip;
>         int retval;
> diff --git a/drivers/thermal/rzg2l_thermal.c b/drivers/thermal/rzg2l_thermal.c
> index 2e0649f38506..7631430ce8a9 100644
> --- a/drivers/thermal/rzg2l_thermal.c
> +++ b/drivers/thermal/rzg2l_thermal.c
> @@ -75,7 +75,7 @@ static inline void rzg2l_thermal_write(struct rzg2l_thermal_priv *priv, u32 reg,
>
>  static int rzg2l_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct rzg2l_thermal_priv *priv = tz->devdata;
> +       struct rzg2l_thermal_priv *priv = thermal_zone_device_priv(tz);
>         u32 result = 0, dsensor, ts_code_ave;
>         int val, i;
>
> diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c
> index 527d1eb0663a..45e5c840d130 100644
> --- a/drivers/thermal/samsung/exynos_tmu.c
> +++ b/drivers/thermal/samsung/exynos_tmu.c
> @@ -645,7 +645,7 @@ static void exynos7_tmu_control(struct platform_device *pdev, bool on)
>
>  static int exynos_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct exynos_tmu_data *data = tz->devdata;
> +       struct exynos_tmu_data *data = thermal_zone_device_priv(tz);
>         int value, ret = 0;
>
>         if (!data || !data->tmu_read)
> @@ -723,7 +723,7 @@ static void exynos4412_tmu_set_emulation(struct exynos_tmu_data *data,
>
>  static int exynos_tmu_set_emulation(struct thermal_zone_device *tz, int temp)
>  {
> -       struct exynos_tmu_data *data = tz->devdata;
> +       struct exynos_tmu_data *data = thermal_zone_device_priv(tz);
>         int ret = -EINVAL;
>
>         if (data->soc == SOC_ARCH_EXYNOS4210)
> diff --git a/drivers/thermal/spear_thermal.c b/drivers/thermal/spear_thermal.c
> index 6a722b10d738..653439b965c8 100644
> --- a/drivers/thermal/spear_thermal.c
> +++ b/drivers/thermal/spear_thermal.c
> @@ -31,7 +31,7 @@ struct spear_thermal_dev {
>  static inline int thermal_get_temp(struct thermal_zone_device *thermal,
>                                 int *temp)
>  {
> -       struct spear_thermal_dev *stdev = thermal->devdata;
> +       struct spear_thermal_dev *stdev = thermal_zone_device_priv(thermal);
>
>         /*
>          * Data are ready to be read after 628 usec from POWERDOWN signal
> @@ -48,7 +48,7 @@ static struct thermal_zone_device_ops ops = {
>  static int __maybe_unused spear_thermal_suspend(struct device *dev)
>  {
>         struct thermal_zone_device *spear_thermal = dev_get_drvdata(dev);
> -       struct spear_thermal_dev *stdev = spear_thermal->devdata;
> +       struct spear_thermal_dev *stdev = thermal_zone_device_priv(spear_thermal);
>         unsigned int actual_mask = 0;
>
>         /* Disable SPEAr Thermal Sensor */
> @@ -64,7 +64,7 @@ static int __maybe_unused spear_thermal_suspend(struct device *dev)
>  static int __maybe_unused spear_thermal_resume(struct device *dev)
>  {
>         struct thermal_zone_device *spear_thermal = dev_get_drvdata(dev);
> -       struct spear_thermal_dev *stdev = spear_thermal->devdata;
> +       struct spear_thermal_dev *stdev = thermal_zone_device_priv(spear_thermal);
>         unsigned int actual_mask = 0;
>         int ret = 0;
>
> @@ -154,7 +154,7 @@ static int spear_thermal_exit(struct platform_device *pdev)
>  {
>         unsigned int actual_mask = 0;
>         struct thermal_zone_device *spear_thermal = platform_get_drvdata(pdev);
> -       struct spear_thermal_dev *stdev = spear_thermal->devdata;
> +       struct spear_thermal_dev *stdev = thermal_zone_device_priv(spear_thermal);
>
>         thermal_zone_device_unregister(spear_thermal);
>
> diff --git a/drivers/thermal/sprd_thermal.c b/drivers/thermal/sprd_thermal.c
> index ac884514f116..2fb90fdad76e 100644
> --- a/drivers/thermal/sprd_thermal.c
> +++ b/drivers/thermal/sprd_thermal.c
> @@ -206,7 +206,7 @@ static int sprd_thm_temp_to_rawdata(int temp, struct sprd_thermal_sensor *sen)
>
>  static int sprd_thm_read_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct sprd_thermal_sensor *sen = tz->devdata;
> +       struct sprd_thermal_sensor *sen = thermal_zone_device_priv(tz);
>         u32 data;
>
>         data = readl(sen->data->base + SPRD_THM_TEMP(sen->id)) &
> diff --git a/drivers/thermal/sun8i_thermal.c b/drivers/thermal/sun8i_thermal.c
> index 497beac63e5d..6b550f0f90bf 100644
> --- a/drivers/thermal/sun8i_thermal.c
> +++ b/drivers/thermal/sun8i_thermal.c
> @@ -110,7 +110,7 @@ static int sun50i_h5_calc_temp(struct ths_device *tmdev,
>
>  static int sun8i_ths_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct tsensor *s = tz->devdata;
> +       struct tsensor *s = thermal_zone_device_priv(tz);
>         struct ths_device *tmdev = s->tmdev;
>         int val = 0;
>
> diff --git a/drivers/thermal/tegra/tegra-bpmp-thermal.c b/drivers/thermal/tegra/tegra-bpmp-thermal.c
> index 0b7a1a1948cb..7bd8ea770fa1 100644
> --- a/drivers/thermal/tegra/tegra-bpmp-thermal.c
> +++ b/drivers/thermal/tegra/tegra-bpmp-thermal.c
> @@ -62,12 +62,14 @@ static int __tegra_bpmp_thermal_get_temp(struct tegra_bpmp_thermal_zone *zone,
>
>  static int tegra_bpmp_thermal_get_temp(struct thermal_zone_device *tz, int *out_temp)
>  {
> -       return __tegra_bpmp_thermal_get_temp(tz->devdata, out_temp);
> +       struct tegra_bpmp_thermal_zone *zone = thermal_zone_device_priv(tz);
> +
> +       return __tegra_bpmp_thermal_get_temp(zone, out_temp);
>  }
>
>  static int tegra_bpmp_thermal_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       struct tegra_bpmp_thermal_zone *zone = tz->devdata;
> +       struct tegra_bpmp_thermal_zone *zone = thermal_zone_device_priv(tz);
>         struct mrq_thermal_host_to_bpmp_request req;
>         struct tegra_bpmp_message msg;
>         int err;
> diff --git a/drivers/thermal/tegra/tegra30-tsensor.c b/drivers/thermal/tegra/tegra30-tsensor.c
> index b3218b71b6d9..42c6fb494dd9 100644
> --- a/drivers/thermal/tegra/tegra30-tsensor.c
> +++ b/drivers/thermal/tegra/tegra30-tsensor.c
> @@ -160,7 +160,7 @@ static void devm_tegra_tsensor_hw_disable(void *data)
>
>  static int tegra_tsensor_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       const struct tegra_tsensor_channel *tsc = tz->devdata;
> +       const struct tegra_tsensor_channel *tsc = thermal_zone_device_priv(tz);
>         const struct tegra_tsensor *ts = tsc->ts;
>         int err, c1, c2, c3, c4, counter;
>         u32 val;
> @@ -218,7 +218,7 @@ static int tegra_tsensor_temp_to_counter(const struct tegra_tsensor *ts, int tem
>
>  static int tegra_tsensor_set_trips(struct thermal_zone_device *tz, int low, int high)
>  {
> -       const struct tegra_tsensor_channel *tsc = tz->devdata;
> +       const struct tegra_tsensor_channel *tsc = thermal_zone_device_priv(tz);
>         const struct tegra_tsensor *ts = tsc->ts;
>         u32 val;
>
> diff --git a/drivers/thermal/thermal-generic-adc.c b/drivers/thermal/thermal-generic-adc.c
> index 323e273e3298..2c283e762d81 100644
> --- a/drivers/thermal/thermal-generic-adc.c
> +++ b/drivers/thermal/thermal-generic-adc.c
> @@ -54,7 +54,7 @@ static int gadc_thermal_adc_to_temp(struct gadc_thermal_info *gti, int val)
>
>  static int gadc_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
> -       struct gadc_thermal_info *gti = tz->devdata;
> +       struct gadc_thermal_info *gti = thermal_zone_device_priv(tz);
>         int val;
>         int ret;
>
> diff --git a/drivers/thermal/thermal_core.c b/drivers/thermal/thermal_core.c
> index 0675df54c8e6..9fa12147fead 100644
> --- a/drivers/thermal/thermal_core.c
> +++ b/drivers/thermal/thermal_core.c
> @@ -1378,6 +1378,12 @@ struct thermal_zone_device *thermal_zone_device_register(const char *type, int n
>  }
>  EXPORT_SYMBOL_GPL(thermal_zone_device_register);
>
> +void *thermal_zone_device_priv(struct thermal_zone_device *tzd)
> +{
> +       return tzd->devdata;
> +}
> +EXPORT_SYMBOL_GPL(thermal_zone_device_priv);
> +
>  /**
>   * thermal_zone_device_unregister - removes the registered thermal zone device
>   * @tz: the thermal zone device to remove
> diff --git a/drivers/thermal/thermal_mmio.c b/drivers/thermal/thermal_mmio.c
> index ea616731066c..6845756ad5e7 100644
> --- a/drivers/thermal/thermal_mmio.c
> +++ b/drivers/thermal/thermal_mmio.c
> @@ -23,7 +23,7 @@ static u32 thermal_mmio_readb(void __iomem *mmio_base)
>  static int thermal_mmio_get_temperature(struct thermal_zone_device *tz, int *temp)
>  {
>         int t;
> -       struct thermal_mmio *sensor = tz->devdata;
> +       struct thermal_mmio *sensor = thermal_zone_device_priv(tz);
>
>         t = sensor->read_mmio(sensor->mmio_base) & sensor->mask;
>         t *= sensor->factor;
> diff --git a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
> index 8a9055bd376e..3e998c9799bb 100644
> --- a/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
> +++ b/drivers/thermal/ti-soc-thermal/ti-thermal-common.c
> @@ -68,7 +68,7 @@ static inline int ti_thermal_hotspot_temperature(int t, int s, int c)
>  static inline int __ti_thermal_get_temp(struct thermal_zone_device *tz, int *temp)
>  {
>         struct thermal_zone_device *pcb_tz = NULL;
> -       struct ti_thermal_data *data = tz->devdata;
> +       struct ti_thermal_data *data = thermal_zone_device_priv(tz);
>         struct ti_bandgap *bgp;
>         const struct ti_temp_sensor *s;
>         int ret, tmp, slope, constant;
> @@ -109,7 +109,7 @@ static inline int __ti_thermal_get_temp(struct thermal_zone_device *tz, int *tem
>
>  static int __ti_thermal_get_trend(struct thermal_zone_device *tz, int trip, enum thermal_trend *trend)
>  {
> -       struct ti_thermal_data *data = tz->devdata;
> +       struct ti_thermal_data *data = thermal_zone_device_priv(tz);
>         struct ti_bandgap *bgp;
>         int id, tr, ret = 0;
>
> diff --git a/drivers/thermal/uniphier_thermal.c b/drivers/thermal/uniphier_thermal.c
> index 47801841b3f5..aef6119cc004 100644
> --- a/drivers/thermal/uniphier_thermal.c
> +++ b/drivers/thermal/uniphier_thermal.c
> @@ -187,7 +187,7 @@ static void uniphier_tm_disable_sensor(struct uniphier_tm_dev *tdev)
>
>  static int uniphier_tm_get_temp(struct thermal_zone_device *tz, int *out_temp)
>  {
> -       struct uniphier_tm_dev *tdev = tz->devdata;
> +       struct uniphier_tm_dev *tdev = thermal_zone_device_priv(tz);
>         struct regmap *map = tdev->regmap;
>         int ret;
>         u32 temp;
> diff --git a/include/linux/thermal.h b/include/linux/thermal.h
> index 2bb4bf33f4f3..7dbb5712434c 100644
> --- a/include/linux/thermal.h
> +++ b/include/linux/thermal.h
> @@ -365,6 +365,8 @@ thermal_zone_device_register_with_trips(const char *, struct thermal_trip *, int
>                                         void *, struct thermal_zone_device_ops *,
>                                         struct thermal_zone_params *, int, int);
>
> +void *thermal_zone_device_priv(struct thermal_zone_device *tzd);
> +
>  int thermal_zone_bind_cooling_device(struct thermal_zone_device *, int,
>                                      struct thermal_cooling_device *,
>                                      unsigned long, unsigned long,
> @@ -436,6 +438,11 @@ static inline int thermal_zone_get_offset(
>                 struct thermal_zone_device *tz)
>  { return -ENODEV; }
>
> +static inline void *thermal_zone_device_priv(struct thermal_zone_device *tz)
> +{
> +       return NULL;
> +}
> +
>  static inline int thermal_zone_device_enable(struct thermal_zone_device *tz)
>  { return -ENODEV; }
>
> --
> 2.34.1
>

^ permalink raw reply

* Re: [PATCH v4 3/3] arm64: dts: qcom: sdm845-oneplus: add alert-slider
From: Konrad Dybcio @ 2023-02-22 17:42 UTC (permalink / raw)
  To: Gergo Koteles, Dmitry Torokhov, Jonathan Corbet, Andy Gross,
	Bjorn Andersson, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly
In-Reply-To: <a8610cc5e16b63cd716e466d8edae54d97f5ae57.1677022414.git.soyer@irl.hu>



On 22.02.2023 01:10, Gergo Koteles wrote:
> The alert-slider is a tri-state sound profile switch found on the OnePlus 6,
> Android maps the states to "silent", "vibrate" and "ring". Expose them as
> ABS_SND_PROFILE events.
> The previous GPIO numbers were wrong. Update them to the correct
> ones.
> 
> Co-developed-by: Caleb Connolly <caleb@connolly.tech>
> Signed-off-by: Caleb Connolly <caleb@connolly.tech>
> Signed-off-by: Gergo Koteles <soyer@irl.hu>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>

Konrad
>  .../boot/dts/qcom/sdm845-oneplus-common.dtsi  | 39 ++++++++++++++++++-
>  1 file changed, 37 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
> index 64638ea94db7..7567f5cf6e3f 100644
> --- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
> +++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
> @@ -20,6 +20,41 @@
>  /delete-node/ &rmtfs_mem;
>  
>  / {
> +	alert-slider {
> +		compatible = "gpio-keys";
> +		label = "Alert slider";
> +
> +		pinctrl-0 = <&alert_slider_default>;
> +		pinctrl-names = "default";
> +
> +		switch-top {
> +			label = "Silent";
> +			linux,input-type = <EV_ABS>;
> +			linux,code = <ABS_SND_PROFILE>;
> +			linux,input-value = <SND_PROFILE_SILENT>;
> +			gpios = <&tlmm 126 GPIO_ACTIVE_LOW>;
> +			linux,can-disable;
> +		};
> +
> +		switch-middle {
> +			label = "Vibrate";
> +			linux,input-type = <EV_ABS>;
> +			linux,code = <ABS_SND_PROFILE>;
> +			linux,input-value = <SND_PROFILE_VIBRATE>;
> +			gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
> +			linux,can-disable;
> +		};
> +
> +		switch-bottom {
> +			label = "Ring";
> +			linux,input-type = <EV_ABS>;
> +			linux,code = <ABS_SND_PROFILE>;
> +			linux,input-value = <SND_PROFILE_RING>;
> +			gpios = <&tlmm 24 GPIO_ACTIVE_LOW>;
> +			linux,can-disable;
> +		};
> +	};
> +
>  	aliases {
>  		serial0 = &uart9;
>  		serial1 = &uart6;
> @@ -753,8 +788,8 @@ &usb_1_hsphy {
>  &tlmm {
>  	gpio-reserved-ranges = <0 4>, <81 4>;
>  
> -	tri_state_key_default: tri-state-key-default-state {
> -		pins = "gpio40", "gpio42", "gpio26";
> +	alert_slider_default: alert-slider-default-state {
> +		pins = "gpio126", "gpio52", "gpio24";
>  		function = "gpio";
>  		drive-strength = <2>;
>  		bias-disable;

^ permalink raw reply

* Re: [PATCH] Fix strange behavior of touchpad on Clevo NS70PU
From: Mattijs Korpershoek @ 2023-02-22 13:22 UTC (permalink / raw)
  To: Werner Sembach, dmitry.torokhov, hdegoede, wse, chenhuacai, tiwai,
	wsa+renesas, linux-input, linux-kernel
In-Reply-To: <20230220183014.238432-1-wse@tuxedocomputers.com>

On lun., févr. 20, 2023 at 19:30, Werner Sembach <wse@tuxedocomputers.com> wrote:

> When closing the laptop lid with an external screen connected, the mouse
> pointer has a constant movement to the lower right corner. Opening the
> lid again stops this movement, but after that the touchpad does no longer
> register clicks.
>
> The touchpad is connected both via i2c-hid and PS/2, the predecessor of
> this device (NS70MU) has the same layout in this regard and also strange
> behaviour caused by the psmouse and the i2c-hid driver fighting over
> touchpad control. This fix is reusing the same workaround by just
> disabling the PS/2 aux port, that is only used by the touchpad, to give the
> i2c-hid driver the lone control over the touchpad.
>
> Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
> Cc: stable@vger.kernel.org

Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>

> ---
>  drivers/input/serio/i8042-acpipnpio.h | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/input/serio/i8042-acpipnpio.h b/drivers/input/serio/i8042-acpipnpio.h
> index efc61736099b9..3a6640a11dd99 100644
> --- a/drivers/input/serio/i8042-acpipnpio.h
> +++ b/drivers/input/serio/i8042-acpipnpio.h
> @@ -1156,6 +1156,12 @@ static const struct dmi_system_id i8042_dmi_quirk_table[] __initconst = {
>  					SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP |
>  					SERIO_QUIRK_NOPNP)
>  	},
> +	{
> +		.matches = {
> +			DMI_MATCH(DMI_BOARD_NAME, "NS5x_7xPU"),
> +		},
> +		.driver_data = (void *)(SERIO_QUIRK_NOAUX)
> +	},
>  	{
>  		.matches = {
>  			DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"),
> -- 
> 2.34.1

^ permalink raw reply

* Re: (subset) [PATCH v5 2/3] rtc: bbnsm: Add the bbnsm rtc support
From: Alexandre Belloni @ 2023-02-22 11:26 UTC (permalink / raw)
  To: lee, robh+dt, krzysztof.kozlowski+dt, shawnguo, s.hauer,
	dmitry.torokhov, a.zummo, Jacky Bai
  Cc: devicetree, linux-arm-kernel, linux-input, linux-rtc, kernel,
	linux-imx, festevam
In-Reply-To: <20230215024117.3357341-3-ping.bai@nxp.com>


On Wed, 15 Feb 2023 10:41:16 +0800, Jacky Bai wrote:
> The BBNSM module includes a real time counter with alarm.
> Add a RTC driver for this function.
> 
> 

Applied, thanks!

[2/3] rtc: bbnsm: Add the bbnsm rtc support
      commit: eb7b85853c3866236f9cb378fc68ce5f76efbf9c

Best regards,

-- 
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

^ permalink raw reply

* [dtor-input:next] BUILD SUCCESS 586dc36226dd748b197eea8642c087cae611129b
From: kernel test robot @ 2023-02-22 10:23 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input

tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git next
branch HEAD: 586dc36226dd748b197eea8642c087cae611129b  Input: hp_sdc_rtc - mark an unused function as __maybe_unused

elapsed time: 721m

configs tested: 80
configs skipped: 3

The following configs have been built successfully.
More configs may be tested in the coming days.

gcc tested configs:
alpha                            allyesconfig
alpha                               defconfig
arc                              allyesconfig
arc                                 defconfig
arc                  randconfig-r043-20230219
arc                  randconfig-r043-20230220
arm                              allmodconfig
arm                              allyesconfig
arm                                 defconfig
arm                  randconfig-r046-20230220
arm64                            allyesconfig
arm64                               defconfig
csky                                defconfig
i386                             allyesconfig
i386                              debian-10.3
i386                                defconfig
i386                 randconfig-a001-20230220
i386                 randconfig-a002-20230220
i386                 randconfig-a003-20230220
i386                 randconfig-a004-20230220
i386                 randconfig-a005-20230220
i386                 randconfig-a006-20230220
ia64                             allmodconfig
ia64                                defconfig
loongarch                        allmodconfig
loongarch                         allnoconfig
loongarch                           defconfig
m68k                             allmodconfig
m68k                                defconfig
mips                             allmodconfig
mips                             allyesconfig
nios2                               defconfig
parisc                              defconfig
parisc64                            defconfig
powerpc                          allmodconfig
powerpc                           allnoconfig
riscv                            allmodconfig
riscv                             allnoconfig
riscv                               defconfig
riscv                randconfig-r042-20230219
riscv                          rv32_defconfig
s390                             allmodconfig
s390                             allyesconfig
s390                                defconfig
s390                 randconfig-r044-20230219
sh                               allmodconfig
sparc                               defconfig
um                             i386_defconfig
um                           x86_64_defconfig
x86_64                            allnoconfig
x86_64                           allyesconfig
x86_64                              defconfig
x86_64                                  kexec
x86_64               randconfig-a001-20230220
x86_64               randconfig-a002-20230220
x86_64               randconfig-a003-20230220
x86_64               randconfig-a004-20230220
x86_64               randconfig-a005-20230220
x86_64               randconfig-a006-20230220
x86_64                        randconfig-a011
x86_64                        randconfig-a013
x86_64                        randconfig-a015
x86_64                               rhel-8.3

clang tested configs:
arm                  randconfig-r046-20230219
hexagon              randconfig-r041-20230219
hexagon              randconfig-r041-20230220
hexagon              randconfig-r045-20230219
hexagon              randconfig-r045-20230220
i386                 randconfig-a011-20230220
i386                 randconfig-a012-20230220
i386                 randconfig-a013-20230220
i386                 randconfig-a014-20230220
i386                 randconfig-a015-20230220
i386                 randconfig-a016-20230220
riscv                randconfig-r042-20230220
s390                 randconfig-r044-20230220
x86_64                        randconfig-a012
x86_64                        randconfig-a014
x86_64                        randconfig-a016
x86_64               randconfig-a016-20230220

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply

* [dtor-input:for-linus] BUILD SUCCESS 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18
From: kernel test robot @ 2023-02-22 10:23 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input

tree/branch: https://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git for-linus
branch HEAD: 7ae9fb1b7ecbb5d85d07857943f677fd1a559b18  Merge branch 'next' into for-linus

elapsed time: 721m

configs tested: 78
configs skipped: 3

The following configs have been built successfully.
More configs may be tested in the coming days.

gcc tested configs:
alpha                            allyesconfig
alpha                               defconfig
arc                              allyesconfig
arc                                 defconfig
arc                  randconfig-r043-20230220
arc                  randconfig-r043-20230222
arm                              allmodconfig
arm                              allyesconfig
arm                                 defconfig
arm                  randconfig-r046-20230222
arm64                            allyesconfig
arm64                               defconfig
csky                                defconfig
i386                             allyesconfig
i386                              debian-10.3
i386                                defconfig
i386                          randconfig-a001
i386                          randconfig-a003
i386                          randconfig-a005
ia64                             allmodconfig
ia64                                defconfig
loongarch                        allmodconfig
loongarch                         allnoconfig
loongarch                           defconfig
m68k                             allmodconfig
m68k                                defconfig
mips                             allmodconfig
mips                             allyesconfig
nios2                               defconfig
parisc                              defconfig
parisc64                            defconfig
powerpc                          allmodconfig
powerpc                           allnoconfig
riscv                            allmodconfig
riscv                             allnoconfig
riscv                               defconfig
riscv                randconfig-r042-20230219
riscv                          rv32_defconfig
s390                             allmodconfig
s390                             allyesconfig
s390                                defconfig
sh                               allmodconfig
sparc                               defconfig
um                             i386_defconfig
um                           x86_64_defconfig
x86_64                            allnoconfig
x86_64                           allyesconfig
x86_64                              defconfig
x86_64                                  kexec
x86_64               randconfig-a001-20230220
x86_64               randconfig-a002-20230220
x86_64               randconfig-a003-20230220
x86_64               randconfig-a004-20230220
x86_64               randconfig-a005-20230220
x86_64               randconfig-a006-20230220
x86_64                               rhel-8.3

clang tested configs:
arm                  randconfig-r046-20230219
hexagon              randconfig-r041-20230220
hexagon              randconfig-r041-20230222
hexagon              randconfig-r045-20230221
hexagon              randconfig-r045-20230222
i386                          randconfig-a002
i386                          randconfig-a004
i386                          randconfig-a006
i386                 randconfig-a011-20230220
i386                 randconfig-a012-20230220
i386                 randconfig-a013-20230220
i386                 randconfig-a014-20230220
i386                 randconfig-a015-20230220
i386                 randconfig-a016-20230220
riscv                randconfig-r042-20230222
s390                 randconfig-r044-20230222
x86_64               randconfig-a011-20230220
x86_64               randconfig-a012-20230220
x86_64               randconfig-a013-20230220
x86_64               randconfig-a014-20230220
x86_64               randconfig-a015-20230220
x86_64               randconfig-a016-20230220

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

^ permalink raw reply

* Re: [PATCH] HID: usbhid: enable remote wakeup for mice
From: Oliver Neukum @ 2023-02-22  9:34 UTC (permalink / raw)
  To: Michael Wu, jikos, benjamin.tissoires
  Cc: linux-usb, linux-input, linux-kernel
In-Reply-To: <20230222013944.31095-1-michael@allwinnertech.com>

On 22.02.23 02:39, Michael Wu wrote:
> This patch fixes a problem that USB mouse can't wake up the device that
> enters standby.

Hi,

I am afraid I need to ask you to be a bit more precise here.
Are you referring to USB mice being unable to wake up a system,
even if you so request via sysfs, or that they won't by default?

	Regards
		Oliver

^ permalink raw reply

* Re: [PATCH] HID: usbhid: enable remote wakeup for mice
From: Sergei Shtylyov @ 2023-02-22  8:59 UTC (permalink / raw)
  To: Michael Wu, jikos, benjamin.tissoires
  Cc: linux-usb, linux-input, linux-kernel
In-Reply-To: <20230222013944.31095-1-michael@allwinnertech.com>

Hello!

On 2/22/23 4:39 AM, Michael Wu wrote:

> This patch fixes a problem that USB mouse can't wake up the device that
> enters standby.
> 
> At present, the kernel only checks whether certain USB manufacturers
> support wake-up, which will easily cause inconvenience to the
> development work of other manufacturers and add unnecessary work to the
> maintenance of kernel.
> 
> The USB protocol supports judging whether a usb supports the wake-up
> function, so it should be more reasonable to add a wake-up source by
> directly checking the settings from the USB protocol.
> 
> There was a similar issue on the keyboard before, which was fixed by
> this patch (3d61510f4eca), but now the problem happened on the mouse.
> This patch uses a similar idea to fix this problem.
> 
> Signed-off-by: Michael Wu <michael@allwinnertech.com>
> ---
>  drivers/hid/usbhid/hid-core.c | 8 ++++++++
>  drivers/hid/usbhid/usbmouse.c | 1 +
>  2 files changed, 9 insertions(+)
> 
> diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
> index be4c731aaa65..d3a6755cca09 100644
> --- a/drivers/hid/usbhid/hid-core.c
> +++ b/drivers/hid/usbhid/hid-core.c
> @@ -1189,6 +1189,14 @@ static int usbhid_start(struct hid_device *hid)
>  		device_set_wakeup_enable(&dev->dev, 1);
>  	}
>  
> +	/**

   The kernel-doc comments should not be used here in the function body.

> +	 * NOTE: enable remote wakeup by default for all mouse devices
> +	 * supporting the boot protocol.
> +	 */
> +	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
> +	    interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
> +		device_set_wakeup_enable(&dev->dev, 1);
> +
>  	mutex_unlock(&usbhid->mutex);
>  	return 0;
>  
[...]

MBR, Sergey

^ permalink raw reply

* RE: [PATCH v5 2/3] rtc: bbnsm: Add the bbnsm rtc support
From: Jacky Bai @ 2023-02-22  7:09 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: lee@kernel.org, robh+dt@kernel.org,
	krzysztof.kozlowski+dt@linaro.org, shawnguo@kernel.org,
	s.hauer@pengutronix.de, dmitry.torokhov@gmail.com,
	a.zummo@towertech.it, devicetree@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, linux-input@vger.kernel.org,
	linux-rtc@vger.kernel.org, kernel@pengutronix.de, dl-linux-imx,
	festevam@gmail.com
In-Reply-To: <Y/UHw2Q0FL9zlfFk@mail.local>

Hi Alexandre,

> Subject: Re: [PATCH v5 2/3] rtc: bbnsm: Add the bbnsm rtc support
> 
> On 21/02/2023 19:01:16+0100, Alexandre Belloni wrote:
> > On 15/02/2023 10:41:16+0800, Jacky Bai wrote:
> > > The BBNSM module includes a real time counter with alarm.
> > > Add a RTC driver for this function.
> > >
> > > Signed-off-by: Jacky Bai <ping.bai@nxp.com>
> > > Reviewed-by: Peng Fan <peng.fan@nxp.com>
> > Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
> >
> 
> Actually, as there is no dependency anymore, I'm going to apply that directly.
> 

Do I need to resend or you will directly apply this V5 patch?

BR
> > > +static int bbnsm_rtc_probe(struct platform_device *pdev) {
> > > +	struct device_node *np = pdev->dev.of_node;
> > > +	struct bbnsm_rtc *bbnsm;
> > > +	int ret;
> > > +
> > > +	bbnsm = devm_kzalloc(&pdev->dev, sizeof(*bbnsm), GFP_KERNEL);
> > > +	if (!bbnsm)
> > > +		return -ENOMEM;
> > > +
> > > +	bbnsm->rtc = devm_rtc_allocate_device(&pdev->dev);
> > > +	if (IS_ERR(bbnsm->rtc))
> > > +		return PTR_ERR(bbnsm->rtc);
> > > +
> > > +	bbnsm->regmap = syscon_node_to_regmap(np->parent);
> > > +	if (IS_ERR(bbnsm->regmap)) {
> > > +		dev_dbg(&pdev->dev, "bbnsm get regmap failed\n");
> > > +		return PTR_ERR(bbnsm->regmap);
> > > +	}
> > > +
> > > +	bbnsm->irq = platform_get_irq(pdev, 0);
> > > +	if (bbnsm->irq < 0)
> > > +		return bbnsm->irq;
> > > +
> > > +	platform_set_drvdata(pdev, bbnsm);
> > > +
> > > +	/* clear all the pending events */
> > > +	regmap_write(bbnsm->regmap, BBNSM_EVENTS, 0x7A);
> > > +
> > > +	device_init_wakeup(&pdev->dev, true);
> > > +	dev_pm_set_wake_irq(&pdev->dev, bbnsm->irq);
> > > +
> > > +	ret = devm_request_irq(&pdev->dev, bbnsm->irq,
> bbnsm_rtc_irq_handler,
> > > +			IRQF_SHARED, "rtc alarm", &pdev->dev);
> >
> > This is not properly aligned, you can fix that if you ever have to
> > resend.
> 
> >
> >
> > --

^ permalink raw reply

* Re: [PATCH] HID: usbhid: enable remote wakeup for mice
From: Greg KH @ 2023-02-22  6:04 UTC (permalink / raw)
  To: Michael Wu
  Cc: jikos, benjamin.tissoires, linux-usb, linux-input, linux-kernel
In-Reply-To: <20230222013944.31095-1-michael@allwinnertech.com>

On Wed, Feb 22, 2023 at 09:39:44AM +0800, Michael Wu wrote:
> This patch fixes a problem that USB mouse can't wake up the device that
> enters standby.

This not a problem, it is that way by design.

> At present, the kernel only checks whether certain USB manufacturers
> support wake-up, which will easily cause inconvenience to the
> development work of other manufacturers and add unnecessary work to the
> maintenance of kernel.
> 
> The USB protocol supports judging whether a usb supports the wake-up
> function, so it should be more reasonable to add a wake-up source by
> directly checking the settings from the USB protocol.

But you do not do that in this patch, why not?

> There was a similar issue on the keyboard before, which was fixed by
> this patch (3d61510f4eca), but now the problem happened on the mouse.
> This patch uses a similar idea to fix this problem.
> 
> Signed-off-by: Michael Wu <michael@allwinnertech.com>
> ---
>  drivers/hid/usbhid/hid-core.c | 8 ++++++++
>  drivers/hid/usbhid/usbmouse.c | 1 +
>  2 files changed, 9 insertions(+)
> 
> diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
> index be4c731aaa65..d3a6755cca09 100644
> --- a/drivers/hid/usbhid/hid-core.c
> +++ b/drivers/hid/usbhid/hid-core.c
> @@ -1189,6 +1189,14 @@ static int usbhid_start(struct hid_device *hid)
>  		device_set_wakeup_enable(&dev->dev, 1);
>  	}
>  
> +	/**
> +	 * NOTE: enable remote wakeup by default for all mouse devices
> +	 * supporting the boot protocol.
> +	 */
> +	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
> +	    interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
> +		device_set_wakeup_enable(&dev->dev, 1);

Sorry, but we can not take this unless it is proven that this will work
properly for all of these devices.  Other operating systems do not do
this last I checked, so there will be problems.

thanks,

greg k-h

^ permalink raw reply

* [PATCH] HID: usbhid: enable remote wakeup for mice
From: Michael Wu @ 2023-02-22  1:39 UTC (permalink / raw)
  To: jikos, benjamin.tissoires; +Cc: linux-usb, linux-input, linux-kernel

This patch fixes a problem that USB mouse can't wake up the device that
enters standby.

At present, the kernel only checks whether certain USB manufacturers
support wake-up, which will easily cause inconvenience to the
development work of other manufacturers and add unnecessary work to the
maintenance of kernel.

The USB protocol supports judging whether a usb supports the wake-up
function, so it should be more reasonable to add a wake-up source by
directly checking the settings from the USB protocol.

There was a similar issue on the keyboard before, which was fixed by
this patch (3d61510f4eca), but now the problem happened on the mouse.
This patch uses a similar idea to fix this problem.

Signed-off-by: Michael Wu <michael@allwinnertech.com>
---
 drivers/hid/usbhid/hid-core.c | 8 ++++++++
 drivers/hid/usbhid/usbmouse.c | 1 +
 2 files changed, 9 insertions(+)

diff --git a/drivers/hid/usbhid/hid-core.c b/drivers/hid/usbhid/hid-core.c
index be4c731aaa65..d3a6755cca09 100644
--- a/drivers/hid/usbhid/hid-core.c
+++ b/drivers/hid/usbhid/hid-core.c
@@ -1189,6 +1189,14 @@ static int usbhid_start(struct hid_device *hid)
 		device_set_wakeup_enable(&dev->dev, 1);
 	}
 
+	/**
+	 * NOTE: enable remote wakeup by default for all mouse devices
+	 * supporting the boot protocol.
+	 */
+	if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
+	    interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
+		device_set_wakeup_enable(&dev->dev, 1);
+
 	mutex_unlock(&usbhid->mutex);
 	return 0;
 
diff --git a/drivers/hid/usbhid/usbmouse.c b/drivers/hid/usbhid/usbmouse.c
index 3fd93c2e4f4a..2fbc3f49e420 100644
--- a/drivers/hid/usbhid/usbmouse.c
+++ b/drivers/hid/usbhid/usbmouse.c
@@ -188,6 +188,7 @@ static int usb_mouse_probe(struct usb_interface *intf, const struct usb_device_i
 		goto fail3;
 
 	usb_set_intfdata(intf, mouse);
+	device_set_wakeup_enable(&dev->dev, 1);
 	return 0;
 
 fail3:	
-- 
2.29.0


^ permalink raw reply related

* [PATCH v4 3/3] arm64: dts: qcom: sdm845-oneplus: add alert-slider
From: Gergo Koteles @ 2023-02-22  0:10 UTC (permalink / raw)
  To: Dmitry Torokhov, Jonathan Corbet, Andy Gross, Bjorn Andersson,
	Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly, Gergo Koteles
In-Reply-To: <cover.1677022414.git.soyer@irl.hu>

The alert-slider is a tri-state sound profile switch found on the OnePlus 6,
Android maps the states to "silent", "vibrate" and "ring". Expose them as
ABS_SND_PROFILE events.
The previous GPIO numbers were wrong. Update them to the correct
ones.

Co-developed-by: Caleb Connolly <caleb@connolly.tech>
Signed-off-by: Caleb Connolly <caleb@connolly.tech>
Signed-off-by: Gergo Koteles <soyer@irl.hu>
---
 .../boot/dts/qcom/sdm845-oneplus-common.dtsi  | 39 ++++++++++++++++++-
 1 file changed, 37 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
index 64638ea94db7..7567f5cf6e3f 100644
--- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
@@ -20,6 +20,41 @@
 /delete-node/ &rmtfs_mem;
 
 / {
+	alert-slider {
+		compatible = "gpio-keys";
+		label = "Alert slider";
+
+		pinctrl-0 = <&alert_slider_default>;
+		pinctrl-names = "default";
+
+		switch-top {
+			label = "Silent";
+			linux,input-type = <EV_ABS>;
+			linux,code = <ABS_SND_PROFILE>;
+			linux,input-value = <SND_PROFILE_SILENT>;
+			gpios = <&tlmm 126 GPIO_ACTIVE_LOW>;
+			linux,can-disable;
+		};
+
+		switch-middle {
+			label = "Vibrate";
+			linux,input-type = <EV_ABS>;
+			linux,code = <ABS_SND_PROFILE>;
+			linux,input-value = <SND_PROFILE_VIBRATE>;
+			gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
+			linux,can-disable;
+		};
+
+		switch-bottom {
+			label = "Ring";
+			linux,input-type = <EV_ABS>;
+			linux,code = <ABS_SND_PROFILE>;
+			linux,input-value = <SND_PROFILE_RING>;
+			gpios = <&tlmm 24 GPIO_ACTIVE_LOW>;
+			linux,can-disable;
+		};
+	};
+
 	aliases {
 		serial0 = &uart9;
 		serial1 = &uart6;
@@ -753,8 +788,8 @@ &usb_1_hsphy {
 &tlmm {
 	gpio-reserved-ranges = <0 4>, <81 4>;
 
-	tri_state_key_default: tri-state-key-default-state {
-		pins = "gpio40", "gpio42", "gpio26";
+	alert_slider_default: alert-slider-default-state {
+		pins = "gpio126", "gpio52", "gpio24";
 		function = "gpio";
 		drive-strength = <2>;
 		bias-disable;
-- 
2.39.2


^ permalink raw reply related

* [PATCH v4 2/3] Input: add ABS_SND_PROFILE
From: Gergo Koteles @ 2023-02-22  0:10 UTC (permalink / raw)
  To: Dmitry Torokhov, Jonathan Corbet, Andy Gross, Bjorn Andersson,
	Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly, Gergo Koteles
In-Reply-To: <cover.1677022414.git.soyer@irl.hu>

ABS_SND_PROFILE used to describe the state of a multi-value sound profile
switch. This will be used for the alert-slider on OnePlus phones or other
phones.

Profile values added as SND_PROFLE_(SILENT|VIBRATE|RING) identifiers
to input-event-codes.h so they can be used from DTS.

Signed-off-by: Gergo Koteles <soyer@irl.hu>
---
 Documentation/input/event-codes.rst    | 6 ++++++
 drivers/hid/hid-debug.c                | 1 +
 include/uapi/linux/input-event-codes.h | 9 +++++++++
 3 files changed, 16 insertions(+)

diff --git a/Documentation/input/event-codes.rst b/Documentation/input/event-codes.rst
index b4557462edd7..d43336e64d6a 100644
--- a/Documentation/input/event-codes.rst
+++ b/Documentation/input/event-codes.rst
@@ -241,6 +241,12 @@ A few EV_ABS codes have special meanings:
     emitted only when the selected profile changes, indicating the newly
     selected profile value.
 
+* ABS_SND_PROFILE:
+
+  - Used to describe the state of a multi-value sound profile switch.
+    An event is emitted only when the selected profile changes,
+    indicating the newly selected profile value.
+
 * ABS_MT_<name>:
 
   - Used to describe multitouch input events. Please see
diff --git a/drivers/hid/hid-debug.c b/drivers/hid/hid-debug.c
index e213bdde543a..76fb2ecbbc51 100644
--- a/drivers/hid/hid-debug.c
+++ b/drivers/hid/hid-debug.c
@@ -1018,6 +1018,7 @@ static const char *absolutes[ABS_CNT] = {
 	[ABS_DISTANCE] = "Distance",	[ABS_TILT_X] = "XTilt",
 	[ABS_TILT_Y] = "YTilt",		[ABS_TOOL_WIDTH] = "ToolWidth",
 	[ABS_VOLUME] = "Volume",	[ABS_PROFILE] = "Profile",
+	[ABS_SND_PROFILE] = "SoundProfile",
 	[ABS_MISC] = "Misc",
 	[ABS_MT_TOUCH_MAJOR] = "MTMajor",
 	[ABS_MT_TOUCH_MINOR] = "MTMinor",
diff --git a/include/uapi/linux/input-event-codes.h b/include/uapi/linux/input-event-codes.h
index 022a520e31fc..e8d5ee027b40 100644
--- a/include/uapi/linux/input-event-codes.h
+++ b/include/uapi/linux/input-event-codes.h
@@ -866,6 +866,7 @@
 
 #define ABS_VOLUME		0x20
 #define ABS_PROFILE		0x21
+#define ABS_SND_PROFILE		0x22
 
 #define ABS_MISC		0x28
 
@@ -974,4 +975,12 @@
 #define SND_MAX			0x07
 #define SND_CNT			(SND_MAX+1)
 
+/*
+ * ABS_SND_PROFILE values
+ */
+
+#define SND_PROFILE_SILENT	0x00
+#define SND_PROFILE_VIBRATE	0x01
+#define SND_PROFILE_RING	0x02
+
 #endif
-- 
2.39.2


^ permalink raw reply related

* [PATCH v4 1/3] Input: gpio-keys - add support for linux,input-value DTS property
From: Gergo Koteles @ 2023-02-22  0:10 UTC (permalink / raw)
  To: Dmitry Torokhov, Jonathan Corbet, Andy Gross, Bjorn Andersson,
	Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly, Gergo Koteles
In-Reply-To: <cover.1677022414.git.soyer@irl.hu>

Allows setting the value of EV_ABS events from DTS.
This property is included in the gpio-keys.yaml scheme, but was only
implemented for gpio-keys-polled.

Signed-off-by: Gergo Koteles <soyer@irl.hu>
---
 drivers/input/keyboard/gpio_keys.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 5496482a38c1..c42f86ad0766 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -770,6 +770,9 @@ gpio_keys_get_devtree_pdata(struct device *dev)
 					     &button->type))
 			button->type = EV_KEY;
 
+		fwnode_property_read_u32(child, "linux,input-value",
+					 (u32 *)&button->value);
+
 		button->wakeup =
 			fwnode_property_read_bool(child, "wakeup-source") ||
 			/* legacy name */
-- 
2.39.2


^ permalink raw reply related

* [PATCH v4 0/3] Add alert-slider for OnePlus6
From: Gergo Koteles @ 2023-02-22  0:10 UTC (permalink / raw)
  To: Dmitry Torokhov, Jonathan Corbet, Andy Gross, Bjorn Andersson,
	Konrad Dybcio, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly, Gergo Koteles

V1 -> V2: rebase to qcom/for-next
V2 -> V3: rename tri-state-key to alert-slider, fix DTS warnings,
add SND_PROFILE_* identifiers to input-event-codes.h
V3 -> V4: DTS: use default debounce-interval, order alphabetically

Gergo Koteles (3):
  Input: gpio-keys - add support for linux,input-value DTS property
  Input: add ABS_SND_PROFILE
  arm64: dts: qcom: sdm845-oneplus: add alert-slider

 Documentation/input/event-codes.rst           |  6 +++
 .../boot/dts/qcom/sdm845-oneplus-common.dtsi  | 39 ++++++++++++++++++-
 drivers/hid/hid-debug.c                       |  1 +
 drivers/input/keyboard/gpio_keys.c            |  3 ++
 include/uapi/linux/input-event-codes.h        |  9 +++++
 5 files changed, 56 insertions(+), 2 deletions(-)


base-commit: 02ac8d2a011b630481d959298a1cc76ca0717f3e
-- 
2.39.2


^ permalink raw reply

* Re: [PATCH v3 3/3] arm64: dts: qcom: sdm845-oneplus: add alert-slider
From: Gergo Koteles @ 2023-02-22  0:09 UTC (permalink / raw)
  To: Konrad Dybcio, Dmitry Torokhov, Jonathan Corbet, Andy Gross,
	Bjorn Andersson, Rob Herring, Krzysztof Kozlowski, Jiri Kosina,
	Benjamin Tissoires
  Cc: linux-input, linux-kernel, linux-arm-msm, devicetree,
	Caleb Connolly
In-Reply-To: <be1201a5-f315-9125-8768-4719a92f07f9@linaro.org>

Hi Konrad,
On 2023. 02. 20. 11:17, Konrad Dybcio wrote:
> 
> 
> On 20.02.2023 01:13, Gergo Koteles wrote:
>> The alert-slider is a tri-state sound profile switch found on the OnePlus 6,
>> Android maps the states to "silent", "vibrate" and "ring". Expose them as
>> ABS_SND_PROFILE events.
>> The previous GPIO numbers were wrong. Update them to the correct
>> ones.
>>
>> Co-developed-by: Caleb Connolly <caleb@connolly.tech>
>> Signed-off-by: Caleb Connolly <caleb@connolly.tech>
>> Signed-off-by: Gergo Koteles <soyer@irl.hu>
>> ---
>>   .../boot/dts/qcom/sdm845-oneplus-common.dtsi  | 43 ++++++++++++++++++-
>>   1 file changed, 41 insertions(+), 2 deletions(-)
>>
>> diff --git a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
>> index 64638ea94db7..ff982dd853a9 100644
>> --- a/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
>> +++ b/arch/arm64/boot/dts/qcom/sdm845-oneplus-common.dtsi
>> @@ -52,6 +52,45 @@ key-vol-up {
>>   		};
>>   	};
>>   
>> +	alert-slider {
> This is out of order, alphabetically.
> 
>> +		compatible = "gpio-keys";
>> +		label = "Alert slider";
>> +
>> +		pinctrl-0 = <&alert_slider_default>;
>> +		pinctrl-names = "default";
>> +
>> +		switch-top {
>> +			label = "Silent";
>> +			linux,input-type = <EV_ABS>;
>> +			linux,code = <ABS_SND_PROFILE>;
>> +			linux,input-value = <SND_PROFILE_SILENT>;
>> +			gpios = <&tlmm 126 GPIO_ACTIVE_LOW>;
>> +			debounce-interval = <50>;
> Is there a reason it can't be the default 5ms, since it should
> more or less be a simple input ping to the userspace?
> 
Yes, it's a simple input ping to the userspace.
It works with the default 5ms also.

Thanks,
Gergo

> Other than that:
> 
> Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
> 
> Konrad
>> +			linux,can-disable;
>> +		};
>> +
>> +		switch-middle {
>> +			label = "Vibrate";
>> +			linux,input-type = <EV_ABS>;
>> +			linux,code = <ABS_SND_PROFILE>;
>> +			linux,input-value = <SND_PROFILE_VIBRATE>;
>> +			gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
>> +			debounce-interval = <50>;
>> +			linux,can-disable;
>> +
>> +		};
>> +
>> +		switch-bottom {
>> +			label = "Ring";
>> +			linux,input-type = <EV_ABS>;
>> +			linux,code = <ABS_SND_PROFILE>;
>> +			linux,input-value = <SND_PROFILE_RING>;
>> +			gpios = <&tlmm 24 GPIO_ACTIVE_LOW>;
>> +			debounce-interval = <50>;
>> +			linux,can-disable;
>> +		};
>> +	};
>> +
>>   	reserved-memory {
>>   		/*
>>   		 * The rmtfs_mem needs to be guarded due to "XPU limitations"
>> @@ -753,8 +792,8 @@ &usb_1_hsphy {
>>   &tlmm {
>>   	gpio-reserved-ranges = <0 4>, <81 4>;
>>   
>> -	tri_state_key_default: tri-state-key-default-state {
>> -		pins = "gpio40", "gpio42", "gpio26";
>> +	alert_slider_default: alert-slider-default-state {
>> +		pins = "gpio126", "gpio52", "gpio24";
>>   		function = "gpio";
>>   		drive-strength = <2>;
>>   		bias-disable;


^ permalink raw reply

* Re: [PATCH v2] Input: ili210x - Probe even if no resolution information
From: Marek Vasut @ 2023-02-21 23:14 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, Joe Hung, Luca Hsu
In-Reply-To: <Y/U0LTx2O2bVsUKY@google.com>

On 2/21/23 22:14, Dmitry Torokhov wrote:
> On Tue, Feb 21, 2023 at 09:12:29PM +0100, Marek Vasut wrote:
>> On 2/21/23 20:40, Dmitry Torokhov wrote:
>>> Hi Marek,
>>>
>>> On Fri, Feb 17, 2023 at 03:52:00AM +0100, Marek Vasut wrote:
>>>> Probe the touch controller driver even if resolution information is not
>>>> available. This can happen e.g. in case the touch controller suffered a
>>>> failed firmware update and is stuck in bootloader mode.
>>>>
>>>> Signed-off-by: Marek Vasut <marex@denx.de>
>>>> ---
>>>> Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
>>>> Cc: Joe Hung <joe_hung@ilitek.com>
>>>> Cc: Luca Hsu <luca_hsu@ilitek.com>
>>>> ---
>>>> V2: Add dev_warn() in case resolution is invalid
>>>> ---
>>>>    drivers/input/touchscreen/ili210x.c | 28 +++++++++++++++++++---------
>>>>    1 file changed, 19 insertions(+), 9 deletions(-)
>>>>
>>>> diff --git a/drivers/input/touchscreen/ili210x.c b/drivers/input/touchscreen/ili210x.c
>>>> index 4897fafa4204d..d64b6d77d2e08 100644
>>>> --- a/drivers/input/touchscreen/ili210x.c
>>>> +++ b/drivers/input/touchscreen/ili210x.c
>>>> @@ -370,22 +370,33 @@ static int ili251x_firmware_update_resolution(struct device *dev)
>>>>    	/* The firmware update blob might have changed the resolution. */
>>>>    	error = priv->chip->read_reg(client, REG_PANEL_INFO, &rs, sizeof(rs));
>>>> -	if (error)
>>>> -		return error;
>>>> +	if (!error) {
>>>> +		resx = le16_to_cpup((__le16 *)rs);
>>>> +		resy = le16_to_cpup((__le16 *)(rs + 2));
>>>> -	resx = le16_to_cpup((__le16 *)rs);
>>>> -	resy = le16_to_cpup((__le16 *)(rs + 2));
>>>> +		/* The value reported by the firmware is invalid. */
>>>> +		if (!resx || resx == 0xffff || !resy || resy == 0xffff)
>>>> +			error = -EINVAL;
>>>> +	}
>>>> -	/* The value reported by the firmware is invalid. */
>>>> -	if (!resx || resx == 0xffff || !resy || resy == 0xffff)
>>>> -		return -EINVAL;
>>>> +	/*
>>>> +	 * In case of error, the firmware might be stuck in bootloader mode,
>>>> +	 * e.g. after a failed firmware update. Set maximum resolution, but
>>>> +	 * do not fail to probe, so the user can re-trigger the firmware
>>>> +	 * update and recover the touch controller.
>>>> +	 */
>>>> +	if (error) {
>>>> +		dev_warn(dev, "Invalid resolution reported by controller.\n");
>>>> +		resx = 16384;
>>>> +		resy = 16384;
>>>> +	}
>>>>    	input_abs_set_max(priv->input, ABS_X, resx - 1);
>>>>    	input_abs_set_max(priv->input, ABS_Y, resy - 1);
>>>>    	input_abs_set_max(priv->input, ABS_MT_POSITION_X, resx - 1);
>>>>    	input_abs_set_max(priv->input, ABS_MT_POSITION_Y, resy - 1);
>>>> -	return 0;
>>>> +	return error;
>>>
>>> I think this will make ili251x_firmware_update_cached_state() continue
>>> failing when it reports invalid coordinates. Was this intended?
>>
>> This is actually correct, ili251x_firmware_update_cached_state() will fail,
>> but ili210x_i2c_probe() won't stop there anymore, see the second hunk of
>> this patch. The driver will instantiate the controller, so user can load
>> correct firmware into it and recover the hardware.
> 
> I was concerned about call from ili210x_firmware_update_store() which
> will continue returning error.

It hopefully won't, because at that point the controller would be 
running new and working firmware, which would report the correct values. 
If the firmware is broken, then yes, it would fail.

^ permalink raw reply

* Re: [PATCH v5 1/3] input: bbnsm_pwrkey: Add bbnsm power key support
From: Dmitry Torokhov @ 2023-02-21 22:45 UTC (permalink / raw)
  To: Jacky Bai
  Cc: lee, robh+dt, krzysztof.kozlowski+dt, shawnguo, s.hauer, a.zummo,
	alexandre.belloni, devicetree, linux-arm-kernel, linux-input,
	linux-rtc, kernel, linux-imx, festevam
In-Reply-To: <20230215024117.3357341-2-ping.bai@nxp.com>

On Wed, Feb 15, 2023 at 10:41:15AM +0800, Jacky Bai wrote:
> The ON/OFF logic inside the BBNSM allows for connecting directly
> into a PMIC or other voltage regulator device. The module has an
> button input signal and a wakeup request input signal. It also
> has two interrupts (set_pwr_off_irq and set_pwr_on_irq) and an
> active-low PMIC enable (pmic_en_b) output.
> 
> Add the power key support for the ON/OFF button function found in
> BBNSM module.
> 
> Signed-off-by: Jacky Bai <ping.bai@nxp.com>
> Reviewed-by: Peng Fan <peng.fan@nxp.com>

Applied with a few cosmetic changes, thank you.

-- 
Dmitry

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox