On 30/05/2024 10:55, Artur Weber wrote: > There are two charger current limit registers: > > - Fast charge current limit (which controls current going from the > charger to the battery); > - CHGIN input current limit (which controls current going into the > charger through the cable, and is managed by the CHARGER regulator). > > Add functions for setting both of the values, and set them to a > safe default value of 500mA at initialization. > > The default value for the fast charge current limit can be modified > by setting the maxim,fast-charge-current-microamp DT property; the > CHGIN input current limit will be set up later in the charger detection > mechanism. > > Signed-off-by: Artur Weber <aweber.kernel@xxxxxxxxx> > --- > drivers/power/supply/max77693_charger.c | 45 +++++++++++++++++++++++++++++++++ > 1 file changed, 45 insertions(+) > > diff --git a/drivers/power/supply/max77693_charger.c b/drivers/power/supply/max77693_charger.c > index 894c35b750b3..d59b1524b0a4 100644 > --- a/drivers/power/supply/max77693_charger.c > +++ b/drivers/power/supply/max77693_charger.c > @@ -28,6 +28,7 @@ struct max77693_charger { > u32 min_system_volt; > u32 thermal_regulation_temp; > u32 batttery_overcurrent; > + u32 fast_charge_current; > u32 charge_input_threshold_volt; > }; > > @@ -591,6 +592,35 @@ static int max77693_set_batttery_overcurrent(struct max77693_charger *chg, > CHG_CNFG_12_B2SOVRC_MASK, data); > } > > +static int max77693_set_input_current_limit(struct max77693_charger *chg, > + unsigned int uamp) > +{ > + dev_dbg(chg->dev, "CHGIN input current limit: %u\n", uamp); That's quite useless debug. It duplicates max77693_set_fast_charge_current(). Just drop entire wrapper. > + > + return regulator_set_current_limit(chg->regu, (int)uamp, (int)uamp); > +} > + > +static int max77693_set_fast_charge_current(struct max77693_charger *chg, > + unsigned int uamp) > +{ > + unsigned int data; > + > + data = (uamp / 1000) * 10 / 333; /* 0.1A/3 steps */ > + > + if (data > CHG_CNFG_02_CC_MASK) { > + dev_err(chg->dev, "Wrong value for fast charge current\n"); > + return -EINVAL; > + } > + > + data <<= CHG_CNFG_02_CC_SHIFT; > + > + dev_dbg(chg->dev, "Fast charge current: %u (0x%x)\n", uamp, data); > + > + return regmap_update_bits(chg->max77693->regmap, > + MAX77693_CHG_REG_CHG_CNFG_02, > + CHG_CNFG_02_CC_MASK, data); I am surprised that you set current limit via regulator but actual charging current value here. I think both should go to regulator in such case. > Best regards, Krzysztof