if (time_after(jiffies, data->last_updated + HZ) || !data->valid) {
/* Read control registers -- 0x00 to 0x07 */ for (i = 0; i < ARRAY_SIZE(data->cregs); i++) {
val = i2c_smbus_read_byte_data(client, i); if (unlikely(val < 0))
data->cregs[i] = 0; else
data->cregs[i] = val;
}
/* Read voltage registers -- 0x10 to 0x1c */ for (i = 0; i < ARRAY_SIZE(data->vregs); i++) {
val = i2c_smbus_read_byte_data(client, i+0x10); if (unlikely(val < 0))
data->vregs[i] = 0; else
data->vregs[i] = val;
}
/* Return the voltage from the given register in millivolts */ staticint ltc4245_get_voltage(struct device *dev, u8 reg)
{ struct ltc4245_data *data = ltc4245_update_device(dev); const u8 regval = data->vregs[reg - 0x10];
u32 voltage = 0;
switch (reg) { case LTC4245_12VIN: case LTC4245_12VOUT:
voltage = regval * 55; break; case LTC4245_5VIN: case LTC4245_5VOUT:
voltage = regval * 22; break; case LTC4245_3VIN: case LTC4245_3VOUT:
voltage = regval * 15; break; case LTC4245_VEEIN: case LTC4245_VEEOUT:
voltage = regval * -55; break; case LTC4245_GPIOADC:
voltage = regval * 10; break; default: /* If we get here, the developer messed up */
WARN_ON_ONCE(1); break;
}
return voltage;
}
/* Return the current in the given sense register in milliAmperes */ staticunsignedint ltc4245_get_current(struct device *dev, u8 reg)
{ struct ltc4245_data *data = ltc4245_update_device(dev); const u8 regval = data->vregs[reg - 0x10]; unsignedint voltage; unsignedint curr;
switch (reg) { case LTC4245_12VSENSE:
voltage = regval * 250; /* voltage in uV */
curr = voltage / 50; /* sense resistor 50 mOhm */ break; case LTC4245_5VSENSE:
voltage = regval * 125; /* voltage in uV */
curr = (voltage * 10) / 35; /* sense resistor 3.5 mOhm */ break; case LTC4245_3VSENSE:
voltage = regval * 125; /* voltage in uV */
curr = (voltage * 10) / 25; /* sense resistor 2.5 mOhm */ break; case LTC4245_VEESENSE:
voltage = regval * 250; /* voltage in uV */
curr = voltage / 100; /* sense resistor 100 mOhm */ break; default: /* If we get here, the developer messed up */
WARN_ON_ONCE(1);
curr = 0; break;
}
return curr;
}
/* Map from voltage channel index to voltage register */
/* This is the driver that will be inserted */ staticstruct i2c_driver ltc4245_driver = {
.driver = {
.name = "ltc4245",
},
.probe = ltc4245_probe,
.id_table = ltc4245_id,
};
module_i2c_driver(ltc4245_driver);
MODULE_AUTHOR("Ira W. Snyder <iws@ovro.caltech.edu>");
MODULE_DESCRIPTION("LTC4245 driver");
MODULE_LICENSE("GPL");
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-09-28)
¤
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.