Lines Matching refs:rs5c
131 static int rs5c_get_regs(struct rs5c372 *rs5c) in rs5c_get_regs() argument
133 struct i2c_client *client = rs5c->client; in rs5c_get_regs()
138 .len = sizeof(rs5c->buf), in rs5c_get_regs()
139 .buf = rs5c->buf in rs5c_get_regs()
154 if (rs5c->smbus) { in rs5c_get_regs()
156 int size = sizeof(rs5c->buf) - 1; in rs5c_get_regs()
159 rs5c->buf + 1) != size) { in rs5c_get_regs()
172 rs5c->regs + 0, rs5c->regs[3], in rs5c_get_regs()
173 rs5c->regs + 4, rs5c->regs[7], in rs5c_get_regs()
174 rs5c->regs + 8, rs5c->regs + 11, in rs5c_get_regs()
175 rs5c->regs[14], rs5c->regs[15]); in rs5c_get_regs()
180 static unsigned rs5c_reg2hr(struct rs5c372 *rs5c, unsigned reg) in rs5c_reg2hr() argument
184 if (rs5c->time24) in rs5c_reg2hr()
195 static unsigned rs5c_hr2reg(struct rs5c372 *rs5c, unsigned hour) in rs5c_hr2reg() argument
197 if (rs5c->time24) in rs5c_hr2reg()
212 struct rs5c372 *rs5c = i2c_get_clientdata(client); in rs5c372_rtc_read_time() local
213 int status = rs5c_get_regs(rs5c); in rs5c372_rtc_read_time()
214 unsigned char ctrl2 = rs5c->regs[RS5C_REG_CTRL2]; in rs5c372_rtc_read_time()
219 switch (rs5c->type) { in rs5c372_rtc_read_time()
222 if ((rs5c->type == rtc_r2025sd && !(ctrl2 & R2x2x_CTRL2_XSTP)) || in rs5c372_rtc_read_time()
223 (rs5c->type == rtc_r2221tl && (ctrl2 & R2x2x_CTRL2_XSTP))) { in rs5c372_rtc_read_time()
235 tm->tm_sec = bcd2bin(rs5c->regs[RS5C372_REG_SECS] & 0x7f); in rs5c372_rtc_read_time()
236 tm->tm_min = bcd2bin(rs5c->regs[RS5C372_REG_MINS] & 0x7f); in rs5c372_rtc_read_time()
237 tm->tm_hour = rs5c_reg2hr(rs5c, rs5c->regs[RS5C372_REG_HOURS]); in rs5c372_rtc_read_time()
239 tm->tm_wday = bcd2bin(rs5c->regs[RS5C372_REG_WDAY] & 0x07); in rs5c372_rtc_read_time()
240 tm->tm_mday = bcd2bin(rs5c->regs[RS5C372_REG_DAY] & 0x3f); in rs5c372_rtc_read_time()
243 tm->tm_mon = bcd2bin(rs5c->regs[RS5C372_REG_MONTH] & 0x1f) - 1; in rs5c372_rtc_read_time()
246 tm->tm_year = bcd2bin(rs5c->regs[RS5C372_REG_YEAR]) + 100; in rs5c372_rtc_read_time()
260 struct rs5c372 *rs5c = i2c_get_clientdata(client); in rs5c372_rtc_set_time() local
274 buf[2] = rs5c_hr2reg(rs5c, tm->tm_hour); in rs5c372_rtc_set_time()
290 switch (rs5c->type) { in rs5c372_rtc_set_time()
294 if (rs5c->type == rtc_r2025sd) in rs5c372_rtc_set_time()
354 struct rs5c372 *rs5c = i2c_get_clientdata(client); in rs5c_rtc_alarm_irq_enable() local
358 buf = rs5c->regs[RS5C_REG_CTRL1]; in rs5c_rtc_alarm_irq_enable()
360 if (!rs5c->has_irq) in rs5c_rtc_alarm_irq_enable()
363 status = rs5c_get_regs(rs5c); in rs5c_rtc_alarm_irq_enable()
377 rs5c->regs[RS5C_REG_CTRL1] = buf; in rs5c_rtc_alarm_irq_enable()
395 struct rs5c372 *rs5c = i2c_get_clientdata(client); in rs5c_read_alarm() local
398 status = rs5c_get_regs(rs5c); in rs5c_read_alarm()
404 t->time.tm_min = bcd2bin(rs5c->regs[RS5C_REG_ALARM_A_MIN] & 0x7f); in rs5c_read_alarm()
405 t->time.tm_hour = rs5c_reg2hr(rs5c, rs5c->regs[RS5C_REG_ALARM_A_HOURS]); in rs5c_read_alarm()
408 t->enabled = !!(rs5c->regs[RS5C_REG_CTRL1] & RS5C_CTRL1_AALE); in rs5c_read_alarm()
409 t->pending = !!(rs5c->regs[RS5C_REG_CTRL2] & RS5C_CTRL2_AAFG); in rs5c_read_alarm()
417 struct rs5c372 *rs5c = i2c_get_clientdata(client); in rs5c_set_alarm() local
430 status = rs5c_get_regs(rs5c); in rs5c_set_alarm()
433 if (rs5c->regs[RS5C_REG_CTRL1] & RS5C_CTRL1_AALE) { in rs5c_set_alarm()
435 buf[0] = rs5c->regs[RS5C_REG_CTRL1] & ~RS5C_CTRL1_AALE; in rs5c_set_alarm()
440 rs5c->regs[RS5C_REG_CTRL1] = buf[0]; in rs5c_set_alarm()
445 buf[1] = rs5c_hr2reg(rs5c, t->time.tm_hour); in rs5c_set_alarm()
459 buf[0] = rs5c->regs[RS5C_REG_CTRL1] | RS5C_CTRL1_AALE; in rs5c_set_alarm()
462 rs5c->regs[RS5C_REG_CTRL1] = buf[0]; in rs5c_set_alarm()