Commit eab25b4f authored by Hans de Goede's avatar Hans de Goede Committed by Sebastian Reichel

power: supply: bq25890: On the bq25892 set the IINLIM based on external charger detection

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).
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarSebastian Reichel <sebastian.reichel@collabora.com>
parent 79d35365
...@@ -594,6 +594,38 @@ static int bq25890_power_supply_get_property(struct power_supply *psy, ...@@ -594,6 +594,38 @@ static int bq25890_power_supply_get_property(struct power_supply *psy,
return 0; 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, static int bq25890_get_chip_state(struct bq25890_device *bq,
struct bq25890_state *state) struct bq25890_state *state)
{ {
...@@ -818,6 +850,7 @@ static const struct power_supply_desc bq25890_power_supply_desc = { ...@@ -818,6 +850,7 @@ static const struct power_supply_desc bq25890_power_supply_desc = {
.properties = bq25890_power_supply_props, .properties = bq25890_power_supply_props,
.num_properties = ARRAY_SIZE(bq25890_power_supply_props), .num_properties = ARRAY_SIZE(bq25890_power_supply_props),
.get_property = bq25890_power_supply_get_property, .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) static int bq25890_power_supply_init(struct bq25890_device *bq)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment