Re: [PATCH] platform/x86: int3472: handle GPIO type 0x08 as a power regulator

Sakari Ailus <[email protected]>
Newsgroups org.kernel.vger.platform-driver-x86,org.kernel.vger.linux-kernel
Organization Intel Finland Oy - BIC 0357606-4 - c/o Alberga Business Park, 6 krs, Bertel Jungin Aukio 5, 02600 Espoo
Message-ID <[email protected]>
Hi Jakob,

Thanks for the patch.

On Sun, Jul 19, 2026 at 08:15:12PM +0200, Jakob Berg Jespersen wrote:
> On the Microsoft Surface Pro 7+, the rear camera's INT3472 device
> (INT3472:01, sensor INT347A / ov8865) enumerates a GPIO of type 0x08
> in its _DSM which the driver does not recognise, so it is left
> unmapped:
> 
>   int3472-discrete INT3472:01: GPIO type 0x08 unknown; the sensor may
>   not work
> 
> The DSDT shows this pin (0x0100AF08, pin 175, active-high) sitting
> alongside a normal type-0x0b power-enable GPIO: it gates a second
> sensor power rail. Because the type is unknown the rail is never
> enabled, the ov8865's "dvdd" supply resolves to a dummy regulator, and
> the sensor never probes.
> 
> Map type 0x08 for INT347A to a POWER_ENABLE regulator with con_id
> "dvdd", the supply the in-tree ov8865 driver already requests, so no
> sensor-driver change is needed. ("dvdd" rather than "avdd" because the
> type-0x0b power-enable pin on this INT3472 is already registered as
> "avdd".)
> 
> Type 0x08 is not in the driver's documented function list and is not
> otherwise handled by mainline; based on the sensor's supply set and the
> con_id that brings it up, it appears to be the DVDD (digital core
> voltage) rail, the counterpart to the existing DOVDD (0x10) type.
> 
> Related out-of-tree work approached the same rail by adding a new "pwr1"
> supply instead of the sensor's existing "dvdd" (linux-surface PR #1867
> for the Surface Pro 9, PR #2201 for the Pro 7+ ov8865); neither was sent
> upstream. Mapping to "dvdd" keeps the change contained to int3472.
> 
> With this change the SP7+ rear camera probes and streams reliably,
> validated by over a month of use.
> 
> Link: https://github.com/linux-surface/linux-surface/pull/1867
> Link: https://github.com/linux-surface/linux-surface/pull/2201
> Cc: Tooraj Taraz <[email protected]>
> Cc: Joseph V. Lavigne <[email protected]>
> Signed-off-by: Jakob Berg Jespersen <[email protected]>
> ---
> 0x08 is left as a bare literal rather than a named constant here; if
> its canonical meaning is known I'm happy to add e.g.
> INT3472_GPIO_TYPE_DVDD and/or handle it generically like DOVDD in v2.
> 
> This is my first kernel contribution, so please bear with me on any
> process mistakes.
> ---
>  drivers/platform/x86/intel/int3472/discrete.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/platform/x86/intel/int3472/discrete.c b/drivers/platform/x86/intel/int3472/discrete.c
> index 115bb37577a1..98c7b9bc393f 100644
> --- a/drivers/platform/x86/intel/int3472/discrete.c
> +++ b/drivers/platform/x86/intel/int3472/discrete.c
> @@ -164,6 +164,19 @@ static const struct int3472_gpio_map int3472_gpio_map[] = {
>  		.con_id = "dvdd",
>  		.enable_time_us = 45 * USEC_PER_MSEC,
>  	},
> +	{	/*
> +		 * Surface Pro 7+ ov8865 (rear camera): type 0x08 is an
> +		 * undocumented sensor power rail; left undriven the sensor
> +		 * stays in a failed power state. "dvdd" rather than "avdd"
> +		 * because this INT3472 also has a type 0x0b (power enable)
> +		 * pin already registered as "avdd".
> +		 */

GPIO type 8 is in fact "POWER1" (type 7 being "POWER0"). This hasn't been
seen anywhere yet so support for it hasn't been added either.

I understand the POWER_ENABLE GPIO is for executing the entire power
sequence and isn't expected to be found with the other regulators, hence an
apparent conflict here wouldn't be an issue.

I think for now we could map type POWER1 (8) to "dvdd", however not using a
quirk but doing it for all devices, like mapping POWER_ENABLE to "avdd".
That'd leave mapping POWER0 to "avdd" for later. The GPIO definition for
POWER0 could be added in any case.

I wonder what Hans or Dan think.

> +		.hid = "INT347A",
> +		.type_from = 0x08,
> +		.type_to = INT3472_GPIO_TYPE_POWER_ENABLE,
> +		.con_id = "dvdd",
> +		.enable_time_us = GPIO_REGULATOR_ENABLE_TIME,
> +	},
>  };
>  
>  static void int3472_get_con_id_and_polarity(struct int3472_discrete_device *int3472, u8 *type,
> 

-- 
Kind regards,

Sakari Ailus
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.