Lines Matching +full:vdet +full:- +full:disable
1 // SPDX-License-Identifier: GPL-2.0+
3 * drivers/rtc/rtc-rc5t619.c
64 return bin2bcd(hour - 12) | HOUR_PMFLAG; in rtc5t619_12hour_bin2bcd()
72 /* disable function */ in rc5t619_rtc_periodic_disable()
73 err = regmap_update_bits(rtc->rn5t618->regmap, in rc5t619_rtc_periodic_disable()
79 err = regmap_update_bits(rtc->rn5t618->regmap, RN5T618_RTC_CTRL2, in rc5t619_rtc_periodic_disable()
95 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL2, ®_data); in rc5t619_rtc_pon_setup()
99 /* clear VDET PON */ in rc5t619_rtc_pon_setup()
100 reg_data &= ~(CTRL2_PON | CTRL2_CTC | 0x4a); /* 0101-1011 */ in rc5t619_rtc_pon_setup()
101 reg_data |= 0x20; /* 0010-0000 */ in rc5t619_rtc_pon_setup()
102 err = regmap_write(rtc->rn5t618->regmap, RN5T618_RTC_CTRL2, reg_data); in rc5t619_rtc_pon_setup()
107 err = regmap_write(rtc->rn5t618->regmap, RN5T618_RTC_ADJUST, 0); in rc5t619_rtc_pon_setup()
111 return regmap_update_bits(rtc->rn5t618->regmap, in rc5t619_rtc_pon_setup()
125 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL2, &ctrl2); in rc5t619_rtc_read_time()
130 return -EINVAL; in rc5t619_rtc_read_time()
132 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL1, &ctrl1); in rc5t619_rtc_read_time()
136 err = regmap_bulk_read(rtc->rn5t618->regmap, RN5T618_RTC_SECONDS, in rc5t619_rtc_read_time()
146 tm->tm_sec = bcd2bin(buff[0]); in rc5t619_rtc_read_time()
147 tm->tm_min = bcd2bin(buff[1]); in rc5t619_rtc_read_time()
150 tm->tm_hour = bcd2bin(buff[2]); in rc5t619_rtc_read_time()
152 tm->tm_hour = rtc5t619_12hour_bcd2bin(buff[2]); in rc5t619_rtc_read_time()
154 tm->tm_wday = bcd2bin(buff[3]); in rc5t619_rtc_read_time()
155 tm->tm_mday = bcd2bin(buff[4]); in rc5t619_rtc_read_time()
156 tm->tm_mon = bcd2bin(buff[5] & 0x1f) - 1; /* back to system 0-11 */ in rc5t619_rtc_read_time()
157 tm->tm_year = bcd2bin(buff[6]) + 100 * cent_flag; in rc5t619_rtc_read_time()
171 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL2, &ctrl2); in rc5t619_rtc_set_time()
178 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL1, &ctrl1); in rc5t619_rtc_set_time()
182 if (tm->tm_year >= 100) in rc5t619_rtc_set_time()
187 buff[0] = bin2bcd(tm->tm_sec); in rc5t619_rtc_set_time()
188 buff[1] = bin2bcd(tm->tm_min); in rc5t619_rtc_set_time()
191 buff[2] = bin2bcd(tm->tm_hour); in rc5t619_rtc_set_time()
193 buff[2] = rtc5t619_12hour_bin2bcd(tm->tm_hour); in rc5t619_rtc_set_time()
195 buff[3] = bin2bcd(tm->tm_wday); in rc5t619_rtc_set_time()
196 buff[4] = bin2bcd(tm->tm_mday); in rc5t619_rtc_set_time()
197 buff[5] = bin2bcd(tm->tm_mon + 1); /* system set 0-11 */ in rc5t619_rtc_set_time()
198 buff[6] = bin2bcd(tm->tm_year - cent_flag * 100); in rc5t619_rtc_set_time()
203 err = regmap_bulk_write(rtc->rn5t618->regmap, RN5T618_RTC_SECONDS, in rc5t619_rtc_set_time()
213 /* 0-disable, 1-enable */
218 return regmap_update_bits(rtc->rn5t618->regmap, in rc5t619_rtc_alarm_enable()
233 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL1, &ctrl1); in rc5t619_rtc_read_alarm()
237 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_MONTH, &buff_cent); in rc5t619_rtc_read_alarm()
248 err = regmap_bulk_read(rtc->rn5t618->regmap, RN5T618_RTC_ALARM_Y_SEC, in rc5t619_rtc_read_alarm()
255 alrm->time.tm_sec = bcd2bin(buff[0]); in rc5t619_rtc_read_alarm()
256 alrm->time.tm_min = bcd2bin(buff[1]); in rc5t619_rtc_read_alarm()
259 alrm->time.tm_hour = bcd2bin(buff[2]); in rc5t619_rtc_read_alarm()
261 alrm->time.tm_hour = rtc5t619_12hour_bcd2bin(buff[2]); in rc5t619_rtc_read_alarm()
263 alrm->time.tm_mday = bcd2bin(buff[3]); in rc5t619_rtc_read_alarm()
264 alrm->time.tm_mon = bcd2bin(buff[4]) - 1; in rc5t619_rtc_read_alarm()
265 alrm->time.tm_year = bcd2bin(buff[5]) + 100 * cent_flag; in rc5t619_rtc_read_alarm()
266 alrm->enabled = !!(ctrl1 & CTRL1_ALARM_ENABLED); in rc5t619_rtc_read_alarm()
267 dev_dbg(dev, "read alarm: %ptR\n", &alrm->time); in rc5t619_rtc_read_alarm()
280 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL1, &ctrl1); in rc5t619_rtc_set_alarm()
288 if (rtc->irq == -1) in rc5t619_rtc_set_alarm()
289 return -EINVAL; in rc5t619_rtc_set_alarm()
291 if (alrm->enabled == 0) in rc5t619_rtc_set_alarm()
294 if (alrm->time.tm_year >= 100) in rc5t619_rtc_set_alarm()
299 alrm->time.tm_mon += 1; in rc5t619_rtc_set_alarm()
300 buff[0] = bin2bcd(alrm->time.tm_sec); in rc5t619_rtc_set_alarm()
301 buff[1] = bin2bcd(alrm->time.tm_min); in rc5t619_rtc_set_alarm()
304 buff[2] = bin2bcd(alrm->time.tm_hour); in rc5t619_rtc_set_alarm()
306 buff[2] = rtc5t619_12hour_bin2bcd(alrm->time.tm_hour); in rc5t619_rtc_set_alarm()
308 buff[3] = bin2bcd(alrm->time.tm_mday); in rc5t619_rtc_set_alarm()
309 buff[4] = bin2bcd(alrm->time.tm_mon); in rc5t619_rtc_set_alarm()
310 buff[5] = bin2bcd(alrm->time.tm_year - 100 * cent_flag); in rc5t619_rtc_set_alarm()
313 err = regmap_bulk_write(rtc->rn5t618->regmap, RN5T618_RTC_ALARM_Y_SEC, in rc5t619_rtc_set_alarm()
318 return rc5t619_rtc_alarm_enable(dev, alrm->enabled); in rc5t619_rtc_set_alarm()
333 /* clear alarm-D status bits.*/ in rc5t619_rtc_alarm_flag_clr()
334 return regmap_update_bits(rtc->rn5t618->regmap, in rc5t619_rtc_alarm_flag_clr()
346 rtc_update_irq(rtc->rtc, 1, RTC_IRQF | RTC_AF); in rc5t619_rtc_irq()
352 struct device *dev = &pdev->dev; in rc5t619_rtc_probe()
353 struct rn5t618 *rn5t618 = dev_get_drvdata(pdev->dev.parent); in rc5t619_rtc_probe()
360 return -ENOMEM; in rc5t619_rtc_probe()
362 rtc->rn5t618 = rn5t618; in rc5t619_rtc_probe()
365 rtc->irq = -1; in rc5t619_rtc_probe()
367 if (rn5t618->irq_data) in rc5t619_rtc_probe()
368 rtc->irq = regmap_irq_get_virq(rn5t618->irq_data, in rc5t619_rtc_probe()
371 if (rtc->irq < 0) in rc5t619_rtc_probe()
372 rtc->irq = -1; in rc5t619_rtc_probe()
374 err = regmap_read(rtc->rn5t618->regmap, RN5T618_RTC_CTRL2, &ctrl2); in rc5t619_rtc_probe()
378 /* disable rtc periodic function */ in rc5t619_rtc_probe()
379 err = rc5t619_rtc_periodic_disable(&pdev->dev); in rc5t619_rtc_probe()
384 err = rc5t619_rtc_alarm_flag_clr(&pdev->dev); in rc5t619_rtc_probe()
389 rtc->rtc = devm_rtc_allocate_device(&pdev->dev); in rc5t619_rtc_probe()
390 if (IS_ERR(rtc->rtc)) { in rc5t619_rtc_probe()
391 err = PTR_ERR(rtc->rtc); in rc5t619_rtc_probe()
396 rtc->rtc->ops = &rc5t619_rtc_ops; in rc5t619_rtc_probe()
397 rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_1900; in rc5t619_rtc_probe()
398 rtc->rtc->range_max = RTC_TIMESTAMP_END_2099; in rc5t619_rtc_probe()
401 if (rtc->irq != -1) { in rc5t619_rtc_probe()
402 err = devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL, in rc5t619_rtc_probe()
405 "rtc-rc5t619", in rc5t619_rtc_probe()
406 &pdev->dev); in rc5t619_rtc_probe()
408 dev_err(&pdev->dev, "request IRQ:%d fail\n", rtc->irq); in rc5t619_rtc_probe()
409 rtc->irq = -1; in rc5t619_rtc_probe()
411 err = rc5t619_rtc_alarm_enable(&pdev->dev, 0); in rc5t619_rtc_probe()
417 device_init_wakeup(&pdev->dev, true); in rc5t619_rtc_probe()
418 enable_irq_wake(rtc->irq); in rc5t619_rtc_probe()
422 err = rc5t619_rtc_alarm_enable(&pdev->dev, 0); in rc5t619_rtc_probe()
426 dev_warn(&pdev->dev, "rc5t619 interrupt is disabled\n"); in rc5t619_rtc_probe()
429 return devm_rtc_register_device(rtc->rtc); in rc5t619_rtc_probe()
434 .name = "rc5t619-rtc",
443 .name = "rc5t619-rtc",