Lines Matching refs:s35390a
64 struct s35390a { struct
70 static int s35390a_set_reg(struct s35390a *s35390a, int reg, char *buf, int len) in s35390a_set_reg() argument
72 struct i2c_client *client = s35390a->client[reg]; in s35390a_set_reg()
87 static int s35390a_get_reg(struct s35390a *s35390a, int reg, char *buf, int len) in s35390a_get_reg() argument
89 struct i2c_client *client = s35390a->client[reg]; in s35390a_get_reg()
105 static int s35390a_init(struct s35390a *s35390a) in s35390a_init() argument
121 ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); in s35390a_init()
126 ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); in s35390a_init()
147 static int s35390a_read_status(struct s35390a *s35390a, char *status1) in s35390a_read_status() argument
151 ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1); in s35390a_read_status()
170 static int s35390a_disable_test_mode(struct s35390a *s35390a) in s35390a_disable_test_mode() argument
174 if (s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)) < 0) in s35390a_disable_test_mode()
181 return s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)); in s35390a_disable_test_mode()
184 static char s35390a_hr2reg(struct s35390a *s35390a, int hour) in s35390a_hr2reg() argument
186 if (s35390a->twentyfourhour) in s35390a_hr2reg()
195 static int s35390a_reg2hr(struct s35390a *s35390a, char reg) in s35390a_reg2hr() argument
199 if (s35390a->twentyfourhour) in s35390a_reg2hr()
212 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_set_time() local
221 if (s35390a_read_status(s35390a, &status) == 1) in s35390a_rtc_set_time()
222 s35390a_init(s35390a); in s35390a_rtc_set_time()
228 buf[S35390A_BYTE_HOURS] = s35390a_hr2reg(s35390a, tm->tm_hour); in s35390a_rtc_set_time()
236 return s35390a_set_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_rtc_set_time()
242 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_read_time() local
246 if (s35390a_read_status(s35390a, &status) == 1) in s35390a_rtc_read_time()
249 err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_rtc_read_time()
259 tm->tm_hour = s35390a_reg2hr(s35390a, buf[S35390A_BYTE_HOURS]); in s35390a_rtc_read_time()
276 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_set_alarm() local
286 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
291 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
301 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
310 buf[S35390A_ALRM_BYTE_HOURS] = s35390a_hr2reg(s35390a, in s35390a_rtc_set_alarm()
320 err = s35390a_set_reg(s35390a, S35390A_CMD_INT2_REG1, buf, in s35390a_rtc_set_alarm()
329 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_read_alarm() local
333 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_read_alarm()
348 err = s35390a_get_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)); in s35390a_rtc_read_alarm()
366 s35390a_reg2hr(s35390a, in s35390a_rtc_read_alarm()
386 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_ioctl() local
393 err = s35390a_read_status(s35390a, &sts); in s35390a_rtc_ioctl()
401 err = s35390a_init(s35390a); in s35390a_rtc_ioctl()
424 struct s35390a *s35390a; in s35390a_probe() local
431 s35390a = devm_kzalloc(dev, sizeof(struct s35390a), GFP_KERNEL); in s35390a_probe()
432 if (!s35390a) in s35390a_probe()
435 s35390a->client[0] = client; in s35390a_probe()
436 i2c_set_clientdata(client, s35390a); in s35390a_probe()
440 s35390a->client[i] = devm_i2c_new_dummy_device(dev, in s35390a_probe()
443 if (IS_ERR(s35390a->client[i])) { in s35390a_probe()
446 return PTR_ERR(s35390a->client[i]); in s35390a_probe()
450 s35390a->rtc = devm_rtc_allocate_device(dev); in s35390a_probe()
451 if (IS_ERR(s35390a->rtc)) in s35390a_probe()
452 return PTR_ERR(s35390a->rtc); in s35390a_probe()
454 err_read = s35390a_read_status(s35390a, &status1); in s35390a_probe()
461 s35390a->twentyfourhour = 1; in s35390a_probe()
463 s35390a->twentyfourhour = 0; in s35390a_probe()
468 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); in s35390a_probe()
474 err = s35390a_disable_test_mode(s35390a); in s35390a_probe()
483 s35390a->rtc->ops = &s35390a_rtc_ops; in s35390a_probe()
484 s35390a->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in s35390a_probe()
485 s35390a->rtc->range_max = RTC_TIMESTAMP_END_2099; in s35390a_probe()
487 set_bit(RTC_FEATURE_ALARM_RES_MINUTE, s35390a->rtc->features); in s35390a_probe()
488 clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, s35390a->rtc->features ); in s35390a_probe()
491 rtc_update_irq(s35390a->rtc, 1, RTC_AF); in s35390a_probe()
493 return devm_rtc_register_device(s35390a->rtc); in s35390a_probe()