Lines Matching refs:bd
182 static int bd9995x_get_prop_batt_health(struct bd9995x_device *bd)
186 ret = regmap_field_read(bd->rmap_fields[F_BATTEMP], &tmp);
209 static int bd9995x_get_prop_charge_type(struct bd9995x_device *bd)
213 ret = regmap_field_read(bd->rmap_fields[F_CHGSTM_STATE], &tmp);
232 static bool bd9995x_get_prop_batt_present(struct bd9995x_device *bd)
236 ret = regmap_field_read(bd->rmap_fields[F_BATTEMP], &tmp);
243 static int bd9995x_get_prop_batt_voltage(struct bd9995x_device *bd)
247 ret = regmap_field_read(bd->rmap_fields[F_VBAT_VAL], &tmp);
256 static int bd9995x_get_prop_batt_current(struct bd9995x_device *bd)
260 ret = regmap_field_read(bd->rmap_fields[F_IBATP_VAL], &tmp);
269 static int bd9995x_get_prop_batt_temp(struct bd9995x_device *bd)
273 ret = regmap_field_read(bd->rmap_fields[F_THERM_VAL], &tmp);
285 struct bd9995x_device *bd = power_supply_get_drvdata(psy);
288 mutex_lock(&bd->lock);
289 state = bd->state;
290 mutex_unlock(&bd->lock);
340 ret = regmap_field_read(bd->rmap_fields[F_IBATP_VAL], &tmp);
347 ret = regmap_field_read(bd->rmap_fields[F_IBATP_AVE_VAL], &tmp);
366 ret = regmap_field_read(bd->rmap_fields[F_SEL_ILIM_VAL], &tmp);
378 ret = regmap_field_read(bd->rmap_fields[F_VFASTCHG_REG_SET1],
392 ret = regmap_field_read(bd->rmap_fields[F_ITERM_SET], &tmp);
404 val->intval = bd9995x_get_prop_batt_present(bd);
408 val->intval = bd9995x_get_prop_batt_voltage(bd);
412 val->intval = bd9995x_get_prop_batt_current(bd);
416 val->intval = bd9995x_get_prop_charge_type(bd);
420 val->intval = bd9995x_get_prop_batt_health(bd);
424 val->intval = bd9995x_get_prop_batt_temp(bd);
443 static int bd9995x_get_chip_state(struct bd9995x_device *bd,
452 bd->rmap_fields[F_CHGSTM_STATE], &state->chgstm_status,
454 bd->rmap_fields[F_VBAT_VSYS_STATUS],
457 bd->rmap_fields[F_VBUS_VCC_STATUS],
482 struct bd9995x_device *bd = private;
503 ret = regmap_read(bd->rmap, INT0_STATUS, &status);
505 dev_err(bd->dev, "Failed to read IRQ status\n");
509 ret = regmap_field_read(bd->rmap_fields[F_INT0_SET], &mask);
511 dev_err(bd->dev, "Failed to read IRQ mask\n");
525 ret = regmap_field_write(bd->rmap_fields[F_INT0_SET], 0);
527 dev_err(bd->dev, "Failed to mask F_INT0\n");
531 ret = regmap_write(bd->rmap, INT0_STATUS, status);
533 dev_err(bd->dev, "Failed to ack F_INT0\n");
544 bd->rmap_fields[F_INT1_SET],
545 bd->rmap_fields[F_INT2_SET],
546 bd->rmap_fields[F_INT3_SET],
547 bd->rmap_fields[F_INT4_SET],
548 bd->rmap_fields[F_INT5_SET],
549 bd->rmap_fields[F_INT6_SET],
550 bd->rmap_fields[F_INT7_SET],
554 ret = regmap_read(bd->rmap, sub_status_reg[i], &sub_status);
556 dev_err(bd->dev, "Failed to read IRQ sub-status\n");
562 dev_err(bd->dev, "Failed to read IRQ sub-mask\n");
569 ret = regmap_write(bd->rmap, sub_status_reg[i], sub_status);
571 dev_err(bd->dev, "Failed to ack sub-IRQ\n");
576 ret = regmap_field_write(bd->rmap_fields[F_INT0_SET], mask);
582 ret = bd9995x_get_chip_state(bd, &state);
584 dev_err(bd->dev, "Failed to read chip state\n");
586 mutex_lock(&bd->lock);
587 bd->state = state;
588 mutex_unlock(&bd->lock);
590 power_supply_changed(bd->charger);
596 ret = regmap_field_write(bd->rmap_fields[F_INT0_SET], mask);
598 dev_err(bd->dev,
604 static int __bd9995x_chip_reset(struct bd9995x_device *bd)
610 ret = regmap_raw_write(bd->rmap, SYSTEM_CTRL_SET, &tmp, 2);
615 ret = regmap_field_read(bd->rmap_fields[F_OTPLD_STATE], &state);
623 dev_err(bd->dev, "chip reset not completed\n");
628 ret = regmap_raw_write(bd->rmap, SYSTEM_CTRL_SET, &tmp, 2);
633 static int bd9995x_hw_init(struct bd9995x_device *bd)
638 struct bd9995x_init_data *id = &bd->init_data;
707 ret = __bd9995x_chip_reset(bd);
713 ret = regmap_field_write(bd->rmap_fields[init_data[i].id],
716 dev_err(bd->dev, "failed to initialize charger (%d)\n",
722 ret = bd9995x_get_chip_state(bd, &state);
726 mutex_lock(&bd->lock);
727 bd->state = state;
728 mutex_unlock(&bd->lock);
824 static int bd9995x_fw_probe(struct bd9995x_device *bd)
832 struct bd9995x_init_data *init = &bd->init_data;
899 ret = power_supply_get_battery_info(bd->charger, &info);
924 dev_err(bd->dev, "Unsupported value for %s\n",
927 power_supply_put_battery_info(bd->charger, info);
931 dev_warn(bd->dev,
938 power_supply_put_battery_info(bd->charger, info);
941 ret = device_property_read_u32(bd->dev, props[i].prop,
944 dev_err(bd->dev, "failed to read %s", props[i].prop);
954 dev_err(bd->dev, "Unsupported value for '%s'\n",
961 dev_warn(bd->dev,
972 static void bd9995x_chip_reset(void *bd)
974 __bd9995x_chip_reset(bd);
980 struct bd9995x_device *bd;
985 bd = devm_kzalloc(dev, sizeof(*bd), GFP_KERNEL);
986 if (!bd)
989 bd->client = client;
990 bd->dev = dev;
991 psy_cfg.drv_data = bd;
994 mutex_init(&bd->lock);
996 bd->rmap = devm_regmap_init_i2c(client, &bd9995x_regmap_config);
997 if (IS_ERR(bd->rmap)) {
999 return PTR_ERR(bd->rmap);
1005 bd->rmap_fields[i] = devm_regmap_field_alloc(dev, bd->rmap,
1007 if (IS_ERR(bd->rmap_fields[i])) {
1009 return PTR_ERR(bd->rmap_fields[i]);
1013 i2c_set_clientdata(client, bd);
1015 ret = regmap_field_read(bd->rmap_fields[F_CHIP_ID], &bd->chip_id);
1021 if (bd->chip_id != BD99954_ID) {
1023 bd->chip_id);
1027 ret = regmap_field_read(bd->rmap_fields[F_CHIP_REV], &bd->chip_rev);
1033 dev_info(bd->dev, "Found BD99954 chip rev %d\n", bd->chip_rev);
1039 bd->charger = devm_power_supply_register(bd->dev,
1042 if (IS_ERR(bd->charger)) {
1044 return PTR_ERR(bd->charger);
1047 ret = bd9995x_fw_probe(bd);
1053 ret = bd9995x_hw_init(bd);
1059 ret = devm_add_action_or_reset(dev, bd9995x_chip_reset, bd);
1066 BD9995X_IRQ_PIN, bd);