/* ACIN_PATH_SEL disables ACIN even if ACIN_AVAIL is set. */ if (val->intval && power->has_acin_path_sel) {
ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL,
®); if (ret) return ret;
val->intval = !!(reg & AXP813_ACIN_PATH_SEL);
}
return 0;
case POWER_SUPPLY_PROP_VOLTAGE_NOW:
ret = iio_read_channel_processed(power->acin_v, &val->intval); if (ret) return ret;
/* IIO framework gives mV but Power Supply framework gives uV */
val->intval *= 1000;
return 0;
case POWER_SUPPLY_PROP_CURRENT_NOW:
ret = iio_read_channel_processed(power->acin_i, &val->intval); if (ret) return ret;
/* IIO framework gives mA but Power Supply framework gives uA */
val->intval *= 1000;
return 0;
case POWER_SUPPLY_PROP_VOLTAGE_MIN:
ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®); if (ret) return ret;
val->intval = AXP813_VHOLD_REG_TO_UV(reg);
return 0;
case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®); if (ret) return ret;
val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg); /* AXP813 datasheet defines values 11x as 4000mA */ if (val->intval > 4000000)
val->intval = 4000000;
#ifdef CONFIG_PM_SLEEP staticint axp20x_ac_power_suspend(struct device *dev)
{ struct axp20x_ac_power *power = dev_get_drvdata(dev); int i = 0;
/* * Allow wake via ACIN_PLUGIN only. * * As nested threaded IRQs are not automatically disabled during * suspend, we must explicitly disable the remainder of the IRQs.
*/ if (device_may_wakeup(&power->supply->dev))
enable_irq_wake(power->irqs[i++]); while (i < power->num_irqs)
disable_irq(power->irqs[i++]);
return 0;
}
staticint axp20x_ac_power_resume(struct device *dev)
{ struct axp20x_ac_power *power = dev_get_drvdata(dev); int i = 0;
if (device_may_wakeup(&power->supply->dev))
disable_irq_wake(power->irqs[i++]); while (i < power->num_irqs)
enable_irq(power->irqs[i++]);
power->supply = devm_power_supply_register(&pdev->dev,
axp_data->power_desc,
&psy_cfg); if (IS_ERR(power->supply)) return PTR_ERR(power->supply);
/* Request irqs after registering, as irqs may trigger immediately */ for (i = 0; i < axp_data->num_irq_names; i++) {
irq = platform_get_irq_byname(pdev, axp_data->irq_names[i]); if (irq < 0) return irq;
MODULE_AUTHOR("Quentin Schulz <quentin.schulz@free-electrons.com>");
MODULE_DESCRIPTION("AXP20X and AXP22X PMICs' AC power supply driver");
MODULE_LICENSE("GPL");
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-04-26)
¤
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.