Lines Matching +full:start +full:- +full:year
2 * TI LP8788 MFD - rtc driver
104 return LP8788_WDAY_SET << (tm_wday - 1); in _to_lp8788_wday()
116 struct lp8788 *lp = rtc->lp; in lp8788_rtc_read_time()
126 tm->tm_sec = data[LPTIME_SEC]; in lp8788_rtc_read_time()
127 tm->tm_min = data[LPTIME_MIN]; in lp8788_rtc_read_time()
128 tm->tm_hour = data[LPTIME_HOUR]; in lp8788_rtc_read_time()
129 tm->tm_mday = data[LPTIME_MDAY]; in lp8788_rtc_read_time()
130 tm->tm_mon = data[LPTIME_MON] - LP8788_MONTH_OFFSET; in lp8788_rtc_read_time()
131 tm->tm_year = data[LPTIME_YEAR] + LP8788_BASE_YEAR - 1900; in lp8788_rtc_read_time()
132 tm->tm_wday = _to_tm_wday(data[LPTIME_WDAY]); in lp8788_rtc_read_time()
140 struct lp8788 *lp = rtc->lp; in lp8788_rtc_set_time()
141 u8 data[LPTIME_MAX - 1]; in lp8788_rtc_set_time()
142 int ret, i, year; in lp8788_rtc_set_time() local
144 year = tm->tm_year + 1900 - LP8788_BASE_YEAR; in lp8788_rtc_set_time()
145 if (year < 0) { in lp8788_rtc_set_time()
146 dev_err(lp->dev, "invalid year: %d\n", year); in lp8788_rtc_set_time()
147 return -EINVAL; in lp8788_rtc_set_time()
151 data[LPTIME_SEC] = tm->tm_sec; in lp8788_rtc_set_time()
152 data[LPTIME_MIN] = tm->tm_min; in lp8788_rtc_set_time()
153 data[LPTIME_HOUR] = tm->tm_hour; in lp8788_rtc_set_time()
154 data[LPTIME_MDAY] = tm->tm_mday; in lp8788_rtc_set_time()
155 data[LPTIME_MON] = tm->tm_mon + LP8788_MONTH_OFFSET; in lp8788_rtc_set_time()
156 data[LPTIME_YEAR] = year; in lp8788_rtc_set_time()
170 struct lp8788 *lp = rtc->lp; in lp8788_read_alarm()
171 struct rtc_time *tm = &alarm->time; in lp8788_read_alarm()
175 addr = addr_alarm_sec[rtc->alarm]; in lp8788_read_alarm()
180 tm->tm_sec = data[LPTIME_SEC]; in lp8788_read_alarm()
181 tm->tm_min = data[LPTIME_MIN]; in lp8788_read_alarm()
182 tm->tm_hour = data[LPTIME_HOUR]; in lp8788_read_alarm()
183 tm->tm_mday = data[LPTIME_MDAY]; in lp8788_read_alarm()
184 tm->tm_mon = data[LPTIME_MON] - LP8788_MONTH_OFFSET; in lp8788_read_alarm()
185 tm->tm_year = data[LPTIME_YEAR] + LP8788_BASE_YEAR - 1900; in lp8788_read_alarm()
186 tm->tm_wday = _to_tm_wday(data[LPTIME_WDAY]); in lp8788_read_alarm()
187 alarm->enabled = data[LPTIME_WDAY] & LP8788_ALM_EN_M; in lp8788_read_alarm()
195 struct lp8788 *lp = rtc->lp; in lp8788_set_alarm()
196 struct rtc_time *tm = &alarm->time; in lp8788_set_alarm()
198 int ret, i, year; in lp8788_set_alarm() local
200 year = tm->tm_year + 1900 - LP8788_BASE_YEAR; in lp8788_set_alarm()
201 if (year < 0) { in lp8788_set_alarm()
202 dev_err(lp->dev, "invalid year: %d\n", year); in lp8788_set_alarm()
203 return -EINVAL; in lp8788_set_alarm()
206 data[LPTIME_SEC] = tm->tm_sec; in lp8788_set_alarm()
207 data[LPTIME_MIN] = tm->tm_min; in lp8788_set_alarm()
208 data[LPTIME_HOUR] = tm->tm_hour; in lp8788_set_alarm()
209 data[LPTIME_MDAY] = tm->tm_mday; in lp8788_set_alarm()
210 data[LPTIME_MON] = tm->tm_mon + LP8788_MONTH_OFFSET; in lp8788_set_alarm()
211 data[LPTIME_YEAR] = year; in lp8788_set_alarm()
212 data[LPTIME_WDAY] = _to_lp8788_wday(tm->tm_wday); in lp8788_set_alarm()
215 addr = addr_alarm_sec[rtc->alarm] + i; in lp8788_set_alarm()
221 alarm->enabled = 1; in lp8788_set_alarm()
222 addr = addr_alarm_en[rtc->alarm]; in lp8788_set_alarm()
225 alarm->enabled << LP8788_ALM_EN_S); in lp8788_set_alarm()
231 struct lp8788 *lp = rtc->lp; in lp8788_alarm_irq_enable()
234 if (!rtc->irq) in lp8788_alarm_irq_enable()
235 return -EIO; in lp8788_alarm_irq_enable()
237 mask = mask_alarm_en[rtc->alarm]; in lp8788_alarm_irq_enable()
238 shift = shift_alarm_en[rtc->alarm]; in lp8788_alarm_irq_enable()
255 rtc_update_irq(rtc->rdev, 1, ALARM_IRQ_FLAG); in lp8788_alarm_irq_handler()
263 struct lp8788 *lp = rtc->lp; in lp8788_alarm_irq_register()
264 struct irq_domain *irqdm = lp->irqdm; in lp8788_alarm_irq_register()
267 rtc->irq = 0; in lp8788_alarm_irq_register()
274 if (rtc->alarm == LP8788_ALARM_1) in lp8788_alarm_irq_register()
275 irq = r->start; in lp8788_alarm_irq_register()
277 irq = r->end; in lp8788_alarm_irq_register()
279 rtc->irq = irq_create_mapping(irqdm, irq); in lp8788_alarm_irq_register()
281 return devm_request_threaded_irq(&pdev->dev, rtc->irq, NULL, in lp8788_alarm_irq_register()
288 struct lp8788 *lp = dev_get_drvdata(pdev->dev.parent); in lp8788_rtc_probe()
290 struct device *dev = &pdev->dev; in lp8788_rtc_probe()
294 return -ENOMEM; in lp8788_rtc_probe()
296 rtc->lp = lp; in lp8788_rtc_probe()
297 rtc->alarm = lp->pdata ? lp->pdata->alarm_sel : DEFAULT_ALARM_SEL; in lp8788_rtc_probe()
302 rtc->rdev = devm_rtc_device_register(dev, "lp8788_rtc", in lp8788_rtc_probe()
304 if (IS_ERR(rtc->rdev)) { in lp8788_rtc_probe()
306 return PTR_ERR(rtc->rdev); in lp8788_rtc_probe()
310 dev_warn(lp->dev, "no rtc irq handler\n"); in lp8788_rtc_probe()
326 MODULE_ALIAS("platform:lp8788-rtc");