Lines Matching +full:cv1800b +full:- +full:rtc

1 // SPDX-License-Identifier: GPL-2.0-only
3 * rtc-cv1800.c: RTC driver for Sophgo cv1800 RTC
16 #include <linux/rtc.h>
47 regmap_read(info->rtc_map, SEC_PULSE_GEN, &reg); in cv1800_rtc_enabled()
57 regmap_update_bits(info->rtc_map, SEC_PULSE_GEN, SEL_SEC_PULSE, 0); in cv1800_rtc_enable()
64 regmap_write(info->rtc_map, ALARM_ENABLE, enabled); in cv1800_rtc_alarm_irq_enable()
74 alarm_time = rtc_tm_to_time64(&alrm->time); in cv1800_rtc_set_alarm()
78 regmap_write(info->rtc_map, ALARM_TIME, alarm_time); in cv1800_rtc_set_alarm()
80 cv1800_rtc_alarm_irq_enable(dev, alrm->enabled); in cv1800_rtc_set_alarm()
92 alarm->enabled = 0; in cv1800_rtc_read_alarm()
96 regmap_read(info->rtc_map, ALARM_ENABLE, &enabled); in cv1800_rtc_read_alarm()
98 alarm->enabled = enabled & ALARM_ENABLE_MASK; in cv1800_rtc_read_alarm()
100 regmap_read(info->rtc_map, ALARM_TIME, &time); in cv1800_rtc_read_alarm()
102 rtc_time64_to_tm(time, &alarm->time); in cv1800_rtc_read_alarm()
113 return -EINVAL; in cv1800_rtc_read_time()
115 regmap_read(info->rtc_map, SEC_CNTR_VAL, &sec); in cv1800_rtc_read_time()
129 regmap_write(info->rtc_map, SET_SEC_CNTR_VAL, sec); in cv1800_rtc_set_time()
130 regmap_write(info->rtc_map, SET_SEC_CNTR_TRIG, 1); in cv1800_rtc_set_time()
132 regmap_write(info->rtc_map, MACRO_RG_SET_T, sec); in cv1800_rtc_set_time()
143 rtc_update_irq(info->rtc_dev, 1, RTC_IRQF | RTC_AF); in cv1800_rtc_irq_handler()
145 regmap_write(info->rtc_map, ALARM_ENABLE, 0); in cv1800_rtc_irq_handler()
160 struct cv1800_rtc_priv *rtc; in cv1800_rtc_probe() local
163 rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); in cv1800_rtc_probe()
164 if (!rtc) in cv1800_rtc_probe()
165 return -ENOMEM; in cv1800_rtc_probe()
167 rtc->rtc_map = device_node_to_regmap(pdev->dev.parent->of_node); in cv1800_rtc_probe()
168 if (IS_ERR(rtc->rtc_map)) in cv1800_rtc_probe()
169 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->rtc_map), in cv1800_rtc_probe()
172 rtc->irq = platform_get_irq(pdev, 0); in cv1800_rtc_probe()
173 if (rtc->irq < 0) in cv1800_rtc_probe()
174 return rtc->irq; in cv1800_rtc_probe()
176 rtc->clk = devm_clk_get_enabled(pdev->dev.parent, "rtc"); in cv1800_rtc_probe()
177 if (IS_ERR(rtc->clk)) in cv1800_rtc_probe()
178 return dev_err_probe(&pdev->dev, PTR_ERR(rtc->clk), in cv1800_rtc_probe()
179 "rtc clk not found\n"); in cv1800_rtc_probe()
181 platform_set_drvdata(pdev, rtc); in cv1800_rtc_probe()
183 device_init_wakeup(&pdev->dev, 1); in cv1800_rtc_probe()
185 rtc->rtc_dev = devm_rtc_allocate_device(&pdev->dev); in cv1800_rtc_probe()
186 if (IS_ERR(rtc->rtc_dev)) in cv1800_rtc_probe()
187 return PTR_ERR(rtc->rtc_dev); in cv1800_rtc_probe()
189 rtc->rtc_dev->ops = &cv1800_rtc_ops; in cv1800_rtc_probe()
190 rtc->rtc_dev->range_max = U32_MAX; in cv1800_rtc_probe()
192 ret = devm_request_irq(&pdev->dev, rtc->irq, cv1800_rtc_irq_handler, in cv1800_rtc_probe()
193 IRQF_TRIGGER_HIGH, "rtc alarm", rtc); in cv1800_rtc_probe()
195 return dev_err_probe(&pdev->dev, ret, in cv1800_rtc_probe()
198 return devm_rtc_register_device(rtc->rtc_dev); in cv1800_rtc_probe()
202 { .name = "cv1800b-rtc" },
209 .name = "sophgo-cv1800-rtc",
217 MODULE_DESCRIPTION("Sophgo cv1800 RTC Driver");