Lines Matching refs:ds1307
3 * rtc-ds1307.c - RTC driver for some mostly-compatible I2C chips.
17 #include <linux/rtc/ds1307.h>
169 struct ds1307 {
195 u8 (*do_trickle_setup)(struct ds1307 *, u32,
212 struct ds1307 *ds1307 = dev_get_drvdata(dev);
214 const struct chip_desc *chip = &chips[ds1307->type];
217 if (ds1307->type == rx_8130) {
219 ret = regmap_read(ds1307->regmap, RX8130_REG_FLAG, ®flag);
232 ret = regmap_bulk_read(ds1307->regmap, chip->offset, regs,
242 if (ds1307->type == m41t0 &&
249 switch (ds1307->type) {
262 ret = regmap_read(ds1307->regmap, DS1307_REG_CONTROL, &tmp);
272 ret = regmap_read(ds1307->regmap, DS1340_REG_FLAG, &tmp);
279 ret = regmap_read(ds1307->regmap, DS1388_REG_FLAG, &tmp);
299 if (ds1307->type == rx_8130)
323 struct ds1307 *ds1307 = dev_get_drvdata(dev);
324 const struct chip_desc *chip = &chips[ds1307->type];
350 if (ds1307->type == rx_8130)
366 switch (ds1307->type) {
369 regmap_update_bits(ds1307->regmap, DS1307_REG_CONTROL,
373 regmap_update_bits(ds1307->regmap, DS1340_REG_FLAG,
377 regmap_update_bits(ds1307->regmap, DS1388_REG_FLAG,
395 result = regmap_bulk_write(ds1307->regmap, chip->offset, regs,
402 if (ds1307->type == rx_8130) {
404 result = regmap_write(ds1307->regmap, RX8130_REG_FLAG,
417 struct ds1307 *ds1307 = dev_get_drvdata(dev);
421 if (!test_bit(HAS_ALARM, &ds1307->flags))
425 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS,
459 struct ds1307 *ds1307 = dev_get_drvdata(dev);
464 if (!test_bit(HAS_ALARM, &ds1307->flags))
474 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs,
501 ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs,
512 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, regs[7]);
520 struct ds1307 *ds1307 = dev_get_drvdata(dev);
522 if (!test_bit(HAS_ALARM, &ds1307->flags))
525 return regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL,
530 static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307, u32 ohms, bool diode)
548 dev_warn(ds1307->dev,
555 static u8 do_trickle_setup_rx8130(struct ds1307 *ds1307, u32 ohms, bool diode)
567 struct ds1307 *ds1307 = dev_id;
568 struct mutex *lock = &ds1307->rtc->ops_lock;
575 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
584 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
589 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
599 struct ds1307 *ds1307 = dev_get_drvdata(dev);
603 if (!test_bit(HAS_ALARM, &ds1307->flags))
607 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald,
613 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
641 struct ds1307 *ds1307 = dev_get_drvdata(dev);
645 if (!test_bit(HAS_ALARM, &ds1307->flags))
655 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
664 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl,
674 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald,
684 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, ctl[2]);
689 struct ds1307 *ds1307 = dev_get_drvdata(dev);
692 if (!test_bit(HAS_ALARM, &ds1307->flags))
695 ret = regmap_read(ds1307->regmap, RX8130_REG_CONTROL0, ®);
704 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, reg);
709 struct ds1307 *ds1307 = dev_id;
710 struct mutex *lock = &ds1307->rtc->ops_lock;
716 ret = regmap_read(ds1307->regmap, MCP794XX_REG_ALARM0_CTRL, ®);
722 ret = regmap_write(ds1307->regmap, MCP794XX_REG_ALARM0_CTRL, reg);
727 ret = regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL,
732 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
742 struct ds1307 *ds1307 = dev_get_drvdata(dev);
746 if (!test_bit(HAS_ALARM, &ds1307->flags))
750 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs,
800 struct ds1307 *ds1307 = dev_get_drvdata(dev);
804 if (!test_bit(HAS_ALARM, &ds1307->flags))
818 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs,
838 ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs,
846 return regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs[0]);
851 struct ds1307 *ds1307 = dev_get_drvdata(dev);
853 if (!test_bit(HAS_ALARM, &ds1307->flags))
856 return regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL,
863 struct ds1307 *ds1307 = dev_get_drvdata(dev);
867 regmap_read(ds1307->regmap, M41TXX_REG_CONTROL, &ctrl_reg);
882 struct ds1307 *ds1307 = dev_get_drvdata(dev);
897 return regmap_update_bits(ds1307->regmap, M41TXX_REG_CONTROL,
905 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev);
909 ret = regmap_update_bits(ds1307->regmap, DS1388_REG_FLAG,
914 ret = regmap_update_bits(ds1307->regmap, DS1388_REG_CONTROL,
926 ret = regmap_bulk_write(ds1307->regmap, DS1388_REG_WDOG_HUN_SECS, regs,
931 return regmap_update_bits(ds1307->regmap, DS1388_REG_CONTROL,
938 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev);
940 return regmap_update_bits(ds1307->regmap, DS1388_REG_CONTROL,
946 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev);
949 return regmap_bulk_read(ds1307->regmap, DS1388_REG_WDOG_HUN_SECS, regs,
956 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev);
963 return regmap_bulk_write(ds1307->regmap, DS1388_REG_WDOG_HUN_SECS, regs,
1079 { "ds1307", ds_1307 },
1104 .compatible = "dallas,ds1307",
1212 struct ds1307 *ds1307 = dev_id;
1213 struct mutex *lock = &ds1307->rtc->ops_lock;
1217 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &stat);
1223 regmap_write(ds1307->regmap, DS1337_REG_STATUS, stat);
1225 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL,
1230 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF);
1253 struct ds1307 *ds1307 = dev_get_drvdata(dev->parent);
1263 regmap_update_bits(ds1307->regmap, M41TXX_REG_CONTROL, M41TXX_BIT_FT,
1273 struct ds1307 *ds1307 = dev_get_drvdata(dev->parent);
1276 regmap_read(ds1307->regmap, M41TXX_REG_CONTROL, &ctrl_reg);
1293 static int ds1307_add_frequency_test(struct ds1307 *ds1307)
1297 switch (ds1307->type) {
1301 err = rtc_add_group(ds1307->rtc, &rtc_freq_test_attr_group);
1317 struct ds1307 *ds1307 = priv;
1318 const struct chip_desc *chip = &chips[ds1307->type];
1320 return regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset,
1327 struct ds1307 *ds1307 = priv;
1328 const struct chip_desc *chip = &chips[ds1307->type];
1330 return regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset,
1336 static u8 ds1307_trickle_init(struct ds1307 *ds1307,
1345 if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms",
1352 if (!device_property_read_u32(ds1307->dev, "aux-voltage-chargeable",
1362 dev_warn(ds1307->dev,
1366 } else if (device_property_read_bool(ds1307->dev,
1371 return chip->do_trickle_setup(ds1307, ohms, diode);
1390 struct ds1307 *ds1307 = dev_get_drvdata(dev);
1395 ret = regmap_bulk_read(ds1307->regmap, DS3231_REG_TEMPERATURE,
1431 static void ds1307_hwmon_register(struct ds1307 *ds1307)
1435 if (ds1307->type != ds_3231)
1438 dev = devm_hwmon_device_register_with_groups(ds1307->dev, ds1307->name,
1439 ds1307,
1442 dev_warn(ds1307->dev, "unable to register hwmon device %ld\n",
1449 static void ds1307_hwmon_register(struct ds1307 *ds1307)
1469 container_of(clk, struct ds1307, clks[DS3231_CLK_SQW])
1471 container_of(clk, struct ds1307, clks[DS3231_CLK_32KHZ])
1480 static int ds1337_write_control(struct ds1307 *ds1307, u8 mask, u8 value)
1482 struct mutex *lock = &ds1307->rtc->ops_lock;
1486 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL,
1496 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw);
1500 ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control);
1527 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw);
1545 return ds1337_write_control(ds1307, DS1337_BIT_RS1 | DS1337_BIT_RS2,
1551 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw);
1553 return ds1337_write_control(ds1307, DS1337_BIT_INTCN, 0);
1558 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw);
1560 ds1337_write_control(ds1307, DS1337_BIT_INTCN, DS1337_BIT_INTCN);
1565 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw);
1568 ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control);
1590 static int ds3231_clk_32khz_control(struct ds1307 *ds1307, bool enable)
1592 struct mutex *lock = &ds1307->rtc->ops_lock;
1596 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_STATUS,
1606 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw);
1608 return ds3231_clk_32khz_control(ds1307, true);
1613 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw);
1615 ds3231_clk_32khz_control(ds1307, false);
1620 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw);
1623 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &status);
1648 static int ds3231_clks_register(struct ds1307 *ds1307)
1650 struct device_node *node = ds1307->dev->of_node;
1654 onecell = devm_kzalloc(ds1307->dev, sizeof(*onecell), GFP_KERNEL);
1659 onecell->clks = devm_kcalloc(ds1307->dev, onecell->clk_num,
1671 if (i == DS3231_CLK_SQW && test_bit(HAS_ALARM, &ds1307->flags))
1677 ds1307->clks[i].init = &init;
1679 onecell->clks[i] = devm_clk_register(ds1307->dev,
1680 &ds1307->clks[i]);
1693 static void ds1307_clks_register(struct ds1307 *ds1307)
1697 if (ds1307->type != ds_3231)
1700 ret = ds3231_clks_register(ds1307);
1702 dev_warn(ds1307->dev, "unable to register clock device %d\n",
1709 static void ds1307_clks_register(struct ds1307 *ds1307)
1730 static void ds1307_wdt_register(struct ds1307 *ds1307)
1736 if (ds1307->type != ds_1388)
1739 wdt = devm_kzalloc(ds1307->dev, sizeof(*wdt), GFP_KERNEL);
1743 err = regmap_read(ds1307->regmap, DS1388_REG_FLAG, &val);
1753 watchdog_init_timeout(wdt, 0, ds1307->dev);
1754 watchdog_set_drvdata(wdt, ds1307);
1755 devm_watchdog_register_device(ds1307->dev, wdt);
1758 static void ds1307_wdt_register(struct ds1307 *ds1307)
1771 struct ds1307 *ds1307;
1781 ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL);
1782 if (!ds1307)
1785 dev_set_drvdata(&client->dev, ds1307);
1786 ds1307->dev = &client->dev;
1787 ds1307->name = client->name;
1789 ds1307->regmap = devm_regmap_init_i2c(client, ®map_config);
1790 if (IS_ERR(ds1307->regmap)) {
1791 dev_err(ds1307->dev, "regmap allocation failed\n");
1792 return PTR_ERR(ds1307->regmap);
1795 i2c_set_clientdata(client, ds1307);
1798 ds1307->type = (enum ds_type)
1800 chip = &chips[ds1307->type];
1803 ds1307->type = id->driver_data;
1808 ds1307->dev);
1812 ds1307->type = acpi_id->driver_data;
1818 trickle_charger_setup = ds1307_trickle_init(ds1307, chip);
1823 dev_dbg(ds1307->dev,
1826 regmap_write(ds1307->regmap, chip->trickle_charger_reg,
1844 switch (ds1307->type) {
1850 err = regmap_bulk_read(ds1307->regmap, DS1337_REG_CONTROL,
1853 dev_dbg(ds1307->dev, "read error %d\n", err);
1872 regmap_write(ds1307->regmap, DS1337_REG_CONTROL,
1877 regmap_write(ds1307->regmap, DS1337_REG_STATUS,
1879 dev_warn(ds1307->dev, "SET TIME!\n");
1884 err = regmap_bulk_read(ds1307->regmap,
1887 dev_dbg(ds1307->dev, "read error %d\n", err);
1894 regmap_write(ds1307->regmap,
1897 dev_warn(ds1307->dev,
1903 regmap_write(ds1307->regmap,
1906 dev_warn(ds1307->dev, "power-on detected\n");
1911 regmap_write(ds1307->regmap,
1914 dev_warn(ds1307->dev, "voltage drop detected\n");
1922 regmap_write(ds1307->regmap,
1926 err = regmap_bulk_read(ds1307->regmap,
1930 dev_dbg(ds1307->dev, "read error %d\n", err);
1941 regmap_write(ds1307->regmap,
1946 err = regmap_read(ds1307->regmap, DS1388_REG_CONTROL, &tmp);
1948 dev_dbg(ds1307->dev, "read error %d\n", err);
1955 regmap_write(ds1307->regmap, DS1388_REG_CONTROL, tmp);
1963 err = regmap_bulk_read(ds1307->regmap, chip->offset, regs,
1966 dev_dbg(ds1307->dev, "read error %d\n", err);
1970 if (ds1307->type == mcp794xx &&
1972 regmap_write(ds1307->regmap, DS1307_REG_WDAY,
1978 switch (ds1307->type) {
2003 regmap_write(ds1307->regmap, chip->offset + DS1307_REG_HOUR,
2008 device_set_wakeup_capable(ds1307->dev, true);
2009 set_bit(HAS_ALARM, &ds1307->flags);
2012 ds1307->rtc = devm_rtc_allocate_device(ds1307->dev);
2013 if (IS_ERR(ds1307->rtc))
2014 return PTR_ERR(ds1307->rtc);
2017 dev_info(ds1307->dev,
2020 ds1307->rtc->uie_unsupported = 1;
2024 err = devm_request_threaded_irq(ds1307->dev, client->irq, NULL,
2027 ds1307->name, ds1307);
2030 device_set_wakeup_capable(ds1307->dev, false);
2031 clear_bit(HAS_ALARM, &ds1307->flags);
2032 dev_err(ds1307->dev, "unable to request IRQ!\n");
2034 dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq);
2038 ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops;
2039 err = ds1307_add_frequency_test(ds1307);
2043 err = rtc_register_device(ds1307->rtc);
2055 .priv = ds1307,
2058 ds1307->rtc->nvram_old_abi = true;
2059 rtc_nvmem_register(ds1307->rtc, &nvmem_cfg);
2062 ds1307_hwmon_register(ds1307);
2063 ds1307_clks_register(ds1307);
2064 ds1307_wdt_register(ds1307);
2074 .name = "rtc-ds1307",