Lines Matching refs:rv3028

110 	struct rv3028_data *rv3028 = dev_get_drvdata(dev->parent);
112 regmap_update_bits(rv3028->regmap, RV3028_EVT_CTRL, RV3028_EVT_CTRL_TSR,
121 struct rv3028_data *rv3028 = dev_get_drvdata(dev->parent);
126 ret = regmap_read(rv3028->regmap, RV3028_TS_COUNT, &count);
133 ret = regmap_bulk_read(rv3028->regmap, RV3028_TS_SEC, date,
158 struct rv3028_data *rv3028 = dev_get_drvdata(dev->parent);
161 ret = regmap_read(rv3028->regmap, RV3028_TS_COUNT, &count);
180 static int rv3028_exit_eerd(struct rv3028_data *rv3028, u32 eerd)
185 return regmap_update_bits(rv3028->regmap, RV3028_CTRL1, RV3028_CTRL1_EERD, 0);
188 static int rv3028_enter_eerd(struct rv3028_data *rv3028, u32 *eerd)
193 ret = regmap_read(rv3028->regmap, RV3028_CTRL1, &ctrl1);
201 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL1,
206 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
210 rv3028_exit_eerd(rv3028, *eerd);
218 static int rv3028_update_eeprom(struct rv3028_data *rv3028, u32 eerd)
223 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, 0x0);
227 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, RV3028_EEPROM_CMD_UPDATE);
233 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
238 rv3028_exit_eerd(rv3028, eerd);
243 static int rv3028_update_cfg(struct rv3028_data *rv3028, unsigned int reg,
249 ret = rv3028_enter_eerd(rv3028, &eerd);
253 ret = regmap_update_bits(rv3028->regmap, reg, mask, val);
255 rv3028_exit_eerd(rv3028, eerd);
259 return rv3028_update_eeprom(rv3028, eerd);
264 struct rv3028_data *rv3028 = dev_id;
268 if (regmap_read(rv3028->regmap, RV3028_STATUS, &status) < 0 ||
294 rtc_update_irq(rv3028->rtc, 1, events);
295 regmap_update_bits(rv3028->regmap, RV3028_STATUS, status, 0);
296 regmap_update_bits(rv3028->regmap, RV3028_CTRL2, ctrl, 0);
300 sysfs_notify(&rv3028->rtc->dev.kobj, NULL,
302 dev_warn(&rv3028->rtc->dev, "event detected");
310 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
314 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
321 ret = regmap_bulk_read(rv3028->regmap, RV3028_SEC, date, sizeof(date));
338 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
354 ret = regmap_bulk_write(rv3028->regmap, RV3028_SEC, date,
359 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
367 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
371 ret = regmap_bulk_read(rv3028->regmap, RV3028_ALARM_MIN, alarmvals,
376 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
380 ret = regmap_read(rv3028->regmap, RV3028_CTRL2, &ctrl);
397 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
410 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
419 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
424 ret = regmap_bulk_write(rv3028->regmap, RV3028_ALARM_MIN, alarmvals,
430 if (rv3028->rtc->uie_rtctimer.enabled)
432 if (rv3028->rtc->aie_timer.enabled)
436 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
444 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
448 if (rv3028->rtc->uie_rtctimer.enabled)
450 if (rv3028->rtc->aie_timer.enabled)
454 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
459 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
469 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
472 ret = regmap_read(rv3028->regmap, RV3028_OFFSET, &value);
478 ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value);
491 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
498 ret = rv3028_enter_eerd(rv3028, &eerd);
502 ret = regmap_write(rv3028->regmap, RV3028_OFFSET, offset >> 1);
506 ret = regmap_update_bits(rv3028->regmap, RV3028_BACKUP, BIT(7),
511 return rv3028_update_eeprom(rv3028, eerd);
514 rv3028_exit_eerd(rv3028, eerd);
522 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
528 ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &value);
555 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
574 return rv3028_update_cfg(rv3028, RV3028_BACKUP, RV3028_BACKUP_BSM,
586 struct rv3028_data *rv3028 = dev_get_drvdata(dev);
591 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
618 struct rv3028_data *rv3028 = priv;
623 ret = rv3028_enter_eerd(rv3028, &eerd);
628 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_ADDR, offset + i);
632 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_DATA, buf[i]);
636 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, 0x0);
640 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD,
647 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
656 rv3028_exit_eerd(rv3028, eerd);
664 struct rv3028_data *rv3028 = priv;
669 ret = rv3028_enter_eerd(rv3028, &eerd);
674 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_ADDR, offset + i);
678 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD, 0x0);
682 ret = regmap_write(rv3028->regmap, RV3028_EEPROM_CMD,
687 ret = regmap_read_poll_timeout(rv3028->regmap, RV3028_STATUS, status,
694 ret = regmap_read(rv3028->regmap, RV3028_EEPROM_DATA, &data);
701 rv3028_exit_eerd(rv3028, eerd);
722 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
724 ret = regmap_read(rv3028->regmap, RV3028_CLKOUT, &clkout);
749 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
751 ret = regmap_read(rv3028->regmap, RV3028_CLKOUT, &enabled);
755 ret = regmap_write(rv3028->regmap, RV3028_CLKOUT, 0x0);
763 return rv3028_update_cfg(rv3028, RV3028_CLKOUT, 0xff,
771 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
773 return regmap_write(rv3028->regmap, RV3028_CLKOUT,
779 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
781 regmap_write(rv3028->regmap, RV3028_CLKOUT, 0x0);
782 regmap_update_bits(rv3028->regmap, RV3028_STATUS,
789 struct rv3028_data *rv3028 = clkout_hw_to_rv3028(hw);
791 ret = regmap_read(rv3028->regmap, RV3028_CLKOUT, &clkout);
807 static int rv3028_clkout_register_clk(struct rv3028_data *rv3028,
815 ret = regmap_update_bits(rv3028->regmap, RV3028_STATUS,
820 init.name = "rv3028-clkout";
825 rv3028->clkout_hw.init = &init;
831 clk = devm_clk_register(&client->dev, &rv3028->clkout_hw);
858 static u8 rv3028_set_trickle_charger(struct rv3028_data *rv3028,
864 ret = regmap_read(rv3028->regmap, RV3028_BACKUP, &val_old);
907 ret = rv3028_update_cfg(rv3028, RV3028_BACKUP, RV3028_BACKUP_TCE |
918 struct rv3028_data *rv3028;
939 rv3028 = devm_kzalloc(&client->dev, sizeof(struct rv3028_data),
941 if (!rv3028)
944 rv3028->regmap = devm_regmap_init_i2c(client, &regmap_config);
945 if (IS_ERR(rv3028->regmap))
946 return PTR_ERR(rv3028->regmap);
948 i2c_set_clientdata(client, rv3028);
950 ret = regmap_read(rv3028->regmap, RV3028_STATUS, &status);
957 rv3028->rtc = devm_rtc_allocate_device(&client->dev);
958 if (IS_ERR(rv3028->rtc))
959 return PTR_ERR(rv3028->rtc);
976 "rv3028", rv3028);
983 clear_bit(RTC_FEATURE_ALARM, rv3028->rtc->features);
985 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL1,
991 ret = regmap_update_bits(rv3028->regmap, RV3028_CTRL2,
997 ret = rv3028_set_trickle_charger(rv3028, client);
1001 ret = rtc_add_group(rv3028->rtc, &rv3028_attr_group);
1005 set_bit(RTC_FEATURE_BACKUP_SWITCH_MODE, rv3028->rtc->features);
1007 rv3028->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
1008 rv3028->rtc->range_max = RTC_TIMESTAMP_END_2099;
1009 rv3028->rtc->ops = &rv3028_rtc_ops;
1010 ret = devm_rtc_register_device(rv3028->rtc);
1014 nvmem_cfg.priv = rv3028->regmap;
1015 devm_rtc_nvmem_register(rv3028->rtc, &nvmem_cfg);
1016 eeprom_cfg.priv = rv3028;
1017 devm_rtc_nvmem_register(rv3028->rtc, &eeprom_cfg);
1019 rv3028->rtc->max_user_freq = 1;
1022 rv3028_clkout_register_clk(rv3028, client);
1034 { .compatible = "microcrystal,rv3028", },
1040 { .name = "rv3028", },
1047 .name = "rtc-rv3028",