]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
mfd: cros_ec: Separate charge-control probing from USB-PD
authorThomas Weißschuh <linux@weissschuh.net>
Wed, 21 May 2025 14:42:51 +0000 (16:42 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Aug 2025 16:30:56 +0000 (18:30 +0200)
commit e40fc1160d491c3bcaf8e940ae0dde0a7c5e8e14 upstream.

The charge-control subsystem in the ChromeOS EC is not strictly tied to
its USB-PD subsystem.

Since commit 7613bc0d116a ("mfd: cros_ec: Don't load charger with UCSI")
the presence of EC_FEATURE_UCSI_PPM would inhibit the probing of the
charge-control driver.

Furthermore recent versions of the EC firmware in Framework laptops
hard-disable EC_FEATURE_USB_PD to avoid probing cros-usbpd-charger,
which then also breaks cros-charge-control.

Instead use the dedicated EC_FEATURE_CHARGER.

Cc: stable@vger.kernel.org
Link: https://github.com/FrameworkComputer/EmbeddedController/commit/1d7bcf1d50137c8c01969eb65880bc83e424597e
Fixes: 555b5fcdb844 ("mfd: cros_ec: Register charge control subdevice")
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
Reviewed-by: Tzung-Bi Shih <tzungbi@kernel.org>
Tested-by: Tom Vincent <linux@tlvince.com>
Link: https://lore.kernel.org/r/20250521-cros-ec-mfd-chctl-probe-v1-1-6ebfe3a6efa7@weissschuh.net
Signed-off-by: Lee Jones <lee@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/mfd/cros_ec_dev.c

index f3dc812b359f345a11f4da1b8bf109b98b8f9f71..78c48dc624e889cffeda4b52f9b7e18988226f91 100644 (file)
@@ -87,7 +87,6 @@ static const struct mfd_cell cros_ec_sensorhub_cells[] = {
 };
 
 static const struct mfd_cell cros_usbpd_charger_cells[] = {
-       { .name = "cros-charge-control", },
        { .name = "cros-usbpd-charger", },
        { .name = "cros-usbpd-logger", },
 };
@@ -108,6 +107,10 @@ static const struct mfd_cell cros_ec_keyboard_leds_cells[] = {
        { .name = "cros-keyboard-leds", },
 };
 
+static const struct mfd_cell cros_ec_charge_control_cells[] = {
+       { .name = "cros-charge-control", },
+};
+
 static const struct cros_feature_to_cells cros_subdevices[] = {
        {
                .id             = EC_FEATURE_CEC,
@@ -144,6 +147,11 @@ static const struct cros_feature_to_cells cros_subdevices[] = {
                .mfd_cells      = cros_ec_keyboard_leds_cells,
                .num_cells      = ARRAY_SIZE(cros_ec_keyboard_leds_cells),
        },
+       {
+               .id             = EC_FEATURE_CHARGER,
+               .mfd_cells      = cros_ec_charge_control_cells,
+               .num_cells      = ARRAY_SIZE(cros_ec_charge_control_cells),
+       },
 };
 
 static const struct mfd_cell cros_ec_platform_cells[] = {