Skip to content

Commit 2a7b765

Browse files
Leif Skunbergij-intel
authored andcommitted
platform/x86: int3472: Handle GPIO type 0x10 (DOVDD)
The Lenovo ThinkPad X1 Fold 16 Gen 1 has an OV5675 sensor (ACPI HID OVTI5675) behind an INT3472 discrete PMIC controller. The INT3472 _DSM returns GPIO type 0x10 for one of the pins, which controls the DOVDD (digital I/O power) regulator enable. Type 0x10 is not currently handled by the driver, causing the GPIO to be ignored with a warning. Add INT3472_GPIO_TYPE_DOVDD (0x10) and handle it as a regulator with con_id "dovdd" to match the supply name used by sensor drivers (e.g. ov5675). Also increase GPIO_SUPPLY_NAME_LENGTH from 5 to 6 to accommodate the "dovdd" name (5 chars + null terminator). Signed-off-by: Leif Skunberg <diamondback@cohunt.app> Reviewed-by: Hans de Goede <johannes.goede@oss.qualcomm.com> Link: https://patch.msgid.link/20260210132129.17943-1-diamondback@cohunt.app Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
1 parent 37da69d commit 2a7b765

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

drivers/platform/x86/intel/int3472/discrete.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -223,6 +223,10 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
223223
*con_id = "avdd";
224224
*gpio_flags = GPIO_ACTIVE_HIGH;
225225
break;
226+
case INT3472_GPIO_TYPE_DOVDD:
227+
*con_id = "dovdd";
228+
*gpio_flags = GPIO_ACTIVE_HIGH;
229+
break;
226230
case INT3472_GPIO_TYPE_HANDSHAKE:
227231
*con_id = "dvdd";
228232
*gpio_flags = GPIO_ACTIVE_HIGH;
@@ -251,6 +255,7 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
251255
* 0x0b Power enable
252256
* 0x0c Clock enable
253257
* 0x0d Privacy LED
258+
* 0x10 DOVDD (digital I/O voltage)
254259
* 0x13 Hotplug detect
255260
*
256261
* There are some known platform specific quirks where that does not quite
@@ -332,6 +337,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
332337
case INT3472_GPIO_TYPE_CLK_ENABLE:
333338
case INT3472_GPIO_TYPE_PRIVACY_LED:
334339
case INT3472_GPIO_TYPE_POWER_ENABLE:
340+
case INT3472_GPIO_TYPE_DOVDD:
335341
case INT3472_GPIO_TYPE_HANDSHAKE:
336342
gpio = skl_int3472_gpiod_get_from_temp_lookup(int3472, agpio, con_id, gpio_flags);
337343
if (IS_ERR(gpio)) {
@@ -356,6 +362,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
356362
case INT3472_GPIO_TYPE_POWER_ENABLE:
357363
second_sensor = int3472->quirks.avdd_second_sensor;
358364
fallthrough;
365+
case INT3472_GPIO_TYPE_DOVDD:
359366
case INT3472_GPIO_TYPE_HANDSHAKE:
360367
ret = skl_int3472_register_regulator(int3472, gpio, enable_time_us,
361368
con_id, second_sensor);

include/linux/platform_data/x86/int3472.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,16 @@
2626
#define INT3472_GPIO_TYPE_POWER_ENABLE 0x0b
2727
#define INT3472_GPIO_TYPE_CLK_ENABLE 0x0c
2828
#define INT3472_GPIO_TYPE_PRIVACY_LED 0x0d
29+
#define INT3472_GPIO_TYPE_DOVDD 0x10
2930
#define INT3472_GPIO_TYPE_HANDSHAKE 0x12
3031
#define INT3472_GPIO_TYPE_HOTPLUG_DETECT 0x13
3132

3233
#define INT3472_PDEV_MAX_NAME_LEN 23
3334
#define INT3472_MAX_SENSOR_GPIOS 3
3435
#define INT3472_MAX_REGULATORS 3
3536

36-
/* E.g. "avdd\0" */
37-
#define GPIO_SUPPLY_NAME_LENGTH 5
37+
/* E.g. "dovdd\0" */
38+
#define GPIO_SUPPLY_NAME_LENGTH 6
3839
/* 12 chars for acpi_dev_name() + "-", e.g. "ABCD1234:00-" */
3940
#define GPIO_REGULATOR_NAME_LENGTH (12 + GPIO_SUPPLY_NAME_LENGTH)
4041
/* lower- and upper-case mapping */

0 commit comments

Comments
 (0)