struct max77620_therm_info { struct device *dev; struct regmap *rmap; struct thermal_zone_device *tz_device; int irq_tjalarm1; int irq_tjalarm2;
};
/** * max77620_thermal_read_temp: Read PMIC die temperatue. * @data: Device specific data. * @temp: Temperature in millidegrees Celsius * * The actual temperature of PMIC die is not available from PMIC. * PMIC only tells the status if it has crossed or not the threshold level * of 120degC or 140degC. * If threshold has not been crossed then assume die temperature as 100degC * else 120degC or 140deG based on the PMIC die temp threshold status. * * Return 0 on success otherwise error number to show reason of failure.
*/
staticint max77620_thermal_read_temp(struct thermal_zone_device *tz, int *temp)
{ struct max77620_therm_info *mtherm = thermal_zone_device_priv(tz); unsignedint val; int ret;
ret = regmap_read(mtherm->rmap, MAX77620_REG_STATLBT, &val); if (ret < 0) return ret;
staticint max77620_thermal_probe(struct platform_device *pdev)
{ struct max77620_therm_info *mtherm; int ret;
mtherm = devm_kzalloc(&pdev->dev, sizeof(*mtherm), GFP_KERNEL); if (!mtherm) return -ENOMEM;
mtherm->irq_tjalarm1 = platform_get_irq(pdev, 0);
mtherm->irq_tjalarm2 = platform_get_irq(pdev, 1); if ((mtherm->irq_tjalarm1 < 0) || (mtherm->irq_tjalarm2 < 0)) {
dev_err(&pdev->dev, "Alarm irq number not available\n"); return -EINVAL;
}
mtherm->dev = &pdev->dev;
mtherm->rmap = dev_get_regmap(pdev->dev.parent, NULL); if (!mtherm->rmap) {
dev_err(&pdev->dev, "Failed to get parent regmap\n"); return -ENODEV;
}
/* * The reference taken to the parent's node which will be balanced on * reprobe or on platform-device release.
*/
device_set_of_node_from_dev(&pdev->dev, pdev->dev.parent);
mtherm->tz_device = devm_thermal_of_zone_register(&pdev->dev, 0,
mtherm, &max77620_thermal_ops); if (IS_ERR(mtherm->tz_device)) return PTR_ERR(mtherm->tz_device);
ret = devm_request_threaded_irq(&pdev->dev, mtherm->irq_tjalarm1, NULL,
max77620_thermal_irq,
IRQF_ONESHOT | IRQF_SHARED,
dev_name(&pdev->dev), mtherm); if (ret < 0) {
dev_err(&pdev->dev, "Failed to request irq1: %d\n", ret); return ret;
}
ret = devm_request_threaded_irq(&pdev->dev, mtherm->irq_tjalarm2, NULL,
max77620_thermal_irq,
IRQF_ONESHOT | IRQF_SHARED,
dev_name(&pdev->dev), mtherm); if (ret < 0) {
dev_err(&pdev->dev, "Failed to request irq2: %d\n", ret); return ret;
}
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.