On Thu, Oct 09, 2025 at 01:03:08AM +0000, Jameson Thies wrote: > On devices with a UCSI PPM in the EC, check for cros_ec_ucsi to be > defined in the OF device tree or an ACPI node. If it is defined by > either OF or ACPI, it does not need to be added as a subdevice of > cros_ec_dev. > > Signed-off-by: Jameson Thies Reviewed-by: Benson Leung > --- > drivers/mfd/cros_ec_dev.c | 23 ++++++++++++++++++----- > 1 file changed, 18 insertions(+), 5 deletions(-) > > diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c > index dc80a272726b..1928c2ea2b8f 100644 > --- a/drivers/mfd/cros_ec_dev.c > +++ b/drivers/mfd/cros_ec_dev.c > @@ -5,6 +5,7 @@ > * Copyright (C) 2014 Google, Inc. > */ > > +#include > #include > #include > #include > @@ -131,11 +132,6 @@ static const struct cros_feature_to_cells cros_subdevices[] = { > .mfd_cells = cros_ec_rtc_cells, > .num_cells = ARRAY_SIZE(cros_ec_rtc_cells), > }, > - { > - .id = EC_FEATURE_UCSI_PPM, > - .mfd_cells = cros_ec_ucsi_cells, > - .num_cells = ARRAY_SIZE(cros_ec_ucsi_cells), > - }, > { > .id = EC_FEATURE_HANG_DETECT, > .mfd_cells = cros_ec_wdt_cells, > @@ -264,6 +260,23 @@ static int ec_device_probe(struct platform_device *pdev) > } > } > > + /* > + * FW nodes can load cros_ec_ucsi, but early PDC devices did not define > + * the required nodes. On PDC systems without FW nodes for cros_ec_ucsi, > + * the driver should be added as an mfd subdevice. > + */ > + if (cros_ec_check_features(ec, EC_FEATURE_USB_PD) && > + cros_ec_check_features(ec, EC_FEATURE_UCSI_PPM) && > + !acpi_dev_found("GOOG0021") && > + !of_find_compatible_node(NULL, NULL, "google,cros-ec-ucsi")) { > + retval = mfd_add_hotplug_devices(ec->dev, > + cros_ec_ucsi_cells, > + ARRAY_SIZE(cros_ec_ucsi_cells)); > + > + if (retval) > + dev_warn(ec->dev, "failed to add cros_ec_ucsi: %d\n", retval); > + } > + > /* > * UCSI provides power supply information so we don't need to separately > * load the cros_usbpd_charger driver. > -- > 2.51.0.710.ga91ca5db03-goog >