Lines Matching refs:ddata

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