]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-client.git/commitdiff
platform/x86: int3472: Handle GPIO type 0x10 (DOVDD)
authorLeif Skunberg <diamondback@cohunt.app>
Tue, 10 Feb 2026 13:21:29 +0000 (14:21 +0100)
committerIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Mon, 23 Feb 2026 15:49:36 +0000 (17:49 +0200)
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>
drivers/platform/x86/intel/int3472/discrete.c
include/linux/platform_data/x86/int3472.h

index 1455d9a7afcaccab375e2047b4b0004f39d48296..1c65ce87cde0b61bd55fc0ad0004f782afa3533d 100644 (file)
@@ -223,6 +223,10 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
                *con_id = "avdd";
                *gpio_flags = GPIO_ACTIVE_HIGH;
                break;
+       case INT3472_GPIO_TYPE_DOVDD:
+               *con_id = "dovdd";
+               *gpio_flags = GPIO_ACTIVE_HIGH;
+               break;
        case INT3472_GPIO_TYPE_HANDSHAKE:
                *con_id = "dvdd";
                *gpio_flags = GPIO_ACTIVE_HIGH;
@@ -251,6 +255,7 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3
  * 0x0b Power enable
  * 0x0c Clock enable
  * 0x0d Privacy LED
+ * 0x10 DOVDD (digital I/O voltage)
  * 0x13 Hotplug detect
  *
  * 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,
        case INT3472_GPIO_TYPE_CLK_ENABLE:
        case INT3472_GPIO_TYPE_PRIVACY_LED:
        case INT3472_GPIO_TYPE_POWER_ENABLE:
+       case INT3472_GPIO_TYPE_DOVDD:
        case INT3472_GPIO_TYPE_HANDSHAKE:
                gpio = skl_int3472_gpiod_get_from_temp_lookup(int3472, agpio, con_id, gpio_flags);
                if (IS_ERR(gpio)) {
@@ -356,6 +362,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares,
                case INT3472_GPIO_TYPE_POWER_ENABLE:
                        second_sensor = int3472->quirks.avdd_second_sensor;
                        fallthrough;
+               case INT3472_GPIO_TYPE_DOVDD:
                case INT3472_GPIO_TYPE_HANDSHAKE:
                        ret = skl_int3472_register_regulator(int3472, gpio, enable_time_us,
                                                             con_id, second_sensor);
index b1b837583d5442124ce73a8e7388066df4d7a08a..dbe745dc88d52983bee53b3b63dc645065895dc5 100644 (file)
@@ -26,6 +26,7 @@
 #define INT3472_GPIO_TYPE_POWER_ENABLE                         0x0b
 #define INT3472_GPIO_TYPE_CLK_ENABLE                           0x0c
 #define INT3472_GPIO_TYPE_PRIVACY_LED                          0x0d
+#define INT3472_GPIO_TYPE_DOVDD                                        0x10
 #define INT3472_GPIO_TYPE_HANDSHAKE                            0x12
 #define INT3472_GPIO_TYPE_HOTPLUG_DETECT                       0x13
 
@@ -33,8 +34,8 @@
 #define INT3472_MAX_SENSOR_GPIOS                               3
 #define INT3472_MAX_REGULATORS                                 3
 
-/* E.g. "avdd\0" */
-#define GPIO_SUPPLY_NAME_LENGTH                                5
+/* E.g. "dovdd\0" */
+#define GPIO_SUPPLY_NAME_LENGTH                                6
 /* 12 chars for acpi_dev_name() + "-", e.g. "ABCD1234:00-" */
 #define GPIO_REGULATOR_NAME_LENGTH                             (12 + GPIO_SUPPLY_NAME_LENGTH)
 /* lower- and upper-case mapping */