Lines Matching defs:s35390a

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