Lines Matching defs:fm3130
3 * rtc-fm3130.c - RTC driver for Ramtron FM3130 I2C chip.
45 struct fm3130 {
56 { "fm3130", 0 },
67 struct fm3130 *fm3130 = dev_get_drvdata(dev);
69 fm3130->regs[FM3130_RTC_CONTROL] =
70 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
73 fm3130->regs[FM3130_RTC_CONTROL] &=
78 fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_WRITE;
81 fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_READ;
88 i2c_smbus_write_byte_data(fm3130->client,
89 FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL]);
94 struct fm3130 *fm3130 = dev_get_drvdata(dev);
97 if (!fm3130->data_valid) {
107 tmp = i2c_transfer(fm3130->client->adapter, fm3130->msg, 2);
115 dev_dbg(dev, "%s: %15ph\n", "read", fm3130->regs);
117 t->tm_sec = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
118 t->tm_min = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
119 tmp = fm3130->regs[FM3130_RTC_HOURS] & 0x3f;
121 t->tm_wday = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x07) - 1;
122 t->tm_mday = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
123 tmp = fm3130->regs[FM3130_RTC_MONTHS] & 0x1f;
127 t->tm_year = bcd2bin(fm3130->regs[FM3130_RTC_YEARS]) + 100;
141 struct fm3130 *fm3130 = dev_get_drvdata(dev);
143 u8 *buf = fm3130->regs;
169 i2c_smbus_write_byte_data(fm3130->client,
171 fm3130->regs[FM3130_RTC_SECONDS + i]);
177 if (!fm3130->data_valid)
178 fm3130->data_valid = 1;
184 struct fm3130 *fm3130 = dev_get_drvdata(dev);
188 if (!fm3130->alarm_valid) {
199 tmp = i2c_transfer(fm3130->client->adapter, &fm3130->msg[2], 2);
205 fm3130->regs[FM3130_ALARM_SECONDS],
206 fm3130->regs[FM3130_ALARM_MINUTES],
207 fm3130->regs[FM3130_ALARM_HOURS],
208 fm3130->regs[FM3130_ALARM_DATE],
209 fm3130->regs[FM3130_ALARM_MONTHS]);
211 tm->tm_sec = bcd2bin(fm3130->regs[FM3130_ALARM_SECONDS] & 0x7F);
212 tm->tm_min = bcd2bin(fm3130->regs[FM3130_ALARM_MINUTES] & 0x7F);
213 tm->tm_hour = bcd2bin(fm3130->regs[FM3130_ALARM_HOURS] & 0x3F);
214 tm->tm_mday = bcd2bin(fm3130->regs[FM3130_ALARM_DATE] & 0x3F);
215 tm->tm_mon = bcd2bin(fm3130->regs[FM3130_ALARM_MONTHS] & 0x1F);
227 fm3130->regs[FM3130_RTC_CONTROL] =
228 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
230 if ((fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_AEN) &&
231 (~fm3130->regs[FM3130_RTC_CONTROL] &
241 struct fm3130 *fm3130 = dev_get_drvdata(dev);
251 fm3130->regs[FM3130_ALARM_SECONDS] =
254 fm3130->regs[FM3130_ALARM_MINUTES] =
257 fm3130->regs[FM3130_ALARM_HOURS] =
260 fm3130->regs[FM3130_ALARM_DATE] =
263 fm3130->regs[FM3130_ALARM_MONTHS] =
267 fm3130->regs[FM3130_ALARM_SECONDS],
268 fm3130->regs[FM3130_ALARM_MINUTES],
269 fm3130->regs[FM3130_ALARM_HOURS],
270 fm3130->regs[FM3130_ALARM_DATE],
271 fm3130->regs[FM3130_ALARM_MONTHS]);
274 i2c_smbus_write_byte_data(fm3130->client,
276 fm3130->regs[FM3130_ALARM_SECONDS + i]);
278 fm3130->regs[FM3130_RTC_CONTROL] =
279 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
283 i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL,
284 (fm3130->regs[FM3130_RTC_CONTROL] &
288 i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL,
289 fm3130->regs[FM3130_RTC_CONTROL] &
295 if (!fm3130->alarm_valid)
296 fm3130->alarm_valid = 1;
303 struct fm3130 *fm3130 = dev_get_drvdata(dev);
306 fm3130->regs[FM3130_RTC_CONTROL] =
307 i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
310 enabled, fm3130->regs[FM3130_RTC_CONTROL]);
314 ret = i2c_smbus_write_byte_data(fm3130->client,
315 FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL] &
320 ret = i2c_smbus_write_byte_data(fm3130->client,
321 FM3130_RTC_CONTROL, (fm3130->regs[FM3130_RTC_CONTROL] &
346 struct fm3130 *fm3130;
355 fm3130 = devm_kzalloc(&client->dev, sizeof(struct fm3130), GFP_KERNEL);
357 if (!fm3130)
360 fm3130->client = client;
361 i2c_set_clientdata(client, fm3130);
362 fm3130->reg_addr_time = FM3130_RTC_SECONDS;
363 fm3130->reg_addr_alarm = FM3130_ALARM_SECONDS;
366 fm3130->msg[0].addr = client->addr;
367 fm3130->msg[0].flags = 0;
368 fm3130->msg[0].len = 1;
369 fm3130->msg[0].buf = &fm3130->reg_addr_time;
371 fm3130->msg[1].addr = client->addr;
372 fm3130->msg[1].flags = I2C_M_RD;
373 fm3130->msg[1].len = FM3130_CLOCK_REGS;
374 fm3130->msg[1].buf = &fm3130->regs[FM3130_RTC_SECONDS];
377 fm3130->msg[2].addr = client->addr;
378 fm3130->msg[2].flags = 0;
379 fm3130->msg[2].len = 1;
380 fm3130->msg[2].buf = &fm3130->reg_addr_alarm;
382 fm3130->msg[3].addr = client->addr;
383 fm3130->msg[3].flags = I2C_M_RD;
384 fm3130->msg[3].len = FM3130_ALARM_REGS;
385 fm3130->msg[3].buf = &fm3130->regs[FM3130_ALARM_SECONDS];
387 fm3130->alarm_valid = 0;
388 fm3130->data_valid = 0;
390 tmp = i2c_transfer(adapter, fm3130->msg, 4);
397 fm3130->regs[FM3130_RTC_CONTROL] =
399 fm3130->regs[FM3130_CAL_CONTROL] =
403 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) {
405 fm3130->regs[FM3130_RTC_CONTROL] &
411 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE ||
412 fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) {
414 fm3130->regs[FM3130_RTC_CONTROL] &
421 if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN)
423 fm3130->regs[FM3130_CAL_CONTROL] &
427 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_LB) {
429 fm3130->regs[FM3130_RTC_CONTROL] &
435 if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_POR) {
437 fm3130->regs[FM3130_RTC_CONTROL] &
445 tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
449 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
453 tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f);
457 tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
461 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f);
465 fm3130->alarm_valid = 1;
470 tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
474 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
478 tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f);
482 tmp = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x7);
486 tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
490 tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f);
494 fm3130->data_valid = 1;
498 if (!fm3130->data_valid || !fm3130->alarm_valid)
500 fm3130->regs);
504 fm3130->rtc = devm_rtc_device_register(&client->dev, client->name,
506 if (IS_ERR(fm3130->rtc)) {
507 err = PTR_ERR(fm3130->rtc);
519 .name = "rtc-fm3130",