Lines Matching refs:bq
275 static int bq25980_get_input_curr_lim(struct bq25980_device *bq) in bq25980_get_input_curr_lim() argument
280 ret = regmap_read(bq->regmap, BQ25980_BUSOCP, &busocp_reg_code); in bq25980_get_input_curr_lim()
287 static int bq25980_set_hiz(struct bq25980_device *bq, int setting) in bq25980_set_hiz() argument
289 return regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2, in bq25980_set_hiz()
293 static int bq25980_set_input_curr_lim(struct bq25980_device *bq, int busocp) in bq25980_set_input_curr_lim() argument
299 return bq25980_set_hiz(bq, BQ25980_ENABLE_HIZ); in bq25980_set_input_curr_lim()
301 bq25980_set_hiz(bq, BQ25980_DISABLE_HIZ); in bq25980_set_input_curr_lim()
306 if (bq->state.bypass) in bq25980_set_input_curr_lim()
307 busocp = min(busocp, bq->chip_info->busocp_sc_max); in bq25980_set_input_curr_lim()
309 busocp = min(busocp, bq->chip_info->busocp_byp_max); in bq25980_set_input_curr_lim()
314 ret = regmap_write(bq->regmap, BQ25980_BUSOCP, busocp_reg_code); in bq25980_set_input_curr_lim()
318 return regmap_write(bq->regmap, BQ25980_BUSOCP_ALM, busocp_reg_code); in bq25980_set_input_curr_lim()
321 static int bq25980_get_input_volt_lim(struct bq25980_device *bq) in bq25980_get_input_volt_lim() argument
328 if (bq->state.bypass) { in bq25980_get_input_volt_lim()
329 busovp_step = bq->chip_info->busovp_byp_step; in bq25980_get_input_volt_lim()
330 busovp_offset = bq->chip_info->busovp_byp_offset; in bq25980_get_input_volt_lim()
332 busovp_step = bq->chip_info->busovp_sc_step; in bq25980_get_input_volt_lim()
333 busovp_offset = bq->chip_info->busovp_sc_offset; in bq25980_get_input_volt_lim()
336 ret = regmap_read(bq->regmap, BQ25980_BUSOVP, &busovp_reg_code); in bq25980_get_input_volt_lim()
343 static int bq25980_set_input_volt_lim(struct bq25980_device *bq, int busovp) in bq25980_set_input_volt_lim() argument
350 if (bq->state.bypass) { in bq25980_set_input_volt_lim()
351 busovp_step = bq->chip_info->busovp_byp_step; in bq25980_set_input_volt_lim()
352 busovp_offset = bq->chip_info->busovp_byp_offset; in bq25980_set_input_volt_lim()
353 if (busovp > bq->chip_info->busovp_byp_max) in bq25980_set_input_volt_lim()
354 busovp = bq->chip_info->busovp_byp_max; in bq25980_set_input_volt_lim()
355 else if (busovp < bq->chip_info->busovp_byp_min) in bq25980_set_input_volt_lim()
356 busovp = bq->chip_info->busovp_byp_min; in bq25980_set_input_volt_lim()
358 busovp_step = bq->chip_info->busovp_sc_step; in bq25980_set_input_volt_lim()
359 busovp_offset = bq->chip_info->busovp_sc_offset; in bq25980_set_input_volt_lim()
360 if (busovp > bq->chip_info->busovp_sc_max) in bq25980_set_input_volt_lim()
361 busovp = bq->chip_info->busovp_sc_max; in bq25980_set_input_volt_lim()
362 else if (busovp < bq->chip_info->busovp_sc_min) in bq25980_set_input_volt_lim()
363 busovp = bq->chip_info->busovp_sc_min; in bq25980_set_input_volt_lim()
368 ret = regmap_write(bq->regmap, BQ25980_BUSOVP, busovp_reg_code); in bq25980_set_input_volt_lim()
372 return regmap_write(bq->regmap, BQ25980_BUSOVP_ALM, busovp_reg_code); in bq25980_set_input_volt_lim()
375 static int bq25980_get_const_charge_curr(struct bq25980_device *bq) in bq25980_get_const_charge_curr() argument
380 ret = regmap_read(bq->regmap, BQ25980_BATOCP, &batocp_reg_code); in bq25980_get_const_charge_curr()
388 static int bq25980_set_const_charge_curr(struct bq25980_device *bq, int batocp) in bq25980_set_const_charge_curr() argument
394 batocp = min(batocp, bq->chip_info->batocp_max); in bq25980_set_const_charge_curr()
398 ret = regmap_update_bits(bq->regmap, BQ25980_BATOCP, in bq25980_set_const_charge_curr()
403 return regmap_update_bits(bq->regmap, BQ25980_BATOCP_ALM, in bq25980_set_const_charge_curr()
407 static int bq25980_get_const_charge_volt(struct bq25980_device *bq) in bq25980_get_const_charge_volt() argument
412 ret = regmap_read(bq->regmap, BQ25980_BATOVP, &batovp_reg_code); in bq25980_get_const_charge_volt()
416 return ((batovp_reg_code * bq->chip_info->batovp_step) + in bq25980_get_const_charge_volt()
417 bq->chip_info->batovp_offset); in bq25980_get_const_charge_volt()
420 static int bq25980_set_const_charge_volt(struct bq25980_device *bq, int batovp) in bq25980_set_const_charge_volt() argument
425 if (batovp < bq->chip_info->batovp_min) in bq25980_set_const_charge_volt()
426 batovp = bq->chip_info->batovp_min; in bq25980_set_const_charge_volt()
428 if (batovp > bq->chip_info->batovp_max) in bq25980_set_const_charge_volt()
429 batovp = bq->chip_info->batovp_max; in bq25980_set_const_charge_volt()
431 batovp_reg_code = (batovp - bq->chip_info->batovp_offset) / in bq25980_set_const_charge_volt()
432 bq->chip_info->batovp_step; in bq25980_set_const_charge_volt()
434 ret = regmap_write(bq->regmap, BQ25980_BATOVP, batovp_reg_code); in bq25980_set_const_charge_volt()
438 return regmap_write(bq->regmap, BQ25980_BATOVP_ALM, batovp_reg_code); in bq25980_set_const_charge_volt()
441 static int bq25980_set_bypass(struct bq25980_device *bq, bool en_bypass) in bq25980_set_bypass() argument
446 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2, in bq25980_set_bypass()
449 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2, in bq25980_set_bypass()
454 bq->state.bypass = en_bypass; in bq25980_set_bypass()
456 return bq->state.bypass; in bq25980_set_bypass()
459 static int bq25980_set_chg_en(struct bq25980_device *bq, bool en_chg) in bq25980_set_chg_en() argument
464 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2, in bq25980_set_chg_en()
467 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2, in bq25980_set_chg_en()
472 bq->state.ce = en_chg; in bq25980_set_chg_en()
477 static int bq25980_get_adc_ibus(struct bq25980_device *bq) in bq25980_get_adc_ibus() argument
483 ret = regmap_read(bq->regmap, BQ25980_IBUS_ADC_MSB, &ibus_adc_msb); in bq25980_get_adc_ibus()
487 ret = regmap_read(bq->regmap, BQ25980_IBUS_ADC_LSB, &ibus_adc_lsb); in bq25980_get_adc_ibus()
499 static int bq25980_get_adc_vbus(struct bq25980_device *bq) in bq25980_get_adc_vbus() argument
505 ret = regmap_read(bq->regmap, BQ25980_VBUS_ADC_MSB, &vbus_adc_msb); in bq25980_get_adc_vbus()
509 ret = regmap_read(bq->regmap, BQ25980_VBUS_ADC_LSB, &vbus_adc_lsb); in bq25980_get_adc_vbus()
518 static int bq25980_get_ibat_adc(struct bq25980_device *bq) in bq25980_get_ibat_adc() argument
524 ret = regmap_read(bq->regmap, BQ25980_IBAT_ADC_MSB, &ibat_adc_msb); in bq25980_get_ibat_adc()
528 ret = regmap_read(bq->regmap, BQ25980_IBAT_ADC_LSB, &ibat_adc_lsb); in bq25980_get_ibat_adc()
540 static int bq25980_get_adc_vbat(struct bq25980_device *bq) in bq25980_get_adc_vbat() argument
546 ret = regmap_read(bq->regmap, BQ25980_VBAT_ADC_MSB, &vsys_adc_msb); in bq25980_get_adc_vbat()
550 ret = regmap_read(bq->regmap, BQ25980_VBAT_ADC_LSB, &vsys_adc_lsb); in bq25980_get_adc_vbat()
559 static int bq25980_get_state(struct bq25980_device *bq, in bq25980_get_state() argument
570 ret = regmap_read(bq->regmap, BQ25980_STAT1, &stat1); in bq25980_get_state()
574 ret = regmap_read(bq->regmap, BQ25980_STAT2, &stat2); in bq25980_get_state()
578 ret = regmap_read(bq->regmap, BQ25980_STAT3, &stat3); in bq25980_get_state()
582 ret = regmap_read(bq->regmap, BQ25980_STAT4, &stat4); in bq25980_get_state()
586 ret = regmap_read(bq->regmap, BQ25980_CHRGR_CTRL_2, &chg_ctrl_2); in bq25980_get_state()
590 ret = regmap_read(bq->regmap, BQ25980_IBAT_ADC_MSB, &ibat_adc_msb); in bq25980_get_state()
613 struct bq25980_device *bq = power_supply_get_drvdata(psy); in bq25980_get_battery_property() local
618 val->intval = bq->init_data.ichg_max; in bq25980_get_battery_property()
622 val->intval = bq->init_data.vreg_max; in bq25980_get_battery_property()
626 ret = bq25980_get_ibat_adc(bq); in bq25980_get_battery_property()
631 ret = bq25980_get_adc_vbat(bq); in bq25980_get_battery_property()
649 struct bq25980_device *bq = power_supply_get_drvdata(psy); in bq25980_set_charger_property() local
654 ret = bq25980_set_input_curr_lim(bq, val->intval); in bq25980_set_charger_property()
660 ret = bq25980_set_input_volt_lim(bq, val->intval); in bq25980_set_charger_property()
666 ret = bq25980_set_bypass(bq, val->intval); in bq25980_set_charger_property()
672 ret = bq25980_set_chg_en(bq, val->intval); in bq25980_set_charger_property()
678 ret = bq25980_set_const_charge_curr(bq, val->intval); in bq25980_set_charger_property()
684 ret = bq25980_set_const_charge_volt(bq, val->intval); in bq25980_set_charger_property()
700 struct bq25980_device *bq = power_supply_get_drvdata(psy); in bq25980_get_charger_property() local
704 mutex_lock(&bq->lock); in bq25980_get_charger_property()
705 ret = bq25980_get_state(bq, &state); in bq25980_get_charger_property()
706 mutex_unlock(&bq->lock); in bq25980_get_charger_property()
715 val->strval = bq->model_name; in bq25980_get_charger_property()
722 ret = bq25980_get_input_volt_lim(bq); in bq25980_get_charger_property()
729 ret = bq25980_get_input_curr_lim(bq); in bq25980_get_charger_property()
773 ret = bq25980_get_adc_ibus(bq); in bq25980_get_charger_property()
781 ret = bq25980_get_adc_vbus(bq); in bq25980_get_charger_property()
789 ret = bq25980_get_const_charge_curr(bq); in bq25980_get_charger_property()
797 ret = bq25980_get_const_charge_volt(bq); in bq25980_get_charger_property()
811 static bool bq25980_state_changed(struct bq25980_device *bq, in bq25980_state_changed() argument
816 mutex_lock(&bq->lock); in bq25980_state_changed()
817 old_state = bq->state; in bq25980_state_changed()
818 mutex_unlock(&bq->lock); in bq25980_state_changed()
833 struct bq25980_device *bq = private; in bq25980_irq_handler_thread() local
837 ret = bq25980_get_state(bq, &state); in bq25980_irq_handler_thread()
841 if (!bq25980_state_changed(bq, &state)) in bq25980_irq_handler_thread()
844 mutex_lock(&bq->lock); in bq25980_irq_handler_thread()
845 bq->state = state; in bq25980_irq_handler_thread()
846 mutex_unlock(&bq->lock); in bq25980_irq_handler_thread()
848 power_supply_changed(bq->charger); in bq25980_irq_handler_thread()
1056 static int bq25980_power_supply_init(struct bq25980_device *bq, in bq25980_power_supply_init() argument
1059 struct power_supply_config psy_cfg = { .drv_data = bq, in bq25980_power_supply_init()
1065 bq->charger = devm_power_supply_register(bq->dev, in bq25980_power_supply_init()
1068 if (IS_ERR(bq->charger)) in bq25980_power_supply_init()
1071 bq->battery = devm_power_supply_register(bq->dev, in bq25980_power_supply_init()
1074 if (IS_ERR(bq->battery)) in bq25980_power_supply_init()
1080 static int bq25980_hw_init(struct bq25980_device *bq) in bq25980_hw_init() argument
1090 if (bq->watchdog_timer) { in bq25980_hw_init()
1091 if (bq->watchdog_timer >= bq25980_watchdog_time[wd_max_val]) in bq25980_hw_init()
1095 if (bq->watchdog_timer > bq25980_watchdog_time[i] && in bq25980_hw_init()
1096 bq->watchdog_timer < bq25980_watchdog_time[i + 1]) { in bq25980_hw_init()
1104 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_3, in bq25980_hw_init()
1109 ret = power_supply_get_battery_info(bq->charger, &bat_info); in bq25980_hw_init()
1111 dev_warn(bq->dev, "battery info missing\n"); in bq25980_hw_init()
1115 bq->init_data.ichg_max = bat_info.constant_charge_current_max_ua; in bq25980_hw_init()
1116 bq->init_data.vreg_max = bat_info.constant_charge_voltage_max_uv; in bq25980_hw_init()
1118 if (bq->state.bypass) { in bq25980_hw_init()
1119 ret = regmap_update_bits(bq->regmap, BQ25980_CHRGR_CTRL_2, in bq25980_hw_init()
1124 curr_val = bq->init_data.bypass_ilim; in bq25980_hw_init()
1125 volt_val = bq->init_data.bypass_vlim; in bq25980_hw_init()
1127 curr_val = bq->init_data.sc_ilim; in bq25980_hw_init()
1128 volt_val = bq->init_data.sc_vlim; in bq25980_hw_init()
1131 ret = bq25980_set_input_curr_lim(bq, curr_val); in bq25980_hw_init()
1135 ret = bq25980_set_input_volt_lim(bq, volt_val); in bq25980_hw_init()
1139 return regmap_update_bits(bq->regmap, BQ25980_ADC_CONTROL1, in bq25980_hw_init()
1143 static int bq25980_parse_dt(struct bq25980_device *bq) in bq25980_parse_dt() argument
1147 ret = device_property_read_u32(bq->dev, "ti,watchdog-timeout-ms", in bq25980_parse_dt()
1148 &bq->watchdog_timer); in bq25980_parse_dt()
1150 bq->watchdog_timer = BQ25980_WATCHDOG_MIN; in bq25980_parse_dt()
1152 if (bq->watchdog_timer > BQ25980_WATCHDOG_MAX || in bq25980_parse_dt()
1153 bq->watchdog_timer < BQ25980_WATCHDOG_MIN) in bq25980_parse_dt()
1156 ret = device_property_read_u32(bq->dev, in bq25980_parse_dt()
1158 &bq->init_data.sc_vlim); in bq25980_parse_dt()
1160 bq->init_data.sc_vlim = bq->chip_info->busovp_sc_def; in bq25980_parse_dt()
1162 if (bq->init_data.sc_vlim > bq->chip_info->busovp_sc_max || in bq25980_parse_dt()
1163 bq->init_data.sc_vlim < bq->chip_info->busovp_sc_min) { in bq25980_parse_dt()
1164 dev_err(bq->dev, "SC ovp limit is out of range\n"); in bq25980_parse_dt()
1168 ret = device_property_read_u32(bq->dev, in bq25980_parse_dt()
1170 &bq->init_data.sc_ilim); in bq25980_parse_dt()
1172 bq->init_data.sc_ilim = bq->chip_info->busocp_def; in bq25980_parse_dt()
1174 if (bq->init_data.sc_ilim > bq->chip_info->busocp_sc_max || in bq25980_parse_dt()
1175 bq->init_data.sc_ilim < bq->chip_info->busocp_sc_min) { in bq25980_parse_dt()
1176 dev_err(bq->dev, "SC ocp limit is out of range\n"); in bq25980_parse_dt()
1180 ret = device_property_read_u32(bq->dev, in bq25980_parse_dt()
1182 &bq->init_data.bypass_vlim); in bq25980_parse_dt()
1184 bq->init_data.bypass_vlim = bq->chip_info->busovp_byp_def; in bq25980_parse_dt()
1186 if (bq->init_data.bypass_vlim > bq->chip_info->busovp_byp_max || in bq25980_parse_dt()
1187 bq->init_data.bypass_vlim < bq->chip_info->busovp_byp_min) { in bq25980_parse_dt()
1188 dev_err(bq->dev, "Bypass ovp limit is out of range\n"); in bq25980_parse_dt()
1192 ret = device_property_read_u32(bq->dev, in bq25980_parse_dt()
1194 &bq->init_data.bypass_ilim); in bq25980_parse_dt()
1196 bq->init_data.bypass_ilim = bq->chip_info->busocp_def; in bq25980_parse_dt()
1198 if (bq->init_data.bypass_ilim > bq->chip_info->busocp_byp_max || in bq25980_parse_dt()
1199 bq->init_data.bypass_ilim < bq->chip_info->busocp_byp_min) { in bq25980_parse_dt()
1200 dev_err(bq->dev, "Bypass ocp limit is out of range\n"); in bq25980_parse_dt()
1205 bq->state.bypass = device_property_read_bool(bq->dev, in bq25980_parse_dt()
1214 struct bq25980_device *bq; in bq25980_probe() local
1217 bq = devm_kzalloc(dev, sizeof(*bq), GFP_KERNEL); in bq25980_probe()
1218 if (!bq) in bq25980_probe()
1221 bq->client = client; in bq25980_probe()
1222 bq->dev = dev; in bq25980_probe()
1224 mutex_init(&bq->lock); in bq25980_probe()
1226 strncpy(bq->model_name, id->name, I2C_NAME_SIZE); in bq25980_probe()
1227 bq->chip_info = &bq25980_chip_info_tbl[id->driver_data]; in bq25980_probe()
1229 bq->regmap = devm_regmap_init_i2c(client, in bq25980_probe()
1230 bq->chip_info->regmap_config); in bq25980_probe()
1231 if (IS_ERR(bq->regmap)) { in bq25980_probe()
1233 return PTR_ERR(bq->regmap); in bq25980_probe()
1236 i2c_set_clientdata(client, bq); in bq25980_probe()
1238 ret = bq25980_parse_dt(bq); in bq25980_probe()
1249 dev_name(&client->dev), bq); in bq25980_probe()
1254 ret = bq25980_power_supply_init(bq, dev); in bq25980_probe()
1260 ret = bq25980_hw_init(bq); in bq25980_probe()