fm3130
tmp = i2c_transfer(fm3130->client->adapter, fm3130->msg, 2);
dev_dbg(dev, "%s: %15ph\n", "read", fm3130->regs);
t->tm_sec = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
t->tm_min = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
tmp = fm3130->regs[FM3130_RTC_HOURS] & 0x3f;
t->tm_wday = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x07) - 1;
t->tm_mday = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
tmp = fm3130->regs[FM3130_RTC_MONTHS] & 0x1f;
t->tm_year = bcd2bin(fm3130->regs[FM3130_RTC_YEARS]) + 100;
struct fm3130 *fm3130 = dev_get_drvdata(dev);
u8 *buf = fm3130->regs;
i2c_smbus_write_byte_data(fm3130->client,
fm3130->regs[FM3130_RTC_SECONDS + i]);
if (!fm3130->data_valid)
fm3130->data_valid = 1;
struct fm3130 *fm3130 = dev_get_drvdata(dev);
if (!fm3130->alarm_valid) {
tmp = i2c_transfer(fm3130->client->adapter, &fm3130->msg[2], 2);
fm3130->regs[FM3130_ALARM_SECONDS],
fm3130->regs[FM3130_ALARM_MINUTES],
fm3130->regs[FM3130_ALARM_HOURS],
fm3130->regs[FM3130_ALARM_DATE],
fm3130->regs[FM3130_ALARM_MONTHS]);
tm->tm_sec = bcd2bin(fm3130->regs[FM3130_ALARM_SECONDS] & 0x7F);
tm->tm_min = bcd2bin(fm3130->regs[FM3130_ALARM_MINUTES] & 0x7F);
tm->tm_hour = bcd2bin(fm3130->regs[FM3130_ALARM_HOURS] & 0x3F);
tm->tm_mday = bcd2bin(fm3130->regs[FM3130_ALARM_DATE] & 0x3F);
tm->tm_mon = bcd2bin(fm3130->regs[FM3130_ALARM_MONTHS] & 0x1F);
fm3130->regs[FM3130_RTC_CONTROL] =
i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
if ((fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_AEN) &&
(~fm3130->regs[FM3130_RTC_CONTROL] &
struct fm3130 *fm3130 = dev_get_drvdata(dev);
fm3130->regs[FM3130_ALARM_SECONDS] =
fm3130->regs[FM3130_ALARM_MINUTES] =
fm3130->regs[FM3130_ALARM_HOURS] =
fm3130->regs[FM3130_ALARM_DATE] =
fm3130->regs[FM3130_ALARM_MONTHS] =
fm3130->regs[FM3130_ALARM_SECONDS],
fm3130->regs[FM3130_ALARM_MINUTES],
fm3130->regs[FM3130_ALARM_HOURS],
fm3130->regs[FM3130_ALARM_DATE],
fm3130->regs[FM3130_ALARM_MONTHS]);
i2c_smbus_write_byte_data(fm3130->client,
fm3130->regs[FM3130_ALARM_SECONDS + i]);
fm3130->regs[FM3130_RTC_CONTROL] =
i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL,
(fm3130->regs[FM3130_RTC_CONTROL] &
i2c_smbus_write_byte_data(fm3130->client, FM3130_RTC_CONTROL,
fm3130->regs[FM3130_RTC_CONTROL] &
if (!fm3130->alarm_valid)
fm3130->alarm_valid = 1;
struct fm3130 *fm3130 = dev_get_drvdata(dev);
fm3130->regs[FM3130_RTC_CONTROL] =
i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
enabled, fm3130->regs[FM3130_RTC_CONTROL]);
ret = i2c_smbus_write_byte_data(fm3130->client,
FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL] &
ret = i2c_smbus_write_byte_data(fm3130->client,
FM3130_RTC_CONTROL, (fm3130->regs[FM3130_RTC_CONTROL] &
struct fm3130 *fm3130;
fm3130 = devm_kzalloc(&client->dev, sizeof(struct fm3130), GFP_KERNEL);
if (!fm3130)
fm3130->client = client;
i2c_set_clientdata(client, fm3130);
fm3130->reg_addr_time = FM3130_RTC_SECONDS;
fm3130->reg_addr_alarm = FM3130_ALARM_SECONDS;
fm3130->msg[0].addr = client->addr;
fm3130->msg[0].flags = 0;
fm3130->msg[0].len = 1;
fm3130->msg[0].buf = &fm3130->reg_addr_time;
fm3130->msg[1].addr = client->addr;
fm3130->msg[1].flags = I2C_M_RD;
fm3130->msg[1].len = FM3130_CLOCK_REGS;
fm3130->msg[1].buf = &fm3130->regs[FM3130_RTC_SECONDS];
fm3130->msg[2].addr = client->addr;
fm3130->msg[2].flags = 0;
fm3130->msg[2].len = 1;
fm3130->msg[2].buf = &fm3130->reg_addr_alarm;
fm3130->msg[3].addr = client->addr;
fm3130->msg[3].flags = I2C_M_RD;
fm3130->msg[3].len = FM3130_ALARM_REGS;
fm3130->msg[3].buf = &fm3130->regs[FM3130_ALARM_SECONDS];
fm3130->alarm_valid = 0;
fm3130->data_valid = 0;
tmp = i2c_transfer(adapter, fm3130->msg, 4);
fm3130->regs[FM3130_RTC_CONTROL] =
fm3130->regs[FM3130_CAL_CONTROL] =
if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_CAL) {
fm3130->regs[FM3130_RTC_CONTROL] &
if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_WRITE ||
fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_READ) {
fm3130->regs[FM3130_RTC_CONTROL] &
if (fm3130->regs[FM3130_CAL_CONTROL] & FM3130_CAL_CONTROL_BIT_nOSCEN)
fm3130->regs[FM3130_CAL_CONTROL] &
if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_LB) {
fm3130->regs[FM3130_RTC_CONTROL] &
if (fm3130->regs[FM3130_RTC_CONTROL] & FM3130_RTC_CONTROL_BIT_POR) {
fm3130->regs[FM3130_RTC_CONTROL] &
tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f);
fm3130->alarm_valid = 1;
tmp = bcd2bin(fm3130->regs[FM3130_RTC_SECONDS] & 0x7f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_MINUTES] & 0x7f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_HOURS] & 0x3f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_DAY] & 0x7);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_DATE] & 0x3f);
tmp = bcd2bin(fm3130->regs[FM3130_RTC_MONTHS] & 0x1f);
fm3130->data_valid = 1;
if (!fm3130->data_valid || !fm3130->alarm_valid)
fm3130->regs);
fm3130->rtc = devm_rtc_device_register(&client->dev, client->name,
if (IS_ERR(fm3130->rtc)) {
err = PTR_ERR(fm3130->rtc);
struct fm3130 *fm3130 = dev_get_drvdata(dev);
fm3130->regs[FM3130_RTC_CONTROL] =
i2c_smbus_read_byte_data(fm3130->client, FM3130_RTC_CONTROL);
fm3130->regs[FM3130_RTC_CONTROL] &=
fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_WRITE;
fm3130->regs[FM3130_RTC_CONTROL] |= FM3130_RTC_CONTROL_BIT_READ;
i2c_smbus_write_byte_data(fm3130->client,
FM3130_RTC_CONTROL, fm3130->regs[FM3130_RTC_CONTROL]);
struct fm3130 *fm3130 = dev_get_drvdata(dev);
if (!fm3130->data_valid) {