Lines Matching +full:- +full:hours

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Seiko Instruments S-35390A RTC Driver
73 struct i2c_client *client = s35390a->client[reg]; in s35390a_set_reg()
76 .addr = client->addr, in s35390a_set_reg()
82 if ((i2c_transfer(client->adapter, msg, 1)) != 1) in s35390a_set_reg()
83 return -EIO; in s35390a_set_reg()
90 struct i2c_client *client = s35390a->client[reg]; in s35390a_get_reg()
93 .addr = client->addr, in s35390a_get_reg()
100 if ((i2c_transfer(client->adapter, msg, 1)) != 1) in s35390a_get_reg()
101 return -EIO; in s35390a_get_reg()
137 return -EIO; in s35390a_init()
158 * Do not communicate for 0.5 seconds since the power-on in s35390a_read_status()
176 return -EIO; in s35390a_disable_test_mode()
187 if (s35390a->twentyfourhour) in s35390a_hr2reg()
193 return 0x40 | bin2bcd(hour - 12); in s35390a_hr2reg()
200 if (s35390a->twentyfourhour) in s35390a_reg2hr()
217 dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d mday=%d, " in s35390a_rtc_set_time()
218 "mon=%d, year=%d, wday=%d\n", __func__, tm->tm_sec, in s35390a_rtc_set_time()
219 tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, in s35390a_rtc_set_time()
220 tm->tm_wday); in s35390a_rtc_set_time()
225 buf[S35390A_BYTE_YEAR] = bin2bcd(tm->tm_year - 100); in s35390a_rtc_set_time()
226 buf[S35390A_BYTE_MONTH] = bin2bcd(tm->tm_mon + 1); in s35390a_rtc_set_time()
227 buf[S35390A_BYTE_DAY] = bin2bcd(tm->tm_mday); in s35390a_rtc_set_time()
228 buf[S35390A_BYTE_WDAY] = bin2bcd(tm->tm_wday); in s35390a_rtc_set_time()
229 buf[S35390A_BYTE_HOURS] = s35390a_hr2reg(s35390a, tm->tm_hour); in s35390a_rtc_set_time()
230 buf[S35390A_BYTE_MINS] = bin2bcd(tm->tm_min); in s35390a_rtc_set_time()
231 buf[S35390A_BYTE_SECS] = bin2bcd(tm->tm_sec); in s35390a_rtc_set_time()
250 return -EINVAL; in s35390a_rtc_read_time()
260 tm->tm_sec = bcd2bin(buf[S35390A_BYTE_SECS]); in s35390a_rtc_read_time()
261 tm->tm_min = bcd2bin(buf[S35390A_BYTE_MINS]); in s35390a_rtc_read_time()
262 tm->tm_hour = s35390a_reg2hr(s35390a, buf[S35390A_BYTE_HOURS]); in s35390a_rtc_read_time()
263 tm->tm_wday = bcd2bin(buf[S35390A_BYTE_WDAY]); in s35390a_rtc_read_time()
264 tm->tm_mday = bcd2bin(buf[S35390A_BYTE_DAY]); in s35390a_rtc_read_time()
265 tm->tm_mon = bcd2bin(buf[S35390A_BYTE_MONTH]) - 1; in s35390a_rtc_read_time()
266 tm->tm_year = bcd2bin(buf[S35390A_BYTE_YEAR]) + 100; in s35390a_rtc_read_time()
268 dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d, mday=%d, " in s35390a_rtc_read_time()
269 "mon=%d, year=%d, wday=%d\n", __func__, tm->tm_sec, in s35390a_rtc_read_time()
270 tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, in s35390a_rtc_read_time()
271 tm->tm_wday); in s35390a_rtc_read_time()
283 dev_dbg(&client->dev, "%s: alm is secs=%d, mins=%d, hours=%d mday=%d, "\ in s35390a_rtc_set_alarm()
284 "mon=%d, year=%d, wday=%d\n", __func__, alm->time.tm_sec, in s35390a_rtc_set_alarm()
285 alm->time.tm_min, alm->time.tm_hour, alm->time.tm_mday, in s35390a_rtc_set_alarm()
286 alm->time.tm_mon, alm->time.tm_year, alm->time.tm_wday); in s35390a_rtc_set_alarm()
298 if (alm->enabled) in s35390a_rtc_set_alarm()
308 if (alm->time.tm_wday != -1) in s35390a_rtc_set_alarm()
309 buf[S35390A_ALRM_BYTE_WDAY] = bin2bcd(alm->time.tm_wday) | 0x80; in s35390a_rtc_set_alarm()
314 alm->time.tm_hour) | 0x80; in s35390a_rtc_set_alarm()
315 buf[S35390A_ALRM_BYTE_MINS] = bin2bcd(alm->time.tm_min) | 0x80; in s35390a_rtc_set_alarm()
317 if (alm->time.tm_hour >= 12) in s35390a_rtc_set_alarm()
345 alm->enabled = 0; in s35390a_rtc_read_alarm()
348 alm->enabled = 1; in s35390a_rtc_read_alarm()
364 alm->time.tm_wday = in s35390a_rtc_read_alarm()
368 alm->time.tm_hour = in s35390a_rtc_read_alarm()
373 alm->time.tm_min = bcd2bin(buf[S35390A_ALRM_BYTE_MINS] & ~0x80); in s35390a_rtc_read_alarm()
376 alm->time.tm_sec = 0; in s35390a_rtc_read_alarm()
378 dev_dbg(&client->dev, "%s: alm is mins=%d, hours=%d, wday=%d\n", in s35390a_rtc_read_alarm()
379 __func__, alm->time.tm_min, alm->time.tm_hour, in s35390a_rtc_read_alarm()
380 alm->time.tm_wday); in s35390a_rtc_read_alarm()
400 return -EFAULT; in s35390a_rtc_ioctl()
409 return -ENOIOCTLCMD; in s35390a_rtc_ioctl()
429 struct device *dev = &client->dev; in s35390a_probe()
431 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) in s35390a_probe()
432 return -ENODEV; in s35390a_probe()
436 return -ENOMEM; in s35390a_probe()
438 s35390a->client[0] = client; in s35390a_probe()
443 s35390a->client[i] = devm_i2c_new_dummy_device(dev, in s35390a_probe()
444 client->adapter, in s35390a_probe()
445 client->addr + i); in s35390a_probe()
446 if (IS_ERR(s35390a->client[i])) { in s35390a_probe()
448 client->addr + i); in s35390a_probe()
449 return PTR_ERR(s35390a->client[i]); in s35390a_probe()
453 s35390a->rtc = devm_rtc_allocate_device(dev); in s35390a_probe()
454 if (IS_ERR(s35390a->rtc)) in s35390a_probe()
455 return PTR_ERR(s35390a->rtc); in s35390a_probe()
464 s35390a->twentyfourhour = 1; in s35390a_probe()
466 s35390a->twentyfourhour = 0; in s35390a_probe()
486 s35390a->rtc->ops = &s35390a_rtc_ops; in s35390a_probe()
487 s35390a->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in s35390a_probe()
488 s35390a->rtc->range_max = RTC_TIMESTAMP_END_2099; in s35390a_probe()
490 set_bit(RTC_FEATURE_ALARM_RES_MINUTE, s35390a->rtc->features); in s35390a_probe()
491 clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, s35390a->rtc->features ); in s35390a_probe()
494 rtc_update_irq(s35390a->rtc, 1, RTC_AF); in s35390a_probe()
496 return devm_rtc_register_device(s35390a->rtc); in s35390a_probe()
501 .name = "rtc-s35390a",