lkml.org 
[lkml]   [2021]   [Nov]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 12/20] power: supply: bq25890: On the bq25892 set the IINLIM based on external charger detection
    Date
    The bq25892 does not have builtin charger-type detection like the bq25980,
    there might be some external charger detection capability, which will be
    modelled as a power_supply class-device supplying the bq25892.

    Use the usb_type property value from the supplier psy-device to set the
    input-current-limit (when available).

    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    ---
    drivers/power/supply/bq25890_charger.c | 33 ++++++++++++++++++++++++++
    1 file changed, 33 insertions(+)

    diff --git a/drivers/power/supply/bq25890_charger.c b/drivers/power/supply/bq25890_charger.c
    index e06ca7b0eb3e..57e4034bc9cd 100644
    --- a/drivers/power/supply/bq25890_charger.c
    +++ b/drivers/power/supply/bq25890_charger.c
    @@ -564,6 +564,38 @@ static int bq25890_power_supply_get_property(struct power_supply *psy,
    return 0;
    }

    +/* On the BQ25892 try to get charger-type info from our supplier */
    +static void bq25890_charger_external_power_changed(struct power_supply *psy)
    +{
    + struct bq25890_device *bq = power_supply_get_drvdata(psy);
    + union power_supply_propval val;
    + int input_current_limit, ret;
    +
    + if (bq->chip_version != BQ25892)
    + return;
    +
    + ret = power_supply_get_property_from_supplier(bq->charger,
    + POWER_SUPPLY_PROP_USB_TYPE,
    + &val);
    + if (ret)
    + return;
    +
    + switch (val.intval) {
    + case POWER_SUPPLY_USB_TYPE_DCP:
    + input_current_limit = bq25890_find_idx(2000000, TBL_IINLIM);
    + break;
    + case POWER_SUPPLY_USB_TYPE_CDP:
    + case POWER_SUPPLY_USB_TYPE_ACA:
    + input_current_limit = bq25890_find_idx(1500000, TBL_IINLIM);
    + break;
    + case POWER_SUPPLY_USB_TYPE_SDP:
    + default:
    + input_current_limit = bq25890_find_idx(500000, TBL_IINLIM);
    + }
    +
    + bq25890_field_write(bq, F_IINLIM, input_current_limit);
    +}
    +
    static int bq25890_get_chip_state(struct bq25890_device *bq,
    struct bq25890_state *state)
    {
    @@ -787,6 +819,7 @@ static const struct power_supply_desc bq25890_power_supply_desc = {
    .properties = bq25890_power_supply_props,
    .num_properties = ARRAY_SIZE(bq25890_power_supply_props),
    .get_property = bq25890_power_supply_get_property,
    + .external_power_changed = bq25890_charger_external_power_changed,
    };

    static int bq25890_power_supply_init(struct bq25890_device *bq)
    --
    2.31.1
    \
     
     \ /
      Last update: 2021-11-14 18:06    [W:4.883 / U:0.032 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site