Lines Matching +full:chg +full:- +full:int

1 // SPDX-License-Identifier: GPL-2.0+
3 * max77976_charger.c - Driver for the Maxim MAX77976 battery charger
14 #define MAX77976_DRIVER_NAME "max77976-charger"
20 /* --------------------------------------------------------------------------
110 /* --------------------------------------------------------------------------
120 /* --------------------------------------------------------------------------
124 static int max77976_get_status(struct max77976 *chg, int *val) in max77976_get_status() argument
126 unsigned int regval; in max77976_get_status()
127 int err; in max77976_get_status()
129 err = regmap_field_read(chg->rfield[CHG_DTLS], &regval); in max77976_get_status()
162 static int max77976_get_charge_type(struct max77976 *chg, int *val) in max77976_get_charge_type() argument
164 unsigned int regval; in max77976_get_charge_type()
165 int err; in max77976_get_charge_type()
167 err = regmap_field_read(chg->rfield[CHG_DTLS], &regval); in max77976_get_charge_type()
200 static int max77976_get_health(struct max77976 *chg, int *val) in max77976_get_health() argument
202 unsigned int regval; in max77976_get_health()
203 int err; in max77976_get_health()
205 err = regmap_field_read(chg->rfield[BAT_DTLS], &regval); in max77976_get_health()
234 static int max77976_get_online(struct max77976 *chg, int *val) in max77976_get_online() argument
236 unsigned int regval; in max77976_get_online()
237 int err; in max77976_get_online()
239 err = regmap_field_read(chg->rfield[CHGIN_OK], &regval); in max77976_get_online()
248 static int max77976_get_integer(struct max77976 *chg, enum max77976_field_idx fidx, in max77976_get_integer() argument
249 unsigned int clamp_min, unsigned int clamp_max, in max77976_get_integer()
250 unsigned int mult, int *val) in max77976_get_integer()
252 unsigned int regval; in max77976_get_integer()
253 int err; in max77976_get_integer()
255 err = regmap_field_read(chg->rfield[fidx], &regval); in max77976_get_integer()
264 static int max77976_set_integer(struct max77976 *chg, enum max77976_field_idx fidx, in max77976_set_integer() argument
265 unsigned int clamp_min, unsigned int clamp_max, in max77976_set_integer()
266 unsigned int div, int val) in max77976_set_integer()
268 unsigned int regval; in max77976_set_integer()
272 return regmap_field_write(chg->rfield[fidx], regval); in max77976_set_integer()
275 static int max77976_get_property(struct power_supply *psy, in max77976_get_property()
279 struct max77976 *chg = power_supply_get_drvdata(psy); in max77976_get_property() local
280 int err = 0; in max77976_get_property()
284 err = max77976_get_status(chg, &val->intval); in max77976_get_property()
287 err = max77976_get_charge_type(chg, &val->intval); in max77976_get_property()
290 err = max77976_get_health(chg, &val->intval); in max77976_get_property()
293 err = max77976_get_online(chg, &val->intval); in max77976_get_property()
296 val->intval = MAX77976_CHG_CC_MAX; in max77976_get_property()
299 err = max77976_get_integer(chg, CHG_CC, in max77976_get_property()
303 &val->intval); in max77976_get_property()
306 err = max77976_get_integer(chg, CHGIN_ILIM, in max77976_get_property()
310 &val->intval); in max77976_get_property()
313 val->strval = max77976_model; in max77976_get_property()
316 val->strval = max77976_manufacturer; in max77976_get_property()
319 err = -EINVAL; in max77976_get_property()
325 static int max77976_set_property(struct power_supply *psy, in max77976_set_property()
329 struct max77976 *chg = power_supply_get_drvdata(psy); in max77976_set_property() local
330 int err = 0; in max77976_set_property()
334 err = max77976_set_integer(chg, CHG_CC, in max77976_set_property()
338 val->intval); in max77976_set_property()
341 err = max77976_set_integer(chg, CHGIN_ILIM, in max77976_set_property()
345 val->intval); in max77976_set_property()
348 err = -EINVAL; in max77976_set_property()
354 static int max77976_property_is_writeable(struct power_supply *psy, in max77976_property_is_writeable()
388 /* --------------------------------------------------------------------------
392 static int max77976_detect(struct max77976 *chg) in max77976_detect() argument
394 struct device *dev = &chg->client->dev; in max77976_detect()
395 unsigned int id, ver, rev; in max77976_detect()
396 int err; in max77976_detect()
398 err = regmap_read(chg->regmap, MAX77976_REG_CHIP_ID, &id); in max77976_detect()
403 return dev_err_probe(dev, -ENXIO, "unknown model ID 0x%02x\n", id); in max77976_detect()
405 err = regmap_field_read(chg->rfield[VERSION], &ver); in max77976_detect()
407 err = regmap_field_read(chg->rfield[REVISION], &rev); in max77976_detect()
409 return dev_err_probe(dev, -ENXIO, "cannot read version/revision\n"); in max77976_detect()
416 static int max77976_configure(struct max77976 *chg) in max77976_configure() argument
418 struct device *dev = &chg->client->dev; in max77976_configure()
419 int err; in max77976_configure()
422 err = regmap_field_write(chg->rfield[CHGPROT], 0x3); in max77976_configure()
430 err = regmap_field_write(chg->rfield[MODE], MAX77976_MODE_CHARGER_BUCK); in max77976_configure()
440 static int max77976_probe(struct i2c_client *client) in max77976_probe()
442 struct device *dev = &client->dev; in max77976_probe()
445 struct max77976 *chg; in max77976_probe() local
446 int err; in max77976_probe()
447 int i; in max77976_probe()
449 chg = devm_kzalloc(dev, sizeof(*chg), GFP_KERNEL); in max77976_probe()
450 if (!chg) in max77976_probe()
451 return -ENOMEM; in max77976_probe()
453 i2c_set_clientdata(client, chg); in max77976_probe()
454 psy_cfg.drv_data = chg; in max77976_probe()
456 chg->client = client; in max77976_probe()
458 chg->regmap = devm_regmap_init_i2c(client, &max77976_regmap_config); in max77976_probe()
459 if (IS_ERR(chg->regmap)) in max77976_probe()
460 return dev_err_probe(dev, PTR_ERR(chg->regmap), in max77976_probe()
464 chg->rfield[i] = devm_regmap_field_alloc(dev, chg->regmap, in max77976_probe()
466 if (IS_ERR(chg->rfield[i])) in max77976_probe()
467 return dev_err_probe(dev, PTR_ERR(chg->rfield[i]), in max77976_probe()
471 err = max77976_detect(chg); in max77976_probe()
475 err = max77976_configure(chg); in max77976_probe()