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 err = s35390a_set_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_rtc_set_time()
245 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_read_time() local
249 if (s35390a_read_status(s35390a, &status) == 1) in s35390a_rtc_read_time()
252 err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_rtc_read_time()
262 tm->tm_hour = s35390a_reg2hr(s35390a, buf[S35390A_BYTE_HOURS]); in s35390a_rtc_read_time()
279 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_set_alarm() local
292 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
297 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
307 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_set_alarm()
316 buf[S35390A_ALRM_BYTE_HOURS] = s35390a_hr2reg(s35390a, in s35390a_rtc_set_alarm()
326 err = s35390a_set_reg(s35390a, S35390A_CMD_INT2_REG1, buf, in s35390a_rtc_set_alarm()
335 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_read_alarm() local
339 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_rtc_read_alarm()
354 err = s35390a_get_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)); in s35390a_rtc_read_alarm()
372 s35390a_reg2hr(s35390a, in s35390a_rtc_read_alarm()
392 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_rtc_ioctl() local
399 err = s35390a_read_status(s35390a, &sts); in s35390a_rtc_ioctl()
407 err = s35390a_init(s35390a); in s35390a_rtc_ioctl()
431 struct s35390a *s35390a; in s35390a_probe() local
438 s35390a = devm_kzalloc(dev, sizeof(struct s35390a), GFP_KERNEL); in s35390a_probe()
439 if (!s35390a) in s35390a_probe()
442 s35390a->client[0] = client; in s35390a_probe()
443 i2c_set_clientdata(client, s35390a); in s35390a_probe()
447 s35390a->client[i] = devm_i2c_new_dummy_device(dev, in s35390a_probe()
450 if (IS_ERR(s35390a->client[i])) { in s35390a_probe()
453 return PTR_ERR(s35390a->client[i]); in s35390a_probe()
457 s35390a->rtc = devm_rtc_allocate_device(dev); in s35390a_probe()
458 if (IS_ERR(s35390a->rtc)) in s35390a_probe()
459 return PTR_ERR(s35390a->rtc); in s35390a_probe()
461 err_read = s35390a_read_status(s35390a, &status1); in s35390a_probe()
468 s35390a->twentyfourhour = 1; in s35390a_probe()
470 s35390a->twentyfourhour = 0; in s35390a_probe()
475 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); in s35390a_probe()
481 err = s35390a_disable_test_mode(s35390a); in s35390a_probe()
490 s35390a->rtc->ops = &s35390a_rtc_ops; in s35390a_probe()
491 s35390a->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; in s35390a_probe()
492 s35390a->rtc->range_max = RTC_TIMESTAMP_END_2099; in s35390a_probe()
495 s35390a->rtc->uie_unsupported = 1; in s35390a_probe()
498 rtc_update_irq(s35390a->rtc, 1, RTC_AF); in s35390a_probe()
500 return rtc_register_device(s35390a->rtc); in s35390a_probe()