Lines Matching refs:ds1307
169 struct ds1307 { struct
195 u8 (*do_trickle_setup)(struct ds1307 *, u32, argument
212 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1307_get_time() local
214 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_get_time()
217 if (ds1307->type == rx_8130) { in ds1307_get_time()
219 ret = regmap_read(ds1307->regmap, RX8130_REG_FLAG, ®flag); in ds1307_get_time()
232 ret = regmap_bulk_read(ds1307->regmap, chip->offset, regs, in ds1307_get_time()
242 if (ds1307->type == m41t0 && in ds1307_get_time()
249 switch (ds1307->type) { in ds1307_get_time()
262 ret = regmap_read(ds1307->regmap, DS1307_REG_CONTROL, &tmp); in ds1307_get_time()
272 ret = regmap_read(ds1307->regmap, DS1340_REG_FLAG, &tmp); in ds1307_get_time()
279 ret = regmap_read(ds1307->regmap, DS1388_REG_FLAG, &tmp); in ds1307_get_time()
319 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1307_set_time() local
320 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_set_time()
358 switch (ds1307->type) { in ds1307_set_time()
361 regmap_update_bits(ds1307->regmap, DS1307_REG_CONTROL, in ds1307_set_time()
365 regmap_update_bits(ds1307->regmap, DS1340_REG_FLAG, in ds1307_set_time()
369 regmap_update_bits(ds1307->regmap, DS1388_REG_FLAG, in ds1307_set_time()
387 result = regmap_bulk_write(ds1307->regmap, chip->offset, regs, in ds1307_set_time()
394 if (ds1307->type == rx_8130) { in ds1307_set_time()
396 result = regmap_write(ds1307->regmap, RX8130_REG_FLAG, in ds1307_set_time()
409 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1337_read_alarm() local
413 if (!test_bit(HAS_ALARM, &ds1307->flags)) in ds1337_read_alarm()
417 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, in ds1337_read_alarm()
451 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1337_set_alarm() local
456 if (!test_bit(HAS_ALARM, &ds1307->flags)) in ds1337_set_alarm()
466 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs, in ds1337_set_alarm()
493 ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs, in ds1337_set_alarm()
504 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, regs[7]); in ds1337_set_alarm()
512 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1307_alarm_irq_enable() local
514 if (!test_bit(HAS_ALARM, &ds1307->flags)) in ds1307_alarm_irq_enable()
517 return regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_alarm_irq_enable()
522 static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307, u32 ohms, bool diode) in do_trickle_setup_ds1339() argument
540 dev_warn(ds1307->dev, in do_trickle_setup_ds1339()
547 static u8 do_trickle_setup_rx8130(struct ds1307 *ds1307, u32 ohms, bool diode) in do_trickle_setup_rx8130() argument
559 struct ds1307 *ds1307 = dev_id; in rx8130_irq() local
560 struct mutex *lock = &ds1307->rtc->ops_lock; in rx8130_irq()
567 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_irq()
576 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_irq()
581 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); in rx8130_irq()
591 struct ds1307 *ds1307 = dev_get_drvdata(dev); in rx8130_read_alarm() local
595 if (!test_bit(HAS_ALARM, &ds1307->flags)) in rx8130_read_alarm()
599 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, in rx8130_read_alarm()
605 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_read_alarm()
633 struct ds1307 *ds1307 = dev_get_drvdata(dev); in rx8130_set_alarm() local
637 if (!test_bit(HAS_ALARM, &ds1307->flags)) in rx8130_set_alarm()
647 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_set_alarm()
656 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_set_alarm()
666 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, in rx8130_set_alarm()
676 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, ctl[2]); in rx8130_set_alarm()
681 struct ds1307 *ds1307 = dev_get_drvdata(dev); in rx8130_alarm_irq_enable() local
684 if (!test_bit(HAS_ALARM, &ds1307->flags)) in rx8130_alarm_irq_enable()
687 ret = regmap_read(ds1307->regmap, RX8130_REG_CONTROL0, ®); in rx8130_alarm_irq_enable()
696 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, reg); in rx8130_alarm_irq_enable()
701 struct ds1307 *ds1307 = dev_id; in mcp794xx_irq() local
702 struct mutex *lock = &ds1307->rtc->ops_lock; in mcp794xx_irq()
708 ret = regmap_read(ds1307->regmap, MCP794XX_REG_ALARM0_CTRL, ®); in mcp794xx_irq()
714 ret = regmap_write(ds1307->regmap, MCP794XX_REG_ALARM0_CTRL, reg); in mcp794xx_irq()
719 ret = regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, in mcp794xx_irq()
724 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); in mcp794xx_irq()
734 struct ds1307 *ds1307 = dev_get_drvdata(dev); in mcp794xx_read_alarm() local
738 if (!test_bit(HAS_ALARM, &ds1307->flags)) in mcp794xx_read_alarm()
742 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, in mcp794xx_read_alarm()
792 struct ds1307 *ds1307 = dev_get_drvdata(dev); in mcp794xx_set_alarm() local
796 if (!test_bit(HAS_ALARM, &ds1307->flags)) in mcp794xx_set_alarm()
810 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, in mcp794xx_set_alarm()
830 ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs, in mcp794xx_set_alarm()
838 return regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs[0]); in mcp794xx_set_alarm()
843 struct ds1307 *ds1307 = dev_get_drvdata(dev); in mcp794xx_alarm_irq_enable() local
845 if (!test_bit(HAS_ALARM, &ds1307->flags)) in mcp794xx_alarm_irq_enable()
848 return regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, in mcp794xx_alarm_irq_enable()
855 struct ds1307 *ds1307 = dev_get_drvdata(dev); in m41txx_rtc_read_offset() local
859 regmap_read(ds1307->regmap, M41TXX_REG_CONTROL, &ctrl_reg); in m41txx_rtc_read_offset()
874 struct ds1307 *ds1307 = dev_get_drvdata(dev); in m41txx_rtc_set_offset() local
889 return regmap_update_bits(ds1307->regmap, M41TXX_REG_CONTROL, in m41txx_rtc_set_offset()
897 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev); in ds1388_wdt_start() local
901 ret = regmap_update_bits(ds1307->regmap, DS1388_REG_FLAG, in ds1388_wdt_start()
906 ret = regmap_update_bits(ds1307->regmap, DS1388_REG_CONTROL, in ds1388_wdt_start()
918 ret = regmap_bulk_write(ds1307->regmap, DS1388_REG_WDOG_HUN_SECS, regs, in ds1388_wdt_start()
923 return regmap_update_bits(ds1307->regmap, DS1388_REG_CONTROL, in ds1388_wdt_start()
930 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev); in ds1388_wdt_stop() local
932 return regmap_update_bits(ds1307->regmap, DS1388_REG_CONTROL, in ds1388_wdt_stop()
938 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev); in ds1388_wdt_ping() local
941 return regmap_bulk_read(ds1307->regmap, DS1388_REG_WDOG_HUN_SECS, regs, in ds1388_wdt_ping()
948 struct ds1307 *ds1307 = watchdog_get_drvdata(wdt_dev); in ds1388_wdt_set_timeout() local
955 return regmap_bulk_write(ds1307->regmap, DS1388_REG_WDOG_HUN_SECS, regs, in ds1388_wdt_set_timeout()
1204 struct ds1307 *ds1307 = dev_id; in ds1307_irq() local
1205 struct mutex *lock = &ds1307->rtc->ops_lock; in ds1307_irq()
1209 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &stat); in ds1307_irq()
1215 regmap_write(ds1307->regmap, DS1337_REG_STATUS, stat); in ds1307_irq()
1217 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_irq()
1222 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); in ds1307_irq()
1245 struct ds1307 *ds1307 = dev_get_drvdata(dev->parent); in frequency_test_store() local
1255 regmap_update_bits(ds1307->regmap, M41TXX_REG_CONTROL, M41TXX_BIT_FT, in frequency_test_store()
1265 struct ds1307 *ds1307 = dev_get_drvdata(dev->parent); in frequency_test_show() local
1268 regmap_read(ds1307->regmap, M41TXX_REG_CONTROL, &ctrl_reg); in frequency_test_show()
1285 static int ds1307_add_frequency_test(struct ds1307 *ds1307) in ds1307_add_frequency_test() argument
1289 switch (ds1307->type) { in ds1307_add_frequency_test()
1293 err = rtc_add_group(ds1307->rtc, &rtc_freq_test_attr_group); in ds1307_add_frequency_test()
1309 struct ds1307 *ds1307 = priv; in ds1307_nvram_read() local
1310 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_nvram_read()
1312 return regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset, in ds1307_nvram_read()
1319 struct ds1307 *ds1307 = priv; in ds1307_nvram_write() local
1320 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_nvram_write()
1322 return regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset, in ds1307_nvram_write()
1328 static u8 ds1307_trickle_init(struct ds1307 *ds1307, in ds1307_trickle_init() argument
1337 if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms", in ds1307_trickle_init()
1344 if (!device_property_read_u32(ds1307->dev, "aux-voltage-chargeable", in ds1307_trickle_init()
1354 dev_warn(ds1307->dev, in ds1307_trickle_init()
1358 } else if (device_property_read_bool(ds1307->dev, in ds1307_trickle_init()
1363 return chip->do_trickle_setup(ds1307, ohms, diode); in ds1307_trickle_init()
1382 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds3231_hwmon_read_temp() local
1387 ret = regmap_bulk_read(ds1307->regmap, DS3231_REG_TEMPERATURE, in ds3231_hwmon_read_temp()
1423 static void ds1307_hwmon_register(struct ds1307 *ds1307) in ds1307_hwmon_register() argument
1427 if (ds1307->type != ds_3231) in ds1307_hwmon_register()
1430 dev = devm_hwmon_device_register_with_groups(ds1307->dev, ds1307->name, in ds1307_hwmon_register()
1431 ds1307, in ds1307_hwmon_register()
1434 dev_warn(ds1307->dev, "unable to register hwmon device %ld\n", in ds1307_hwmon_register()
1441 static void ds1307_hwmon_register(struct ds1307 *ds1307) in ds1307_hwmon_register() argument
1461 container_of(clk, struct ds1307, clks[DS3231_CLK_SQW])
1463 container_of(clk, struct ds1307, clks[DS3231_CLK_32KHZ])
1472 static int ds1337_write_control(struct ds1307 *ds1307, u8 mask, u8 value) in ds1337_write_control() argument
1474 struct mutex *lock = &ds1307->rtc->ops_lock; in ds1337_write_control()
1478 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, in ds1337_write_control()
1488 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_recalc_rate() local
1492 ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); in ds3231_clk_sqw_recalc_rate()
1519 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_set_rate() local
1537 return ds1337_write_control(ds1307, DS1337_BIT_RS1 | DS1337_BIT_RS2, in ds3231_clk_sqw_set_rate()
1543 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_prepare() local
1545 return ds1337_write_control(ds1307, DS1337_BIT_INTCN, 0); in ds3231_clk_sqw_prepare()
1550 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_unprepare() local
1552 ds1337_write_control(ds1307, DS1337_BIT_INTCN, DS1337_BIT_INTCN); in ds3231_clk_sqw_unprepare()
1557 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_is_prepared() local
1560 ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); in ds3231_clk_sqw_is_prepared()
1582 static int ds3231_clk_32khz_control(struct ds1307 *ds1307, bool enable) in ds3231_clk_32khz_control() argument
1584 struct mutex *lock = &ds1307->rtc->ops_lock; in ds3231_clk_32khz_control()
1588 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_STATUS, in ds3231_clk_32khz_control()
1598 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw); in ds3231_clk_32khz_prepare() local
1600 return ds3231_clk_32khz_control(ds1307, true); in ds3231_clk_32khz_prepare()
1605 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw); in ds3231_clk_32khz_unprepare() local
1607 ds3231_clk_32khz_control(ds1307, false); in ds3231_clk_32khz_unprepare()
1612 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw); in ds3231_clk_32khz_is_prepared() local
1615 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &status); in ds3231_clk_32khz_is_prepared()
1640 static int ds3231_clks_register(struct ds1307 *ds1307) in ds3231_clks_register() argument
1642 struct device_node *node = ds1307->dev->of_node; in ds3231_clks_register()
1646 onecell = devm_kzalloc(ds1307->dev, sizeof(*onecell), GFP_KERNEL); in ds3231_clks_register()
1651 onecell->clks = devm_kcalloc(ds1307->dev, onecell->clk_num, in ds3231_clks_register()
1663 if (i == DS3231_CLK_SQW && test_bit(HAS_ALARM, &ds1307->flags)) in ds3231_clks_register()
1669 ds1307->clks[i].init = &init; in ds3231_clks_register()
1671 onecell->clks[i] = devm_clk_register(ds1307->dev, in ds3231_clks_register()
1672 &ds1307->clks[i]); in ds3231_clks_register()
1685 static void ds1307_clks_register(struct ds1307 *ds1307) in ds1307_clks_register() argument
1689 if (ds1307->type != ds_3231) in ds1307_clks_register()
1692 ret = ds3231_clks_register(ds1307); in ds1307_clks_register()
1694 dev_warn(ds1307->dev, "unable to register clock device %d\n", in ds1307_clks_register()
1701 static void ds1307_clks_register(struct ds1307 *ds1307) in ds1307_clks_register() argument
1722 static void ds1307_wdt_register(struct ds1307 *ds1307) in ds1307_wdt_register() argument
1728 if (ds1307->type != ds_1388) in ds1307_wdt_register()
1731 wdt = devm_kzalloc(ds1307->dev, sizeof(*wdt), GFP_KERNEL); in ds1307_wdt_register()
1735 err = regmap_read(ds1307->regmap, DS1388_REG_FLAG, &val); in ds1307_wdt_register()
1745 watchdog_init_timeout(wdt, 0, ds1307->dev); in ds1307_wdt_register()
1746 watchdog_set_drvdata(wdt, ds1307); in ds1307_wdt_register()
1747 devm_watchdog_register_device(ds1307->dev, wdt); in ds1307_wdt_register()
1750 static void ds1307_wdt_register(struct ds1307 *ds1307) in ds1307_wdt_register() argument
1763 struct ds1307 *ds1307; in ds1307_probe() local
1773 ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL); in ds1307_probe()
1774 if (!ds1307) in ds1307_probe()
1777 dev_set_drvdata(&client->dev, ds1307); in ds1307_probe()
1778 ds1307->dev = &client->dev; in ds1307_probe()
1779 ds1307->name = client->name; in ds1307_probe()
1781 ds1307->regmap = devm_regmap_init_i2c(client, ®map_config); in ds1307_probe()
1782 if (IS_ERR(ds1307->regmap)) { in ds1307_probe()
1783 dev_err(ds1307->dev, "regmap allocation failed\n"); in ds1307_probe()
1784 return PTR_ERR(ds1307->regmap); in ds1307_probe()
1787 i2c_set_clientdata(client, ds1307); in ds1307_probe()
1790 ds1307->type = (enum ds_type) in ds1307_probe()
1792 chip = &chips[ds1307->type]; in ds1307_probe()
1795 ds1307->type = id->driver_data; in ds1307_probe()
1800 ds1307->dev); in ds1307_probe()
1804 ds1307->type = acpi_id->driver_data; in ds1307_probe()
1810 trickle_charger_setup = ds1307_trickle_init(ds1307, chip); in ds1307_probe()
1815 dev_dbg(ds1307->dev, in ds1307_probe()
1818 regmap_write(ds1307->regmap, chip->trickle_charger_reg, in ds1307_probe()
1836 switch (ds1307->type) { in ds1307_probe()
1842 err = regmap_bulk_read(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_probe()
1845 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1864 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_probe()
1869 regmap_write(ds1307->regmap, DS1337_REG_STATUS, in ds1307_probe()
1871 dev_warn(ds1307->dev, "SET TIME!\n"); in ds1307_probe()
1876 err = regmap_bulk_read(ds1307->regmap, in ds1307_probe()
1879 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1886 regmap_write(ds1307->regmap, in ds1307_probe()
1889 dev_warn(ds1307->dev, in ds1307_probe()
1895 regmap_write(ds1307->regmap, in ds1307_probe()
1898 dev_warn(ds1307->dev, "power-on detected\n"); in ds1307_probe()
1903 regmap_write(ds1307->regmap, in ds1307_probe()
1906 dev_warn(ds1307->dev, "voltage drop detected\n"); in ds1307_probe()
1914 regmap_write(ds1307->regmap, in ds1307_probe()
1918 err = regmap_bulk_read(ds1307->regmap, in ds1307_probe()
1922 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1933 regmap_write(ds1307->regmap, in ds1307_probe()
1938 err = regmap_read(ds1307->regmap, DS1388_REG_CONTROL, &tmp); in ds1307_probe()
1940 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1947 regmap_write(ds1307->regmap, DS1388_REG_CONTROL, tmp); in ds1307_probe()
1955 err = regmap_bulk_read(ds1307->regmap, chip->offset, regs, in ds1307_probe()
1958 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1962 if (ds1307->type == mcp794xx && in ds1307_probe()
1964 regmap_write(ds1307->regmap, DS1307_REG_WDAY, in ds1307_probe()
1970 switch (ds1307->type) { in ds1307_probe()
1995 regmap_write(ds1307->regmap, chip->offset + DS1307_REG_HOUR, in ds1307_probe()
2000 device_set_wakeup_capable(ds1307->dev, true); in ds1307_probe()
2001 set_bit(HAS_ALARM, &ds1307->flags); in ds1307_probe()
2004 ds1307->rtc = devm_rtc_allocate_device(ds1307->dev); in ds1307_probe()
2005 if (IS_ERR(ds1307->rtc)) in ds1307_probe()
2006 return PTR_ERR(ds1307->rtc); in ds1307_probe()
2009 dev_info(ds1307->dev, in ds1307_probe()
2012 ds1307->rtc->uie_unsupported = 1; in ds1307_probe()
2016 err = devm_request_threaded_irq(ds1307->dev, client->irq, NULL, in ds1307_probe()
2019 ds1307->name, ds1307); in ds1307_probe()
2022 device_set_wakeup_capable(ds1307->dev, false); in ds1307_probe()
2023 clear_bit(HAS_ALARM, &ds1307->flags); in ds1307_probe()
2024 dev_err(ds1307->dev, "unable to request IRQ!\n"); in ds1307_probe()
2026 dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq); in ds1307_probe()
2030 ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops; in ds1307_probe()
2031 err = ds1307_add_frequency_test(ds1307); in ds1307_probe()
2035 err = rtc_register_device(ds1307->rtc); in ds1307_probe()
2047 .priv = ds1307, in ds1307_probe()
2050 ds1307->rtc->nvram_old_abi = true; in ds1307_probe()
2051 rtc_nvmem_register(ds1307->rtc, &nvmem_cfg); in ds1307_probe()
2054 ds1307_hwmon_register(ds1307); in ds1307_probe()
2055 ds1307_clks_register(ds1307); in ds1307_probe()
2056 ds1307_wdt_register(ds1307); in ds1307_probe()