Lines Matching refs:s35390a
65 struct s35390a { struct
71 static int s35390a_set_reg(struct s35390a *s35390a, int reg, char *buf, int len) in s35390a_set_reg() argument
73 struct i2c_client *client = s35390a->client[reg]; in s35390a_set_reg()
88 static int s35390a_get_reg(struct s35390a *s35390a, int reg, char *buf, int len) in s35390a_get_reg() argument
90 struct i2c_client *client = s35390a->client[reg]; in s35390a_get_reg()
106 static int s35390a_init(struct s35390a *s35390a) in s35390a_init() argument
122 ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); in s35390a_init()
127 ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); in s35390a_init()
148 static int s35390a_read_status(struct s35390a *s35390a, char *status1) in s35390a_read_status() argument
152 ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1); in s35390a_read_status()
171 static int s35390a_disable_test_mode(struct s35390a *s35390a) in s35390a_disable_test_mode() argument
175 if (s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)) < 0) in s35390a_disable_test_mode()
182 return s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)); in s35390a_disable_test_mode()
185 static char s35390a_hr2reg(struct s35390a *s35390a, int hour) in s35390a_hr2reg() argument
187 if (s35390a->twentyfourhour) in s35390a_hr2reg()
196 static int s35390a_reg2hr(struct s35390a *s35390a, char reg) in s35390a_reg2hr() argument
200 if (s35390a->twentyfourhour) in s35390a_reg2hr()
213 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_set_time() local
222 if (s35390a_read_status(s35390a, &status) == 1) in s35390a_rtc_set_time()
223 s35390a_init(s35390a); in s35390a_rtc_set_time()
229 buf[S35390A_BYTE_HOURS] = s35390a_hr2reg(s35390a, tm->tm_hour); in s35390a_rtc_set_time()
237 return s35390a_set_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_rtc_set_time()
243 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_read_time() local
247 if (s35390a_read_status(s35390a, &status) == 1) in s35390a_rtc_read_time()
250 err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_rtc_read_time()
260 tm->tm_hour = s35390a_reg2hr(s35390a, buf[S35390A_BYTE_HOURS]); in s35390a_rtc_read_time()
277 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_set_alarm() local
287 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
292 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
302 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
311 buf[S35390A_ALRM_BYTE_HOURS] = s35390a_hr2reg(s35390a, in s35390a_rtc_set_alarm()
321 err = s35390a_set_reg(s35390a, S35390A_CMD_INT2_REG1, buf, in s35390a_rtc_set_alarm()
330 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_read_alarm() local
334 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_read_alarm()
349 err = s35390a_get_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)); in s35390a_rtc_read_alarm()
367 s35390a_reg2hr(s35390a, in s35390a_rtc_read_alarm()
387 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_ioctl() local
394 err = s35390a_read_status(s35390a, &sts); in s35390a_rtc_ioctl()
402 err = s35390a_init(s35390a); in s35390a_rtc_ioctl()
425 struct s35390a *s35390a; in s35390a_probe() local
432 s35390a = devm_kzalloc(dev, sizeof(struct s35390a), GFP_KERNEL); in s35390a_probe()
433 if (!s35390a) in s35390a_probe()
436 s35390a->client[0] = client; in s35390a_probe()
437 i2c_set_clientdata(client, s35390a); in s35390a_probe()
441 s35390a->client[i] = devm_i2c_new_dummy_device(dev, in s35390a_probe()
444 if (IS_ERR(s35390a->client[i])) { in s35390a_probe()
447 return PTR_ERR(s35390a->client[i]); in s35390a_probe()
451 s35390a->rtc = devm_rtc_allocate_device(dev); in s35390a_probe()
452 if (IS_ERR(s35390a->rtc)) in s35390a_probe()
453 return PTR_ERR(s35390a->rtc); in s35390a_probe()
455 err_read = s35390a_read_status(s35390a, &status1); in s35390a_probe()
462 s35390a->twentyfourhour = 1; in s35390a_probe()
464 s35390a->twentyfourhour = 0; in s35390a_probe()
469 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); in s35390a_probe()
475 err = s35390a_disable_test_mode(s35390a); in s35390a_probe()
484 s35390a->rtc->ops = &s35390a_rtc_ops; in s35390a_probe()
485 s35390a->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in s35390a_probe()
486 s35390a->rtc->range_max = RTC_TIMESTAMP_END_2099; in s35390a_probe()
488 set_bit(RTC_FEATURE_ALARM_RES_MINUTE, s35390a->rtc->features); in s35390a_probe()
489 clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, s35390a->rtc->features ); in s35390a_probe()
492 rtc_update_irq(s35390a->rtc, 1, RTC_AF); in s35390a_probe()
494 return devm_rtc_register_device(s35390a->rtc); in s35390a_probe()