Lines Matching refs:rv3028
105 struct rv3028_data *rv3028 = dev_get_drvdata(dev->parent);
107 regmap_update_bits(rv3028->regmap, RV3028_EVT_CTRL, RV3028_EVT_CTRL_TSR,
116 struct rv3028_data *rv3028 = dev_get_drvdata(dev->parent);
121 ret = regmap_read(rv3028->regmap, RV3028_TS_COUNT, &count);
128 ret = regmap_bulk_read(rv3028->regmap, RV3028_TS_SEC, date,
153 struct rv3028_data *rv3028 = dev_get_drvdata(dev->parent);
156 ret = regmap_read(rv3028->regmap, RV3028_TS_COUNT, &count);
175 static int rv3028_exit_eerd(struct rv3028_data *rv3028, u32 eerd)
180 return regmap_update_bits(rv3028->regmap, RV3028_CTRL1, RV3028_CTRL1_EERD, 0);
183 static int rv3028_enter_eerd(struct rv3028_data *rv3028, u32 *eerd)
188 ret = regmap_read(rv3028->regmap, RV3028_CTRL1, &ctrl1);
196 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL1,
201 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
205 rv3028_exit_eerd(rv3028, *eerd);
213 static int rv3028_update_eeprom(struct rv3028_data *rv3028, u32 eerd)
218 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, 0x0);
222 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, RV3028_EEPROM_CMD_UPDATE);
228 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
233 rv3028_exit_eerd(rv3028, eerd);
238 static int rv3028_update_cfg(struct rv3028_data *rv3028, unsigned int reg,
244 ret = rv3028_enter_eerd(rv3028, &eerd);
248 ret = regmap_update_bits(rv3028->regmap, reg, mask, val);
250 rv3028_exit_eerd(rv3028, eerd);
254 return rv3028_update_eeprom(rv3028, eerd);
259 struct rv3028_data *rv3028 = dev_id;
263 if (regmap_read(rv3028->regmap, RV3028_STATUS, &status) < 0 ||
269 dev_warn(&rv3028->rtc->dev, "Voltage low, data loss detected.\n");
290 rtc_update_irq(rv3028->rtc, 1, events);
291 regmap_update_bits(rv3028->regmap, RV3028_STATUS, status, 0);
292 regmap_update_bits(rv3028->regmap, RV3028_CTRL2, ctrl, 0);
296 sysfs_notify(&rv3028->rtc->dev.kobj, NULL,
298 dev_warn(&rv3028->rtc->dev, "event detected");
306 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
310 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
319 ret = regmap_bulk_read(rv3028->regmap, RV3028_SEC, date, sizeof(date));
336 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
352 ret = regmap_bulk_write(rv3028->regmap, RV3028_SEC, date,
357 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
365 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
369 ret = regmap_bulk_read(rv3028->regmap, RV3028_ALARM_MIN, alarmvals,
374 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
378 ret = regmap_read(rv3028->regmap, RV3028_CTRL2, &ctrl);
395 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
408 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
417 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
422 ret = regmap_bulk_write(rv3028->regmap, RV3028_ALARM_MIN, alarmvals,
428 if (rv3028->rtc->uie_rtctimer.enabled)
430 if (rv3028->rtc->aie_timer.enabled)
434 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
442 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
446 if (rv3028->rtc->uie_rtctimer.enabled)
448 if (rv3028->rtc->aie_timer.enabled)
452 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
457 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
467 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
470 ret = regmap_read(rv3028->regmap, RV3028_OFFSET, &value);
476 ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value);
489 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
496 ret = rv3028_enter_eerd(rv3028, &eerd);
500 ret = regmap_write(rv3028->regmap, RV3028_OFFSET, offset >> 1);
504 ret = regmap_update_bits(rv3028->regmap, RV3028_BACKUP, BIT(7),
509 return rv3028_update_eeprom(rv3028, eerd);
512 rv3028_exit_eerd(rv3028, eerd);
520 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
525 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
552 struct rv3028_data *rv3028 = priv;
557 ret = rv3028_enter_eerd(rv3028, &eerd);
562 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_ADDR, offset + i);
566 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_DATA, buf[i]);
570 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, 0x0);
574 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD,
581 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
590 rv3028_exit_eerd(rv3028, eerd);
598 struct rv3028_data *rv3028 = priv;
603 ret = rv3028_enter_eerd(rv3028, &eerd);
608 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_ADDR, offset + i);
612 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, 0x0);
616 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD,
621 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
628 ret = regmap_read(rv3028->regmap, RV3028_EEPROM_DATA, &data);
635 rv3028_exit_eerd(rv3028, eerd);
656 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
658 ret = regmap_read(rv3028->regmap, RV3028_CLKOUT, &clkout);
683 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
685 ret = regmap_read(rv3028->regmap, RV3028_CLKOUT, &enabled);
689 ret = regmap_write(rv3028->regmap, RV3028_CLKOUT, 0x0);
697 return rv3028_update_cfg(rv3028, RV3028_CLKOUT, 0xff,
705 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
707 return regmap_write(rv3028->regmap, RV3028_CLKOUT,
713 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
715 regmap_write(rv3028->regmap, RV3028_CLKOUT, 0x0);
716 regmap_update_bits(rv3028->regmap, RV3028_STATUS,
723 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
725 ret = regmap_read(rv3028->regmap, RV3028_CLKOUT, &clkout);
741 static int rv3028_clkout_register_clk(struct rv3028_data *rv3028,
749 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
754 init.name = "rv3028-clkout";
759 rv3028->clkout_hw.init = &init;
765 clk = devm_clk_register(&client->dev, &rv3028->clkout_hw);
789 struct rv3028_data *rv3028;
811 rv3028 = devm_kzalloc(&client->dev, sizeof(struct rv3028_data),
813 if (!rv3028)
816 rv3028->regmap = devm_regmap_init_i2c(client, ®map_config);
817 if (IS_ERR(rv3028->regmap))
818 return PTR_ERR(rv3028->regmap);
820 i2c_set_clientdata(client, rv3028);
822 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
832 rv3028->rtc = devm_rtc_allocate_device(&client->dev);
833 if (IS_ERR(rv3028->rtc))
834 return PTR_ERR(rv3028->rtc);
840 "rv3028", rv3028);
851 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL1,
857 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
873 ret = rv3028_update_cfg(rv3028, RV3028_BACKUP, RV3028_BACKUP_TCE |
882 ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group);
886 rv3028->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
887 rv3028->rtc->range_max = RTC_TIMESTAMP_END_2099;
888 rv3028->rtc->ops = &rv3028_rtc_ops;
889 ret = rtc_register_device(rv3028->rtc);
893 nvmem_cfg.priv = rv3028->regmap;
894 rtc_nvmem_register(rv3028->rtc, &nvmem_cfg);
895 eeprom_cfg.priv = rv3028;
896 rtc_nvmem_register(rv3028->rtc, &eeprom_cfg);
898 rv3028->rtc->max_user_freq = 1;
901 rv3028_clkout_register_clk(rv3028, client);
907 { .compatible = "microcrystal,rv3028", },
914 .name = "rtc-rv3028",