On Mon Aug 31 12:23:06 2026 +0200, D. Manresa wrote:
> On IPU6 designs carrying an OV7251 IR sensor (ACPI HID INT347E) the INT3472
> describes the sensor's single gated rail as a power-enable GPIO, which the
> driver registers as a regulator with con_id "avdd". The ov7251 driver and its
> DT bindings name the sensor supplies vdda, vddd and vdddo, so the lookup finds
> nothing, the rail is never enabled, and probe fails on the first I2C access:
>
> int3472-discrete INT3472:02: avdd \_SB.GPI0 pin 131 active-high
> ov7251 i2c-INT347E:00: supply vdda not found, using dummy regulator
> ov7251 i2c-INT347E:00: probe with driver ov7251 failed with error -121
>
> Map the power-enable GPIO to con_id "vdda" for INT347E, the same way the
> existing entries map it to "vdd" for the mt9m114 and to "vana" for the imx471.
> The sensor's other two supplies keep falling back to the dummy regulator,
> which is correct here: the firmware gates a single rail.
>
> The table already has an INT347E entry mapping the reset GPIO to "enable",
> added when the ov7251 was brought up on these machines; this is the same class
> of firmware-vs-binding name mismatch for the remaining pin.
>
> Tested on a Microsoft Surface Pro 7+ (Tiger Lake, IPU6): with this change the
> IR sensor probes, the illuminator strobes, and the camera streams 640x480 at
> 30 fps through libcamera. The same failure was reproduced independently on a
> second Pro 7+ running stock firmware and a distro kernel, with no out-of-tree
> code, in [1].
>
> Developed with the assistance of an AI tool (Claude) and verified on hardware.
>
> Link: https://github.com/linux-surface/linux-surface/issues/1702 [1]
> Reviewed-by: Hans de Goede <[email protected]>
> Signed-off-by: D. Manresa <[email protected]>
> Tested-by: Jakob Berg Jespersen <[email protected]> # Surface Pro 7+,
> probe/power-on
> Signed-off-by: Sakari Ailus <[email protected]>
Patch committed.
Thanks,
Sakari Ailus
drivers/platform/x86/intel/int3472/discrete.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
---
diff --git a/drivers/platform/x86/intel/int3472/discrete.c
b/drivers/platform/x86/intel/int3472/discrete.c
index 749e2e323583..04aaf4958fa7 100644
--- a/drivers/platform/x86/intel/int3472/discrete.c
+++ b/drivers/platform/x86/intel/int3472/discrete.c
@@ -144,6 +144,11 @@ static const char * const power_enable_hids_enable[] = {
NULL
};
+static const char * const power_enable_hids_vdda[] = {
+ "INT347E", /* ov7251 */
+ NULL
+};
+
/**
* struct int3472_gpio_map - Map GPIOs to whatever is expected by the
* sensor driver (as in DT bindings)
@@ -179,6 +184,13 @@ static const struct int3472_gpio_map int3472_gpio_map[] = {
.type_to = INT3472_GPIO_TYPE_RESET,
.con_id = "enable",
},
+ { /* Sensors which expect "vdda" as con_id for power enable */
+ .hids = power_enable_hids_vdda,
+ .type_from = INT3472_GPIO_TYPE_POWER_ENABLE,
+ .type_to = INT3472_GPIO_TYPE_POWER_ENABLE,
+ .con_id = "vdda",
+ .enable_time_us = GPIO_REGULATOR_ENABLE_TIME,
+ },
{ /* Sensors which expect "vana" as con_id for power enable */
.hids = power_enable_hids_vana,
.type_from = INT3472_GPIO_TYPE_POWER_ENABLE,
_______________________________________________
linuxtv-commits mailing list -- [email protected]
To unsubscribe send an email to [email protected]