mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-09 06:43:09 +00:00
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: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
79d35365a5
commit
eab25b4f93
@ -594,6 +594,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)
|
||||
{
|
||||
@ -818,6 +850,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)
|
||||
|
Loading…
Reference in New Issue
Block a user