mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:24:45 +01:00
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>
This commit is contained in:
parent
37da69dbaa
commit
2a7b7652b1
2 changed files with 10 additions and 2 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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 */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue