Lines Matching refs:fm3130
48 struct fm3130 { struct
70 struct fm3130 *fm3130 = dev_get_drvdata(dev); in fm3130_rtc_mode() local
72 fm3130->regs[FM3130_RTC_CONTROL] = in fm3130_rtc_mode()
73 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL); in fm3130_rtc_mode()
76 fm3130->regs[FM3130_RTC_CONTROL] &= in fm3130_rtc_mode()
81 fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_WRITE; in fm3130_rtc_mode()
84 fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_READ; in fm3130_rtc_mode()
91 i2c_smbus_write_byte_data(fm3130->client, in fm3130_rtc_mode()
92 FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL]); in fm3130_rtc_mode()
97 struct fm3130 *fm3130 = dev_get_drvdata(dev); in fm3130_get_time() local
100 if (!fm3130->data_valid) { in fm3130_get_time()
110 tmp = i2c_transfer(to_i2c_adapter(fm3130->client->dev.parent), in fm3130_get_time()
111 fm3130->msg, 2); in fm3130_get_time()
119 dev_dbg(dev, "%s: %15ph\n", "read", fm3130->regs); in fm3130_get_time()
121 t->tm_sec = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f); in fm3130_get_time()
122 t->tm_min = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f); in fm3130_get_time()
123 tmp = fm3130->regs[FM3130_RTC_HOURS] & 0x3f; in fm3130_get_time()
125 t->tm_wday = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x07) - 1; in fm3130_get_time()
126 t->tm_mday = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f); in fm3130_get_time()
127 tmp = fm3130->regs[FM3130_RTC_MONTHS] & 0x1f; in fm3130_get_time()
131 t->tm_year = bcd2bin(fm3130->regs[FM3130_RTC_YEARS]) + 100; in fm3130_get_time()
146 struct fm3130 *fm3130 = dev_get_drvdata(dev); in fm3130_set_time() local
148 u8 *buf = fm3130->regs; in fm3130_set_time()
174 i2c_smbus_write_byte_data(fm3130->client, in fm3130_set_time()
176 fm3130->regs[FM3130_RTC_SECONDS + i]); in fm3130_set_time()
182 if (!fm3130->data_valid) in fm3130_set_time()
183 fm3130->data_valid = 1; in fm3130_set_time()
189 struct fm3130 *fm3130 = dev_get_drvdata(dev); in fm3130_read_alarm() local
193 if (!fm3130->alarm_valid) { in fm3130_read_alarm()
204 tmp = i2c_transfer(to_i2c_adapter(fm3130->client->dev.parent), in fm3130_read_alarm()
205 &fm3130->msg[2], 2); in fm3130_read_alarm()
211 fm3130->regs[FM3130_ALARM_SECONDS], in fm3130_read_alarm()
212 fm3130->regs[FM3130_ALARM_MINUTES], in fm3130_read_alarm()
213 fm3130->regs[FM3130_ALARM_HOURS], in fm3130_read_alarm()
214 fm3130->regs[FM3130_ALARM_DATE], in fm3130_read_alarm()
215 fm3130->regs[FM3130_ALARM_MONTHS]); in fm3130_read_alarm()
217 tm->tm_sec = bcd2bin(fm3130->regs[FM3130_ALARM_SECONDS] & 0x7F); in fm3130_read_alarm()
218 tm->tm_min = bcd2bin(fm3130->regs[FM3130_ALARM_MINUTES] & 0x7F); in fm3130_read_alarm()
219 tm->tm_hour = bcd2bin(fm3130->regs[FM3130_ALARM_HOURS] & 0x3F); in fm3130_read_alarm()
220 tm->tm_mday = bcd2bin(fm3130->regs[FM3130_ALARM_DATE] & 0x3F); in fm3130_read_alarm()
221 tm->tm_mon = bcd2bin(fm3130->regs[FM3130_ALARM_MONTHS] & 0x1F); in fm3130_read_alarm()
233 fm3130->regs[FM3130_RTC_CONTROL] = in fm3130_read_alarm()
234 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL); in fm3130_read_alarm()
236 if ((fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_AEN) && in fm3130_read_alarm()
237 (~fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_read_alarm()
247 struct fm3130 *fm3130 = dev_get_drvdata(dev); in fm3130_set_alarm() local
257 fm3130->regs[FM3130_ALARM_SECONDS] = in fm3130_set_alarm()
260 fm3130->regs[FM3130_ALARM_MINUTES] = in fm3130_set_alarm()
263 fm3130->regs[FM3130_ALARM_HOURS] = in fm3130_set_alarm()
266 fm3130->regs[FM3130_ALARM_DATE] = in fm3130_set_alarm()
269 fm3130->regs[FM3130_ALARM_MONTHS] = in fm3130_set_alarm()
273 fm3130->regs[FM3130_ALARM_SECONDS], in fm3130_set_alarm()
274 fm3130->regs[FM3130_ALARM_MINUTES], in fm3130_set_alarm()
275 fm3130->regs[FM3130_ALARM_HOURS], in fm3130_set_alarm()
276 fm3130->regs[FM3130_ALARM_DATE], in fm3130_set_alarm()
277 fm3130->regs[FM3130_ALARM_MONTHS]); in fm3130_set_alarm()
280 i2c_smbus_write_byte_data(fm3130->client, in fm3130_set_alarm()
282 fm3130->regs[FM3130_ALARM_SECONDS + i]); in fm3130_set_alarm()
284 fm3130->regs[FM3130_RTC_CONTROL] = in fm3130_set_alarm()
285 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL); in fm3130_set_alarm()
289 i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL, in fm3130_set_alarm()
290 (fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_set_alarm()
294 i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL, in fm3130_set_alarm()
295 fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_set_alarm()
301 if (!fm3130->alarm_valid) in fm3130_set_alarm()
302 fm3130->alarm_valid = 1; in fm3130_set_alarm()
309 struct fm3130 *fm3130 = dev_get_drvdata(dev); in fm3130_alarm_irq_enable() local
312 fm3130->regs[FM3130_RTC_CONTROL] = in fm3130_alarm_irq_enable()
313 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL); in fm3130_alarm_irq_enable()
316 enabled, fm3130->regs[FM3130_RTC_CONTROL]); in fm3130_alarm_irq_enable()
320 ret = i2c_smbus_write_byte_data(fm3130->client, in fm3130_alarm_irq_enable()
321 FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_alarm_irq_enable()
326 ret = i2c_smbus_write_byte_data(fm3130->client, in fm3130_alarm_irq_enable()
327 FM3130_RTC_CONTROL, (fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_alarm_irq_enable()
352 struct fm3130 *fm3130; in fm3130_probe() local
361 fm3130 = devm_kzalloc(&client->dev, sizeof(struct fm3130), GFP_KERNEL); in fm3130_probe()
363 if (!fm3130) in fm3130_probe()
366 fm3130->client = client; in fm3130_probe()
367 i2c_set_clientdata(client, fm3130); in fm3130_probe()
368 fm3130->reg_addr_time = FM3130_RTC_SECONDS; in fm3130_probe()
369 fm3130->reg_addr_alarm = FM3130_ALARM_SECONDS; in fm3130_probe()
372 fm3130->msg[0].addr = client->addr; in fm3130_probe()
373 fm3130->msg[0].flags = 0; in fm3130_probe()
374 fm3130->msg[0].len = 1; in fm3130_probe()
375 fm3130->msg[0].buf = &fm3130->reg_addr_time; in fm3130_probe()
377 fm3130->msg[1].addr = client->addr; in fm3130_probe()
378 fm3130->msg[1].flags = I2C_M_RD; in fm3130_probe()
379 fm3130->msg[1].len = FM3130_CLOCK_REGS; in fm3130_probe()
380 fm3130->msg[1].buf = &fm3130->regs[FM3130_RTC_SECONDS]; in fm3130_probe()
383 fm3130->msg[2].addr = client->addr; in fm3130_probe()
384 fm3130->msg[2].flags = 0; in fm3130_probe()
385 fm3130->msg[2].len = 1; in fm3130_probe()
386 fm3130->msg[2].buf = &fm3130->reg_addr_alarm; in fm3130_probe()
388 fm3130->msg[3].addr = client->addr; in fm3130_probe()
389 fm3130->msg[3].flags = I2C_M_RD; in fm3130_probe()
390 fm3130->msg[3].len = FM3130_ALARM_REGS; in fm3130_probe()
391 fm3130->msg[3].buf = &fm3130->regs[FM3130_ALARM_SECONDS]; in fm3130_probe()
393 fm3130->alarm_valid = 0; in fm3130_probe()
394 fm3130->data_valid = 0; in fm3130_probe()
396 tmp = i2c_transfer(adapter, fm3130->msg, 4); in fm3130_probe()
403 fm3130->regs[FM3130_RTC_CONTROL] = in fm3130_probe()
405 fm3130->regs[FM3130_CAL_CONTROL] = in fm3130_probe()
409 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) { in fm3130_probe()
411 fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_probe()
417 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE || in fm3130_probe()
418 fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) { in fm3130_probe()
420 fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_probe()
427 if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN) in fm3130_probe()
429 fm3130->regs[FM3130_CAL_CONTROL] & in fm3130_probe()
433 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_LB) { in fm3130_probe()
435 fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_probe()
441 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_POR) { in fm3130_probe()
443 fm3130->regs[FM3130_RTC_CONTROL] & in fm3130_probe()
451 tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f); in fm3130_probe()
455 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f); in fm3130_probe()
459 tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f); in fm3130_probe()
463 tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f); in fm3130_probe()
467 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f); in fm3130_probe()
471 fm3130->alarm_valid = 1; in fm3130_probe()
476 tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f); in fm3130_probe()
480 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f); in fm3130_probe()
484 tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f); in fm3130_probe()
488 tmp = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x7); in fm3130_probe()
492 tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f); in fm3130_probe()
496 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f); in fm3130_probe()
500 fm3130->data_valid = 1; in fm3130_probe()
504 if (!fm3130->data_valid || !fm3130->alarm_valid) in fm3130_probe()
506 fm3130->regs); in fm3130_probe()
510 fm3130->rtc = devm_rtc_device_register(&client->dev, client->name, in fm3130_probe()
512 if (IS_ERR(fm3130->rtc)) { in fm3130_probe()
513 err = PTR_ERR(fm3130->rtc); in fm3130_probe()