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