Lines Matching refs:ddata

142 cpcap_battery_get_state(struct cpcap_battery_ddata *ddata,  in cpcap_battery_get_state()  argument
148 return &ddata->state[state]; in cpcap_battery_get_state()
152 cpcap_battery_latest(struct cpcap_battery_ddata *ddata) in cpcap_battery_latest() argument
154 return cpcap_battery_get_state(ddata, CPCAP_BATTERY_STATE_LATEST); in cpcap_battery_latest()
158 cpcap_battery_previous(struct cpcap_battery_ddata *ddata) in cpcap_battery_previous() argument
160 return cpcap_battery_get_state(ddata, CPCAP_BATTERY_STATE_PREVIOUS); in cpcap_battery_previous()
163 static int cpcap_charger_battery_temperature(struct cpcap_battery_ddata *ddata, in cpcap_charger_battery_temperature() argument
169 channel = ddata->channels[CPCAP_BATTERY_IIO_BATTDET]; in cpcap_charger_battery_temperature()
172 dev_warn(ddata->dev, "%s failed: %i\n", __func__, error); in cpcap_charger_battery_temperature()
183 static int cpcap_battery_get_voltage(struct cpcap_battery_ddata *ddata) in cpcap_battery_get_voltage() argument
188 channel = ddata->channels[CPCAP_BATTERY_IIO_VOLTAGE]; in cpcap_battery_get_voltage()
191 dev_warn(ddata->dev, "%s failed: %i\n", __func__, error); in cpcap_battery_get_voltage()
199 static int cpcap_battery_get_current(struct cpcap_battery_ddata *ddata) in cpcap_battery_get_current() argument
204 channel = ddata->channels[CPCAP_BATTERY_IIO_BATT_CURRENT]; in cpcap_battery_get_current()
207 dev_warn(ddata->dev, "%s failed: %i\n", __func__, error); in cpcap_battery_get_current()
236 static int cpcap_battery_cc_raw_div(struct cpcap_battery_ddata *ddata, in cpcap_battery_cc_raw_div() argument
247 acc *= ddata->cc_lsb; in cpcap_battery_cc_raw_div()
255 static int cpcap_battery_cc_to_uah(struct cpcap_battery_ddata *ddata, in cpcap_battery_cc_to_uah() argument
259 return cpcap_battery_cc_raw_div(ddata, sample, in cpcap_battery_cc_to_uah()
264 static int cpcap_battery_cc_to_ua(struct cpcap_battery_ddata *ddata, in cpcap_battery_cc_to_ua() argument
268 return cpcap_battery_cc_raw_div(ddata, sample, in cpcap_battery_cc_to_ua()
290 cpcap_battery_read_accumulated(struct cpcap_battery_ddata *ddata, in cpcap_battery_read_accumulated() argument
302 error = regmap_bulk_read(ddata->reg, CPCAP_REG_CCS1, in cpcap_battery_read_accumulated()
310 if (ddata->vendor == CPCAP_VENDOR_TI) in cpcap_battery_read_accumulated()
325 if (ddata->vendor == CPCAP_VENDOR_TI) in cpcap_battery_read_accumulated()
330 return cpcap_battery_cc_to_uah(ddata, in cpcap_battery_read_accumulated()
340 static int cpcap_battery_cc_get_avg_current(struct cpcap_battery_ddata *ddata) in cpcap_battery_cc_get_avg_current() argument
347 error = regmap_read(ddata->reg, CPCAP_REG_CCI, &value); in cpcap_battery_cc_get_avg_current()
351 if (ddata->vendor == CPCAP_VENDOR_TI) { in cpcap_battery_cc_get_avg_current()
360 error = regmap_read(ddata->reg, CPCAP_REG_CCM, &value); in cpcap_battery_cc_get_avg_current()
366 return cpcap_battery_cc_to_ua(ddata, sample, acc, offset); in cpcap_battery_cc_get_avg_current()
369 static bool cpcap_battery_full(struct cpcap_battery_ddata *ddata) in cpcap_battery_full() argument
371 struct cpcap_battery_state_data *state = cpcap_battery_latest(ddata); in cpcap_battery_full()
374 (ddata->config.bat.constant_charge_voltage_max_uv - 18000)) in cpcap_battery_full()
380 static int cpcap_battery_update_status(struct cpcap_battery_ddata *ddata) in cpcap_battery_update_status() argument
389 latest = cpcap_battery_latest(ddata); in cpcap_battery_update_status()
398 state.voltage = cpcap_battery_get_voltage(ddata); in cpcap_battery_update_status()
399 state.current_ua = cpcap_battery_get_current(ddata); in cpcap_battery_update_status()
400 state.counter_uah = cpcap_battery_read_accumulated(ddata, &state.cc); in cpcap_battery_update_status()
402 error = cpcap_charger_battery_temperature(ddata, in cpcap_battery_update_status()
407 previous = cpcap_battery_previous(ddata); in cpcap_battery_update_status()
437 struct cpcap_battery_ddata *ddata = power_supply_get_drvdata(psy); in cpcap_battery_get_property() local
444 cached = cpcap_battery_update_status(ddata); in cpcap_battery_get_property()
448 latest = cpcap_battery_latest(ddata); in cpcap_battery_get_property()
449 previous = cpcap_battery_previous(ddata); in cpcap_battery_get_property()
459 if (cpcap_battery_full(ddata)) { in cpcap_battery_get_property()
463 if (cpcap_battery_cc_get_avg_current(ddata) < 0) in cpcap_battery_get_property()
469 val->intval = ddata->config.info.technology; in cpcap_battery_get_property()
472 val->intval = cpcap_battery_get_voltage(ddata); in cpcap_battery_get_property()
475 val->intval = ddata->config.info.voltage_max_design; in cpcap_battery_get_property()
478 val->intval = ddata->config.info.voltage_min_design; in cpcap_battery_get_property()
481 val->intval = ddata->config.bat.constant_charge_voltage_max_uv; in cpcap_battery_get_property()
486 val->intval = cpcap_battery_cc_get_avg_current(ddata); in cpcap_battery_get_property()
490 val->intval = cpcap_battery_cc_to_ua(ddata, sample, in cpcap_battery_get_property()
507 tmp = cpcap_battery_cc_get_avg_current(ddata); in cpcap_battery_get_property()
513 tmp = cpcap_battery_cc_to_ua(ddata, sample, accumulator, in cpcap_battery_get_property()
519 if (cpcap_battery_full(ddata)) in cpcap_battery_get_property()
533 val->intval = ddata->config.info.charge_full_design; in cpcap_battery_get_property()
548 static int cpcap_battery_update_charger(struct cpcap_battery_ddata *ddata, in cpcap_battery_update_charger() argument
585 struct cpcap_battery_ddata *ddata = power_supply_get_drvdata(psy); in cpcap_battery_set_property() local
589 if (val->intval < ddata->config.info.voltage_min_design) in cpcap_battery_set_property()
591 if (val->intval > ddata->config.info.voltage_max_design) in cpcap_battery_set_property()
594 ddata->config.bat.constant_charge_voltage_max_uv = val->intval; in cpcap_battery_set_property()
596 return cpcap_battery_update_charger(ddata, val->intval); in cpcap_battery_set_property()
617 struct cpcap_battery_ddata *ddata = data; in cpcap_battery_irq_thread() local
621 if (!atomic_read(&ddata->active)) in cpcap_battery_irq_thread()
624 list_for_each_entry(d, &ddata->irq_list, node) { in cpcap_battery_irq_thread()
629 if (list_entry_is_head(d, &ddata->irq_list, node)) in cpcap_battery_irq_thread()
632 latest = cpcap_battery_latest(ddata); in cpcap_battery_irq_thread()
636 dev_info(ddata->dev, "Coulomb counter calibration done\n"); in cpcap_battery_irq_thread()
640 dev_warn(ddata->dev, "Battery low at %imV!\n", in cpcap_battery_irq_thread()
645 dev_emerg(ddata->dev, in cpcap_battery_irq_thread()
655 power_supply_changed(ddata->psy); in cpcap_battery_irq_thread()
661 struct cpcap_battery_ddata *ddata, in cpcap_battery_init_irq() argument
671 error = devm_request_threaded_irq(ddata->dev, irq, NULL, in cpcap_battery_init_irq()
674 name, ddata); in cpcap_battery_init_irq()
676 dev_err(ddata->dev, "could not get irq %s: %i\n", in cpcap_battery_init_irq()
682 d = devm_kzalloc(ddata->dev, sizeof(*d), GFP_KERNEL); in cpcap_battery_init_irq()
696 list_add(&d->node, &ddata->irq_list); in cpcap_battery_init_irq()
702 struct cpcap_battery_ddata *ddata) in cpcap_battery_init_interrupts() argument
711 error = cpcap_battery_init_irq(pdev, ddata, in cpcap_battery_init_interrupts()
718 cpcap_battery_init_irq(pdev, ddata, "cccal"); in cpcap_battery_init_interrupts()
721 error = regmap_update_bits(ddata->reg, CPCAP_REG_BPEOL, in cpcap_battery_init_interrupts()
730 static int cpcap_battery_init_iio(struct cpcap_battery_ddata *ddata) in cpcap_battery_init_iio() argument
738 ddata->channels[i] = devm_iio_channel_get(ddata->dev, in cpcap_battery_init_iio()
740 if (IS_ERR(ddata->channels[i])) { in cpcap_battery_init_iio()
741 error = PTR_ERR(ddata->channels[i]); in cpcap_battery_init_iio()
745 if (!ddata->channels[i]->indio_dev) { in cpcap_battery_init_iio()
754 return dev_err_probe(ddata->dev, error, in cpcap_battery_init_iio()
759 static int cpcap_battery_calibrate(struct cpcap_battery_ddata *ddata) in cpcap_battery_calibrate() argument
764 error = regmap_read(ddata->reg, CPCAP_REG_CCC1, &ccc1); in cpcap_battery_calibrate()
771 error = regmap_update_bits(ddata->reg, CPCAP_REG_CCC1, in cpcap_battery_calibrate()
778 error = regmap_read(ddata->reg, CPCAP_REG_CCC1, &value); in cpcap_battery_calibrate()
785 error = regmap_read(ddata->reg, CPCAP_REG_CCM, &value); in cpcap_battery_calibrate()
793 error = regmap_read(ddata->reg, CPCAP_REG_CCM, &value); in cpcap_battery_calibrate()
797 dev_info(ddata->dev, "calibration done: 0x%04x\n", value); in cpcap_battery_calibrate()
801 dev_err(ddata->dev, "%s: error %i\n", __func__, error); in cpcap_battery_calibrate()
803 error = regmap_update_bits(ddata->reg, CPCAP_REG_CCC1, in cpcap_battery_calibrate()
806 dev_err(ddata->dev, "%s: restore error %i\n", in cpcap_battery_calibrate()
845 struct cpcap_battery_ddata *ddata; in cpcap_battery_probe() local
861 ddata = devm_kzalloc(&pdev->dev, sizeof(*ddata), GFP_KERNEL); in cpcap_battery_probe()
862 if (!ddata) in cpcap_battery_probe()
865 INIT_LIST_HEAD(&ddata->irq_list); in cpcap_battery_probe()
866 ddata->dev = &pdev->dev; in cpcap_battery_probe()
867 memcpy(&ddata->config, match->data, sizeof(ddata->config)); in cpcap_battery_probe()
869 ddata->reg = dev_get_regmap(ddata->dev->parent, NULL); in cpcap_battery_probe()
870 if (!ddata->reg) in cpcap_battery_probe()
873 error = cpcap_get_vendor(ddata->dev, ddata->reg, &ddata->vendor); in cpcap_battery_probe()
877 switch (ddata->vendor) { in cpcap_battery_probe()
879 ddata->cc_lsb = 95374; /* μAms per LSB */ in cpcap_battery_probe()
882 ddata->cc_lsb = 91501; /* μAms per LSB */ in cpcap_battery_probe()
887 ddata->cc_lsb = (ddata->cc_lsb * ddata->config.cd_factor) / 1000; in cpcap_battery_probe()
889 platform_set_drvdata(pdev, ddata); in cpcap_battery_probe()
891 error = cpcap_battery_init_interrupts(pdev, ddata); in cpcap_battery_probe()
895 error = cpcap_battery_init_iio(ddata); in cpcap_battery_probe()
899 psy_desc = devm_kzalloc(ddata->dev, sizeof(*psy_desc), GFP_KERNEL); in cpcap_battery_probe()
912 psy_cfg.drv_data = ddata; in cpcap_battery_probe()
914 ddata->psy = devm_power_supply_register(ddata->dev, psy_desc, in cpcap_battery_probe()
916 error = PTR_ERR_OR_ZERO(ddata->psy); in cpcap_battery_probe()
918 dev_err(ddata->dev, "failed to register power supply\n"); in cpcap_battery_probe()
922 atomic_set(&ddata->active, 1); in cpcap_battery_probe()
924 error = cpcap_battery_calibrate(ddata); in cpcap_battery_probe()
933 struct cpcap_battery_ddata *ddata = platform_get_drvdata(pdev); in cpcap_battery_remove() local
936 atomic_set(&ddata->active, 0); in cpcap_battery_remove()
937 error = regmap_update_bits(ddata->reg, CPCAP_REG_BPEOL, in cpcap_battery_remove()