RE: [PATCH v4 1/2] platform/x86: int3472: Add TPS68470 board data for Intel nvl
From: T, Arun
Date: Tue Mar 24 2026 - 04:46:39 EST
Hi Sakari,
The TPS68470 is providing multiple regulators. The VIO regulator is enabled as default ON. The Core, Ana, VCM, and VSIO regulators are enabled to provide power to the ov13b10 sensor. These regulators only get enabled after adding the always_on=true flag.
The sensor does not get powered on without the always_on=true flag. I think there is some issue in driver/regulator/tps68470-regulator.c for configuring the regulator through regulator_enable(). I think always_on=true is good for this case. Please let me know if anything needs to be done on this.
-
Regards,
Arun T
-----Original Message-----
From: sakari.ailus@xxxxxxxxxxxxxxx <sakari.ailus@xxxxxxxxxxxxxxx>
Sent: 23 March 2026 04:12 PM
To: T, Arun <arun.t@xxxxxxxxx>
Cc: johannes.goede@xxxxxxxxxxxxxxxx; Kao, Arec <arec.kao@xxxxxxxxx>; ilpo.jarvinen@xxxxxxxxxxxxxxx; dan.scally@xxxxxxxxxxxxxxxx; platform-driver-x86@xxxxxxxxxxxxxxx; linux-media@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; Djait, Mehdi <mehdi.djait@xxxxxxxxx>
Subject: Re: [PATCH v4 1/2] platform/x86: int3472: Add TPS68470 board data for Intel nvl
Hi Arun,
On Mon, Mar 23, 2026 at 06:12:29AM +0000, T, Arun wrote:
> Hi All,
>
> There has been no reply to these below patches for quite some time.
> Could you please provide any feedback, comments, or suggestions on
> these below patches
>
> https://lore.kernel.org/linux-media/20260306163019.1619490-2-arun.t@in
> tel.com/
> https://lore.kernel.org/all/20260306163019.1619490-3-arun.t@xxxxxxxxx/
Could you reply to my earlier reviews?
First and foremost, we still have eight regulators configured for a device that uses three. Some of them have been declared as always_on, too, for no apparent reason.
>
> -
> Regards,
> Arun T
>
> -----Original Message-----
> From: T, Arun <arun.t@xxxxxxxxx>
> Sent: 06 March 2026 10:00 PM
> To: T, Arun <arun.t@xxxxxxxxx>; johannes.goede@xxxxxxxxxxxxxxxx
> Cc: sakari.ailus@xxxxxxxxxxxxxxx; Kao, Arec <arec.kao@xxxxxxxxx>;
> ilpo.jarvinen@xxxxxxxxxxxxxxx; dan.scally@xxxxxxxxxxxxxxxx;
> platform-driver-x86@xxxxxxxxxxxxxxx; linux-media@xxxxxxxxxxxxxxx;
> linux-kernel@xxxxxxxxxxxxxxx; Djait, Mehdi <mehdi.djait@xxxxxxxxx>
> Subject: [PATCH v4 1/2] platform/x86: int3472: Add TPS68470 board data
> for Intel nvl
>
> The Intel NVL platform uses IPU8 is powered by a TPS68470 PMIC,requiring board data to configure the GPIOs and regulators for proper camera sensor operation.
>
> Signed-off-by: Arun T <arun.t@xxxxxxxxx>
> ---
> .../x86/intel/int3472/tps68470_board_data.c | 150 ++++++++++++++++++
> 1 file changed, 150 insertions(+)
>
> diff --git a/drivers/platform/x86/intel/int3472/tps68470_board_data.c
> b/drivers/platform/x86/intel/int3472/tps68470_board_data.c
> index 71357a036292..8ae5e01f6660 100644
> --- a/drivers/platform/x86/intel/int3472/tps68470_board_data.c
> +++ b/drivers/platform/x86/intel/int3472/tps68470_board_data.c
> @@ -143,6 +143,34 @@ static struct regulator_consumer_supply int3479_aux2_consumer_supplies[] = {
> REGULATOR_SUPPLY("dovdd", "i2c-INT3479:00"), };
>
> +/* Settings for Intel NVL platform */
> +
> +static struct regulator_consumer_supply int3472_core_consumer_supplies[] = {
> + REGULATOR_SUPPLY("dvdd", "i2c-OVTI13B1:01"), };
> +
> +static struct regulator_consumer_supply int3472_ana_consumer_supplies[] = {
> + REGULATOR_SUPPLY("avdd", "i2c-OVTI13B1:01"), };
> +
> +static struct regulator_consumer_supply int3472_vcm_consumer_supplies[] = {
> + REGULATOR_SUPPLY("vdd", "i2c-OVTI13B1:01"), };
> +
> +static struct regulator_consumer_supply int3472_vsio_consumer_supplies[] = {
> + REGULATOR_SUPPLY("dovdd", "i2c-OVTI13B1:01"),
> + REGULATOR_SUPPLY("vsio", "i2c-OVTI13B1:01"),
> + REGULATOR_SUPPLY("vddd", "i2c-OVTI13B1:01"), };
> +
> +static struct regulator_consumer_supply int3472_aux1_consumer_supplies[] = {
> + REGULATOR_SUPPLY("vdda", "i2c-OVTI13B1:01"), };
> +
> +static struct regulator_consumer_supply int3472_aux2_consumer_supplies[] = {
> + REGULATOR_SUPPLY("vdddo", "i2c-OVTI13B1:01"), };
> +
> static const struct regulator_init_data dell_7212_tps68470_core_reg_init_data = {
> .constraints = {
> .min_uV = 1200000,
> @@ -220,6 +248,82 @@ static const struct regulator_init_data dell_7212_tps68470_aux2_reg_init_data =
> .consumer_supplies = int3479_aux2_consumer_supplies, };
>
> +static const struct regulator_init_data intel_nvl_tps68470_core_reg_init_data = {
> + .constraints = {
> + .min_uV = 1200000,
> + .max_uV = 1200000,
> + .apply_uV = true,
> + .always_on = true,
> + },
> + .num_consumer_supplies = ARRAY_SIZE(int3472_core_consumer_supplies),
> + .consumer_supplies = int3472_core_consumer_supplies, };
> +
> +static const struct regulator_init_data intel_nvl_tps68470_ana_reg_init_data = {
> + .constraints = {
> + .min_uV = 2815200,
> + .max_uV = 2815200,
> + .apply_uV = true,
> + .always_on = true,
> + },
> + .num_consumer_supplies = ARRAY_SIZE(int3472_ana_consumer_supplies),
> + .consumer_supplies = int3472_ana_consumer_supplies, };
> +
> +static const struct regulator_init_data intel_nvl_tps68470_vcm_reg_init_data = {
> + .constraints = {
> + .min_uV = 2815200,
> + .max_uV = 2815200,
> + .apply_uV = true,
> + .always_on = true,
> + },
> + .num_consumer_supplies = ARRAY_SIZE(int3472_vcm_consumer_supplies),
> + .consumer_supplies = int3472_vcm_consumer_supplies, };
> +
> +/* Ensure the always-on VIO regulator has the same voltage as VSIO */
> +static const struct regulator_init_data intel_nvl_tps68470_vio_reg_init_data = {
> + .constraints = {
> + .min_uV = 1800600,
> + .max_uV = 1800600,
> + .apply_uV = true,
> + .always_on = true,
> + },
> +};
> +
> +static const struct regulator_init_data intel_nvl_tps68470_vsio_reg_init_data = {
> + .constraints = {
> + .min_uV = 1800600,
> + .max_uV = 1800600,
> + .apply_uV = true,
> + .always_on = true,
> + },
> + .num_consumer_supplies = ARRAY_SIZE(int3472_vsio_consumer_supplies),
> + .consumer_supplies = int3472_vsio_consumer_supplies, };
> +
> +static const struct regulator_init_data intel_nvl_tps68470_aux1_reg_init_data = {
> + .constraints = {
> + .min_uV = 2815200,
> + .max_uV = 2815200,
> + .apply_uV = 1,
> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = ARRAY_SIZE(int3472_aux1_consumer_supplies),
> + .consumer_supplies = int3472_aux1_consumer_supplies, };
> +
> +static const struct regulator_init_data intel_nvl_tps68470_aux2_reg_init_data = {
> + .constraints = {
> + .min_uV = 1800600,
> + .max_uV = 1800600,
> + .apply_uV = 1,
> + .valid_ops_mask = REGULATOR_CHANGE_STATUS,
> + },
> + .num_consumer_supplies = ARRAY_SIZE(int3472_aux2_consumer_supplies),
> + .consumer_supplies = int3472_aux2_consumer_supplies, };
> +
> static const struct tps68470_regulator_platform_data dell_7212_tps68470_pdata = {
> .reg_init_data = {
> [TPS68470_CORE] = &dell_7212_tps68470_core_reg_init_data,
> @@ -232,6 +336,18 @@ static const struct tps68470_regulator_platform_data dell_7212_tps68470_pdata =
> },
> };
>
> +static const struct tps68470_regulator_platform_data intel_nvl_tps68470_pdata = {
> + .reg_init_data = {
> + [TPS68470_CORE] = &intel_nvl_tps68470_core_reg_init_data,
> + [TPS68470_ANA] = &intel_nvl_tps68470_ana_reg_init_data,
> + [TPS68470_VCM] = &intel_nvl_tps68470_vcm_reg_init_data,
> + [TPS68470_VIO] = &intel_nvl_tps68470_vio_reg_init_data,
> + [TPS68470_VSIO] = &intel_nvl_tps68470_vsio_reg_init_data,
> + [TPS68470_AUX1] = &intel_nvl_tps68470_aux1_reg_init_data,
> + [TPS68470_AUX2] = &intel_nvl_tps68470_aux2_reg_init_data,
> + },
> +};
> +
> static struct gpiod_lookup_table surface_go_int347a_gpios = {
> .dev_id = "i2c-INT347A:00",
> .table = {
> @@ -258,6 +374,23 @@ static struct gpiod_lookup_table dell_7212_int3479_gpios = {
> }
> };
>
> +static struct gpiod_lookup_table intel_nvl_int347a_gpios = {
> + .dev_id = "i2c-OVTI13B1:01",
> + .table = {
> + GPIO_LOOKUP("tps68470-gpio", 9, "reset", GPIO_ACTIVE_LOW),
> + GPIO_LOOKUP("tps68470-gpio", 8, "s_idle", GPIO_ACTIVE_LOW),
> + { }
> + }
> +};
> +
> +static struct gpiod_lookup_table intel_nvl_int347e_gpios = {
> + .dev_id = "i2c-OVTI13B1:01",
> + .table = {
> + GPIO_LOOKUP("tps68470-gpio", 7, "s_enable", GPIO_ACTIVE_LOW),
> + { }
> + }
> +};
> +
> static const struct int3472_tps68470_board_data surface_go_tps68470_board_data = {
> .dev_name = "i2c-INT3472:05",
> .tps68470_regulator_pdata = &surface_go_tps68470_pdata, @@ -287,6 +420,16 @@ static const struct int3472_tps68470_board_data dell_7212_tps68470_board_data =
> },
> };
>
> +static const struct int3472_tps68470_board_data intel_nvl_tps68470_board_data = {
> + .dev_name = "i2c-INT3472:04",
> + .tps68470_regulator_pdata = &intel_nvl_tps68470_pdata,
> + .n_gpiod_lookups = 2,
> + .tps68470_gpio_lookup_tables = {
> + &intel_nvl_int347a_gpios,
> + &intel_nvl_int347e_gpios,
> + },
> +};
> +
> static const struct dmi_system_id int3472_tps68470_board_data_table[] = {
> {
> .matches = {
> @@ -316,6 +459,13 @@ static const struct dmi_system_id int3472_tps68470_board_data_table[] = {
> },
> .driver_data = (void *)&dell_7212_tps68470_board_data,
> },
> + {
> + .matches = {
> + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Intel Corporation"),
> + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Nova Lake Client Platform"),
> + },
> + .driver_data = (void *)&intel_nvl_tps68470_board_data,
> + },
> { }
> };
>
--
Regards,
Sakari Ailus