Lines Matching refs:s35390a
61 struct s35390a { struct
67 static int s35390a_set_reg(struct s35390a *s35390a, int reg, char *buf, int len) in s35390a_set_reg() argument
69 struct i2c_client *client = s35390a->client[reg]; in s35390a_set_reg()
84 static int s35390a_get_reg(struct s35390a *s35390a, int reg, char *buf, int len) in s35390a_get_reg() argument
86 struct i2c_client *client = s35390a->client[reg]; in s35390a_get_reg()
107 static int s35390a_reset(struct s35390a *s35390a, char *status1) in s35390a_reset() argument
113 ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1); in s35390a_reset()
140 ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); in s35390a_reset()
145 ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); in s35390a_reset()
161 static int s35390a_disable_test_mode(struct s35390a *s35390a) in s35390a_disable_test_mode() argument
165 if (s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)) < 0) in s35390a_disable_test_mode()
172 return s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)); in s35390a_disable_test_mode()
175 static char s35390a_hr2reg(struct s35390a *s35390a, int hour) in s35390a_hr2reg() argument
177 if (s35390a->twentyfourhour) in s35390a_hr2reg()
186 static int s35390a_reg2hr(struct s35390a *s35390a, char reg) in s35390a_reg2hr() argument
190 if (s35390a->twentyfourhour) in s35390a_reg2hr()
202 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_set_datetime() local
215 buf[S35390A_BYTE_HOURS] = s35390a_hr2reg(s35390a, tm->tm_hour); in s35390a_set_datetime()
223 err = s35390a_set_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_set_datetime()
230 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_get_datetime() local
234 err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); in s35390a_get_datetime()
244 tm->tm_hour = s35390a_reg2hr(s35390a, buf[S35390A_BYTE_HOURS]); in s35390a_get_datetime()
260 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_set_alarm() local
270 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_set_alarm()
275 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &sts, sizeof(sts)); in s35390a_set_alarm()
288 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_set_alarm()
297 buf[S35390A_ALRM_BYTE_HOURS] = s35390a_hr2reg(s35390a, in s35390a_set_alarm()
307 err = s35390a_set_reg(s35390a, S35390A_CMD_INT2_REG1, buf, in s35390a_set_alarm()
315 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_read_alarm() local
333 err = s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); in s35390a_read_alarm()
348 err = s35390a_get_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)); in s35390a_read_alarm()
366 s35390a_reg2hr(s35390a, in s35390a_read_alarm()
417 struct s35390a *s35390a; in s35390a_probe() local
426 s35390a = devm_kzalloc(&client->dev, sizeof(struct s35390a), in s35390a_probe()
428 if (!s35390a) { in s35390a_probe()
433 s35390a->client[0] = client; in s35390a_probe()
434 i2c_set_clientdata(client, s35390a); in s35390a_probe()
438 s35390a->client[i] = i2c_new_dummy(client->adapter, in s35390a_probe()
440 if (!s35390a->client[i]) { in s35390a_probe()
448 err_reset = s35390a_reset(s35390a, &status1); in s35390a_probe()
456 s35390a->twentyfourhour = 1; in s35390a_probe()
458 s35390a->twentyfourhour = 0; in s35390a_probe()
463 err = s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); in s35390a_probe()
469 err = s35390a_disable_test_mode(s35390a); in s35390a_probe()
481 s35390a->rtc = devm_rtc_device_register(&client->dev, in s35390a_probe()
485 if (IS_ERR(s35390a->rtc)) { in s35390a_probe()
486 err = PTR_ERR(s35390a->rtc); in s35390a_probe()
491 rtc_update_irq(s35390a->rtc, 1, RTC_AF); in s35390a_probe()
497 if (s35390a->client[i]) in s35390a_probe()
498 i2c_unregister_device(s35390a->client[i]); in s35390a_probe()
507 struct s35390a *s35390a = i2c_get_clientdata(client); in s35390a_remove() local
510 if (s35390a->client[i]) in s35390a_remove()
511 i2c_unregister_device(s35390a->client[i]); in s35390a_remove()