Hi, On 3/23/23 13:23, Lee Jones wrote: > On Tue, 21 Mar 2023, Kate Hsuan wrote: > >> Add MFD cell for tps68470-led. >> >> Reviewed-by: Daniel Scally <dan.scally@xxxxxxxxxxxxxxxx> >> Signed-off-by: Kate Hsuan <hpa@xxxxxxxxxx> >> --- >> drivers/platform/x86/intel/int3472/tps68470.c | 5 +++-- >> 1 file changed, 3 insertions(+), 2 deletions(-) >> >> diff --git a/drivers/platform/x86/intel/int3472/tps68470.c b/drivers/platform/x86/intel/int3472/tps68470.c >> index 5b8d1a9620a5..82ef022f8916 100644 >> --- a/drivers/platform/x86/intel/int3472/tps68470.c >> +++ b/drivers/platform/x86/intel/int3472/tps68470.c >> @@ -17,7 +17,7 @@ >> #define DESIGNED_FOR_CHROMEOS 1 >> #define DESIGNED_FOR_WINDOWS 2 >> >> -#define TPS68470_WIN_MFD_CELL_COUNT 3 >> +#define TPS68470_WIN_MFD_CELL_COUNT 4 >> >> static const struct mfd_cell tps68470_cros[] = { >> { .name = "tps68470-gpio" }, >> @@ -193,7 +193,8 @@ static int skl_int3472_tps68470_probe(struct i2c_client *client) >> cells[1].name = "tps68470-regulator"; >> cells[1].platform_data = (void *)board_data->tps68470_regulator_pdata; >> cells[1].pdata_size = sizeof(struct tps68470_regulator_platform_data); >> - cells[2].name = "tps68470-gpio"; >> + cells[2].name = "tps68470-led"; >> + cells[3].name = "tps68470-gpio"; > > The question is, why is the MFD API being used out side of drivers/mfd? Because Intel made a big mess about how they describe camera sensors + the matching clks / regulators / GPIOs and the optional PMIC in ACPI. The drivers/platform/x86/intel/int3472/ code untangles this mess and in some cases it instantiates MFD cells (with a whole bunch of derived platform_data per cell) for a TPS68470 PMIC. And sometimes while binding to an INT3472 ACPI device-node it does not instantiate any MFD cells at all since the INT3472 ACPI device-node does not always describe such a PMIC. Oh and also depending on of the ACPI tables are targetting ChromeOS or Windows a different set of MFD cells needs to be instantiated. On ChromeOS most of the PMIC poking is done through ACPI through a ChomeOS specific custom ACPI OpRegion, so there there are only cells for GPIO and a driver providing the OpRegion are created. So lots of ugly x86 platform specific handling, ACPI parsing, etc. which is why this landed under drivers/platform/x86/ . IIRC you were even involved in the original merge since there once was a much simpler MFD driver under driver/mfd which only supported the ChromeOS setup. (but my memory may be deceiving me here). Regards, Hans > >> for (i = 0; i < board_data->n_gpiod_lookups; i++) >> gpiod_add_lookup_table(board_data->tps68470_gpio_lookup_tables[i]); >> -- >> 2.39.2 >> > > -- > Lee Jones [李琼斯] >