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]

Reply via email to