staticint pm8916_lbc_charger_probe_dt(struct pm8916_lbc_charger *chg)
{ struct device *dev = chg->dev; int ret = 0; unsignedint tmp;
ret = device_property_read_u32(dev, "qcom,fast-charge-safe-voltage", &chg->charge_voltage_safe); if (ret) return ret; if (chg->charge_voltage_safe < PM8916_LBC_CHGR_MIN_VOLTAGE) return -EINVAL;
tmp = chg->charge_voltage_safe - PM8916_LBC_CHGR_MIN_VOLTAGE;
tmp /= PM8916_LBC_CHGR_VOLTAGE_STEP;
ret = regmap_write(chg->regmap, chg->reg[LBC_CHGR] + PM8916_LBC_CHGR_VDD_SAFE, tmp); if (ret) return ret;
ret = device_property_read_u32(dev, "qcom,fast-charge-safe-current", &chg->charge_current_safe); if (ret) return ret; if (chg->charge_current_safe < PM8916_LBC_CHGR_MIN_CURRENT) return -EINVAL;
chg = devm_kzalloc(dev, sizeof(*chg), GFP_KERNEL); if (!chg) return -ENOMEM;
chg->dev = dev;
chg->regmap = dev_get_regmap(pdev->dev.parent, NULL); if (!chg->regmap) return -ENODEV;
len = device_property_count_u32(dev, "reg"); if (len < 0) return len; if (len != 4) return dev_err_probe(dev, -EINVAL, "Wrong amount of reg values: %d (4 expected)\n", len);
irq = platform_get_irq_byname(pdev, "usb_vbus"); if (irq < 0) return irq;
ret = devm_request_threaded_irq(dev, irq, NULL, pm8916_lbc_charger_state_changed_irq,
IRQF_ONESHOT, "pm8916_lbc", chg); if (ret) return ret;
ret = device_property_read_u32_array(dev, "reg", chg->reg, len); if (ret) return ret;
ret = regmap_bulk_read(chg->regmap, chg->reg[LBC_CHGR] + PM8916_PERPH_TYPE, &tmp, 2); if (ret) goto comm_error; if (tmp != PM8916_LBC_CHGR_TYPE) goto type_error;
ret = regmap_bulk_read(chg->regmap, chg->reg[LBC_BAT_IF] + PM8916_PERPH_TYPE, &tmp, 2); if (ret) goto comm_error; if (tmp != PM8916_LBC_BAT_IF_TYPE) goto type_error;
ret = regmap_bulk_read(chg->regmap, chg->reg[LBC_USB] + PM8916_PERPH_TYPE, &tmp, 2); if (ret) goto comm_error; if (tmp != PM8916_LBC_USB_TYPE) goto type_error;
ret = regmap_bulk_read(chg->regmap, chg->reg[LBC_MISC] + PM8916_PERPH_TYPE, &tmp, 2); if (ret) goto comm_error; if (tmp != PM8916_LBC_MISC_TYPE) goto type_error;
ret = regmap_read(chg->regmap, chg->reg[LBC_CHGR] + PM8916_LBC_CHGR_CHG_OPTION, &tmp); if (ret) goto comm_error; if (tmp != PM8916_LBC_CHGR_PMIC_CHARGER)
dev_err_probe(dev, -ENODEV, "The system is using an external charger\n");
ret = pm8916_lbc_charger_probe_dt(chg); if (ret)
dev_err_probe(dev, ret, "Error while parsing device tree\n");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.