Some ACPI tables on Intel Meteor Lake and Arrow Lake platforms define GPIO resources with type 0x02 for INT3472 camera sensor power control. This type is not currently handled, causing a "GPIO type 0x02 unknown; the sensor may not work" warning and preventing proper sensor power sequencing. Map GPIO type 0x02 (strobe) to the privacy LED handler, matching the approach used for similar illumination-related GPIOs. This is consistent with the original proposal by Hao Yao [1]. Tested on a Dell Pro Max 16 Premium (Arrow Lake-H) with OmniVision OV08F4 sensor connected via Intel IPU6 and Synaptics SVP7500 USBIO bridge. With this patch applied, the int3472-discrete driver no longer warns about unknown GPIO type 0x02, and the sensor probes successfully. [1] https://lore.kernel.org/all/20231007021309.9332-1-hao.yao@intel.com/ Link: https://bugs.debian.org/1130114 Link: https://bugs.launchpad.net/ubuntu/+source/linux/+bug/2138991 Cc: Hao Yao Cc: Hans de Goede Cc: Sakari Ailus Cc: Andy Shevchenko Signed-off-by: Marco Nenciarini --- drivers/platform/x86/intel/int3472/discrete.c | 3 +++ include/linux/platform_data/x86/int3472.h | 1 + 2 files changed, 4 insertions(+) diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c index 1505fc3..39ca60b 100644 --- a/drivers/platform/x86/intel/int3472/discrete.c +++ b/drivers/platform/x86/intel/int3472/discrete.c @@ -211,6 +211,7 @@ static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3 *con_id = "clk-enable"; *gpio_flags = GPIO_ACTIVE_HIGH; break; + case INT3472_GPIO_TYPE_STROBE: case INT3472_GPIO_TYPE_PRIVACY_LED: *con_id = "privacy-led"; *gpio_flags = GPIO_ACTIVE_HIGH; @@ -330,6 +331,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares, break; case INT3472_GPIO_TYPE_CLK_ENABLE: + case INT3472_GPIO_TYPE_STROBE: case INT3472_GPIO_TYPE_PRIVACY_LED: case INT3472_GPIO_TYPE_POWER_ENABLE: case INT3472_GPIO_TYPE_HANDSHAKE: @@ -347,6 +349,7 @@ static int skl_int3472_handle_gpio_resources(struct acpi_resource *ares, err_msg = "Failed to register clock\n"; break; + case INT3472_GPIO_TYPE_STROBE: case INT3472_GPIO_TYPE_PRIVACY_LED: ret = skl_int3472_register_pled(int3472, gpio); if (ret) diff --git a/include/linux/platform_data/x86/int3472.h b/include/linux/platform_data/x86/int3472.h index b1b8375..85adeb0 100644 --- a/include/linux/platform_data/x86/int3472.h +++ b/include/linux/platform_data/x86/int3472.h @@ -23,6 +23,7 @@ /* PMIC GPIO Types */ #define INT3472_GPIO_TYPE_RESET 0x00 #define INT3472_GPIO_TYPE_POWERDOWN 0x01 +#define INT3472_GPIO_TYPE_STROBE 0x02 #define INT3472_GPIO_TYPE_POWER_ENABLE 0x0b #define INT3472_GPIO_TYPE_CLK_ENABLE 0x0c #define INT3472_GPIO_TYPE_PRIVACY_LED 0x0d -- 2.47.3 -- Marco Nenciarini - mnencia@kcore.it 7C23 B804 3E65 D298 0A21 B6E2 589F 03F0 1BA5 5038