Merge tag 'for-v6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power...
[linux-block.git] / drivers / power / supply / bq25890_charger.c
index 06ea7399d1516cca78d37a7eac05324b17468b86..6020b58c641d237de3cbc4da18d61bd64a353efd 100644 (file)
@@ -613,6 +613,33 @@ static int bq25890_power_supply_get_property(struct power_supply *psy,
        return 0;
 }
 
+static int bq25890_power_supply_set_property(struct power_supply *psy,
+                                            enum power_supply_property psp,
+                                            const union power_supply_propval *val)
+{
+       struct bq25890_device *bq = power_supply_get_drvdata(psy);
+       u8 lval;
+
+       switch (psp) {
+       case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+               lval = bq25890_find_idx(val->intval, TBL_IINLIM);
+               return bq25890_field_write(bq, F_IINLIM, lval);
+       default:
+               return -EINVAL;
+       }
+}
+
+static int bq25890_power_supply_property_is_writeable(struct power_supply *psy,
+                                                     enum power_supply_property psp)
+{
+       switch (psp) {
+       case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+               return true;
+       default:
+               return false;
+       }
+}
+
 /* On the BQ25892 try to get charger-type info from our supplier */
 static void bq25890_charger_external_power_changed(struct power_supply *psy)
 {
@@ -874,6 +901,8 @@ 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,
+       .set_property = bq25890_power_supply_set_property,
+       .property_is_writeable = bq25890_power_supply_property_is_writeable,
        .external_power_changed = bq25890_charger_external_power_changed,
 };
 
@@ -946,6 +975,7 @@ static void bq25890_pump_express_work(struct work_struct *data)
 
        return;
 error_print:
+       bq25890_field_write(bq, F_PUMPX_EN, 0);
        dev_err(bq->dev, "Failed to request hi-voltage charging\n");
 }