Lines Matching +full:trickle +full:- +full:resistor +full:- +full:ohms
1 // SPDX-License-Identifier: GPL-2.0
12 #include <linux/clk-provider.h>
122 return regmap_update_bits(rv3032->regmap, RV3032_CTRL1, RV3032_CTRL1_EERD, 0); in rv3032_exit_eerd()
130 ret = regmap_read(rv3032->regmap, RV3032_CTRL1, &ctrl1); in rv3032_enter_eerd()
138 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL1, in rv3032_enter_eerd()
143 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, in rv3032_enter_eerd()
165 ret = regmap_update_bits(rv3032->regmap, reg, mask, val); in rv3032_update_cfg()
169 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, RV3032_EEPROM_CMD_UPDATE); in rv3032_update_cfg()
175 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, in rv3032_update_cfg()
191 if (regmap_read(rv3032->regmap, RV3032_STATUS, &status) < 0 || in rv3032_handle_irq()
215 rtc_update_irq(rv3032->rtc, 1, events); in rv3032_handle_irq()
216 regmap_update_bits(rv3032->regmap, RV3032_STATUS, status, 0); in rv3032_handle_irq()
217 regmap_update_bits(rv3032->regmap, RV3032_CTRL2, ctrl, 0); in rv3032_handle_irq()
229 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); in rv3032_get_time()
234 return -EINVAL; in rv3032_get_time()
236 ret = regmap_bulk_read(rv3032->regmap, RV3032_SEC, date, sizeof(date)); in rv3032_get_time()
240 tm->tm_sec = bcd2bin(date[0] & 0x7f); in rv3032_get_time()
241 tm->tm_min = bcd2bin(date[1] & 0x7f); in rv3032_get_time()
242 tm->tm_hour = bcd2bin(date[2] & 0x3f); in rv3032_get_time()
243 tm->tm_wday = date[3] & 0x7; in rv3032_get_time()
244 tm->tm_mday = bcd2bin(date[4] & 0x3f); in rv3032_get_time()
245 tm->tm_mon = bcd2bin(date[5] & 0x1f) - 1; in rv3032_get_time()
246 tm->tm_year = bcd2bin(date[6]) + 100; in rv3032_get_time()
257 date[0] = bin2bcd(tm->tm_sec); in rv3032_set_time()
258 date[1] = bin2bcd(tm->tm_min); in rv3032_set_time()
259 date[2] = bin2bcd(tm->tm_hour); in rv3032_set_time()
260 date[3] = tm->tm_wday; in rv3032_set_time()
261 date[4] = bin2bcd(tm->tm_mday); in rv3032_set_time()
262 date[5] = bin2bcd(tm->tm_mon + 1); in rv3032_set_time()
263 date[6] = bin2bcd(tm->tm_year - 100); in rv3032_set_time()
265 ret = regmap_bulk_write(rv3032->regmap, RV3032_SEC, date, in rv3032_set_time()
270 ret = regmap_update_bits(rv3032->regmap, RV3032_STATUS, in rv3032_set_time()
282 ret = regmap_bulk_read(rv3032->regmap, RV3032_ALARM_MIN, alarmvals, in rv3032_get_alarm()
287 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); in rv3032_get_alarm()
291 ret = regmap_read(rv3032->regmap, RV3032_CTRL2, &ctrl); in rv3032_get_alarm()
295 alrm->time.tm_sec = 0; in rv3032_get_alarm()
296 alrm->time.tm_min = bcd2bin(alarmvals[0] & 0x7f); in rv3032_get_alarm()
297 alrm->time.tm_hour = bcd2bin(alarmvals[1] & 0x3f); in rv3032_get_alarm()
298 alrm->time.tm_mday = bcd2bin(alarmvals[2] & 0x3f); in rv3032_get_alarm()
300 alrm->enabled = !!(ctrl & RV3032_CTRL2_AIE); in rv3032_get_alarm()
301 alrm->pending = (status & RV3032_STATUS_AF) && alrm->enabled; in rv3032_get_alarm()
314 if (alrm->time.tm_sec) { in rv3032_set_alarm()
315 time64_t alarm_time = rtc_tm_to_time64(&alrm->time); in rv3032_set_alarm()
317 alarm_time += 60 - alrm->time.tm_sec; in rv3032_set_alarm()
318 rtc_time64_to_tm(alarm_time, &alrm->time); in rv3032_set_alarm()
321 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, in rv3032_set_alarm()
326 alarmvals[0] = bin2bcd(alrm->time.tm_min); in rv3032_set_alarm()
327 alarmvals[1] = bin2bcd(alrm->time.tm_hour); in rv3032_set_alarm()
328 alarmvals[2] = bin2bcd(alrm->time.tm_mday); in rv3032_set_alarm()
330 ret = regmap_update_bits(rv3032->regmap, RV3032_STATUS, in rv3032_set_alarm()
335 ret = regmap_bulk_write(rv3032->regmap, RV3032_ALARM_MIN, alarmvals, in rv3032_set_alarm()
340 if (alrm->enabled) { in rv3032_set_alarm()
341 if (rv3032->rtc->uie_rtctimer.enabled) in rv3032_set_alarm()
343 if (rv3032->rtc->aie_timer.enabled) in rv3032_set_alarm()
347 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, in rv3032_set_alarm()
359 if (rv3032->rtc->uie_rtctimer.enabled) in rv3032_alarm_irq_enable()
361 if (rv3032->rtc->aie_timer.enabled) in rv3032_alarm_irq_enable()
365 ret = regmap_update_bits(rv3032->regmap, RV3032_STATUS, in rv3032_alarm_irq_enable()
370 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, in rv3032_alarm_irq_enable()
383 ret = regmap_read(rv3032->regmap, RV3032_OFFSET, &value); in rv3032_read_offset()
398 offset = clamp(offset, -7629L, 7391L) * 1000; in rv3032_set_offset()
412 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); in rv3032_ioctl()
421 return -ENOIOCTLCMD; in rv3032_ioctl()
447 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_ADDR, in rv3032_eeprom_write()
452 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_DATA, buf[i]); in rv3032_eeprom_write()
456 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, in rv3032_eeprom_write()
463 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, in rv3032_eeprom_write()
488 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_ADDR, in rv3032_eeprom_read()
493 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, in rv3032_eeprom_read()
498 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, in rv3032_eeprom_read()
504 ret = regmap_read(rv3032->regmap, RV3032_EEPROM_DATA, &data); in rv3032_eeprom_read()
518 u32 val, ohms, voltage; in rv3032_trickle_charger_setup() local
522 if (!device_property_read_u32(dev, "trickle-voltage-millivolt", &voltage)) { in rv3032_trickle_charger_setup()
531 if (device_property_read_u32(dev, "trickle-resistor-ohms", &ohms)) in rv3032_trickle_charger_setup()
535 if (ohms == rv3032_trickle_resistors[i]) in rv3032_trickle_charger_setup()
539 dev_warn(dev, "invalid trickle resistor value\n"); in rv3032_trickle_charger_setup()
567 ret = regmap_read(rv3032->regmap, RV3032_CLKOUT2, &clkout); in rv3032_clkout_recalc_rate()
574 ret = regmap_read(rv3032->regmap, RV3032_CLKOUT1, &clkout); in rv3032_clkout_recalc_rate()
616 hfd = clamp(hfd, 1, 8192) - 1; in rv3032_clkout_set_rate()
622 ret = regmap_write(rv3032->regmap, RV3032_CLKOUT1, hfd & 0xff); in rv3032_clkout_set_rate()
626 ret = regmap_write(rv3032->regmap, RV3032_CLKOUT2, RV3032_CLKOUT2_OS | in rv3032_clkout_set_rate()
631 ret = regmap_write(rv3032->regmap, RV3032_EEPROM_CMD, RV3032_EEPROM_CMD_UPDATE); in rv3032_clkout_set_rate()
637 ret = regmap_read_poll_timeout(rv3032->regmap, RV3032_TLSB, status, in rv3032_clkout_set_rate()
666 ret = regmap_read(rv3032->regmap, RV3032_PMU, &val); in rv3032_clkout_is_prepared()
688 struct device_node *node = client->dev.of_node; in rv3032_clkout_register_clk()
690 ret = regmap_update_bits(rv3032->regmap, RV3032_TLSB, RV3032_TLSB_CLKF, 0); in rv3032_clkout_register_clk()
694 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL2, RV3032_CTRL2_CLKIE, 0); in rv3032_clkout_register_clk()
698 ret = regmap_write(rv3032->regmap, RV3032_CLK_IRQ, 0); in rv3032_clkout_register_clk()
702 init.name = "rv3032-clkout"; in rv3032_clkout_register_clk()
707 rv3032->clkout_hw.init = &init; in rv3032_clkout_register_clk()
709 of_property_read_string(node, "clock-output-names", &init.name); in rv3032_clkout_register_clk()
711 clk = devm_clk_register(&client->dev, &rv3032->clkout_hw); in rv3032_clkout_register_clk()
726 ret = regmap_bulk_read(rv3032->regmap, RV3032_TLSB, buf, sizeof(buf)); in rv3032_hwmon_read_temp()
737 ret = regmap_bulk_read(rv3032->regmap, RV3032_TLSB, buf, sizeof(buf)); in rv3032_hwmon_read_temp()
774 err = -EOPNOTSUPP; in rv3032_hwmon_read()
844 rv3032 = devm_kzalloc(&client->dev, sizeof(struct rv3032_data), in rv3032_probe()
847 return -ENOMEM; in rv3032_probe()
849 rv3032->regmap = devm_regmap_init_i2c(client, ®map_config); in rv3032_probe()
850 if (IS_ERR(rv3032->regmap)) in rv3032_probe()
851 return PTR_ERR(rv3032->regmap); in rv3032_probe()
855 ret = regmap_read(rv3032->regmap, RV3032_STATUS, &status); in rv3032_probe()
859 rv3032->rtc = devm_rtc_allocate_device(&client->dev); in rv3032_probe()
860 if (IS_ERR(rv3032->rtc)) in rv3032_probe()
861 return PTR_ERR(rv3032->rtc); in rv3032_probe()
863 if (client->irq > 0) { in rv3032_probe()
864 ret = devm_request_threaded_irq(&client->dev, client->irq, in rv3032_probe()
869 dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n"); in rv3032_probe()
870 client->irq = 0; in rv3032_probe()
878 ret = regmap_update_bits(rv3032->regmap, RV3032_CTRL1, in rv3032_probe()
883 rv3032_trickle_charger_setup(&client->dev, rv3032); in rv3032_probe()
885 rv3032->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in rv3032_probe()
886 rv3032->rtc->range_max = RTC_TIMESTAMP_END_2099; in rv3032_probe()
887 rv3032->rtc->ops = &rv3032_rtc_ops; in rv3032_probe()
888 ret = rtc_register_device(rv3032->rtc); in rv3032_probe()
893 rtc_nvmem_register(rv3032->rtc, &nvmem_cfg); in rv3032_probe()
895 rtc_nvmem_register(rv3032->rtc, &eeprom_cfg); in rv3032_probe()
897 rv3032->rtc->max_user_freq = 1; in rv3032_probe()
903 rv3032_hwmon_register(&client->dev); in rv3032_probe()
916 .name = "rtc-rv3032",