Lines Matching refs:ds1307

117 struct ds1307 {  struct
143 u8 (*do_trickle_setup)(struct ds1307 *, u32, argument
149 static u8 do_trickle_setup_ds1339(struct ds1307 *, u32 ohms, bool diode);
380 struct ds1307 *ds1307 = dev_id; in ds1307_irq() local
381 struct mutex *lock = &ds1307->rtc->ops_lock; in ds1307_irq()
385 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &stat); in ds1307_irq()
391 regmap_write(ds1307->regmap, DS1337_REG_STATUS, stat); in ds1307_irq()
393 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_irq()
398 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); in ds1307_irq()
411 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1307_get_time() local
413 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_get_time()
417 ret = regmap_bulk_read(ds1307->regmap, chip->offset, regs, in ds1307_get_time()
427 if (ds1307->type == m41t0 && in ds1307_get_time()
458 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1307_set_time() local
459 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_set_time()
497 if (ds1307->type == mcp794xx) { in ds1307_set_time()
509 result = regmap_bulk_write(ds1307->regmap, chip->offset, regs, in ds1307_set_time()
520 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1337_read_alarm() local
524 if (!test_bit(HAS_ALARM, &ds1307->flags)) in ds1337_read_alarm()
528 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, in ds1337_read_alarm()
562 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1337_set_alarm() local
567 if (!test_bit(HAS_ALARM, &ds1307->flags)) in ds1337_set_alarm()
577 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs, in ds1337_set_alarm()
604 ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs, in ds1337_set_alarm()
615 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, regs[7]); in ds1337_set_alarm()
623 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds1307_alarm_irq_enable() local
625 if (!test_bit(HAS_ALARM, &ds1307->flags)) in ds1307_alarm_irq_enable()
628 return regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_alarm_irq_enable()
659 struct ds1307 *ds1307 = dev_id; in rx8130_irq() local
660 struct mutex *lock = &ds1307->rtc->ops_lock; in rx8130_irq()
667 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_irq()
676 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_irq()
681 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); in rx8130_irq()
691 struct ds1307 *ds1307 = dev_get_drvdata(dev); in rx8130_read_alarm() local
695 if (!test_bit(HAS_ALARM, &ds1307->flags)) in rx8130_read_alarm()
699 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, in rx8130_read_alarm()
705 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_read_alarm()
733 struct ds1307 *ds1307 = dev_get_drvdata(dev); in rx8130_set_alarm() local
737 if (!test_bit(HAS_ALARM, &ds1307->flags)) in rx8130_set_alarm()
747 ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_set_alarm()
756 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_set_alarm()
766 ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, in rx8130_set_alarm()
776 return regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, in rx8130_set_alarm()
782 struct ds1307 *ds1307 = dev_get_drvdata(dev); in rx8130_alarm_irq_enable() local
785 if (!test_bit(HAS_ALARM, &ds1307->flags)) in rx8130_alarm_irq_enable()
788 ret = regmap_read(ds1307->regmap, RX8130_REG_CONTROL0, &reg); in rx8130_alarm_irq_enable()
797 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, reg); in rx8130_alarm_irq_enable()
824 struct ds1307 *ds1307 = dev_id; in mcp794xx_irq() local
825 struct mutex *lock = &ds1307->rtc->ops_lock; in mcp794xx_irq()
831 ret = regmap_read(ds1307->regmap, MCP794XX_REG_ALARM0_CTRL, &reg); in mcp794xx_irq()
837 ret = regmap_write(ds1307->regmap, MCP794XX_REG_ALARM0_CTRL, reg); in mcp794xx_irq()
842 ret = regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, in mcp794xx_irq()
847 rtc_update_irq(ds1307->rtc, 1, RTC_AF | RTC_IRQF); in mcp794xx_irq()
857 struct ds1307 *ds1307 = dev_get_drvdata(dev); in mcp794xx_read_alarm() local
861 if (!test_bit(HAS_ALARM, &ds1307->flags)) in mcp794xx_read_alarm()
865 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, in mcp794xx_read_alarm()
915 struct ds1307 *ds1307 = dev_get_drvdata(dev); in mcp794xx_set_alarm() local
919 if (!test_bit(HAS_ALARM, &ds1307->flags)) in mcp794xx_set_alarm()
933 ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, in mcp794xx_set_alarm()
953 ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs, in mcp794xx_set_alarm()
961 return regmap_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs[0]); in mcp794xx_set_alarm()
966 struct ds1307 *ds1307 = dev_get_drvdata(dev); in mcp794xx_alarm_irq_enable() local
968 if (!test_bit(HAS_ALARM, &ds1307->flags)) in mcp794xx_alarm_irq_enable()
971 return regmap_update_bits(ds1307->regmap, MCP794XX_REG_CONTROL, in mcp794xx_alarm_irq_enable()
981 struct ds1307 *ds1307 = priv; in ds1307_nvram_read() local
982 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_nvram_read()
984 return regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset, in ds1307_nvram_read()
991 struct ds1307 *ds1307 = priv; in ds1307_nvram_write() local
992 const struct chip_desc *chip = &chips[ds1307->type]; in ds1307_nvram_write()
994 return regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset, in ds1307_nvram_write()
1000 static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307, in do_trickle_setup_ds1339() argument
1017 dev_warn(ds1307->dev, in do_trickle_setup_ds1339()
1024 static u8 ds1307_trickle_init(struct ds1307 *ds1307, in ds1307_trickle_init() argument
1033 if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms", in ds1307_trickle_init()
1037 if (device_property_read_bool(ds1307->dev, "trickle-diode-disable")) in ds1307_trickle_init()
1040 return chip->do_trickle_setup(ds1307, ohms, diode); in ds1307_trickle_init()
1059 struct ds1307 *ds1307 = dev_get_drvdata(dev); in ds3231_hwmon_read_temp() local
1064 ret = regmap_bulk_read(ds1307->regmap, DS3231_REG_TEMPERATURE, in ds3231_hwmon_read_temp()
1100 static void ds1307_hwmon_register(struct ds1307 *ds1307) in ds1307_hwmon_register() argument
1104 if (ds1307->type != ds_3231) in ds1307_hwmon_register()
1107 dev = devm_hwmon_device_register_with_groups(ds1307->dev, ds1307->name, in ds1307_hwmon_register()
1108 ds1307, in ds1307_hwmon_register()
1111 dev_warn(ds1307->dev, "unable to register hwmon device %ld\n", in ds1307_hwmon_register()
1118 static void ds1307_hwmon_register(struct ds1307 *ds1307) in ds1307_hwmon_register() argument
1138 container_of(clk, struct ds1307, clks[DS3231_CLK_SQW])
1140 container_of(clk, struct ds1307, clks[DS3231_CLK_32KHZ])
1149 static int ds1337_write_control(struct ds1307 *ds1307, u8 mask, u8 value) in ds1337_write_control() argument
1151 struct mutex *lock = &ds1307->rtc->ops_lock; in ds1337_write_control()
1155 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_CONTROL, in ds1337_write_control()
1165 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_recalc_rate() local
1169 ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); in ds3231_clk_sqw_recalc_rate()
1196 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_set_rate() local
1214 return ds1337_write_control(ds1307, DS1337_BIT_RS1 | DS1337_BIT_RS2, in ds3231_clk_sqw_set_rate()
1220 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_prepare() local
1222 return ds1337_write_control(ds1307, DS1337_BIT_INTCN, 0); in ds3231_clk_sqw_prepare()
1227 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_unprepare() local
1229 ds1337_write_control(ds1307, DS1337_BIT_INTCN, DS1337_BIT_INTCN); in ds3231_clk_sqw_unprepare()
1234 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); in ds3231_clk_sqw_is_prepared() local
1237 ret = regmap_read(ds1307->regmap, DS1337_REG_CONTROL, &control); in ds3231_clk_sqw_is_prepared()
1259 static int ds3231_clk_32khz_control(struct ds1307 *ds1307, bool enable) in ds3231_clk_32khz_control() argument
1261 struct mutex *lock = &ds1307->rtc->ops_lock; in ds3231_clk_32khz_control()
1265 ret = regmap_update_bits(ds1307->regmap, DS1337_REG_STATUS, in ds3231_clk_32khz_control()
1275 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw); in ds3231_clk_32khz_prepare() local
1277 return ds3231_clk_32khz_control(ds1307, true); in ds3231_clk_32khz_prepare()
1282 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw); in ds3231_clk_32khz_unprepare() local
1284 ds3231_clk_32khz_control(ds1307, false); in ds3231_clk_32khz_unprepare()
1289 struct ds1307 *ds1307 = clk_32khz_to_ds1307(hw); in ds3231_clk_32khz_is_prepared() local
1292 ret = regmap_read(ds1307->regmap, DS1337_REG_STATUS, &status); in ds3231_clk_32khz_is_prepared()
1317 static int ds3231_clks_register(struct ds1307 *ds1307) in ds3231_clks_register() argument
1319 struct device_node *node = ds1307->dev->of_node; in ds3231_clks_register()
1323 onecell = devm_kzalloc(ds1307->dev, sizeof(*onecell), GFP_KERNEL); in ds3231_clks_register()
1328 onecell->clks = devm_kcalloc(ds1307->dev, onecell->clk_num, in ds3231_clks_register()
1340 if (i == DS3231_CLK_SQW && test_bit(HAS_ALARM, &ds1307->flags)) in ds3231_clks_register()
1346 ds1307->clks[i].init = &init; in ds3231_clks_register()
1348 onecell->clks[i] = devm_clk_register(ds1307->dev, in ds3231_clks_register()
1349 &ds1307->clks[i]); in ds3231_clks_register()
1362 static void ds1307_clks_register(struct ds1307 *ds1307) in ds1307_clks_register() argument
1366 if (ds1307->type != ds_3231) in ds1307_clks_register()
1369 ret = ds3231_clks_register(ds1307); in ds1307_clks_register()
1371 dev_warn(ds1307->dev, "unable to register clock device %d\n", in ds1307_clks_register()
1378 static void ds1307_clks_register(struct ds1307 *ds1307) in ds1307_clks_register() argument
1393 struct ds1307 *ds1307; in ds1307_probe() local
1403 ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL); in ds1307_probe()
1404 if (!ds1307) in ds1307_probe()
1407 dev_set_drvdata(&client->dev, ds1307); in ds1307_probe()
1408 ds1307->dev = &client->dev; in ds1307_probe()
1409 ds1307->name = client->name; in ds1307_probe()
1411 ds1307->regmap = devm_regmap_init_i2c(client, &regmap_config); in ds1307_probe()
1412 if (IS_ERR(ds1307->regmap)) { in ds1307_probe()
1413 dev_err(ds1307->dev, "regmap allocation failed\n"); in ds1307_probe()
1414 return PTR_ERR(ds1307->regmap); in ds1307_probe()
1417 i2c_set_clientdata(client, ds1307); in ds1307_probe()
1420 ds1307->type = (enum ds_type) in ds1307_probe()
1422 chip = &chips[ds1307->type]; in ds1307_probe()
1425 ds1307->type = id->driver_data; in ds1307_probe()
1430 ds1307->dev); in ds1307_probe()
1434 ds1307->type = acpi_id->driver_data; in ds1307_probe()
1440 trickle_charger_setup = ds1307_trickle_init(ds1307, chip); in ds1307_probe()
1446 dev_dbg(ds1307->dev, in ds1307_probe()
1449 regmap_write(ds1307->regmap, chip->trickle_charger_reg, in ds1307_probe()
1467 switch (ds1307->type) { in ds1307_probe()
1473 err = regmap_bulk_read(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_probe()
1476 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1495 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, in ds1307_probe()
1500 regmap_write(ds1307->regmap, DS1337_REG_STATUS, in ds1307_probe()
1502 dev_warn(ds1307->dev, "SET TIME!\n"); in ds1307_probe()
1507 err = regmap_bulk_read(ds1307->regmap, in ds1307_probe()
1510 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1517 regmap_write(ds1307->regmap, in ds1307_probe()
1520 dev_warn(ds1307->dev, in ds1307_probe()
1526 regmap_write(ds1307->regmap, in ds1307_probe()
1529 dev_warn(ds1307->dev, "power-on detected\n"); in ds1307_probe()
1534 regmap_write(ds1307->regmap, in ds1307_probe()
1537 dev_warn(ds1307->dev, "voltage drop detected\n"); in ds1307_probe()
1545 regmap_write(ds1307->regmap, in ds1307_probe()
1549 err = regmap_bulk_read(ds1307->regmap, in ds1307_probe()
1553 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1564 regmap_write(ds1307->regmap, in ds1307_probe()
1574 err = regmap_bulk_read(ds1307->regmap, chip->offset, regs, in ds1307_probe()
1577 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1587 switch (ds1307->type) { in ds1307_probe()
1594 regmap_write(ds1307->regmap, DS1307_REG_SECS, 0); in ds1307_probe()
1595 dev_warn(ds1307->dev, "SET TIME!\n"); in ds1307_probe()
1603 regmap_write(ds1307->regmap, DS1307_REG_SECS, 0); in ds1307_probe()
1607 regmap_write(ds1307->regmap, DS1307_REG_CONTROL, in ds1307_probe()
1610 dev_warn(ds1307->dev, "SET TIME!\n"); in ds1307_probe()
1617 regmap_write(ds1307->regmap, DS1307_REG_SECS, 0); in ds1307_probe()
1619 err = regmap_read(ds1307->regmap, DS1340_REG_FLAG, &tmp); in ds1307_probe()
1621 dev_dbg(ds1307->dev, "read error %d\n", err); in ds1307_probe()
1627 regmap_write(ds1307->regmap, DS1340_REG_FLAG, 0); in ds1307_probe()
1628 dev_warn(ds1307->dev, "SET TIME!\n"); in ds1307_probe()
1634 regmap_write(ds1307->regmap, DS1307_REG_WDAY, in ds1307_probe()
1641 regmap_write(ds1307->regmap, DS1307_REG_SECS, in ds1307_probe()
1643 dev_warn(ds1307->dev, "SET TIME!\n"); in ds1307_probe()
1653 switch (ds1307->type) { in ds1307_probe()
1678 regmap_write(ds1307->regmap, chip->offset + DS1307_REG_HOUR, in ds1307_probe()
1683 device_set_wakeup_capable(ds1307->dev, true); in ds1307_probe()
1684 set_bit(HAS_ALARM, &ds1307->flags); in ds1307_probe()
1687 ds1307->rtc = devm_rtc_allocate_device(ds1307->dev); in ds1307_probe()
1688 if (IS_ERR(ds1307->rtc)) in ds1307_probe()
1689 return PTR_ERR(ds1307->rtc); in ds1307_probe()
1692 dev_info(ds1307->dev, in ds1307_probe()
1695 ds1307->rtc->uie_unsupported = 1; in ds1307_probe()
1699 err = devm_request_threaded_irq(ds1307->dev, client->irq, NULL, in ds1307_probe()
1702 ds1307->name, ds1307); in ds1307_probe()
1705 device_set_wakeup_capable(ds1307->dev, false); in ds1307_probe()
1706 clear_bit(HAS_ALARM, &ds1307->flags); in ds1307_probe()
1707 dev_err(ds1307->dev, "unable to request IRQ!\n"); in ds1307_probe()
1709 dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq); in ds1307_probe()
1713 ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops; in ds1307_probe()
1714 err = rtc_register_device(ds1307->rtc); in ds1307_probe()
1726 .priv = ds1307, in ds1307_probe()
1729 ds1307->rtc->nvram_old_abi = true; in ds1307_probe()
1730 rtc_nvmem_register(ds1307->rtc, &nvmem_cfg); in ds1307_probe()
1733 ds1307_hwmon_register(ds1307); in ds1307_probe()
1734 ds1307_clks_register(ds1307); in ds1307_probe()