Lines Matching +full:temp +full:- +full:alarm

1 // SPDX-License-Identifier: GPL-2.0-only
13 #include <linux/clk-provider.h>
24 /* RTC - Real time clock registers */
33 /* CSR - Control and status registers */
39 /* ALARM - Alarm registers */
47 #define ISL12022_ALARM_LEN (ISL12022_REG_DWA0 - ISL12022_REG_SCA0 + 1)
49 /* TEMP - Temperature sensor registers */
70 #define ISL12022_ALARM_ENABLE (1 << 7) /* for all ALARM registers */
94 * A user-initiated temperature conversion is not started by this function,
100 int temp, ret; in isl12022_hwmon_read_temp() local
107 * Temperature is represented as a 10-bit number, unit half-Kelvins. in isl12022_hwmon_read_temp()
109 temp = le16_to_cpu(buf); in isl12022_hwmon_read_temp()
110 temp *= 500; in isl12022_hwmon_read_temp()
111 temp -= 273000; in isl12022_hwmon_read_temp()
113 *mC = temp; in isl12022_hwmon_read_temp()
125 return -EOPNOTSUPP; in isl12022_hwmon_read()
129 HWMON_CHANNEL_INFO(temp, HWMON_T_INPUT),
146 struct regmap *regmap = isl12022->regmap; in isl12022_hwmon_register()
169 * rtc_time -- month 0-11, hour 0-23, yr = calendar year-epoch.
174 struct regmap *regmap = isl12022->regmap; in isl12022_rtc_read_time()
194 tm->tm_sec = bcd2bin(buf[ISL12022_REG_SC] & 0x7F); in isl12022_rtc_read_time()
195 tm->tm_min = bcd2bin(buf[ISL12022_REG_MN] & 0x7F); in isl12022_rtc_read_time()
196 tm->tm_hour = bcd2bin(buf[ISL12022_REG_HR] & 0x3F); in isl12022_rtc_read_time()
197 tm->tm_mday = bcd2bin(buf[ISL12022_REG_DT] & 0x3F); in isl12022_rtc_read_time()
198 tm->tm_wday = buf[ISL12022_REG_DW] & 0x07; in isl12022_rtc_read_time()
199 tm->tm_mon = bcd2bin(buf[ISL12022_REG_MO] & 0x1F) - 1; in isl12022_rtc_read_time()
200 tm->tm_year = bcd2bin(buf[ISL12022_REG_YR]) + 100; in isl12022_rtc_read_time()
210 struct regmap *regmap = isl12022->regmap; in isl12022_rtc_set_time()
223 buf[ISL12022_REG_SC] = bin2bcd(tm->tm_sec); in isl12022_rtc_set_time()
224 buf[ISL12022_REG_MN] = bin2bcd(tm->tm_min); in isl12022_rtc_set_time()
225 buf[ISL12022_REG_HR] = bin2bcd(tm->tm_hour) | ISL12022_HR_MIL; in isl12022_rtc_set_time()
227 buf[ISL12022_REG_DT] = bin2bcd(tm->tm_mday); in isl12022_rtc_set_time()
229 /* month, 1 - 12 */ in isl12022_rtc_set_time()
230 buf[ISL12022_REG_MO] = bin2bcd(tm->tm_mon + 1); in isl12022_rtc_set_time()
233 buf[ISL12022_REG_YR] = bin2bcd(tm->tm_year % 100); in isl12022_rtc_set_time()
235 buf[ISL12022_REG_DW] = tm->tm_wday & 0x07; in isl12022_rtc_set_time()
240 static int isl12022_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) in isl12022_rtc_read_alarm() argument
242 struct rtc_time *tm = &alarm->time; in isl12022_rtc_read_alarm()
244 struct regmap *regmap = isl12022->regmap; in isl12022_rtc_read_alarm()
251 dev_dbg(dev, "%s: reading ALARM registers failed\n", in isl12022_rtc_read_alarm()
256 /* The alarm doesn't store the year so get it from the rtc section */ in isl12022_rtc_read_alarm()
267 tm->tm_sec = bcd2bin(buf[ISL12022_REG_SCA0 - ISL12022_ALARM] & 0x7F); in isl12022_rtc_read_alarm()
268 tm->tm_min = bcd2bin(buf[ISL12022_REG_MNA0 - ISL12022_ALARM] & 0x7F); in isl12022_rtc_read_alarm()
269 tm->tm_hour = bcd2bin(buf[ISL12022_REG_HRA0 - ISL12022_ALARM] & 0x3F); in isl12022_rtc_read_alarm()
270 tm->tm_mday = bcd2bin(buf[ISL12022_REG_DTA0 - ISL12022_ALARM] & 0x3F); in isl12022_rtc_read_alarm()
271 tm->tm_mon = bcd2bin(buf[ISL12022_REG_MOA0 - ISL12022_ALARM] & 0x1F) - 1; in isl12022_rtc_read_alarm()
272 tm->tm_wday = buf[ISL12022_REG_DWA0 - ISL12022_ALARM] & 0x07; in isl12022_rtc_read_alarm()
273 tm->tm_year = bcd2bin(yr) + 100; in isl12022_rtc_read_alarm()
277 alarm->enabled = 1; in isl12022_rtc_read_alarm()
287 static int isl12022_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) in isl12022_rtc_set_alarm() argument
289 struct rtc_time *alarm_tm = &alarm->time; in isl12022_rtc_set_alarm()
291 struct regmap *regmap = isl12022->regmap; in isl12022_rtc_set_alarm()
300 /* If the alarm time is before the current time disable the alarm */ in isl12022_rtc_set_alarm()
301 if (!alarm->enabled || rtc_tm_sub(alarm_tm, &rtc_tm) <= 0) in isl12022_rtc_set_alarm()
307 * Set non-matching day of the week to safeguard against early false in isl12022_rtc_set_alarm()
308 * matching while setting all the alarm registers (this rtc lacks a in isl12022_rtc_set_alarm()
309 * general alarm/irq enable/disable bit). in isl12022_rtc_set_alarm()
324 /* Program the alarm and enable it for each setting */ in isl12022_rtc_set_alarm()
325 regs[ISL12022_REG_SCA0 - ISL12022_ALARM] = bin2bcd(alarm_tm->tm_sec) | enable; in isl12022_rtc_set_alarm()
326 regs[ISL12022_REG_MNA0 - ISL12022_ALARM] = bin2bcd(alarm_tm->tm_min) | enable; in isl12022_rtc_set_alarm()
327 regs[ISL12022_REG_HRA0 - ISL12022_ALARM] = bin2bcd(alarm_tm->tm_hour) | enable; in isl12022_rtc_set_alarm()
328 regs[ISL12022_REG_DTA0 - ISL12022_ALARM] = bin2bcd(alarm_tm->tm_mday) | enable; in isl12022_rtc_set_alarm()
329 regs[ISL12022_REG_MOA0 - ISL12022_ALARM] = bin2bcd(alarm_tm->tm_mon + 1) | enable; in isl12022_rtc_set_alarm()
330 regs[ISL12022_REG_DWA0 - ISL12022_ALARM] = bin2bcd(alarm_tm->tm_wday & 7) | enable; in isl12022_rtc_set_alarm()
332 /* write ALARM registers */ in isl12022_rtc_set_alarm()
335 dev_dbg(dev, "%s: writing ALARM registers failed\n", __func__); in isl12022_rtc_set_alarm()
345 struct rtc_device *rtc = isl12022->rtc; in isl12022_rtc_interrupt()
346 struct device *dev = &rtc->dev; in isl12022_rtc_interrupt()
347 struct regmap *regmap = isl12022->regmap; in isl12022_rtc_interrupt()
362 dev_dbg(dev, "alarm!\n"); in isl12022_rtc_interrupt()
379 if (isl12022->irq_enabled == enabled) in isl12022_rtc_alarm_irq_enable()
383 enable_irq(isl12022->irq); in isl12022_rtc_alarm_irq_enable()
385 disable_irq(isl12022->irq); in isl12022_rtc_alarm_irq_enable()
387 isl12022->irq_enabled = enabled; in isl12022_rtc_alarm_irq_enable()
395 struct regmap *regmap = isl12022->regmap; in isl12022_setup_irq()
400 /* Clear and disable all alarm registers */ in isl12022_setup_irq()
416 isl12022->irq_enabled = true; in isl12022_setup_irq()
425 isl12022->irq = irq; in isl12022_setup_irq()
432 struct regmap *regmap = isl12022->regmap; in isl12022_rtc_ioctl()
452 return -ENOIOCTLCMD; in isl12022_rtc_ioctl()
474 struct regmap *regmap = isl12022->regmap; in isl12022_register_clock()
478 if (!device_property_present(dev, "#clock-cells")) { in isl12022_register_clock()
515 struct regmap *regmap = isl12022->regmap; in isl12022_set_trip_levels()
520 device_property_read_u32_array(dev, "isil,battery-trip-levels-microvolt", in isl12022_set_trip_levels()
524 for (j = 0; j < ARRAY_SIZE(trip_levels[i]) - 1; j++) { in isl12022_set_trip_levels()
537 dev_warn(dev, "unable to set battery alarm levels: %d\n", ret); in isl12022_set_trip_levels()
544 * values for up to a minute after power-on. in isl12022_set_trip_levels()
557 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) in isl12022_probe()
558 return -ENODEV; in isl12022_probe()
561 isl12022 = devm_kzalloc(&client->dev, sizeof(*isl12022), GFP_KERNEL); in isl12022_probe()
563 return -ENOMEM; in isl12022_probe()
567 return dev_err_probe(&client->dev, PTR_ERR(regmap), "regmap allocation failed\n"); in isl12022_probe()
568 isl12022->regmap = regmap; in isl12022_probe()
570 dev_set_drvdata(&client->dev, isl12022); in isl12022_probe()
572 ret = isl12022_register_clock(&client->dev); in isl12022_probe()
576 isl12022_set_trip_levels(&client->dev); in isl12022_probe()
577 isl12022_hwmon_register(&client->dev); in isl12022_probe()
579 rtc = devm_rtc_allocate_device(&client->dev); in isl12022_probe()
582 isl12022->rtc = rtc; in isl12022_probe()
584 rtc->ops = &isl12022_rtc_ops; in isl12022_probe()
585 rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in isl12022_probe()
586 rtc->range_max = RTC_TIMESTAMP_END_2099; in isl12022_probe()
588 if (client->irq > 0) { in isl12022_probe()
589 ret = isl12022_setup_irq(&client->dev, client->irq); in isl12022_probe()
593 clear_bit(RTC_FEATURE_ALARM, rtc->features); in isl12022_probe()
614 .name = "rtc-isl12022",