]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
power: supply: Change usb_types from an array into a bitmask
authorHans de Goede <hdegoede@redhat.com>
Sat, 31 Aug 2024 14:20:39 +0000 (16:20 +0200)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Tue, 3 Sep 2024 21:20:28 +0000 (23:20 +0200)
The bit_types array just hold a list of valid enum power_supply_usb_type
values which map to 0 - 9. This can easily be represented as a bitmap.

This reduces the size of struct power_supply_desc and further reduces
the data section size by drivers no longer needing to store the array.

This also unifies how usb_types are handled with charge_behaviours,
which allows power_supply_show_usb_type() to be removed.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Link: https://lore.kernel.org/r/20240831142039.28830-7-hdegoede@redhat.com
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
24 files changed:
drivers/extcon/extcon-intel-cht-wc.c
drivers/phy/ti/phy-tusb1210.c
drivers/power/supply/axp20x_usb_power.c
drivers/power/supply/bq256xx_charger.c
drivers/power/supply/cros_usbpd-charger.c
drivers/power/supply/lenovo_yoga_c630_battery.c
drivers/power/supply/mp2629_charger.c
drivers/power/supply/mt6360_charger.c
drivers/power/supply/mt6370-charger.c
drivers/power/supply/power_supply_core.c
drivers/power/supply/power_supply_sysfs.c
drivers/power/supply/qcom_battmgr.c
drivers/power/supply/qcom_pmi8998_charger.c
drivers/power/supply/rk817_charger.c
drivers/power/supply/rn5t618_power.c
drivers/power/supply/rt9467-charger.c
drivers/power/supply/rt9471.c
drivers/power/supply/ucs1002_power.c
drivers/usb/typec/anx7411.c
drivers/usb/typec/rt1719.c
drivers/usb/typec/tcpm/tcpm.c
drivers/usb/typec/tipd/core.c
drivers/usb/typec/ucsi/psy.c
include/linux/power_supply.h

index 733c470c31025cd3a1df70f609bac889d0758968..93552dc3c895c6d43a0f916ab7dcc9e97aa27f31 100644 (file)
@@ -461,14 +461,6 @@ static int cht_wc_extcon_psy_get_prop(struct power_supply *psy,
        return 0;
 }
 
-static const enum power_supply_usb_type cht_wc_extcon_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_ACA,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-};
-
 static const enum power_supply_property cht_wc_extcon_psy_props[] = {
        POWER_SUPPLY_PROP_USB_TYPE,
        POWER_SUPPLY_PROP_ONLINE,
@@ -477,8 +469,11 @@ static const enum power_supply_property cht_wc_extcon_psy_props[] = {
 static const struct power_supply_desc cht_wc_extcon_psy_desc = {
        .name = "cht_wcove_pwrsrc",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = cht_wc_extcon_psy_usb_types,
-       .num_usb_types = ARRAY_SIZE(cht_wc_extcon_psy_usb_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_ACA) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties = cht_wc_extcon_psy_props,
        .num_properties = ARRAY_SIZE(cht_wc_extcon_psy_props),
        .get_property = cht_wc_extcon_psy_get_prop,
index 751fecd466e3e3b5d8bd1faf3071812dd3df3cf2..c3ae9d7948d7ea04cbd8ba374ac2f8091ef7709e 100644 (file)
@@ -411,12 +411,6 @@ static int tusb1210_psy_get_prop(struct power_supply *psy,
        return 0;
 }
 
-static const enum power_supply_usb_type tusb1210_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-};
-
 static const enum power_supply_property tusb1210_psy_props[] = {
        POWER_SUPPLY_PROP_ONLINE,
        POWER_SUPPLY_PROP_USB_TYPE,
@@ -426,8 +420,9 @@ static const enum power_supply_property tusb1210_psy_props[] = {
 static const struct power_supply_desc tusb1210_psy_desc = {
        .name = "tusb1211-charger-detect",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = tusb1210_psy_usb_types,
-       .num_usb_types = ARRAY_SIZE(tusb1210_psy_usb_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties = tusb1210_psy_props,
        .num_properties = ARRAY_SIZE(tusb1210_psy_props),
        .get_property = tusb1210_psy_get_prop,
index dae7e5cfc54e1b3226881303e48c1bcbef1d411a..38ea2388df219228dcaa97bd2d9666e9174f1cab 100644 (file)
@@ -412,13 +412,6 @@ static enum power_supply_property axp813_usb_power_properties[] = {
        POWER_SUPPLY_PROP_USB_TYPE,
 };
 
-static enum power_supply_usb_type axp813_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-};
-
 static const struct power_supply_desc axp20x_usb_power_desc = {
        .name = "axp20x-usb",
        .type = POWER_SUPPLY_TYPE_USB,
@@ -447,8 +440,10 @@ static const struct power_supply_desc axp813_usb_power_desc = {
        .property_is_writeable = axp20x_usb_power_prop_writeable,
        .get_property = axp20x_usb_power_get_property,
        .set_property = axp20x_usb_power_set_property,
-       .usb_types = axp813_usb_types,
-       .num_usb_types = ARRAY_SIZE(axp813_usb_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
 };
 
 static const char * const axp20x_irq_names[] = {
index 1a935bc885108e7769b6fe2c5aa344a7530ed839..5514d1896bb847da6937e7c60fb540a51b46edd6 100644 (file)
@@ -334,14 +334,6 @@ static const int bq25618_619_ichg_values[] = {
        1290000, 1360000, 1430000, 1500000
 };
 
-static enum power_supply_usb_type bq256xx_usb_type[] = {
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_ACA,
-};
-
 static int bq256xx_array_parse(int array_size, int val, const int array[])
 {
        int i = 0;
@@ -1252,8 +1244,11 @@ static int bq256xx_property_is_writeable(struct power_supply *psy,
 static const struct power_supply_desc bq256xx_power_supply_desc = {
        .name = "bq256xx-charger",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = bq256xx_usb_type,
-       .num_usb_types = ARRAY_SIZE(bq256xx_usb_type),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_ACA) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties = bq256xx_power_supply_props,
        .num_properties = ARRAY_SIZE(bq256xx_power_supply_props),
        .get_property = bq256xx_get_charger_property,
index 8008e31c0c09878b9aa3c1ce06c5856a0a1fc39c..bed3e2e9bfea971142f10956ed499b1ac2d834dd 100644 (file)
@@ -73,17 +73,6 @@ static enum power_supply_property cros_usbpd_dedicated_charger_props[] = {
        POWER_SUPPLY_PROP_VOLTAGE_NOW,
 };
 
-static enum power_supply_usb_type cros_usbpd_charger_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_PD_DRP,
-       POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID
-};
-
 /* Input voltage/current limit in mV/mA. Default to none. */
 static u16 input_voltage_limit = EC_POWER_LIMIT_NONE;
 static u16 input_current_limit = EC_POWER_LIMIT_NONE;
@@ -643,9 +632,14 @@ static int cros_usbpd_charger_probe(struct platform_device *pd)
                        psy_desc->properties = cros_usbpd_charger_props;
                        psy_desc->num_properties =
                                ARRAY_SIZE(cros_usbpd_charger_props);
-                       psy_desc->usb_types = cros_usbpd_charger_usb_types;
-                       psy_desc->num_usb_types =
-                               ARRAY_SIZE(cros_usbpd_charger_usb_types);
+                       psy_desc->usb_types = BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN) |
+                                             BIT(POWER_SUPPLY_USB_TYPE_SDP)     |
+                                             BIT(POWER_SUPPLY_USB_TYPE_DCP)     |
+                                             BIT(POWER_SUPPLY_USB_TYPE_CDP)     |
+                                             BIT(POWER_SUPPLY_USB_TYPE_C)       |
+                                             BIT(POWER_SUPPLY_USB_TYPE_PD)      |
+                                             BIT(POWER_SUPPLY_USB_TYPE_PD_DRP)  |
+                                             BIT(POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID);
                }
 
                psy_desc->name = port->name;
index d4d422cc5353ec9be3b9e8bfb979577e3b291c97..f98f65e00831a5c463b133f7c074182c7db00e7e 100644 (file)
@@ -353,15 +353,10 @@ static enum power_supply_property yoga_c630_psy_adpt_properties[] = {
        POWER_SUPPLY_PROP_USB_TYPE,
 };
 
-static const enum power_supply_usb_type yoga_c630_psy_adpt_usb_type[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-};
-
 static const struct power_supply_desc yoga_c630_psy_adpt_psy_desc = {
        .name = "yoga-c630-adapter",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = yoga_c630_psy_adpt_usb_type,
-       .num_usb_types = ARRAY_SIZE(yoga_c630_psy_adpt_usb_type),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_C),
        .properties = yoga_c630_psy_adpt_properties,
        .num_properties = ARRAY_SIZE(yoga_c630_psy_adpt_properties),
        .get_property = yoga_c630_psy_adpt_get_property,
index 3a2a28fbba73964be90ffd9907fa6747b7a1fe3d..d281c105962978337949d8be2a2cef575af806cf 100644 (file)
@@ -94,14 +94,6 @@ struct mp2629_prop {
        int shift;
 };
 
-static enum power_supply_usb_type mp2629_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_PD_DRP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN
-};
-
 static enum power_supply_property mp2629_charger_usb_props[] = {
        POWER_SUPPLY_PROP_ONLINE,
        POWER_SUPPLY_PROP_USB_TYPE,
@@ -487,8 +479,11 @@ unlock:
 static const struct power_supply_desc mp2629_usb_desc = {
        .name           = "mp2629_usb",
        .type           = POWER_SUPPLY_TYPE_USB,
-       .usb_types      = mp2629_usb_types,
-       .num_usb_types  = ARRAY_SIZE(mp2629_usb_types),
+       .usb_types      = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_PD_DRP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties     = mp2629_charger_usb_props,
        .num_properties = ARRAY_SIZE(mp2629_charger_usb_props),
        .get_property   = mp2629_charger_usb_get_prop,
index aca123783efccdcb73391214d20c3722975222ca..e99e551489761aa3b70ef33f8b65d59a8e117166 100644 (file)
@@ -154,13 +154,6 @@ enum mt6360_pmu_chg_type {
        MT6360_CHG_TYPE_MAX,
 };
 
-static enum power_supply_usb_type mt6360_charger_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-};
-
 static int mt6360_get_chrdet_ext_stat(struct mt6360_chg_info *mci,
                                             bool *pwr_rdy)
 {
@@ -574,8 +567,10 @@ static const struct power_supply_desc mt6360_charger_desc = {
        .get_property           = mt6360_charger_get_property,
        .set_property           = mt6360_charger_set_property,
        .property_is_writeable  = mt6360_charger_property_is_writeable,
-       .usb_types              = mt6360_charger_usb_types,
-       .num_usb_types          = ARRAY_SIZE(mt6360_charger_usb_types),
+       .usb_types              = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
 };
 
 static const struct regulator_ops mt6360_chg_otg_ops = {
index e24fce087d804eb7d76d84eb99b819300c4708aa..ad8793bf997e15a7d6a6bca96e538e6056bb3153 100644 (file)
@@ -624,13 +624,6 @@ static enum power_supply_property mt6370_chg_properties[] = {
        POWER_SUPPLY_PROP_USB_TYPE,
 };
 
-static enum power_supply_usb_type mt6370_chg_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-};
-
 static const struct power_supply_desc mt6370_chg_psy_desc = {
        .name = "mt6370-charger",
        .type = POWER_SUPPLY_TYPE_USB,
@@ -639,8 +632,10 @@ static const struct power_supply_desc mt6370_chg_psy_desc = {
        .get_property = mt6370_chg_get_property,
        .set_property = mt6370_chg_set_property,
        .property_is_writeable = mt6370_chg_property_is_writeable,
-       .usb_types = mt6370_chg_usb_types,
-       .num_usb_types = ARRAY_SIZE(mt6370_chg_usb_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
 };
 
 static const struct regulator_ops mt6370_chg_otg_ops = {
index 8f6025acd10a08a3e4e6c80549c41658653bf1f9..4fa3d3414b8cc2b61fe50e1b20a17da4a3294a40 100644 (file)
@@ -1361,10 +1361,6 @@ __power_supply_register(struct device *parent,
                pr_warn("%s: Expected proper parent device for '%s'\n",
                        __func__, desc->name);
 
-       if (psy_has_property(desc, POWER_SUPPLY_PROP_USB_TYPE) &&
-           (!desc->usb_types || !desc->num_usb_types))
-               return ERR_PTR(-EINVAL);
-
        psy = kzalloc(sizeof(*psy), GFP_KERNEL);
        if (!psy)
                return ERR_PTR(-ENOMEM);
index c98a6de59d3b7392271ef9847c0b6ebbb2b34894..16b3c5880cd8ce14cd7c697b11fcf5449b65c2d6 100644 (file)
@@ -268,40 +268,6 @@ static ssize_t power_supply_show_enum_with_available(
        return count;
 }
 
-static ssize_t power_supply_show_usb_type(struct device *dev,
-                                         const struct power_supply_desc *desc,
-                                         union power_supply_propval *value,
-                                         char *buf)
-{
-       enum power_supply_usb_type usb_type;
-       ssize_t count = 0;
-       bool match = false;
-       int i;
-
-       for (i = 0; i < desc->num_usb_types; ++i) {
-               usb_type = desc->usb_types[i];
-
-               if (value->intval == usb_type) {
-                       count += sysfs_emit_at(buf, count, "[%s] ",
-                                        POWER_SUPPLY_USB_TYPE_TEXT[usb_type]);
-                       match = true;
-               } else {
-                       count += sysfs_emit_at(buf, count, "%s ",
-                                        POWER_SUPPLY_USB_TYPE_TEXT[usb_type]);
-               }
-       }
-
-       if (!match) {
-               dev_warn(dev, "driver reporting unsupported connected type\n");
-               return -EINVAL;
-       }
-
-       if (count)
-               buf[count - 1] = '\n';
-
-       return count;
-}
-
 static ssize_t power_supply_show_property(struct device *dev,
                                          struct device_attribute *attr,
                                          char *buf) {
@@ -331,8 +297,10 @@ static ssize_t power_supply_show_property(struct device *dev,
 
        switch (psp) {
        case POWER_SUPPLY_PROP_USB_TYPE:
-               ret = power_supply_show_usb_type(dev, psy->desc,
-                                               &value, buf);
+               ret = power_supply_show_enum_with_available(
+                               dev, POWER_SUPPLY_USB_TYPE_TEXT,
+                               ARRAY_SIZE(POWER_SUPPLY_USB_TYPE_TEXT),
+                               psy->desc->usb_types, value.intval, buf);
                break;
        case POWER_SUPPLY_PROP_CHARGE_BEHAVIOUR:
                ret = power_supply_charge_behaviour_show(dev, psy->desc->charge_behaviours,
index 46f36dcb185c366aec6652017e1c64f9b0822ae1..56c8021383daaf8da4dc23d6112cd05f7f516968 100644 (file)
@@ -786,19 +786,6 @@ static int qcom_battmgr_usb_get_property(struct power_supply *psy,
        return 0;
 }
 
-static const enum power_supply_usb_type usb_psy_supported_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_ACA,
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_PD_DRP,
-       POWER_SUPPLY_USB_TYPE_PD_PPS,
-       POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID,
-};
-
 static const enum power_supply_property sc8280xp_usb_props[] = {
        POWER_SUPPLY_PROP_ONLINE,
 };
@@ -809,8 +796,16 @@ static const struct power_supply_desc sc8280xp_usb_psy_desc = {
        .properties = sc8280xp_usb_props,
        .num_properties = ARRAY_SIZE(sc8280xp_usb_props),
        .get_property = qcom_battmgr_usb_get_property,
-       .usb_types = usb_psy_supported_types,
-       .num_usb_types = ARRAY_SIZE(usb_psy_supported_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN) |
+                    BIT(POWER_SUPPLY_USB_TYPE_SDP)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_ACA)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_C)       |
+                    BIT(POWER_SUPPLY_USB_TYPE_PD)      |
+                    BIT(POWER_SUPPLY_USB_TYPE_PD_DRP)  |
+                    BIT(POWER_SUPPLY_USB_TYPE_PD_PPS)  |
+                    BIT(POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID),
 };
 
 static const enum power_supply_property sm8350_usb_props[] = {
@@ -829,8 +824,16 @@ static const struct power_supply_desc sm8350_usb_psy_desc = {
        .properties = sm8350_usb_props,
        .num_properties = ARRAY_SIZE(sm8350_usb_props),
        .get_property = qcom_battmgr_usb_get_property,
-       .usb_types = usb_psy_supported_types,
-       .num_usb_types = ARRAY_SIZE(usb_psy_supported_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN) |
+                    BIT(POWER_SUPPLY_USB_TYPE_SDP)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_ACA)     |
+                    BIT(POWER_SUPPLY_USB_TYPE_C)       |
+                    BIT(POWER_SUPPLY_USB_TYPE_PD)      |
+                    BIT(POWER_SUPPLY_USB_TYPE_PD_DRP)  |
+                    BIT(POWER_SUPPLY_USB_TYPE_PD_PPS)  |
+                    BIT(POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID),
 };
 
 static const u8 sm8350_wls_prop_map[] = {
index 9bb7774060138ed2149c88c79bc4ec96c6a256f9..81acbd8b2169ce404028fd772276f8573511d96f 100644 (file)
@@ -411,13 +411,6 @@ static enum power_supply_property smb2_properties[] = {
        POWER_SUPPLY_PROP_USB_TYPE,
 };
 
-static enum power_supply_usb_type smb2_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-};
-
 static int smb2_get_prop_usb_online(struct smb2_chip *chip, int *val)
 {
        unsigned int stat;
@@ -775,8 +768,10 @@ static irqreturn_t smb2_handle_wdog_bark(int irq, void *data)
 static const struct power_supply_desc smb2_psy_desc = {
        .name = "pmi8998_charger",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = smb2_usb_types,
-       .num_usb_types = ARRAY_SIZE(smb2_usb_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties = smb2_properties,
        .num_properties = ARRAY_SIZE(smb2_properties),
        .get_property = smb2_get_property,
index 7ca91739c6ccf86b908573cc31331dcd94bdee7e..a3d377a32b497b294917d8ad510d37e1281edd46 100644 (file)
@@ -673,11 +673,6 @@ static enum power_supply_property rk817_chg_props[] = {
        POWER_SUPPLY_PROP_VOLTAGE_AVG,
 };
 
-static enum power_supply_usb_type rk817_usb_type[] = {
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-};
-
 static const struct power_supply_desc rk817_bat_desc = {
        .name = "rk817-battery",
        .type = POWER_SUPPLY_TYPE_BATTERY,
@@ -689,8 +684,8 @@ static const struct power_supply_desc rk817_bat_desc = {
 static const struct power_supply_desc rk817_chg_desc = {
        .name = "rk817-charger",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = rk817_usb_type,
-       .num_usb_types = ARRAY_SIZE(rk817_usb_type),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties = rk817_chg_props,
        .num_properties = ARRAY_SIZE(rk817_chg_props),
        .get_property = rk817_chg_get_prop,
index ebea3522a2ac39c948ffb853867b67f5449f70ea..40dec55a9f73604e56ff2e1c7baf2dc7d6236c58 100644 (file)
@@ -70,13 +70,6 @@ struct rn5t618_power_info {
        int irq;
 };
 
-static enum power_supply_usb_type rn5t618_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN
-};
-
 static enum power_supply_property rn5t618_usb_props[] = {
        /* input current limit is not very accurate */
        POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
@@ -681,8 +674,10 @@ static const struct power_supply_desc rn5t618_adp_desc = {
 static const struct power_supply_desc rn5t618_usb_desc = {
        .name                   = "rn5t618-usb",
        .type                   = POWER_SUPPLY_TYPE_USB,
-       .usb_types              = rn5t618_usb_types,
-       .num_usb_types          = ARRAY_SIZE(rn5t618_usb_types),
+       .usb_types              = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties             = rn5t618_usb_props,
        .num_properties         = ARRAY_SIZE(rn5t618_usb_props),
        .get_property           = rn5t618_usb_get_property,
index f935bd761ac1c015a6cb55467472ba104bf977c1..235169c85c5d8a8014ff585b6740aaec3243a068 100644 (file)
@@ -630,13 +630,6 @@ out:
        return ret;
 }
 
-static const enum power_supply_usb_type rt9467_chg_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-};
-
 static const enum power_supply_property rt9467_chg_properties[] = {
        POWER_SUPPLY_PROP_STATUS,
        POWER_SUPPLY_PROP_ONLINE,
@@ -771,8 +764,10 @@ static int rt9467_chg_prop_is_writeable(struct power_supply *psy,
 static const struct power_supply_desc rt9467_chg_psy_desc = {
        .name = "rt9467-charger",
        .type = POWER_SUPPLY_TYPE_USB,
-       .usb_types = rt9467_chg_usb_types,
-       .num_usb_types = ARRAY_SIZE(rt9467_chg_usb_types),
+       .usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                    BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .properties = rt9467_chg_properties,
        .num_properties = ARRAY_SIZE(rt9467_chg_properties),
        .property_is_writeable = rt9467_chg_prop_is_writeable,
index 868b0703d15c52fc096f3de89002d0f31ee73e3c..c04af1ee89c675c3a3745d476d22c8ecf0fbf44d 100644 (file)
@@ -333,14 +333,6 @@ static enum power_supply_property rt9471_charger_properties[] = {
        POWER_SUPPLY_PROP_MANUFACTURER,
 };
 
-static enum power_supply_usb_type rt9471_charger_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID,
-};
-
 static int rt9471_charger_property_is_writeable(struct power_supply *psy,
                                                enum power_supply_property psp)
 {
@@ -726,8 +718,11 @@ static int rt9471_register_psy(struct rt9471_chip *chip)
 
        desc->name = psy_name;
        desc->type = POWER_SUPPLY_TYPE_USB;
-       desc->usb_types = rt9471_charger_usb_types;
-       desc->num_usb_types = ARRAY_SIZE(rt9471_charger_usb_types);
+       desc->usb_types = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                         BIT(POWER_SUPPLY_USB_TYPE_APPLE_BRICK_ID) |
+                         BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN);
        desc->properties = rt9471_charger_properties;
        desc->num_properties = ARRAY_SIZE(rt9471_charger_properties);
        desc->get_property = rt9471_charger_get_property;
index b67d5b03d93e5f36d8633c43a8a6d9b19e35aa43..7382bec6a43c776119bbcfd9070d6ca9629ab810 100644 (file)
@@ -296,14 +296,6 @@ static int ucs1002_set_max_current(struct ucs1002_info *info, u32 val)
        return 0;
 }
 
-static enum power_supply_usb_type ucs1002_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_SDP,
-       POWER_SUPPLY_USB_TYPE_DCP,
-       POWER_SUPPLY_USB_TYPE_CDP,
-       POWER_SUPPLY_USB_TYPE_UNKNOWN,
-};
-
 static int ucs1002_set_usb_type(struct ucs1002_info *info, int val)
 {
        unsigned int mode;
@@ -431,8 +423,11 @@ static int ucs1002_property_is_writeable(struct power_supply *psy,
 static const struct power_supply_desc ucs1002_charger_desc = {
        .name                   = "ucs1002",
        .type                   = POWER_SUPPLY_TYPE_USB,
-       .usb_types              = ucs1002_usb_types,
-       .num_usb_types          = ARRAY_SIZE(ucs1002_usb_types),
+       .usb_types              = BIT(POWER_SUPPLY_USB_TYPE_SDP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_CDP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_DCP) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_PD)  |
+                                 BIT(POWER_SUPPLY_USB_TYPE_UNKNOWN),
        .get_property           = ucs1002_get_property,
        .set_property           = ucs1002_set_property,
        .property_is_writeable  = ucs1002_property_is_writeable,
index 5a5bf3532ad7adc9fe42cb2ebf13e438b27bc2d8..31e3e9544bc0f454455b6fd6eb2c201f8dbb2242 100644 (file)
@@ -1339,12 +1339,6 @@ static void anx7411_get_gpio_irq(struct anx7411_data *ctx)
                dev_err(dev, "failed to get GPIO IRQ\n");
 }
 
-static enum power_supply_usb_type anx7411_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_PD_PPS,
-};
-
 static enum power_supply_property anx7411_psy_props[] = {
        POWER_SUPPLY_PROP_USB_TYPE,
        POWER_SUPPLY_PROP_ONLINE,
@@ -1422,8 +1416,9 @@ static int anx7411_psy_register(struct anx7411_data *ctx)
 
        psy_desc->name = psy_name;
        psy_desc->type = POWER_SUPPLY_TYPE_USB;
-       psy_desc->usb_types = anx7411_psy_usb_types;
-       psy_desc->num_usb_types = ARRAY_SIZE(anx7411_psy_usb_types);
+       psy_desc->usb_types = BIT(POWER_SUPPLY_USB_TYPE_C)  |
+                             BIT(POWER_SUPPLY_USB_TYPE_PD) |
+                             BIT(POWER_SUPPLY_USB_TYPE_PD_PPS);
        psy_desc->properties = anx7411_psy_props;
        psy_desc->num_properties = ARRAY_SIZE(anx7411_psy_props);
 
index be02d420920e57a56c65c625c821702a430012eb..0b0c23a0b014bdb3f4e0de8741ce73af87b55165 100644 (file)
@@ -109,12 +109,6 @@ struct rt1719_data {
        u16 conn_stat;
 };
 
-static const enum power_supply_usb_type rt1719_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_PD_PPS
-};
-
 static const enum power_supply_property rt1719_psy_properties[] = {
        POWER_SUPPLY_PROP_ONLINE,
        POWER_SUPPLY_PROP_USB_TYPE,
@@ -572,8 +566,9 @@ static int devm_rt1719_psy_register(struct rt1719_data *data)
 
        data->psy_desc.name = psy_name;
        data->psy_desc.type = POWER_SUPPLY_TYPE_USB;
-       data->psy_desc.usb_types = rt1719_psy_usb_types;
-       data->psy_desc.num_usb_types = ARRAY_SIZE(rt1719_psy_usb_types);
+       data->psy_desc.usb_types = BIT(POWER_SUPPLY_USB_TYPE_C)  |
+                                  BIT(POWER_SUPPLY_USB_TYPE_PD) |
+                                  BIT(POWER_SUPPLY_USB_TYPE_PD_PPS);
        data->psy_desc.properties = rt1719_psy_properties;
        data->psy_desc.num_properties = ARRAY_SIZE(rt1719_psy_properties);
        data->psy_desc.get_property = rt1719_psy_get_property;
index 26f9006e95e169c2dca496cfe9a13753075e4562..0bd9c9569fb7c50f6830d3f4bd3429269befa79b 100644 (file)
@@ -7484,12 +7484,6 @@ static int tcpm_psy_prop_writeable(struct power_supply *psy,
        }
 }
 
-static enum power_supply_usb_type tcpm_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_PD_PPS,
-};
-
 static const char *tcpm_psy_name_prefix = "tcpm-source-psy-";
 
 static int devm_tcpm_psy_register(struct tcpm_port *port)
@@ -7510,8 +7504,9 @@ static int devm_tcpm_psy_register(struct tcpm_port *port)
                 port_dev_name);
        port->psy_desc.name = psy_name;
        port->psy_desc.type = POWER_SUPPLY_TYPE_USB;
-       port->psy_desc.usb_types = tcpm_psy_usb_types;
-       port->psy_desc.num_usb_types = ARRAY_SIZE(tcpm_psy_usb_types);
+       port->psy_desc.usb_types = BIT(POWER_SUPPLY_USB_TYPE_C)  |
+                                  BIT(POWER_SUPPLY_USB_TYPE_PD) |
+                                  BIT(POWER_SUPPLY_USB_TYPE_PD_PPS);
        port->psy_desc.properties = tcpm_psy_props;
        port->psy_desc.num_properties = ARRAY_SIZE(tcpm_psy_props);
        port->psy_desc.get_property = tcpm_psy_get_prop;
index ea768b19a7f1ec1da902b07ec447668b2bd4849d..7512f0c3f6cbe9daf4df508a90e4453dec9d42b1 100644 (file)
@@ -150,11 +150,6 @@ static enum power_supply_property tps6598x_psy_props[] = {
        POWER_SUPPLY_PROP_ONLINE,
 };
 
-static enum power_supply_usb_type tps6598x_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-};
-
 static const char *tps6598x_psy_name_prefix = "tps6598x-source-psy-";
 
 /*
@@ -827,8 +822,8 @@ static int devm_tps6598_psy_register(struct tps6598x *tps)
 
        tps->psy_desc.name = psy_name;
        tps->psy_desc.type = POWER_SUPPLY_TYPE_USB;
-       tps->psy_desc.usb_types = tps6598x_psy_usb_types;
-       tps->psy_desc.num_usb_types = ARRAY_SIZE(tps6598x_psy_usb_types);
+       tps->psy_desc.usb_types = BIT(POWER_SUPPLY_USB_TYPE_C) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_PD);
        tps->psy_desc.properties = tps6598x_psy_props;
        tps->psy_desc.num_properties = ARRAY_SIZE(tps6598x_psy_props);
        tps->psy_desc.get_property = tps6598x_psy_get_prop;
index e623d80e177c07415e0475fae21a5573165a6612..1c631c7855a9606c82a885b3a4b00998cd2420d2 100644 (file)
@@ -254,12 +254,6 @@ static int ucsi_psy_get_prop(struct power_supply *psy,
        }
 }
 
-static enum power_supply_usb_type ucsi_psy_usb_types[] = {
-       POWER_SUPPLY_USB_TYPE_C,
-       POWER_SUPPLY_USB_TYPE_PD,
-       POWER_SUPPLY_USB_TYPE_PD_PPS,
-};
-
 int ucsi_register_port_psy(struct ucsi_connector *con)
 {
        struct power_supply_config psy_cfg = {};
@@ -276,8 +270,9 @@ int ucsi_register_port_psy(struct ucsi_connector *con)
 
        con->psy_desc.name = psy_name;
        con->psy_desc.type = POWER_SUPPLY_TYPE_USB;
-       con->psy_desc.usb_types = ucsi_psy_usb_types;
-       con->psy_desc.num_usb_types = ARRAY_SIZE(ucsi_psy_usb_types);
+       con->psy_desc.usb_types = BIT(POWER_SUPPLY_USB_TYPE_C)  |
+                                 BIT(POWER_SUPPLY_USB_TYPE_PD) |
+                                 BIT(POWER_SUPPLY_USB_TYPE_PD_PPS);
        con->psy_desc.properties = ucsi_psy_props;
        con->psy_desc.num_properties = ARRAY_SIZE(ucsi_psy_props);
        con->psy_desc.get_property = ucsi_psy_get_prop;
index 72dc7e45c90ce9255fb063f8a065415570945ca4..910d407ebe6323aaf4b31f0081f2cdd4be43a9fa 100644 (file)
@@ -243,8 +243,7 @@ struct power_supply_desc {
        const char *name;
        enum power_supply_type type;
        u8 charge_behaviours;
-       const enum power_supply_usb_type *usb_types;
-       size_t num_usb_types;
+       u32 usb_types;
        const enum power_supply_property *properties;
        size_t num_properties;