Merge tag 'rtc-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux

Pull RTC updates from Alexandre Belloni:
"Subsystem:
- remove .open() and .release() RTC ops
- constify i2c_device_id

New driver:
- Realtek RTD1295
- Android emulator (goldfish) RTC

Drivers:
- ds1307: Beginning of a huge cleanup
- s35390a: handle invalid RTC time
- sun6i: external oscillator gate support"

* tag 'rtc-4.14' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (40 commits)
rtc: ds1307: use octal permissions
rtc: ds1307: fix braces
rtc: ds1307: fix alignments and blank lines
rtc: ds1307: use BIT
rtc: ds1307: use u32
rtc: ds1307: use sizeof
rtc: ds1307: remove regs member
rtc: Add Realtek RTD1295
dt-bindings: rtc: Add Realtek RTD1295
rtc: sun6i: Add support for the external oscillator gate
rtc: goldfish: Add RTC driver for Android emulator
dt-bindings: Add device tree binding for Goldfish RTC driver
rtc: ds1307: add basic support for ds1341 chip
rtc: ds1307: remove member nvram_offset from struct ds1307
rtc: ds1307: factor out offset to struct chip_desc
rtc: ds1307: factor out rtc_ops to struct chip_desc
rtc: ds1307: factor out irq_handler to struct chip_desc
rtc: ds1307: improve irq setup
rtc: ds1307: constify struct chip_desc variables
rtc: ds1307: improve trickle charger initialization
...

+955 -487
+4 -5
Documentation/devicetree/bindings/power/wakeup-source.txt
··· 20 1. "enable-sdio-wakeup" Documentation/devicetree/bindings/mmc/mmc.txt 21 2. "gpio-key,wakeup" Documentation/devicetree/bindings/input/gpio-keys{,-polled}.txt 22 3. "has-tpo" Documentation/devicetree/bindings/rtc/rtc-opal.txt 23 - 4. "isil,irq2-can-wakeup-machine" Documentation/devicetree/bindings/rtc/isil,isl12057.txt 24 - 5. "linux,wakeup" Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt 25 Documentation/devicetree/bindings/mfd/tc3589x.txt 26 Documentation/devicetree/bindings/input/ads7846.txt 27 - 6. "linux,keypad-wakeup" Documentation/devicetree/bindings/input/qcom,pm8xxx-keypad.txt 28 - 7. "linux,input-wakeup" Documentation/devicetree/bindings/input/samsung-keypad.txt 29 - 8. "nvidia,wakeup-source" Documentation/devicetree/bindings/input/nvidia,tegra20-kbc.txt 30 31 Examples 32 --------
··· 20 1. "enable-sdio-wakeup" Documentation/devicetree/bindings/mmc/mmc.txt 21 2. "gpio-key,wakeup" Documentation/devicetree/bindings/input/gpio-keys{,-polled}.txt 22 3. "has-tpo" Documentation/devicetree/bindings/rtc/rtc-opal.txt 23 + 4. "linux,wakeup" Documentation/devicetree/bindings/input/gpio-matrix-keypad.txt 24 Documentation/devicetree/bindings/mfd/tc3589x.txt 25 Documentation/devicetree/bindings/input/ads7846.txt 26 + 5. "linux,keypad-wakeup" Documentation/devicetree/bindings/input/qcom,pm8xxx-keypad.txt 27 + 6. "linux,input-wakeup" Documentation/devicetree/bindings/input/samsung-keypad.txt 28 + 7. "nvidia,wakeup-source" Documentation/devicetree/bindings/input/nvidia,tegra20-kbc.txt 29 30 Examples 31 --------
+17
Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt
···
··· 1 + Android Goldfish RTC 2 + 3 + Android Goldfish RTC device used by Android emulator. 4 + 5 + Required properties: 6 + 7 + - compatible : should contain "google,goldfish-rtc" 8 + - reg : <registers mapping> 9 + - interrupts : <interrupt mapping> 10 + 11 + Example: 12 + 13 + goldfish_timer@9020000 { 14 + compatible = "google,goldfish-rtc"; 15 + reg = <0x9020000 0x1000>; 16 + interrupts = <0x3>; 17 + };
-1
Documentation/devicetree/bindings/rtc/isil,isl12057.txt
··· 24 25 - "wakeup-source": mark the chip as a wakeup source, independently of 26 the availability of an IRQ line connected to the SoC. 27 - (Legacy property supported: "isil,irq2-can-wakeup-machine") 28 29 - "interrupt-parent", "interrupts": for passing the interrupt line 30 of the SoC connected to IRQ#2 of the RTC chip.
··· 24 25 - "wakeup-source": mark the chip as a wakeup source, independently of 26 the availability of an IRQ line connected to the SoC. 27 28 - "interrupt-parent", "interrupts": for passing the interrupt line 29 of the SoC connected to IRQ#2 of the RTC chip.
+16
Documentation/devicetree/bindings/rtc/realtek,rtd119x.txt
···
··· 1 + Realtek RTD129x Real-Time Clock 2 + =============================== 3 + 4 + Required properties: 5 + - compatible : Should be "realtek,rtd1295-rtc" 6 + - reg : Specifies the physical base address and size 7 + - clocks : Specifies the clock gate 8 + 9 + 10 + Example: 11 + 12 + rtc@9801b600 { 13 + compatible = "realtek,rtd1295-clk"; 14 + reg = <0x9801b600 0x100>; 15 + clocks = <&clkc RTD1295_CLK_EN_MISC_RTC>; 16 + };
+2 -2
Documentation/devicetree/bindings/rtc/sun6i-rtc.txt
··· 10 11 Required properties for new device trees 12 - clocks : phandle to the 32kHz external oscillator 13 - - clock-output-names : name of the LOSC clock created 14 - #clock-cells : must be equals to 1. The RTC provides two clocks: the 15 LOSC and its external output, with index 0 and 1 16 respectively. ··· 21 compatible = "allwinner,sun6i-a31-rtc"; 22 reg = <0x01f00000 0x54>; 23 interrupts = <0 40 4>, <0 41 4>; 24 - clock-output-names = "osc32k"; 25 clocks = <&ext_osc32k>; 26 #clock-cells = <1>; 27 };
··· 10 11 Required properties for new device trees 12 - clocks : phandle to the 32kHz external oscillator 13 + - clock-output-names : names of the LOSC and its external output clocks created 14 - #clock-cells : must be equals to 1. The RTC provides two clocks: the 15 LOSC and its external output, with index 0 and 1 16 respectively. ··· 21 compatible = "allwinner,sun6i-a31-rtc"; 22 reg = <0x01f00000 0x54>; 23 interrupts = <0 40 4>, <0 41 4>; 24 + clock-output-names = "osc32k", "osc32k-out"; 25 clocks = <&ext_osc32k>; 26 #clock-cells = <1>; 27 };
+6
MAINTAINERS
··· 855 F: drivers/android/ 856 F: drivers/staging/android/ 857 858 ANDROID ION DRIVER 859 M: Laura Abbott <labbott@redhat.com> 860 M: Sumit Semwal <sumit.semwal@linaro.org>
··· 855 F: drivers/android/ 856 F: drivers/staging/android/ 857 858 + ANDROID GOLDFISH RTC DRIVER 859 + M: Miodrag Dinic <miodrag.dinic@imgtec.com> 860 + S: Supported 861 + F: Documentation/devicetree/bindings/rtc/google,goldfish-rtc.txt 862 + F: drivers/rtc/rtc-goldfish.c 863 + 864 ANDROID ION DRIVER 865 M: Laura Abbott <labbott@redhat.com> 866 M: Sumit Semwal <sumit.semwal@linaro.org>
+23 -7
drivers/rtc/Kconfig
··· 227 will be called rtc-as3722. 228 229 config RTC_DRV_DS1307 230 - tristate "Dallas/Maxim DS1307/37/38/39/40, ST M41T00, EPSON RX-8025, ISL12057" 231 help 232 If you say yes here you get support for various compatible RTC 233 chips (often with battery backup) connected with I2C. This driver 234 - should handle DS1307, DS1337, DS1338, DS1339, DS1340, ST M41T00, 235 - EPSON RX-8025, Intersil ISL12057 and probably other chips. In some 236 - cases the RTC must already have been initialized (by manufacturing or 237 - a bootloader). 238 239 The first seven registers on these chips hold an RTC, and other 240 registers may add features such as NVRAM, a trickle charger for ··· 371 will be called rtc-max77686. 372 373 config RTC_DRV_RK808 374 - tristate "Rockchip RK808/RK818 RTC" 375 depends on MFD_RK808 376 help 377 If you say yes here you will get support for the 378 - RTC of RK808 and RK818 PMIC. 379 380 This driver can also be built as a module. If so, the module 381 will be called rk808-rtc. ··· 1765 Say y here for CPCAP rtc found on some Motorola phones 1766 and tablets such as Droid 4. 1767 1768 comment "HID Sensor RTC drivers" 1769 1770 config RTC_DRV_HID_SENSOR_TIME ··· 1788 If this driver is compiled as a module, it will be named 1789 rtc-hid-sensor-time. 1790 1791 1792 endif # RTC_CLASS
··· 227 will be called rtc-as3722. 228 229 config RTC_DRV_DS1307 230 + tristate "Dallas/Maxim DS1307/37/38/39/40/41, ST M41T00, EPSON RX-8025, ISL12057" 231 help 232 If you say yes here you get support for various compatible RTC 233 chips (often with battery backup) connected with I2C. This driver 234 + should handle DS1307, DS1337, DS1338, DS1339, DS1340, DS1341, 235 + ST M41T00, EPSON RX-8025, Intersil ISL12057 and probably other chips. 236 + In some cases the RTC must already have been initialized (by 237 + manufacturing or a bootloader). 238 239 The first seven registers on these chips hold an RTC, and other 240 registers may add features such as NVRAM, a trickle charger for ··· 371 will be called rtc-max77686. 372 373 config RTC_DRV_RK808 374 + tristate "Rockchip RK805/RK808/RK818 RTC" 375 depends on MFD_RK808 376 help 377 If you say yes here you will get support for the 378 + RTC of RK805, RK808 and RK818 PMIC. 379 380 This driver can also be built as a module. If so, the module 381 will be called rk808-rtc. ··· 1765 Say y here for CPCAP rtc found on some Motorola phones 1766 and tablets such as Droid 4. 1767 1768 + config RTC_DRV_RTD119X 1769 + bool "Realtek RTD129x RTC" 1770 + depends on ARCH_REALTEK || COMPILE_TEST 1771 + default ARCH_REALTEK 1772 + help 1773 + If you say yes here, you get support for the RTD1295 SoC 1774 + Real Time Clock. 1775 + 1776 comment "HID Sensor RTC drivers" 1777 1778 config RTC_DRV_HID_SENSOR_TIME ··· 1780 If this driver is compiled as a module, it will be named 1781 rtc-hid-sensor-time. 1782 1783 + config RTC_DRV_GOLDFISH 1784 + tristate "Goldfish Real Time Clock" 1785 + depends on MIPS && (GOLDFISH || COMPILE_TEST) 1786 + help 1787 + Say yes to enable RTC driver for the Goldfish based virtual platform. 1788 + 1789 + Goldfish is a code name for the virtual platform developed by Google 1790 + for Android emulation. 1791 1792 endif # RTC_CLASS
+2
drivers/rtc/Makefile
··· 131 obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o 132 obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o 133 obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o 134 obj-$(CONFIG_RTC_DRV_RV3029C2) += rtc-rv3029c2.o 135 obj-$(CONFIG_RTC_DRV_RV8803) += rtc-rv8803.o 136 obj-$(CONFIG_RTC_DRV_RX4581) += rtc-rx4581.o ··· 171 obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o 172 obj-$(CONFIG_RTC_DRV_XGENE) += rtc-xgene.o 173 obj-$(CONFIG_RTC_DRV_ZYNQMP) += rtc-zynqmp.o
··· 131 obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o 132 obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o 133 obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o 134 + obj-$(CONFIG_RTC_DRV_RTD119X) += rtc-rtd119x.o 135 obj-$(CONFIG_RTC_DRV_RV3029C2) += rtc-rv3029c2.o 136 obj-$(CONFIG_RTC_DRV_RV8803) += rtc-rv8803.o 137 obj-$(CONFIG_RTC_DRV_RX4581) += rtc-rx4581.o ··· 170 obj-$(CONFIG_RTC_DRV_X1205) += rtc-x1205.o 171 obj-$(CONFIG_RTC_DRV_XGENE) += rtc-xgene.o 172 obj-$(CONFIG_RTC_DRV_ZYNQMP) += rtc-zynqmp.o 173 + obj-$(CONFIG_RTC_DRV_GOLDFISH) += rtc-goldfish.o
+4 -16
drivers/rtc/rtc-dev.c
··· 24 25 static int rtc_dev_open(struct inode *inode, struct file *file) 26 { 27 - int err; 28 struct rtc_device *rtc = container_of(inode->i_cdev, 29 struct rtc_device, char_dev); 30 - const struct rtc_class_ops *ops = rtc->ops; 31 32 if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags)) 33 return -EBUSY; 34 35 file->private_data = rtc; 36 37 - err = ops->open ? ops->open(rtc->dev.parent) : 0; 38 - if (err == 0) { 39 - spin_lock_irq(&rtc->irq_lock); 40 - rtc->irq_data = 0; 41 - spin_unlock_irq(&rtc->irq_lock); 42 43 - return 0; 44 - } 45 - 46 - /* something has gone wrong */ 47 - clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); 48 - return err; 49 } 50 51 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL ··· 428 rtc_dev_ioctl(file, RTC_UIE_OFF, 0); 429 rtc_update_irq_enable(rtc, 0); 430 rtc_irq_set_state(rtc, NULL, 0); 431 - 432 - if (rtc->ops->release) 433 - rtc->ops->release(rtc->dev.parent); 434 435 clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); 436 return 0;
··· 24 25 static int rtc_dev_open(struct inode *inode, struct file *file) 26 { 27 struct rtc_device *rtc = container_of(inode->i_cdev, 28 struct rtc_device, char_dev); 29 30 if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags)) 31 return -EBUSY; 32 33 file->private_data = rtc; 34 35 + spin_lock_irq(&rtc->irq_lock); 36 + rtc->irq_data = 0; 37 + spin_unlock_irq(&rtc->irq_lock); 38 39 + return 0; 40 } 41 42 #ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL ··· 437 rtc_dev_ioctl(file, RTC_UIE_OFF, 0); 438 rtc_update_irq_enable(rtc, 0); 439 rtc_irq_set_state(rtc, NULL, 0); 440 441 clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); 442 return 0;
+234 -227
drivers/rtc/rtc-ds1307.c
··· 39 ds_1338, 40 ds_1339, 41 ds_1340, 42 ds_1388, 43 ds_3231, 44 m41t0, ··· 50 last_ds_type /* always last */ 51 /* rs5c372 too? different address... */ 52 }; 53 - 54 55 /* RTC registers don't differ much, except for the century flag */ 56 #define DS1307_REG_SECS 0x00 /* 00-59 */ ··· 113 # define RX8025_BIT_VDET 0x40 114 # define RX8025_BIT_XST 0x20 115 116 - 117 struct ds1307 { 118 - u8 offset; /* register's offset */ 119 - u8 regs[11]; 120 - u16 nvram_offset; 121 struct nvmem_config nvmem_cfg; 122 enum ds_type type; 123 unsigned long flags; ··· 122 struct device *dev; 123 struct regmap *regmap; 124 const char *name; 125 - int irq; 126 struct rtc_device *rtc; 127 #ifdef CONFIG_COMMON_CLK 128 struct clk_hw clks[2]; ··· 132 unsigned alarm:1; 133 u16 nvram_offset; 134 u16 nvram_size; 135 u8 century_reg; 136 u8 century_enable_bit; 137 u8 century_bit; 138 u16 trickle_charger_reg; 139 - u8 trickle_charger_setup; 140 - u8 (*do_trickle_setup)(struct ds1307 *, uint32_t, 141 bool); 142 }; 143 144 - static u8 do_trickle_setup_ds1339(struct ds1307 *, uint32_t ohms, bool diode); 145 146 - static struct chip_desc chips[last_ds_type] = { 147 [ds_1307] = { 148 .nvram_offset = 8, 149 .nvram_size = 56, ··· 194 .alarm = 1, 195 .century_reg = DS1307_REG_MONTH, 196 .century_bit = DS1337_BIT_CENTURY, 197 .trickle_charger_reg = 0x10, 198 .do_trickle_setup = &do_trickle_setup_ds1339, 199 }, ··· 204 .century_bit = DS1340_BIT_CENTURY, 205 .trickle_charger_reg = 0x08, 206 }, 207 [ds_1388] = { 208 .trickle_charger_reg = 0x0a, 209 }, 210 [ds_3231] = { 211 .alarm = 1, 212 .century_reg = DS1307_REG_MONTH, 213 .century_bit = DS1337_BIT_CENTURY, 214 }, 215 [rx_8130] = { 216 .alarm = 1, 217 /* this is battery backed SRAM */ 218 .nvram_offset = 0x20, 219 .nvram_size = 4, /* 32bit (4 word x 8 bit) */ 220 }, 221 [mcp794xx] = { 222 .alarm = 1, 223 /* this is battery backed SRAM */ 224 .nvram_offset = 0x20, 225 .nvram_size = 0x40, 226 }, 227 }; 228 ··· 245 { "ds1339", ds_1339 }, 246 { "ds1388", ds_1388 }, 247 { "ds1340", ds_1340 }, 248 { "ds3231", ds_3231 }, 249 { "m41t0", m41t0 }, 250 { "m41t00", m41t00 }, ··· 288 { 289 .compatible = "dallas,ds1340", 290 .data = (void *)ds_1340 291 }, 292 { 293 .compatible = "maxim,ds3231", ··· 339 { .id = "DS1339", .driver_data = ds_1339 }, 340 { .id = "DS1388", .driver_data = ds_1388 }, 341 { .id = "DS1340", .driver_data = ds_1340 }, 342 { .id = "DS3231", .driver_data = ds_3231 }, 343 { .id = "M41T0", .driver_data = m41t0 }, 344 { .id = "M41T00", .driver_data = m41t00 }, ··· 394 struct ds1307 *ds1307 = dev_get_drvdata(dev); 395 int tmp, ret; 396 const struct chip_desc *chip = &chips[ds1307->type]; 397 398 /* read the RTC date and time registers all at once */ 399 - ret = regmap_bulk_read(ds1307->regmap, ds1307->offset, ds1307->regs, 7); 400 if (ret) { 401 dev_err(dev, "%s error %d\n", "read", ret); 402 return ret; 403 } 404 405 - dev_dbg(dev, "%s: %7ph\n", "read", ds1307->regs); 406 407 /* if oscillator fail bit is set, no data can be trusted */ 408 if (ds1307->type == m41t0 && 409 - ds1307->regs[DS1307_REG_MIN] & M41T0_BIT_OF) { 410 dev_warn_once(dev, "oscillator failed, set time!\n"); 411 return -EINVAL; 412 } 413 414 - t->tm_sec = bcd2bin(ds1307->regs[DS1307_REG_SECS] & 0x7f); 415 - t->tm_min = bcd2bin(ds1307->regs[DS1307_REG_MIN] & 0x7f); 416 - tmp = ds1307->regs[DS1307_REG_HOUR] & 0x3f; 417 t->tm_hour = bcd2bin(tmp); 418 - t->tm_wday = bcd2bin(ds1307->regs[DS1307_REG_WDAY] & 0x07) - 1; 419 - t->tm_mday = bcd2bin(ds1307->regs[DS1307_REG_MDAY] & 0x3f); 420 - tmp = ds1307->regs[DS1307_REG_MONTH] & 0x1f; 421 t->tm_mon = bcd2bin(tmp) - 1; 422 - t->tm_year = bcd2bin(ds1307->regs[DS1307_REG_YEAR]) + 100; 423 424 - if (ds1307->regs[chip->century_reg] & chip->century_bit && 425 IS_ENABLED(CONFIG_RTC_DRV_DS1307_CENTURY)) 426 t->tm_year += 100; 427 ··· 443 const struct chip_desc *chip = &chips[ds1307->type]; 444 int result; 445 int tmp; 446 - u8 *buf = ds1307->regs; 447 448 dev_dbg(dev, "%s secs=%d, mins=%d, " 449 "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", ··· 462 return -EINVAL; 463 #endif 464 465 - buf[DS1307_REG_SECS] = bin2bcd(t->tm_sec); 466 - buf[DS1307_REG_MIN] = bin2bcd(t->tm_min); 467 - buf[DS1307_REG_HOUR] = bin2bcd(t->tm_hour); 468 - buf[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); 469 - buf[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); 470 - buf[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); 471 472 /* assume 20YY not 19YY */ 473 tmp = t->tm_year - 100; 474 - buf[DS1307_REG_YEAR] = bin2bcd(tmp); 475 476 if (chip->century_enable_bit) 477 - buf[chip->century_reg] |= chip->century_enable_bit; 478 if (t->tm_year > 199 && chip->century_bit) 479 - buf[chip->century_reg] |= chip->century_bit; 480 481 if (ds1307->type == mcp794xx) { 482 /* 483 * these bits were cleared when preparing the date/time 484 * values and need to be set again before writing the 485 - * buffer out to the device. 486 */ 487 - buf[DS1307_REG_SECS] |= MCP794XX_BIT_ST; 488 - buf[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN; 489 } 490 491 - dev_dbg(dev, "%s: %7ph\n", "write", buf); 492 493 - result = regmap_bulk_write(ds1307->regmap, ds1307->offset, buf, 7); 494 if (result) { 495 dev_err(dev, "%s error %d\n", "write", result); 496 return result; ··· 503 { 504 struct ds1307 *ds1307 = dev_get_drvdata(dev); 505 int ret; 506 507 if (!test_bit(HAS_ALARM, &ds1307->flags)) 508 return -EINVAL; 509 510 /* read all ALARM1, ALARM2, and status registers at once */ 511 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, 512 - ds1307->regs, 9); 513 if (ret) { 514 dev_err(dev, "%s error %d\n", "alarm read", ret); 515 return ret; 516 } 517 518 dev_dbg(dev, "%s: %4ph, %3ph, %2ph\n", "alarm read", 519 - &ds1307->regs[0], &ds1307->regs[4], &ds1307->regs[7]); 520 521 /* 522 * report alarm time (ALARM1); assume 24 hour and day-of-month modes, 523 * and that all four fields are checked matches 524 */ 525 - t->time.tm_sec = bcd2bin(ds1307->regs[0] & 0x7f); 526 - t->time.tm_min = bcd2bin(ds1307->regs[1] & 0x7f); 527 - t->time.tm_hour = bcd2bin(ds1307->regs[2] & 0x3f); 528 - t->time.tm_mday = bcd2bin(ds1307->regs[3] & 0x3f); 529 530 /* ... and status */ 531 - t->enabled = !!(ds1307->regs[7] & DS1337_BIT_A1IE); 532 - t->pending = !!(ds1307->regs[8] & DS1337_BIT_A1I); 533 534 dev_dbg(dev, "%s secs=%d, mins=%d, " 535 "hours=%d, mday=%d, enabled=%d, pending=%d\n", ··· 544 static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t) 545 { 546 struct ds1307 *ds1307 = dev_get_drvdata(dev); 547 - unsigned char *buf = ds1307->regs; 548 u8 control, status; 549 int ret; 550 ··· 558 t->enabled, t->pending); 559 560 /* read current status of both alarms and the chip */ 561 - ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, buf, 9); 562 if (ret) { 563 dev_err(dev, "%s error %d\n", "alarm write", ret); 564 return ret; 565 } 566 - control = ds1307->regs[7]; 567 - status = ds1307->regs[8]; 568 569 dev_dbg(dev, "%s: %4ph, %3ph, %02x %02x\n", "alarm set (old status)", 570 - &ds1307->regs[0], &ds1307->regs[4], control, status); 571 572 /* set ALARM1, using 24 hour and day-of-month modes */ 573 - buf[0] = bin2bcd(t->time.tm_sec); 574 - buf[1] = bin2bcd(t->time.tm_min); 575 - buf[2] = bin2bcd(t->time.tm_hour); 576 - buf[3] = bin2bcd(t->time.tm_mday); 577 578 /* set ALARM2 to non-garbage */ 579 - buf[4] = 0; 580 - buf[5] = 0; 581 - buf[6] = 0; 582 583 /* disable alarms */ 584 - buf[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE); 585 - buf[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I); 586 587 - ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, buf, 9); 588 if (ret) { 589 dev_err(dev, "can't set alarm time\n"); 590 return ret; ··· 595 /* optionally enable ALARM1 */ 596 if (t->enabled) { 597 dev_dbg(dev, "alarm IRQ armed\n"); 598 - buf[7] |= DS1337_BIT_A1IE; /* only ALARM1 is used */ 599 - regmap_write(ds1307->regmap, DS1337_REG_CONTROL, buf[7]); 600 } 601 602 return 0; ··· 632 #define RX8130_REG_ALARM_HOUR 0x08 633 #define RX8130_REG_ALARM_WEEK_OR_DAY 0x09 634 #define RX8130_REG_EXTENSION 0x0c 635 - #define RX8130_REG_EXTENSION_WADA (1 << 3) 636 #define RX8130_REG_FLAG 0x0d 637 - #define RX8130_REG_FLAG_AF (1 << 3) 638 #define RX8130_REG_CONTROL0 0x0e 639 - #define RX8130_REG_CONTROL0_AIE (1 << 3) 640 641 static irqreturn_t rx8130_irq(int irq, void *dev_id) 642 { ··· 648 mutex_lock(lock); 649 650 /* Read control registers. */ 651 - ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3); 652 if (ret < 0) 653 goto out; 654 if (!(ctl[1] & RX8130_REG_FLAG_AF)) ··· 657 ctl[1] &= ~RX8130_REG_FLAG_AF; 658 ctl[2] &= ~RX8130_REG_CONTROL0_AIE; 659 660 - ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3); 661 if (ret < 0) 662 goto out; 663 ··· 680 return -EINVAL; 681 682 /* Read alarm registers. */ 683 - ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 3); 684 if (ret < 0) 685 return ret; 686 687 /* Read control registers. */ 688 - ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3); 689 if (ret < 0) 690 return ret; 691 ··· 728 t->enabled, t->pending); 729 730 /* Read control registers. */ 731 - ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3); 732 if (ret < 0) 733 return ret; 734 ··· 737 ctl[1] |= RX8130_REG_FLAG_AF; 738 ctl[2] &= ~RX8130_REG_CONTROL0_AIE; 739 740 - ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3); 741 if (ret < 0) 742 return ret; 743 ··· 747 ald[1] = bin2bcd(t->time.tm_hour); 748 ald[2] = bin2bcd(t->time.tm_mday); 749 750 - ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 3); 751 if (ret < 0) 752 return ret; 753 ··· 757 758 ctl[2] |= RX8130_REG_CONTROL0_AIE; 759 760 - return regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 3); 761 } 762 763 static int rx8130_alarm_irq_enable(struct device *dev, unsigned int enabled) ··· 781 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, reg); 782 } 783 784 - static const struct rtc_class_ops rx8130_rtc_ops = { 785 - .read_time = ds1307_get_time, 786 - .set_time = ds1307_set_time, 787 - .read_alarm = rx8130_read_alarm, 788 - .set_alarm = rx8130_set_alarm, 789 - .alarm_irq_enable = rx8130_alarm_irq_enable, 790 - }; 791 - 792 /*----------------------------------------------------------------------*/ 793 794 /* ··· 796 #define MCP794XX_REG_ALARM0_CTRL 0x0d 797 #define MCP794XX_REG_ALARM1_BASE 0x11 798 #define MCP794XX_REG_ALARM1_CTRL 0x14 799 - # define MCP794XX_BIT_ALMX_IF (1 << 3) 800 - # define MCP794XX_BIT_ALMX_C0 (1 << 4) 801 - # define MCP794XX_BIT_ALMX_C1 (1 << 5) 802 - # define MCP794XX_BIT_ALMX_C2 (1 << 6) 803 - # define MCP794XX_BIT_ALMX_POL (1 << 7) 804 # define MCP794XX_MSK_ALMX_MATCH (MCP794XX_BIT_ALMX_C0 | \ 805 MCP794XX_BIT_ALMX_C1 | \ 806 MCP794XX_BIT_ALMX_C2) ··· 841 static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t) 842 { 843 struct ds1307 *ds1307 = dev_get_drvdata(dev); 844 - u8 *regs = ds1307->regs; 845 int ret; 846 847 if (!test_bit(HAS_ALARM, &ds1307->flags)) 848 return -EINVAL; 849 850 /* Read control and alarm 0 registers. */ 851 - ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 10); 852 if (ret) 853 return ret; 854 855 t->enabled = !!(regs[0] & MCP794XX_BIT_ALM0_EN); 856 857 /* Report alarm 0 time assuming 24-hour and day-of-month modes. */ 858 - t->time.tm_sec = bcd2bin(ds1307->regs[3] & 0x7f); 859 - t->time.tm_min = bcd2bin(ds1307->regs[4] & 0x7f); 860 - t->time.tm_hour = bcd2bin(ds1307->regs[5] & 0x3f); 861 - t->time.tm_wday = bcd2bin(ds1307->regs[6] & 0x7) - 1; 862 - t->time.tm_mday = bcd2bin(ds1307->regs[7] & 0x3f); 863 - t->time.tm_mon = bcd2bin(ds1307->regs[8] & 0x1f) - 1; 864 t->time.tm_year = -1; 865 t->time.tm_yday = -1; 866 t->time.tm_isdst = -1; 867 868 dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d " 869 - "enabled=%d polarity=%d irq=%d match=%d\n", __func__, 870 t->time.tm_sec, t->time.tm_min, t->time.tm_hour, 871 t->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled, 872 - !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_POL), 873 - !!(ds1307->regs[6] & MCP794XX_BIT_ALMX_IF), 874 - (ds1307->regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4); 875 876 return 0; 877 } ··· 880 static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t) 881 { 882 struct ds1307 *ds1307 = dev_get_drvdata(dev); 883 - unsigned char *regs = ds1307->regs; 884 int ret; 885 886 if (!test_bit(HAS_ALARM, &ds1307->flags)) ··· 893 t->enabled, t->pending); 894 895 /* Read control and alarm 0 registers. */ 896 - ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 10); 897 if (ret) 898 return ret; 899 ··· 913 /* Disable interrupt. We will not enable until completely programmed */ 914 regs[0] &= ~MCP794XX_BIT_ALM0_EN; 915 916 - ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 10); 917 if (ret) 918 return ret; 919 ··· 936 enabled ? MCP794XX_BIT_ALM0_EN : 0); 937 } 938 939 - static const struct rtc_class_ops mcp794xx_rtc_ops = { 940 - .read_time = ds1307_get_time, 941 - .set_time = ds1307_set_time, 942 - .read_alarm = mcp794xx_read_alarm, 943 - .set_alarm = mcp794xx_set_alarm, 944 - .alarm_irq_enable = mcp794xx_alarm_irq_enable, 945 - }; 946 - 947 /*----------------------------------------------------------------------*/ 948 949 static int ds1307_nvram_read(void *priv, unsigned int offset, void *val, 950 size_t bytes) 951 { 952 struct ds1307 *ds1307 = priv; 953 954 - return regmap_bulk_read(ds1307->regmap, ds1307->nvram_offset + offset, 955 val, bytes); 956 } 957 ··· 952 size_t bytes) 953 { 954 struct ds1307 *ds1307 = priv; 955 956 - return regmap_bulk_write(ds1307->regmap, ds1307->nvram_offset + offset, 957 val, bytes); 958 } 959 960 /*----------------------------------------------------------------------*/ 961 962 static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307, 963 - uint32_t ohms, bool diode) 964 { 965 u8 setup = (diode) ? DS1307_TRICKLE_CHARGER_DIODE : 966 DS1307_TRICKLE_CHARGER_NO_DIODE; ··· 984 return setup; 985 } 986 987 - static void ds1307_trickle_init(struct ds1307 *ds1307, 988 - struct chip_desc *chip) 989 { 990 - uint32_t ohms = 0; 991 bool diode = true; 992 993 if (!chip->do_trickle_setup) 994 - goto out; 995 if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms", 996 &ohms)) 997 - goto out; 998 if (device_property_read_bool(ds1307->dev, "trickle-diode-disable")) 999 diode = false; 1000 - chip->trickle_charger_setup = chip->do_trickle_setup(ds1307, 1001 - ohms, diode); 1002 - out: 1003 - return; 1004 } 1005 1006 /*----------------------------------------------------------------------*/ ··· 1040 } 1041 1042 static ssize_t ds3231_hwmon_show_temp(struct device *dev, 1043 - struct device_attribute *attr, char *buf) 1044 { 1045 int ret; 1046 s32 temp; ··· 1051 1052 return sprintf(buf, "%d\n", temp); 1053 } 1054 - static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, ds3231_hwmon_show_temp, 1055 - NULL, 0); 1056 1057 static struct attribute *ds3231_hwmon_attrs[] = { 1058 &sensor_dev_attr_temp1_input.dev_attr.attr, ··· 1068 return; 1069 1070 dev = devm_hwmon_device_register_with_groups(ds1307->dev, ds1307->name, 1071 - ds1307, ds3231_hwmon_groups); 1072 if (IS_ERR(dev)) { 1073 dev_warn(ds1307->dev, "unable to register hwmon device %ld\n", 1074 PTR_ERR(dev)); ··· 1141 } 1142 1143 static long ds3231_clk_sqw_round_rate(struct clk_hw *hw, unsigned long rate, 1144 - unsigned long *prate) 1145 { 1146 int i; 1147 ··· 1154 } 1155 1156 static int ds3231_clk_sqw_set_rate(struct clk_hw *hw, unsigned long rate, 1157 - unsigned long parent_rate) 1158 { 1159 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); 1160 int control = 0; ··· 1214 }; 1215 1216 static unsigned long ds3231_clk_32khz_recalc_rate(struct clk_hw *hw, 1217 - unsigned long parent_rate) 1218 { 1219 return 32768; 1220 } ··· 1305 1306 /* optional override of the clockname */ 1307 of_property_read_string_index(node, "clock-output-names", i, 1308 - &init.name); 1309 ds1307->clks[i].init = &init; 1310 1311 onecell->clks[i] = devm_clk_register(ds1307->dev, ··· 1355 struct ds1307 *ds1307; 1356 int err = -ENODEV; 1357 int tmp, wday; 1358 - struct chip_desc *chip; 1359 - bool want_irq = false; 1360 bool ds1307_can_wakeup_device = false; 1361 - unsigned char *buf; 1362 struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev); 1363 struct rtc_time tm; 1364 unsigned long timestamp; 1365 - 1366 - irq_handler_t irq_handler = ds1307_irq; 1367 - 1368 - static const int bbsqi_bitpos[] = { 1369 - [ds_1337] = 0, 1370 - [ds_1339] = DS1339_BIT_BBSQI, 1371 - [ds_3231] = DS3231_BIT_BBSQW, 1372 - }; 1373 - const struct rtc_class_ops *rtc_ops = &ds13xx_rtc_ops; 1374 1375 ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL); 1376 if (!ds1307) ··· 1371 dev_set_drvdata(&client->dev, ds1307); 1372 ds1307->dev = &client->dev; 1373 ds1307->name = client->name; 1374 - ds1307->irq = client->irq; 1375 1376 ds1307->regmap = devm_regmap_init_i2c(client, &regmap_config); 1377 if (IS_ERR(ds1307->regmap)) { ··· 1398 ds1307->type = acpi_id->driver_data; 1399 } 1400 1401 - if (!pdata) 1402 - ds1307_trickle_init(ds1307, chip); 1403 - else if (pdata->trickle_charger_setup) 1404 - chip->trickle_charger_setup = pdata->trickle_charger_setup; 1405 1406 - if (chip->trickle_charger_setup && chip->trickle_charger_reg) { 1407 dev_dbg(ds1307->dev, 1408 "writing trickle charger info 0x%x to 0x%x\n", 1409 - DS13XX_TRICKLE_CHARGER_MAGIC | chip->trickle_charger_setup, 1410 - chip->trickle_charger_reg); 1411 regmap_write(ds1307->regmap, chip->trickle_charger_reg, 1412 - DS13XX_TRICKLE_CHARGER_MAGIC | 1413 - chip->trickle_charger_setup); 1414 } 1415 - 1416 - buf = ds1307->regs; 1417 1418 #ifdef CONFIG_OF 1419 /* ··· 1423 * This will guarantee the 'wakealarm' sysfs entry is available on the device, 1424 * if supported by the RTC. 1425 */ 1426 - if (of_property_read_bool(client->dev.of_node, "wakeup-source")) { 1427 ds1307_can_wakeup_device = true; 1428 - } 1429 - /* Intersil ISL12057 DT backward compatibility */ 1430 - if (of_property_read_bool(client->dev.of_node, 1431 - "isil,irq2-can-wakeup-machine")) { 1432 - ds1307_can_wakeup_device = true; 1433 - } 1434 #endif 1435 1436 switch (ds1307->type) { 1437 case ds_1337: 1438 case ds_1339: 1439 case ds_3231: 1440 /* get registers that the "rtc" read below won't read... */ 1441 err = regmap_bulk_read(ds1307->regmap, DS1337_REG_CONTROL, 1442 - buf, 2); 1443 if (err) { 1444 dev_dbg(ds1307->dev, "read error %d\n", err); 1445 goto exit; 1446 } 1447 1448 /* oscillator off? turn it on, so clock can tick. */ 1449 - if (ds1307->regs[0] & DS1337_BIT_nEOSC) 1450 - ds1307->regs[0] &= ~DS1337_BIT_nEOSC; 1451 1452 /* 1453 * Using IRQ or defined as wakeup-source? ··· 1451 * For some variants, be sure alarms can trigger when we're 1452 * running on Vbackup (BBSQI/BBSQW) 1453 */ 1454 - if (chip->alarm && (ds1307->irq > 0 || 1455 - ds1307_can_wakeup_device)) { 1456 - ds1307->regs[0] |= DS1337_BIT_INTCN 1457 - | bbsqi_bitpos[ds1307->type]; 1458 - ds1307->regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE); 1459 - 1460 - want_irq = true; 1461 } 1462 1463 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, 1464 - ds1307->regs[0]); 1465 1466 /* oscillator fault? clear flag, and warn */ 1467 - if (ds1307->regs[1] & DS1337_BIT_OSF) { 1468 regmap_write(ds1307->regmap, DS1337_REG_STATUS, 1469 - ds1307->regs[1] & ~DS1337_BIT_OSF); 1470 dev_warn(ds1307->dev, "SET TIME!\n"); 1471 } 1472 break; 1473 1474 case rx_8025: 1475 err = regmap_bulk_read(ds1307->regmap, 1476 - RX8025_REG_CTRL1 << 4 | 0x08, buf, 2); 1477 if (err) { 1478 dev_dbg(ds1307->dev, "read error %d\n", err); 1479 goto exit; 1480 } 1481 1482 /* oscillator off? turn it on, so clock can tick. */ 1483 - if (!(ds1307->regs[1] & RX8025_BIT_XST)) { 1484 - ds1307->regs[1] |= RX8025_BIT_XST; 1485 regmap_write(ds1307->regmap, 1486 RX8025_REG_CTRL2 << 4 | 0x08, 1487 - ds1307->regs[1]); 1488 dev_warn(ds1307->dev, 1489 "oscillator stop detected - SET TIME!\n"); 1490 } 1491 1492 - if (ds1307->regs[1] & RX8025_BIT_PON) { 1493 - ds1307->regs[1] &= ~RX8025_BIT_PON; 1494 regmap_write(ds1307->regmap, 1495 RX8025_REG_CTRL2 << 4 | 0x08, 1496 - ds1307->regs[1]); 1497 dev_warn(ds1307->dev, "power-on detected\n"); 1498 } 1499 1500 - if (ds1307->regs[1] & RX8025_BIT_VDET) { 1501 - ds1307->regs[1] &= ~RX8025_BIT_VDET; 1502 regmap_write(ds1307->regmap, 1503 RX8025_REG_CTRL2 << 4 | 0x08, 1504 - ds1307->regs[1]); 1505 dev_warn(ds1307->dev, "voltage drop detected\n"); 1506 } 1507 1508 /* make sure we are running in 24hour mode */ 1509 - if (!(ds1307->regs[0] & RX8025_BIT_2412)) { 1510 u8 hour; 1511 1512 /* switch to 24 hour mode */ 1513 regmap_write(ds1307->regmap, 1514 RX8025_REG_CTRL1 << 4 | 0x08, 1515 - ds1307->regs[0] | RX8025_BIT_2412); 1516 1517 err = regmap_bulk_read(ds1307->regmap, 1518 RX8025_REG_CTRL1 << 4 | 0x08, 1519 - buf, 2); 1520 if (err) { 1521 dev_dbg(ds1307->dev, "read error %d\n", err); 1522 goto exit; 1523 } 1524 1525 /* correct hour */ 1526 - hour = bcd2bin(ds1307->regs[DS1307_REG_HOUR]); 1527 if (hour == 12) 1528 hour = 0; 1529 - if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM) 1530 hour += 12; 1531 1532 regmap_write(ds1307->regmap, 1533 DS1307_REG_HOUR << 4 | 0x08, hour); 1534 - } 1535 - break; 1536 - case rx_8130: 1537 - ds1307->offset = 0x10; /* Seconds starts at 0x10 */ 1538 - rtc_ops = &rx8130_rtc_ops; 1539 - if (chip->alarm && ds1307->irq > 0) { 1540 - irq_handler = rx8130_irq; 1541 - want_irq = true; 1542 - } 1543 - break; 1544 - case ds_1388: 1545 - ds1307->offset = 1; /* Seconds starts at 1 */ 1546 - break; 1547 - case mcp794xx: 1548 - rtc_ops = &mcp794xx_rtc_ops; 1549 - if (chip->alarm && (ds1307->irq > 0 || 1550 - ds1307_can_wakeup_device)) { 1551 - irq_handler = mcp794xx_irq; 1552 - want_irq = true; 1553 } 1554 break; 1555 default: ··· 1535 1536 read_rtc: 1537 /* read RTC registers */ 1538 - err = regmap_bulk_read(ds1307->regmap, ds1307->offset, buf, 8); 1539 if (err) { 1540 dev_dbg(ds1307->dev, "read error %d\n", err); 1541 goto exit; ··· 1547 * specify the extra bits as must-be-zero, but there are 1548 * still a few values that are clearly out-of-range. 1549 */ 1550 - tmp = ds1307->regs[DS1307_REG_SECS]; 1551 switch (ds1307->type) { 1552 case ds_1307: 1553 case m41t0: ··· 1566 regmap_write(ds1307->regmap, DS1307_REG_SECS, 0); 1567 1568 /* oscillator fault? clear flag, and warn */ 1569 - if (ds1307->regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) { 1570 regmap_write(ds1307->regmap, DS1307_REG_CONTROL, 1571 - ds1307->regs[DS1307_REG_CONTROL] & 1572 - ~DS1338_BIT_OSF); 1573 dev_warn(ds1307->dev, "SET TIME!\n"); 1574 goto read_rtc; 1575 } ··· 1593 break; 1594 case mcp794xx: 1595 /* make sure that the backup battery is enabled */ 1596 - if (!(ds1307->regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) { 1597 regmap_write(ds1307->regmap, DS1307_REG_WDAY, 1598 - ds1307->regs[DS1307_REG_WDAY] | 1599 MCP794XX_BIT_VBATEN); 1600 } 1601 ··· 1612 break; 1613 } 1614 1615 - tmp = ds1307->regs[DS1307_REG_HOUR]; 1616 switch (ds1307->type) { 1617 case ds_1340: 1618 case m41t0: ··· 1635 tmp = bcd2bin(tmp & 0x1f); 1636 if (tmp == 12) 1637 tmp = 0; 1638 - if (ds1307->regs[DS1307_REG_HOUR] & DS1307_BIT_PM) 1639 tmp += 12; 1640 - regmap_write(ds1307->regmap, ds1307->offset + DS1307_REG_HOUR, 1641 bin2bcd(tmp)); 1642 } 1643 ··· 1660 MCP794XX_REG_WEEKDAY_WDAY_MASK, 1661 tm.tm_wday + 1); 1662 1663 - if (want_irq) { 1664 device_set_wakeup_capable(ds1307->dev, true); 1665 set_bit(HAS_ALARM, &ds1307->flags); 1666 } 1667 1668 ds1307->rtc = devm_rtc_allocate_device(ds1307->dev); 1669 - if (IS_ERR(ds1307->rtc)) { 1670 return PTR_ERR(ds1307->rtc); 1671 - } 1672 1673 - if (ds1307_can_wakeup_device && ds1307->irq <= 0) { 1674 - /* Disable request for an IRQ */ 1675 - want_irq = false; 1676 dev_info(ds1307->dev, 1677 "'wakeup-source' is set, request for an IRQ is disabled!\n"); 1678 /* We cannot support UIE mode if we do not have an IRQ line */ ··· 1677 } 1678 1679 if (want_irq) { 1680 - err = devm_request_threaded_irq(ds1307->dev, 1681 - ds1307->irq, NULL, irq_handler, 1682 IRQF_SHARED | IRQF_ONESHOT, 1683 ds1307->name, ds1307); 1684 if (err) { ··· 1686 device_set_wakeup_capable(ds1307->dev, false); 1687 clear_bit(HAS_ALARM, &ds1307->flags); 1688 dev_err(ds1307->dev, "unable to request IRQ!\n"); 1689 - } else 1690 dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq); 1691 } 1692 1693 if (chip->nvram_size) { ··· 1699 ds1307->nvmem_cfg.reg_read = ds1307_nvram_read; 1700 ds1307->nvmem_cfg.reg_write = ds1307_nvram_write; 1701 ds1307->nvmem_cfg.priv = ds1307; 1702 - ds1307->nvram_offset = chip->nvram_offset; 1703 1704 ds1307->rtc->nvmem_config = &ds1307->nvmem_cfg; 1705 ds1307->rtc->nvram_old_abi = true; 1706 } 1707 1708 - ds1307->rtc->ops = rtc_ops; 1709 err = rtc_register_device(ds1307->rtc); 1710 if (err) 1711 return err;
··· 39 ds_1338, 40 ds_1339, 41 ds_1340, 42 + ds_1341, 43 ds_1388, 44 ds_3231, 45 m41t0, ··· 49 last_ds_type /* always last */ 50 /* rs5c372 too? different address... */ 51 }; 52 53 /* RTC registers don't differ much, except for the century flag */ 54 #define DS1307_REG_SECS 0x00 /* 00-59 */ ··· 113 # define RX8025_BIT_VDET 0x40 114 # define RX8025_BIT_XST 0x20 115 116 struct ds1307 { 117 struct nvmem_config nvmem_cfg; 118 enum ds_type type; 119 unsigned long flags; ··· 126 struct device *dev; 127 struct regmap *regmap; 128 const char *name; 129 struct rtc_device *rtc; 130 #ifdef CONFIG_COMMON_CLK 131 struct clk_hw clks[2]; ··· 137 unsigned alarm:1; 138 u16 nvram_offset; 139 u16 nvram_size; 140 + u8 offset; /* register's offset */ 141 u8 century_reg; 142 u8 century_enable_bit; 143 u8 century_bit; 144 + u8 bbsqi_bit; 145 + irq_handler_t irq_handler; 146 + const struct rtc_class_ops *rtc_ops; 147 u16 trickle_charger_reg; 148 + u8 (*do_trickle_setup)(struct ds1307 *, u32, 149 bool); 150 }; 151 152 + static int ds1307_get_time(struct device *dev, struct rtc_time *t); 153 + static int ds1307_set_time(struct device *dev, struct rtc_time *t); 154 + static u8 do_trickle_setup_ds1339(struct ds1307 *, u32 ohms, bool diode); 155 + static irqreturn_t rx8130_irq(int irq, void *dev_id); 156 + static int rx8130_read_alarm(struct device *dev, struct rtc_wkalrm *t); 157 + static int rx8130_set_alarm(struct device *dev, struct rtc_wkalrm *t); 158 + static int rx8130_alarm_irq_enable(struct device *dev, unsigned int enabled); 159 + static irqreturn_t mcp794xx_irq(int irq, void *dev_id); 160 + static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t); 161 + static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t); 162 + static int mcp794xx_alarm_irq_enable(struct device *dev, unsigned int enabled); 163 164 + static const struct rtc_class_ops rx8130_rtc_ops = { 165 + .read_time = ds1307_get_time, 166 + .set_time = ds1307_set_time, 167 + .read_alarm = rx8130_read_alarm, 168 + .set_alarm = rx8130_set_alarm, 169 + .alarm_irq_enable = rx8130_alarm_irq_enable, 170 + }; 171 + 172 + static const struct rtc_class_ops mcp794xx_rtc_ops = { 173 + .read_time = ds1307_get_time, 174 + .set_time = ds1307_set_time, 175 + .read_alarm = mcp794xx_read_alarm, 176 + .set_alarm = mcp794xx_set_alarm, 177 + .alarm_irq_enable = mcp794xx_alarm_irq_enable, 178 + }; 179 + 180 + static const struct chip_desc chips[last_ds_type] = { 181 [ds_1307] = { 182 .nvram_offset = 8, 183 .nvram_size = 56, ··· 170 .alarm = 1, 171 .century_reg = DS1307_REG_MONTH, 172 .century_bit = DS1337_BIT_CENTURY, 173 + .bbsqi_bit = DS1339_BIT_BBSQI, 174 .trickle_charger_reg = 0x10, 175 .do_trickle_setup = &do_trickle_setup_ds1339, 176 }, ··· 179 .century_bit = DS1340_BIT_CENTURY, 180 .trickle_charger_reg = 0x08, 181 }, 182 + [ds_1341] = { 183 + .century_reg = DS1307_REG_MONTH, 184 + .century_bit = DS1337_BIT_CENTURY, 185 + }, 186 [ds_1388] = { 187 + .offset = 1, 188 .trickle_charger_reg = 0x0a, 189 }, 190 [ds_3231] = { 191 .alarm = 1, 192 .century_reg = DS1307_REG_MONTH, 193 .century_bit = DS1337_BIT_CENTURY, 194 + .bbsqi_bit = DS3231_BIT_BBSQW, 195 }, 196 [rx_8130] = { 197 .alarm = 1, 198 /* this is battery backed SRAM */ 199 .nvram_offset = 0x20, 200 .nvram_size = 4, /* 32bit (4 word x 8 bit) */ 201 + .offset = 0x10, 202 + .irq_handler = rx8130_irq, 203 + .rtc_ops = &rx8130_rtc_ops, 204 }, 205 [mcp794xx] = { 206 .alarm = 1, 207 /* this is battery backed SRAM */ 208 .nvram_offset = 0x20, 209 .nvram_size = 0x40, 210 + .irq_handler = mcp794xx_irq, 211 + .rtc_ops = &mcp794xx_rtc_ops, 212 }, 213 }; 214 ··· 209 { "ds1339", ds_1339 }, 210 { "ds1388", ds_1388 }, 211 { "ds1340", ds_1340 }, 212 + { "ds1341", ds_1341 }, 213 { "ds3231", ds_3231 }, 214 { "m41t0", m41t0 }, 215 { "m41t00", m41t00 }, ··· 251 { 252 .compatible = "dallas,ds1340", 253 .data = (void *)ds_1340 254 + }, 255 + { 256 + .compatible = "dallas,ds1341", 257 + .data = (void *)ds_1341 258 }, 259 { 260 .compatible = "maxim,ds3231", ··· 298 { .id = "DS1339", .driver_data = ds_1339 }, 299 { .id = "DS1388", .driver_data = ds_1388 }, 300 { .id = "DS1340", .driver_data = ds_1340 }, 301 + { .id = "DS1341", .driver_data = ds_1341 }, 302 { .id = "DS3231", .driver_data = ds_3231 }, 303 { .id = "M41T0", .driver_data = m41t0 }, 304 { .id = "M41T00", .driver_data = m41t00 }, ··· 352 struct ds1307 *ds1307 = dev_get_drvdata(dev); 353 int tmp, ret; 354 const struct chip_desc *chip = &chips[ds1307->type]; 355 + u8 regs[7]; 356 357 /* read the RTC date and time registers all at once */ 358 + ret = regmap_bulk_read(ds1307->regmap, chip->offset, regs, 359 + sizeof(regs)); 360 if (ret) { 361 dev_err(dev, "%s error %d\n", "read", ret); 362 return ret; 363 } 364 365 + dev_dbg(dev, "%s: %7ph\n", "read", regs); 366 367 /* if oscillator fail bit is set, no data can be trusted */ 368 if (ds1307->type == m41t0 && 369 + regs[DS1307_REG_MIN] & M41T0_BIT_OF) { 370 dev_warn_once(dev, "oscillator failed, set time!\n"); 371 return -EINVAL; 372 } 373 374 + t->tm_sec = bcd2bin(regs[DS1307_REG_SECS] & 0x7f); 375 + t->tm_min = bcd2bin(regs[DS1307_REG_MIN] & 0x7f); 376 + tmp = regs[DS1307_REG_HOUR] & 0x3f; 377 t->tm_hour = bcd2bin(tmp); 378 + t->tm_wday = bcd2bin(regs[DS1307_REG_WDAY] & 0x07) - 1; 379 + t->tm_mday = bcd2bin(regs[DS1307_REG_MDAY] & 0x3f); 380 + tmp = regs[DS1307_REG_MONTH] & 0x1f; 381 t->tm_mon = bcd2bin(tmp) - 1; 382 + t->tm_year = bcd2bin(regs[DS1307_REG_YEAR]) + 100; 383 384 + if (regs[chip->century_reg] & chip->century_bit && 385 IS_ENABLED(CONFIG_RTC_DRV_DS1307_CENTURY)) 386 t->tm_year += 100; 387 ··· 399 const struct chip_desc *chip = &chips[ds1307->type]; 400 int result; 401 int tmp; 402 + u8 regs[7]; 403 404 dev_dbg(dev, "%s secs=%d, mins=%d, " 405 "hours=%d, mday=%d, mon=%d, year=%d, wday=%d\n", ··· 418 return -EINVAL; 419 #endif 420 421 + regs[DS1307_REG_SECS] = bin2bcd(t->tm_sec); 422 + regs[DS1307_REG_MIN] = bin2bcd(t->tm_min); 423 + regs[DS1307_REG_HOUR] = bin2bcd(t->tm_hour); 424 + regs[DS1307_REG_WDAY] = bin2bcd(t->tm_wday + 1); 425 + regs[DS1307_REG_MDAY] = bin2bcd(t->tm_mday); 426 + regs[DS1307_REG_MONTH] = bin2bcd(t->tm_mon + 1); 427 428 /* assume 20YY not 19YY */ 429 tmp = t->tm_year - 100; 430 + regs[DS1307_REG_YEAR] = bin2bcd(tmp); 431 432 if (chip->century_enable_bit) 433 + regs[chip->century_reg] |= chip->century_enable_bit; 434 if (t->tm_year > 199 && chip->century_bit) 435 + regs[chip->century_reg] |= chip->century_bit; 436 437 if (ds1307->type == mcp794xx) { 438 /* 439 * these bits were cleared when preparing the date/time 440 * values and need to be set again before writing the 441 + * regsfer out to the device. 442 */ 443 + regs[DS1307_REG_SECS] |= MCP794XX_BIT_ST; 444 + regs[DS1307_REG_WDAY] |= MCP794XX_BIT_VBATEN; 445 } 446 447 + dev_dbg(dev, "%s: %7ph\n", "write", regs); 448 449 + result = regmap_bulk_write(ds1307->regmap, chip->offset, regs, 450 + sizeof(regs)); 451 if (result) { 452 dev_err(dev, "%s error %d\n", "write", result); 453 return result; ··· 458 { 459 struct ds1307 *ds1307 = dev_get_drvdata(dev); 460 int ret; 461 + u8 regs[9]; 462 463 if (!test_bit(HAS_ALARM, &ds1307->flags)) 464 return -EINVAL; 465 466 /* read all ALARM1, ALARM2, and status registers at once */ 467 ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, 468 + regs, sizeof(regs)); 469 if (ret) { 470 dev_err(dev, "%s error %d\n", "alarm read", ret); 471 return ret; 472 } 473 474 dev_dbg(dev, "%s: %4ph, %3ph, %2ph\n", "alarm read", 475 + &regs[0], &regs[4], &regs[7]); 476 477 /* 478 * report alarm time (ALARM1); assume 24 hour and day-of-month modes, 479 * and that all four fields are checked matches 480 */ 481 + t->time.tm_sec = bcd2bin(regs[0] & 0x7f); 482 + t->time.tm_min = bcd2bin(regs[1] & 0x7f); 483 + t->time.tm_hour = bcd2bin(regs[2] & 0x3f); 484 + t->time.tm_mday = bcd2bin(regs[3] & 0x3f); 485 486 /* ... and status */ 487 + t->enabled = !!(regs[7] & DS1337_BIT_A1IE); 488 + t->pending = !!(regs[8] & DS1337_BIT_A1I); 489 490 dev_dbg(dev, "%s secs=%d, mins=%d, " 491 "hours=%d, mday=%d, enabled=%d, pending=%d\n", ··· 498 static int ds1337_set_alarm(struct device *dev, struct rtc_wkalrm *t) 499 { 500 struct ds1307 *ds1307 = dev_get_drvdata(dev); 501 + unsigned char regs[9]; 502 u8 control, status; 503 int ret; 504 ··· 512 t->enabled, t->pending); 513 514 /* read current status of both alarms and the chip */ 515 + ret = regmap_bulk_read(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs, 516 + sizeof(regs)); 517 if (ret) { 518 dev_err(dev, "%s error %d\n", "alarm write", ret); 519 return ret; 520 } 521 + control = regs[7]; 522 + status = regs[8]; 523 524 dev_dbg(dev, "%s: %4ph, %3ph, %02x %02x\n", "alarm set (old status)", 525 + &regs[0], &regs[4], control, status); 526 527 /* set ALARM1, using 24 hour and day-of-month modes */ 528 + regs[0] = bin2bcd(t->time.tm_sec); 529 + regs[1] = bin2bcd(t->time.tm_min); 530 + regs[2] = bin2bcd(t->time.tm_hour); 531 + regs[3] = bin2bcd(t->time.tm_mday); 532 533 /* set ALARM2 to non-garbage */ 534 + regs[4] = 0; 535 + regs[5] = 0; 536 + regs[6] = 0; 537 538 /* disable alarms */ 539 + regs[7] = control & ~(DS1337_BIT_A1IE | DS1337_BIT_A2IE); 540 + regs[8] = status & ~(DS1337_BIT_A1I | DS1337_BIT_A2I); 541 542 + ret = regmap_bulk_write(ds1307->regmap, DS1339_REG_ALARM1_SECS, regs, 543 + sizeof(regs)); 544 if (ret) { 545 dev_err(dev, "can't set alarm time\n"); 546 return ret; ··· 547 /* optionally enable ALARM1 */ 548 if (t->enabled) { 549 dev_dbg(dev, "alarm IRQ armed\n"); 550 + regs[7] |= DS1337_BIT_A1IE; /* only ALARM1 is used */ 551 + regmap_write(ds1307->regmap, DS1337_REG_CONTROL, regs[7]); 552 } 553 554 return 0; ··· 584 #define RX8130_REG_ALARM_HOUR 0x08 585 #define RX8130_REG_ALARM_WEEK_OR_DAY 0x09 586 #define RX8130_REG_EXTENSION 0x0c 587 + #define RX8130_REG_EXTENSION_WADA BIT(3) 588 #define RX8130_REG_FLAG 0x0d 589 + #define RX8130_REG_FLAG_AF BIT(3) 590 #define RX8130_REG_CONTROL0 0x0e 591 + #define RX8130_REG_CONTROL0_AIE BIT(3) 592 593 static irqreturn_t rx8130_irq(int irq, void *dev_id) 594 { ··· 600 mutex_lock(lock); 601 602 /* Read control registers. */ 603 + ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 604 + sizeof(ctl)); 605 if (ret < 0) 606 goto out; 607 if (!(ctl[1] & RX8130_REG_FLAG_AF)) ··· 608 ctl[1] &= ~RX8130_REG_FLAG_AF; 609 ctl[2] &= ~RX8130_REG_CONTROL0_AIE; 610 611 + ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 612 + sizeof(ctl)); 613 if (ret < 0) 614 goto out; 615 ··· 630 return -EINVAL; 631 632 /* Read alarm registers. */ 633 + ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 634 + sizeof(ald)); 635 if (ret < 0) 636 return ret; 637 638 /* Read control registers. */ 639 + ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 640 + sizeof(ctl)); 641 if (ret < 0) 642 return ret; 643 ··· 676 t->enabled, t->pending); 677 678 /* Read control registers. */ 679 + ret = regmap_bulk_read(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 680 + sizeof(ctl)); 681 if (ret < 0) 682 return ret; 683 ··· 684 ctl[1] |= RX8130_REG_FLAG_AF; 685 ctl[2] &= ~RX8130_REG_CONTROL0_AIE; 686 687 + ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 688 + sizeof(ctl)); 689 if (ret < 0) 690 return ret; 691 ··· 693 ald[1] = bin2bcd(t->time.tm_hour); 694 ald[2] = bin2bcd(t->time.tm_mday); 695 696 + ret = regmap_bulk_write(ds1307->regmap, RX8130_REG_ALARM_MIN, ald, 697 + sizeof(ald)); 698 if (ret < 0) 699 return ret; 700 ··· 702 703 ctl[2] |= RX8130_REG_CONTROL0_AIE; 704 705 + return regmap_bulk_write(ds1307->regmap, RX8130_REG_EXTENSION, ctl, 706 + sizeof(ctl)); 707 } 708 709 static int rx8130_alarm_irq_enable(struct device *dev, unsigned int enabled) ··· 725 return regmap_write(ds1307->regmap, RX8130_REG_CONTROL0, reg); 726 } 727 728 /*----------------------------------------------------------------------*/ 729 730 /* ··· 748 #define MCP794XX_REG_ALARM0_CTRL 0x0d 749 #define MCP794XX_REG_ALARM1_BASE 0x11 750 #define MCP794XX_REG_ALARM1_CTRL 0x14 751 + # define MCP794XX_BIT_ALMX_IF BIT(3) 752 + # define MCP794XX_BIT_ALMX_C0 BIT(4) 753 + # define MCP794XX_BIT_ALMX_C1 BIT(5) 754 + # define MCP794XX_BIT_ALMX_C2 BIT(6) 755 + # define MCP794XX_BIT_ALMX_POL BIT(7) 756 # define MCP794XX_MSK_ALMX_MATCH (MCP794XX_BIT_ALMX_C0 | \ 757 MCP794XX_BIT_ALMX_C1 | \ 758 MCP794XX_BIT_ALMX_C2) ··· 793 static int mcp794xx_read_alarm(struct device *dev, struct rtc_wkalrm *t) 794 { 795 struct ds1307 *ds1307 = dev_get_drvdata(dev); 796 + u8 regs[10]; 797 int ret; 798 799 if (!test_bit(HAS_ALARM, &ds1307->flags)) 800 return -EINVAL; 801 802 /* Read control and alarm 0 registers. */ 803 + ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 804 + sizeof(regs)); 805 if (ret) 806 return ret; 807 808 t->enabled = !!(regs[0] & MCP794XX_BIT_ALM0_EN); 809 810 /* Report alarm 0 time assuming 24-hour and day-of-month modes. */ 811 + t->time.tm_sec = bcd2bin(regs[3] & 0x7f); 812 + t->time.tm_min = bcd2bin(regs[4] & 0x7f); 813 + t->time.tm_hour = bcd2bin(regs[5] & 0x3f); 814 + t->time.tm_wday = bcd2bin(regs[6] & 0x7) - 1; 815 + t->time.tm_mday = bcd2bin(regs[7] & 0x3f); 816 + t->time.tm_mon = bcd2bin(regs[8] & 0x1f) - 1; 817 t->time.tm_year = -1; 818 t->time.tm_yday = -1; 819 t->time.tm_isdst = -1; 820 821 dev_dbg(dev, "%s, sec=%d min=%d hour=%d wday=%d mday=%d mon=%d " 822 + "enabled=%d polarity=%d irq=%d match=%lu\n", __func__, 823 t->time.tm_sec, t->time.tm_min, t->time.tm_hour, 824 t->time.tm_wday, t->time.tm_mday, t->time.tm_mon, t->enabled, 825 + !!(regs[6] & MCP794XX_BIT_ALMX_POL), 826 + !!(regs[6] & MCP794XX_BIT_ALMX_IF), 827 + (regs[6] & MCP794XX_MSK_ALMX_MATCH) >> 4); 828 829 return 0; 830 } ··· 831 static int mcp794xx_set_alarm(struct device *dev, struct rtc_wkalrm *t) 832 { 833 struct ds1307 *ds1307 = dev_get_drvdata(dev); 834 + unsigned char regs[10]; 835 int ret; 836 837 if (!test_bit(HAS_ALARM, &ds1307->flags)) ··· 844 t->enabled, t->pending); 845 846 /* Read control and alarm 0 registers. */ 847 + ret = regmap_bulk_read(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 848 + sizeof(regs)); 849 if (ret) 850 return ret; 851 ··· 863 /* Disable interrupt. We will not enable until completely programmed */ 864 regs[0] &= ~MCP794XX_BIT_ALM0_EN; 865 866 + ret = regmap_bulk_write(ds1307->regmap, MCP794XX_REG_CONTROL, regs, 867 + sizeof(regs)); 868 if (ret) 869 return ret; 870 ··· 885 enabled ? MCP794XX_BIT_ALM0_EN : 0); 886 } 887 888 /*----------------------------------------------------------------------*/ 889 890 static int ds1307_nvram_read(void *priv, unsigned int offset, void *val, 891 size_t bytes) 892 { 893 struct ds1307 *ds1307 = priv; 894 + const struct chip_desc *chip = &chips[ds1307->type]; 895 896 + return regmap_bulk_read(ds1307->regmap, chip->nvram_offset + offset, 897 val, bytes); 898 } 899 ··· 908 size_t bytes) 909 { 910 struct ds1307 *ds1307 = priv; 911 + const struct chip_desc *chip = &chips[ds1307->type]; 912 913 + return regmap_bulk_write(ds1307->regmap, chip->nvram_offset + offset, 914 val, bytes); 915 } 916 917 /*----------------------------------------------------------------------*/ 918 919 static u8 do_trickle_setup_ds1339(struct ds1307 *ds1307, 920 + u32 ohms, bool diode) 921 { 922 u8 setup = (diode) ? DS1307_TRICKLE_CHARGER_DIODE : 923 DS1307_TRICKLE_CHARGER_NO_DIODE; ··· 939 return setup; 940 } 941 942 + static u8 ds1307_trickle_init(struct ds1307 *ds1307, 943 + const struct chip_desc *chip) 944 { 945 + u32 ohms; 946 bool diode = true; 947 948 if (!chip->do_trickle_setup) 949 + return 0; 950 + 951 if (device_property_read_u32(ds1307->dev, "trickle-resistor-ohms", 952 &ohms)) 953 + return 0; 954 + 955 if (device_property_read_bool(ds1307->dev, "trickle-diode-disable")) 956 diode = false; 957 + 958 + return chip->do_trickle_setup(ds1307, ohms, diode); 959 } 960 961 /*----------------------------------------------------------------------*/ ··· 995 } 996 997 static ssize_t ds3231_hwmon_show_temp(struct device *dev, 998 + struct device_attribute *attr, char *buf) 999 { 1000 int ret; 1001 s32 temp; ··· 1006 1007 return sprintf(buf, "%d\n", temp); 1008 } 1009 + static SENSOR_DEVICE_ATTR(temp1_input, 0444, ds3231_hwmon_show_temp, 1010 + NULL, 0); 1011 1012 static struct attribute *ds3231_hwmon_attrs[] = { 1013 &sensor_dev_attr_temp1_input.dev_attr.attr, ··· 1023 return; 1024 1025 dev = devm_hwmon_device_register_with_groups(ds1307->dev, ds1307->name, 1026 + ds1307, 1027 + ds3231_hwmon_groups); 1028 if (IS_ERR(dev)) { 1029 dev_warn(ds1307->dev, "unable to register hwmon device %ld\n", 1030 PTR_ERR(dev)); ··· 1095 } 1096 1097 static long ds3231_clk_sqw_round_rate(struct clk_hw *hw, unsigned long rate, 1098 + unsigned long *prate) 1099 { 1100 int i; 1101 ··· 1108 } 1109 1110 static int ds3231_clk_sqw_set_rate(struct clk_hw *hw, unsigned long rate, 1111 + unsigned long parent_rate) 1112 { 1113 struct ds1307 *ds1307 = clk_sqw_to_ds1307(hw); 1114 int control = 0; ··· 1168 }; 1169 1170 static unsigned long ds3231_clk_32khz_recalc_rate(struct clk_hw *hw, 1171 + unsigned long parent_rate) 1172 { 1173 return 32768; 1174 } ··· 1259 1260 /* optional override of the clockname */ 1261 of_property_read_string_index(node, "clock-output-names", i, 1262 + &init.name); 1263 ds1307->clks[i].init = &init; 1264 1265 onecell->clks[i] = devm_clk_register(ds1307->dev, ··· 1309 struct ds1307 *ds1307; 1310 int err = -ENODEV; 1311 int tmp, wday; 1312 + const struct chip_desc *chip; 1313 + bool want_irq; 1314 bool ds1307_can_wakeup_device = false; 1315 + unsigned char regs[8]; 1316 struct ds1307_platform_data *pdata = dev_get_platdata(&client->dev); 1317 struct rtc_time tm; 1318 unsigned long timestamp; 1319 + u8 trickle_charger_setup = 0; 1320 1321 ds1307 = devm_kzalloc(&client->dev, sizeof(struct ds1307), GFP_KERNEL); 1322 if (!ds1307) ··· 1333 dev_set_drvdata(&client->dev, ds1307); 1334 ds1307->dev = &client->dev; 1335 ds1307->name = client->name; 1336 1337 ds1307->regmap = devm_regmap_init_i2c(client, &regmap_config); 1338 if (IS_ERR(ds1307->regmap)) { ··· 1361 ds1307->type = acpi_id->driver_data; 1362 } 1363 1364 + want_irq = client->irq > 0 && chip->alarm; 1365 1366 + if (!pdata) 1367 + trickle_charger_setup = ds1307_trickle_init(ds1307, chip); 1368 + else if (pdata->trickle_charger_setup) 1369 + trickle_charger_setup = pdata->trickle_charger_setup; 1370 + 1371 + if (trickle_charger_setup && chip->trickle_charger_reg) { 1372 + trickle_charger_setup |= DS13XX_TRICKLE_CHARGER_MAGIC; 1373 dev_dbg(ds1307->dev, 1374 "writing trickle charger info 0x%x to 0x%x\n", 1375 + trickle_charger_setup, chip->trickle_charger_reg); 1376 regmap_write(ds1307->regmap, chip->trickle_charger_reg, 1377 + trickle_charger_setup); 1378 } 1379 1380 #ifdef CONFIG_OF 1381 /* ··· 1387 * This will guarantee the 'wakealarm' sysfs entry is available on the device, 1388 * if supported by the RTC. 1389 */ 1390 + if (chip->alarm && of_property_read_bool(client->dev.of_node, 1391 + "wakeup-source")) 1392 ds1307_can_wakeup_device = true; 1393 #endif 1394 1395 switch (ds1307->type) { 1396 case ds_1337: 1397 case ds_1339: 1398 + case ds_1341: 1399 case ds_3231: 1400 /* get registers that the "rtc" read below won't read... */ 1401 err = regmap_bulk_read(ds1307->regmap, DS1337_REG_CONTROL, 1402 + regs, 2); 1403 if (err) { 1404 dev_dbg(ds1307->dev, "read error %d\n", err); 1405 goto exit; 1406 } 1407 1408 /* oscillator off? turn it on, so clock can tick. */ 1409 + if (regs[0] & DS1337_BIT_nEOSC) 1410 + regs[0] &= ~DS1337_BIT_nEOSC; 1411 1412 /* 1413 * Using IRQ or defined as wakeup-source? ··· 1419 * For some variants, be sure alarms can trigger when we're 1420 * running on Vbackup (BBSQI/BBSQW) 1421 */ 1422 + if (want_irq || ds1307_can_wakeup_device) { 1423 + regs[0] |= DS1337_BIT_INTCN | chip->bbsqi_bit; 1424 + regs[0] &= ~(DS1337_BIT_A2IE | DS1337_BIT_A1IE); 1425 } 1426 1427 regmap_write(ds1307->regmap, DS1337_REG_CONTROL, 1428 + regs[0]); 1429 1430 /* oscillator fault? clear flag, and warn */ 1431 + if (regs[1] & DS1337_BIT_OSF) { 1432 regmap_write(ds1307->regmap, DS1337_REG_STATUS, 1433 + regs[1] & ~DS1337_BIT_OSF); 1434 dev_warn(ds1307->dev, "SET TIME!\n"); 1435 } 1436 break; 1437 1438 case rx_8025: 1439 err = regmap_bulk_read(ds1307->regmap, 1440 + RX8025_REG_CTRL1 << 4 | 0x08, regs, 2); 1441 if (err) { 1442 dev_dbg(ds1307->dev, "read error %d\n", err); 1443 goto exit; 1444 } 1445 1446 /* oscillator off? turn it on, so clock can tick. */ 1447 + if (!(regs[1] & RX8025_BIT_XST)) { 1448 + regs[1] |= RX8025_BIT_XST; 1449 regmap_write(ds1307->regmap, 1450 RX8025_REG_CTRL2 << 4 | 0x08, 1451 + regs[1]); 1452 dev_warn(ds1307->dev, 1453 "oscillator stop detected - SET TIME!\n"); 1454 } 1455 1456 + if (regs[1] & RX8025_BIT_PON) { 1457 + regs[1] &= ~RX8025_BIT_PON; 1458 regmap_write(ds1307->regmap, 1459 RX8025_REG_CTRL2 << 4 | 0x08, 1460 + regs[1]); 1461 dev_warn(ds1307->dev, "power-on detected\n"); 1462 } 1463 1464 + if (regs[1] & RX8025_BIT_VDET) { 1465 + regs[1] &= ~RX8025_BIT_VDET; 1466 regmap_write(ds1307->regmap, 1467 RX8025_REG_CTRL2 << 4 | 0x08, 1468 + regs[1]); 1469 dev_warn(ds1307->dev, "voltage drop detected\n"); 1470 } 1471 1472 /* make sure we are running in 24hour mode */ 1473 + if (!(regs[0] & RX8025_BIT_2412)) { 1474 u8 hour; 1475 1476 /* switch to 24 hour mode */ 1477 regmap_write(ds1307->regmap, 1478 RX8025_REG_CTRL1 << 4 | 0x08, 1479 + regs[0] | RX8025_BIT_2412); 1480 1481 err = regmap_bulk_read(ds1307->regmap, 1482 RX8025_REG_CTRL1 << 4 | 0x08, 1483 + regs, 2); 1484 if (err) { 1485 dev_dbg(ds1307->dev, "read error %d\n", err); 1486 goto exit; 1487 } 1488 1489 /* correct hour */ 1490 + hour = bcd2bin(regs[DS1307_REG_HOUR]); 1491 if (hour == 12) 1492 hour = 0; 1493 + if (regs[DS1307_REG_HOUR] & DS1307_BIT_PM) 1494 hour += 12; 1495 1496 regmap_write(ds1307->regmap, 1497 DS1307_REG_HOUR << 4 | 0x08, hour); 1498 } 1499 break; 1500 default: ··· 1526 1527 read_rtc: 1528 /* read RTC registers */ 1529 + err = regmap_bulk_read(ds1307->regmap, chip->offset, regs, 1530 + sizeof(regs)); 1531 if (err) { 1532 dev_dbg(ds1307->dev, "read error %d\n", err); 1533 goto exit; ··· 1537 * specify the extra bits as must-be-zero, but there are 1538 * still a few values that are clearly out-of-range. 1539 */ 1540 + tmp = regs[DS1307_REG_SECS]; 1541 switch (ds1307->type) { 1542 case ds_1307: 1543 case m41t0: ··· 1556 regmap_write(ds1307->regmap, DS1307_REG_SECS, 0); 1557 1558 /* oscillator fault? clear flag, and warn */ 1559 + if (regs[DS1307_REG_CONTROL] & DS1338_BIT_OSF) { 1560 regmap_write(ds1307->regmap, DS1307_REG_CONTROL, 1561 + regs[DS1307_REG_CONTROL] & 1562 + ~DS1338_BIT_OSF); 1563 dev_warn(ds1307->dev, "SET TIME!\n"); 1564 goto read_rtc; 1565 } ··· 1583 break; 1584 case mcp794xx: 1585 /* make sure that the backup battery is enabled */ 1586 + if (!(regs[DS1307_REG_WDAY] & MCP794XX_BIT_VBATEN)) { 1587 regmap_write(ds1307->regmap, DS1307_REG_WDAY, 1588 + regs[DS1307_REG_WDAY] | 1589 MCP794XX_BIT_VBATEN); 1590 } 1591 ··· 1602 break; 1603 } 1604 1605 + tmp = regs[DS1307_REG_HOUR]; 1606 switch (ds1307->type) { 1607 case ds_1340: 1608 case m41t0: ··· 1625 tmp = bcd2bin(tmp & 0x1f); 1626 if (tmp == 12) 1627 tmp = 0; 1628 + if (regs[DS1307_REG_HOUR] & DS1307_BIT_PM) 1629 tmp += 12; 1630 + regmap_write(ds1307->regmap, chip->offset + DS1307_REG_HOUR, 1631 bin2bcd(tmp)); 1632 } 1633 ··· 1650 MCP794XX_REG_WEEKDAY_WDAY_MASK, 1651 tm.tm_wday + 1); 1652 1653 + if (want_irq || ds1307_can_wakeup_device) { 1654 device_set_wakeup_capable(ds1307->dev, true); 1655 set_bit(HAS_ALARM, &ds1307->flags); 1656 } 1657 1658 ds1307->rtc = devm_rtc_allocate_device(ds1307->dev); 1659 + if (IS_ERR(ds1307->rtc)) 1660 return PTR_ERR(ds1307->rtc); 1661 1662 + if (ds1307_can_wakeup_device && !want_irq) { 1663 dev_info(ds1307->dev, 1664 "'wakeup-source' is set, request for an IRQ is disabled!\n"); 1665 /* We cannot support UIE mode if we do not have an IRQ line */ ··· 1670 } 1671 1672 if (want_irq) { 1673 + err = devm_request_threaded_irq(ds1307->dev, client->irq, NULL, 1674 + chip->irq_handler ?: ds1307_irq, 1675 IRQF_SHARED | IRQF_ONESHOT, 1676 ds1307->name, ds1307); 1677 if (err) { ··· 1679 device_set_wakeup_capable(ds1307->dev, false); 1680 clear_bit(HAS_ALARM, &ds1307->flags); 1681 dev_err(ds1307->dev, "unable to request IRQ!\n"); 1682 + } else { 1683 dev_dbg(ds1307->dev, "got IRQ %d\n", client->irq); 1684 + } 1685 } 1686 1687 if (chip->nvram_size) { ··· 1691 ds1307->nvmem_cfg.reg_read = ds1307_nvram_read; 1692 ds1307->nvmem_cfg.reg_write = ds1307_nvram_write; 1693 ds1307->nvmem_cfg.priv = ds1307; 1694 1695 ds1307->rtc->nvmem_config = &ds1307->nvmem_cfg; 1696 ds1307->rtc->nvram_old_abi = true; 1697 } 1698 1699 + ds1307->rtc->ops = chip->rtc_ops ?: &ds13xx_rtc_ops; 1700 err = rtc_register_device(ds1307->rtc); 1701 if (err) 1702 return err;
+1 -1
drivers/rtc/rtc-ds1672.c
··· 190 return 0; 191 } 192 193 - static struct i2c_device_id ds1672_id[] = { 194 { "ds1672", 0 }, 195 { } 196 };
··· 190 return 0; 191 } 192 193 + static const struct i2c_device_id ds1672_id[] = { 194 { "ds1672", 0 }, 195 { } 196 };
+1 -1
drivers/rtc/rtc-em3027.c
··· 132 return 0; 133 } 134 135 - static struct i2c_device_id em3027_id[] = { 136 { "em3027", 0 }, 137 { } 138 };
··· 132 return 0; 133 } 134 135 + static const struct i2c_device_id em3027_id[] = { 136 { "em3027", 0 }, 137 { } 138 };
+237
drivers/rtc/rtc-goldfish.c
···
··· 1 + /* drivers/rtc/rtc-goldfish.c 2 + * 3 + * Copyright (C) 2007 Google, Inc. 4 + * Copyright (C) 2017 Imagination Technologies Ltd. 5 + * 6 + * This software is licensed under the terms of the GNU General Public 7 + * License version 2, as published by the Free Software Foundation, and 8 + * may be copied, distributed, and modified under those terms. 9 + * 10 + * This program is distributed in the hope that it will be useful, 11 + * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 + * GNU General Public License for more details. 14 + * 15 + */ 16 + 17 + #include <linux/module.h> 18 + #include <linux/platform_device.h> 19 + #include <linux/rtc.h> 20 + #include <linux/io.h> 21 + 22 + #define TIMER_TIME_LOW 0x00 /* get low bits of current time */ 23 + /* and update TIMER_TIME_HIGH */ 24 + #define TIMER_TIME_HIGH 0x04 /* get high bits of time at last */ 25 + /* TIMER_TIME_LOW read */ 26 + #define TIMER_ALARM_LOW 0x08 /* set low bits of alarm and */ 27 + /* activate it */ 28 + #define TIMER_ALARM_HIGH 0x0c /* set high bits of next alarm */ 29 + #define TIMER_IRQ_ENABLED 0x10 30 + #define TIMER_CLEAR_ALARM 0x14 31 + #define TIMER_ALARM_STATUS 0x18 32 + #define TIMER_CLEAR_INTERRUPT 0x1c 33 + 34 + struct goldfish_rtc { 35 + void __iomem *base; 36 + int irq; 37 + struct rtc_device *rtc; 38 + }; 39 + 40 + static int goldfish_rtc_read_alarm(struct device *dev, 41 + struct rtc_wkalrm *alrm) 42 + { 43 + u64 rtc_alarm; 44 + u64 rtc_alarm_low; 45 + u64 rtc_alarm_high; 46 + void __iomem *base; 47 + struct goldfish_rtc *rtcdrv; 48 + 49 + rtcdrv = dev_get_drvdata(dev); 50 + base = rtcdrv->base; 51 + 52 + rtc_alarm_low = readl(base + TIMER_ALARM_LOW); 53 + rtc_alarm_high = readl(base + TIMER_ALARM_HIGH); 54 + rtc_alarm = (rtc_alarm_high << 32) | rtc_alarm_low; 55 + 56 + do_div(rtc_alarm, NSEC_PER_SEC); 57 + memset(alrm, 0, sizeof(struct rtc_wkalrm)); 58 + 59 + rtc_time_to_tm(rtc_alarm, &alrm->time); 60 + 61 + if (readl(base + TIMER_ALARM_STATUS)) 62 + alrm->enabled = 1; 63 + else 64 + alrm->enabled = 0; 65 + 66 + return 0; 67 + } 68 + 69 + static int goldfish_rtc_set_alarm(struct device *dev, 70 + struct rtc_wkalrm *alrm) 71 + { 72 + struct goldfish_rtc *rtcdrv; 73 + unsigned long rtc_alarm; 74 + u64 rtc_alarm64; 75 + u64 rtc_status_reg; 76 + void __iomem *base; 77 + int ret = 0; 78 + 79 + rtcdrv = dev_get_drvdata(dev); 80 + base = rtcdrv->base; 81 + 82 + if (alrm->enabled) { 83 + ret = rtc_tm_to_time(&alrm->time, &rtc_alarm); 84 + if (ret != 0) 85 + return ret; 86 + 87 + rtc_alarm64 = rtc_alarm * NSEC_PER_SEC; 88 + writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH); 89 + writel(rtc_alarm64, base + TIMER_ALARM_LOW); 90 + } else { 91 + /* 92 + * if this function was called with enabled=0 93 + * then it could mean that the application is 94 + * trying to cancel an ongoing alarm 95 + */ 96 + rtc_status_reg = readl(base + TIMER_ALARM_STATUS); 97 + if (rtc_status_reg) 98 + writel(1, base + TIMER_CLEAR_ALARM); 99 + } 100 + 101 + return ret; 102 + } 103 + 104 + static int goldfish_rtc_alarm_irq_enable(struct device *dev, 105 + unsigned int enabled) 106 + { 107 + void __iomem *base; 108 + struct goldfish_rtc *rtcdrv; 109 + 110 + rtcdrv = dev_get_drvdata(dev); 111 + base = rtcdrv->base; 112 + 113 + if (enabled) 114 + writel(1, base + TIMER_IRQ_ENABLED); 115 + else 116 + writel(0, base + TIMER_IRQ_ENABLED); 117 + 118 + return 0; 119 + } 120 + 121 + static irqreturn_t goldfish_rtc_interrupt(int irq, void *dev_id) 122 + { 123 + struct goldfish_rtc *rtcdrv = dev_id; 124 + void __iomem *base = rtcdrv->base; 125 + 126 + writel(1, base + TIMER_CLEAR_INTERRUPT); 127 + 128 + rtc_update_irq(rtcdrv->rtc, 1, RTC_IRQF | RTC_AF); 129 + 130 + return IRQ_HANDLED; 131 + } 132 + 133 + static int goldfish_rtc_read_time(struct device *dev, struct rtc_time *tm) 134 + { 135 + struct goldfish_rtc *rtcdrv; 136 + void __iomem *base; 137 + u64 time_high; 138 + u64 time_low; 139 + u64 time; 140 + 141 + rtcdrv = dev_get_drvdata(dev); 142 + base = rtcdrv->base; 143 + 144 + time_low = readl(base + TIMER_TIME_LOW); 145 + time_high = readl(base + TIMER_TIME_HIGH); 146 + time = (time_high << 32) | time_low; 147 + 148 + do_div(time, NSEC_PER_SEC); 149 + 150 + rtc_time_to_tm(time, tm); 151 + 152 + return 0; 153 + } 154 + 155 + static int goldfish_rtc_set_time(struct device *dev, struct rtc_time *tm) 156 + { 157 + struct goldfish_rtc *rtcdrv; 158 + void __iomem *base; 159 + unsigned long now; 160 + u64 now64; 161 + int ret; 162 + 163 + rtcdrv = dev_get_drvdata(dev); 164 + base = rtcdrv->base; 165 + 166 + ret = rtc_tm_to_time(tm, &now); 167 + if (ret == 0) { 168 + now64 = now * NSEC_PER_SEC; 169 + writel((now64 >> 32), base + TIMER_TIME_HIGH); 170 + writel(now64, base + TIMER_TIME_LOW); 171 + } 172 + 173 + return ret; 174 + } 175 + 176 + static const struct rtc_class_ops goldfish_rtc_ops = { 177 + .read_time = goldfish_rtc_read_time, 178 + .set_time = goldfish_rtc_set_time, 179 + .read_alarm = goldfish_rtc_read_alarm, 180 + .set_alarm = goldfish_rtc_set_alarm, 181 + .alarm_irq_enable = goldfish_rtc_alarm_irq_enable 182 + }; 183 + 184 + static int goldfish_rtc_probe(struct platform_device *pdev) 185 + { 186 + struct goldfish_rtc *rtcdrv; 187 + struct resource *r; 188 + int err; 189 + 190 + rtcdrv = devm_kzalloc(&pdev->dev, sizeof(*rtcdrv), GFP_KERNEL); 191 + if (!rtcdrv) 192 + return -ENOMEM; 193 + 194 + platform_set_drvdata(pdev, rtcdrv); 195 + 196 + r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 197 + if (!r) 198 + return -ENODEV; 199 + 200 + rtcdrv->base = devm_ioremap_resource(&pdev->dev, r); 201 + if (IS_ERR(rtcdrv->base)) 202 + return -ENODEV; 203 + 204 + rtcdrv->irq = platform_get_irq(pdev, 0); 205 + if (rtcdrv->irq < 0) 206 + return -ENODEV; 207 + 208 + rtcdrv->rtc = devm_rtc_device_register(&pdev->dev, pdev->name, 209 + &goldfish_rtc_ops, 210 + THIS_MODULE); 211 + if (IS_ERR(rtcdrv->rtc)) 212 + return PTR_ERR(rtcdrv->rtc); 213 + 214 + err = devm_request_irq(&pdev->dev, rtcdrv->irq, 215 + goldfish_rtc_interrupt, 216 + 0, pdev->name, rtcdrv); 217 + if (err) 218 + return err; 219 + 220 + return 0; 221 + } 222 + 223 + static const struct of_device_id goldfish_rtc_of_match[] = { 224 + { .compatible = "google,goldfish-rtc", }, 225 + {}, 226 + }; 227 + MODULE_DEVICE_TABLE(of, goldfish_rtc_of_match); 228 + 229 + static struct platform_driver goldfish_rtc = { 230 + .probe = goldfish_rtc_probe, 231 + .driver = { 232 + .name = "goldfish_rtc", 233 + .of_match_table = goldfish_rtc_of_match, 234 + } 235 + }; 236 + 237 + module_platform_driver(goldfish_rtc);
+17 -50
drivers/rtc/rtc-m41t80.c
··· 440 441 static SIMPLE_DEV_PM_OPS(m41t80_pm, m41t80_suspend, m41t80_resume); 442 443 - static ssize_t flags_show(struct device *dev, 444 - struct device_attribute *attr, char *buf) 445 - { 446 - struct i2c_client *client = to_i2c_client(dev); 447 - int val; 448 - 449 - val = i2c_smbus_read_byte_data(client, M41T80_REG_FLAGS); 450 - if (val < 0) 451 - return val; 452 - return sprintf(buf, "%#x\n", val); 453 - } 454 - static DEVICE_ATTR_RO(flags); 455 - 456 - static struct attribute *attrs[] = { 457 - &dev_attr_flags.attr, 458 - NULL, 459 - }; 460 - 461 - static struct attribute_group attr_group = { 462 - .attrs = attrs, 463 - }; 464 - 465 #ifdef CONFIG_COMMON_CLK 466 #define sqw_to_m41t80_data(_hw) container_of(_hw, struct m41t80_data, sqw) 467 ··· 890 ***************************************************************************** 891 */ 892 893 - static void m41t80_remove_sysfs_group(void *_dev) 894 - { 895 - struct device *dev = _dev; 896 - 897 - sysfs_remove_group(&dev->kobj, &attr_group); 898 - } 899 - 900 static int m41t80_probe(struct i2c_client *client, 901 const struct i2c_device_id *id) 902 { ··· 898 struct rtc_device *rtc = NULL; 899 struct rtc_time tm; 900 struct m41t80_data *m41t80_data = NULL; 901 902 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK | 903 I2C_FUNC_SMBUS_BYTE_DATA)) { ··· 919 m41t80_data->features = id->driver_data; 920 i2c_set_clientdata(client, m41t80_data); 921 922 if (client->irq > 0) { 923 rc = devm_request_threaded_irq(&client->dev, client->irq, 924 NULL, m41t80_handle_irq, ··· 931 if (rc) { 932 dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n"); 933 client->irq = 0; 934 - } else { 935 - m41t80_rtc_ops.read_alarm = m41t80_read_alarm; 936 - m41t80_rtc_ops.set_alarm = m41t80_set_alarm; 937 - m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable; 938 - /* Enable the wakealarm */ 939 - device_init_wakeup(&client->dev, true); 940 } 941 } 942 943 rtc = devm_rtc_device_register(&client->dev, client->name, ··· 948 return PTR_ERR(rtc); 949 950 m41t80_data->rtc = rtc; 951 952 /* Make sure HT (Halt Update) bit is cleared */ 953 rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_HOUR); ··· 983 rc & ~M41T80_SEC_ST); 984 if (rc < 0) { 985 dev_err(&client->dev, "Can't clear ST bit\n"); 986 - return rc; 987 - } 988 - 989 - /* Export sysfs entries */ 990 - rc = sysfs_create_group(&(&client->dev)->kobj, &attr_group); 991 - if (rc) { 992 - dev_err(&client->dev, "Failed to create sysfs group: %d\n", rc); 993 - return rc; 994 - } 995 - 996 - rc = devm_add_action_or_reset(&client->dev, m41t80_remove_sysfs_group, 997 - &client->dev); 998 - if (rc) { 999 - dev_err(&client->dev, 1000 - "Failed to add sysfs cleanup action: %d\n", rc); 1001 return rc; 1002 } 1003
··· 440 441 static SIMPLE_DEV_PM_OPS(m41t80_pm, m41t80_suspend, m41t80_resume); 442 443 #ifdef CONFIG_COMMON_CLK 444 #define sqw_to_m41t80_data(_hw) container_of(_hw, struct m41t80_data, sqw) 445 ··· 912 ***************************************************************************** 913 */ 914 915 static int m41t80_probe(struct i2c_client *client, 916 const struct i2c_device_id *id) 917 { ··· 927 struct rtc_device *rtc = NULL; 928 struct rtc_time tm; 929 struct m41t80_data *m41t80_data = NULL; 930 + bool wakeup_source = false; 931 932 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_I2C_BLOCK | 933 I2C_FUNC_SMBUS_BYTE_DATA)) { ··· 947 m41t80_data->features = id->driver_data; 948 i2c_set_clientdata(client, m41t80_data); 949 950 + #ifdef CONFIG_OF 951 + wakeup_source = of_property_read_bool(client->dev.of_node, 952 + "wakeup-source"); 953 + #endif 954 if (client->irq > 0) { 955 rc = devm_request_threaded_irq(&client->dev, client->irq, 956 NULL, m41t80_handle_irq, ··· 955 if (rc) { 956 dev_warn(&client->dev, "unable to request IRQ, alarms disabled\n"); 957 client->irq = 0; 958 + wakeup_source = false; 959 } 960 + } 961 + if (client->irq > 0 || wakeup_source) { 962 + m41t80_rtc_ops.read_alarm = m41t80_read_alarm; 963 + m41t80_rtc_ops.set_alarm = m41t80_set_alarm; 964 + m41t80_rtc_ops.alarm_irq_enable = m41t80_alarm_irq_enable; 965 + /* Enable the wakealarm */ 966 + device_init_wakeup(&client->dev, true); 967 } 968 969 rtc = devm_rtc_device_register(&client->dev, client->name, ··· 970 return PTR_ERR(rtc); 971 972 m41t80_data->rtc = rtc; 973 + if (client->irq <= 0) { 974 + /* We cannot support UIE mode if we do not have an IRQ line */ 975 + rtc->uie_unsupported = 1; 976 + } 977 978 /* Make sure HT (Halt Update) bit is cleared */ 979 rc = i2c_smbus_read_byte_data(client, M41T80_REG_ALARM_HOUR); ··· 1001 rc & ~M41T80_SEC_ST); 1002 if (rc < 0) { 1003 dev_err(&client->dev, "Can't clear ST bit\n"); 1004 return rc; 1005 } 1006
+1 -1
drivers/rtc/rtc-max6900.c
··· 226 return 0; 227 } 228 229 - static struct i2c_device_id max6900_id[] = { 230 { "max6900", 0 }, 231 { } 232 };
··· 226 return 0; 227 } 228 229 + static const struct i2c_device_id max6900_id[] = { 230 { "max6900", 0 }, 231 { } 232 };
-2
drivers/rtc/rtc-max8925.c
··· 234 ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77); 235 else 236 ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x0); 237 - if (ret < 0) 238 - goto out; 239 out: 240 return ret; 241 }
··· 234 ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x77); 235 else 236 ret = max8925_reg_write(info->rtc, MAX8925_ALARM0_CNTL, 0x0); 237 out: 238 return ret; 239 }
-21
drivers/rtc/rtc-mxc.c
··· 238 return IRQ_HANDLED; 239 } 240 241 - /* 242 - * Clear all interrupts and release the IRQ 243 - */ 244 - static void mxc_rtc_release(struct device *dev) 245 - { 246 - struct platform_device *pdev = to_platform_device(dev); 247 - struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 248 - void __iomem *ioaddr = pdata->ioaddr; 249 - 250 - spin_lock_irq(&pdata->rtc->irq_lock); 251 - 252 - /* Disable all rtc interrupts */ 253 - writew(0, ioaddr + RTC_RTCIENR); 254 - 255 - /* Clear all interrupt status */ 256 - writew(0xffffffff, ioaddr + RTC_RTCISR); 257 - 258 - spin_unlock_irq(&pdata->rtc->irq_lock); 259 - } 260 - 261 static int mxc_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) 262 { 263 mxc_rtc_irq_enable(dev, RTC_ALM_BIT, enabled); ··· 323 324 /* RTC layer */ 325 static const struct rtc_class_ops mxc_rtc_ops = { 326 - .release = mxc_rtc_release, 327 .read_time = mxc_rtc_read_time, 328 .set_mmss64 = mxc_rtc_set_mmss, 329 .read_alarm = mxc_rtc_read_alarm,
··· 238 return IRQ_HANDLED; 239 } 240 241 static int mxc_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) 242 { 243 mxc_rtc_irq_enable(dev, RTC_ALM_BIT, enabled); ··· 343 344 /* RTC layer */ 345 static const struct rtc_class_ops mxc_rtc_ops = { 346 .read_time = mxc_rtc_read_time, 347 .set_mmss64 = mxc_rtc_set_mmss, 348 .read_alarm = mxc_rtc_read_alarm,
+21 -51
drivers/rtc/rtc-puv3.c
··· 157 return 0; 158 } 159 160 - static int puv3_rtc_open(struct device *dev) 161 - { 162 - struct platform_device *pdev = to_platform_device(dev); 163 - struct rtc_device *rtc_dev = platform_get_drvdata(pdev); 164 - int ret; 165 - 166 - ret = request_irq(puv3_rtc_alarmno, puv3_rtc_alarmirq, 167 - 0, "pkunity-rtc alarm", rtc_dev); 168 - 169 - if (ret) { 170 - dev_err(dev, "IRQ%d error %d\n", puv3_rtc_alarmno, ret); 171 - return ret; 172 - } 173 - 174 - ret = request_irq(puv3_rtc_tickno, puv3_rtc_tickirq, 175 - 0, "pkunity-rtc tick", rtc_dev); 176 - 177 - if (ret) { 178 - dev_err(dev, "IRQ%d error %d\n", puv3_rtc_tickno, ret); 179 - goto tick_err; 180 - } 181 - 182 - return ret; 183 - 184 - tick_err: 185 - free_irq(puv3_rtc_alarmno, rtc_dev); 186 - return ret; 187 - } 188 - 189 - static void puv3_rtc_release(struct device *dev) 190 - { 191 - struct platform_device *pdev = to_platform_device(dev); 192 - struct rtc_device *rtc_dev = platform_get_drvdata(pdev); 193 - 194 - /* do not clear AIE here, it may be needed for wake */ 195 - puv3_rtc_setpie(dev, 0); 196 - free_irq(puv3_rtc_alarmno, rtc_dev); 197 - free_irq(puv3_rtc_tickno, rtc_dev); 198 - } 199 - 200 static const struct rtc_class_ops puv3_rtcops = { 201 - .open = puv3_rtc_open, 202 - .release = puv3_rtc_release, 203 .read_time = puv3_rtc_gettime, 204 .set_time = puv3_rtc_settime, 205 .read_alarm = puv3_rtc_getalarm, ··· 180 181 static int puv3_rtc_remove(struct platform_device *dev) 182 { 183 - struct rtc_device *rtc = platform_get_drvdata(dev); 184 - 185 - rtc_device_unregister(rtc); 186 - 187 puv3_rtc_setpie(&dev->dev, 0); 188 puv3_rtc_setaie(&dev->dev, 0); 189 ··· 213 dev_dbg(&pdev->dev, "PKUnity_rtc: tick irq %d, alarm irq %d\n", 214 puv3_rtc_tickno, puv3_rtc_alarmno); 215 216 /* get the memory region */ 217 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 218 if (res == NULL) { ··· 250 puv3_rtc_enable(&pdev->dev, 1); 251 252 /* register RTC and exit */ 253 - rtc = rtc_device_register("pkunity", &pdev->dev, &puv3_rtcops, 254 - THIS_MODULE); 255 - 256 - if (IS_ERR(rtc)) { 257 dev_err(&pdev->dev, "cannot attach rtc\n"); 258 - ret = PTR_ERR(rtc); 259 goto err_nortc; 260 } 261
··· 157 return 0; 158 } 159 160 static const struct rtc_class_ops puv3_rtcops = { 161 .read_time = puv3_rtc_gettime, 162 .set_time = puv3_rtc_settime, 163 .read_alarm = puv3_rtc_getalarm, ··· 222 223 static int puv3_rtc_remove(struct platform_device *dev) 224 { 225 puv3_rtc_setpie(&dev->dev, 0); 226 puv3_rtc_setaie(&dev->dev, 0); 227 ··· 259 dev_dbg(&pdev->dev, "PKUnity_rtc: tick irq %d, alarm irq %d\n", 260 puv3_rtc_tickno, puv3_rtc_alarmno); 261 262 + rtc = devm_rtc_allocate_device(&pdev->dev); 263 + if (IS_ERR(rtc)) 264 + return PTR_ERR(rtc); 265 + 266 + ret = devm_request_irq(&pdev->dev, puv3_rtc_alarmno, puv3_rtc_alarmirq, 267 + 0, "pkunity-rtc alarm", rtc); 268 + if (ret) { 269 + dev_err(&pdev->dev, "IRQ%d error %d\n", puv3_rtc_alarmno, ret); 270 + return ret; 271 + } 272 + 273 + ret = devm_request_irq(&pdev->dev, puv3_rtc_tickno, puv3_rtc_tickirq, 274 + 0, "pkunity-rtc tick", rtc); 275 + if (ret) { 276 + dev_err(&pdev->dev, "IRQ%d error %d\n", puv3_rtc_tickno, ret); 277 + return ret; 278 + } 279 + 280 /* get the memory region */ 281 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 282 if (res == NULL) { ··· 278 puv3_rtc_enable(&pdev->dev, 1); 279 280 /* register RTC and exit */ 281 + rtc->ops = &puv3_rtcops; 282 + ret = rtc_register_device(rtc); 283 + if (ret) { 284 dev_err(&pdev->dev, "cannot attach rtc\n"); 285 goto err_nortc; 286 } 287
+3 -1
drivers/rtc/rtc-pxa.c
··· 348 dev_err(dev, "No alarm IRQ resource defined\n"); 349 return -ENXIO; 350 } 351 - pxa_rtc_open(dev); 352 pxa_rtc->base = devm_ioremap(dev, pxa_rtc->ress->start, 353 resource_size(pxa_rtc->ress)); 354 if (!pxa_rtc->base) { 355 dev_err(dev, "Unable to map pxa RTC I/O memory\n"); 356 return -ENOMEM; 357 } 358 359 sa1100_rtc->rcnr = pxa_rtc->base + 0x0; 360 sa1100_rtc->rtsr = pxa_rtc->base + 0x8;
··· 348 dev_err(dev, "No alarm IRQ resource defined\n"); 349 return -ENXIO; 350 } 351 + 352 pxa_rtc->base = devm_ioremap(dev, pxa_rtc->ress->start, 353 resource_size(pxa_rtc->ress)); 354 if (!pxa_rtc->base) { 355 dev_err(dev, "Unable to map pxa RTC I/O memory\n"); 356 return -ENOMEM; 357 } 358 + 359 + pxa_rtc_open(dev); 360 361 sa1100_rtc->rcnr = pxa_rtc->base + 0x0; 362 sa1100_rtc->rtsr = pxa_rtc->base + 0x8;
+242
drivers/rtc/rtc-rtd119x.c
···
··· 1 + /* 2 + * Realtek RTD129x RTC 3 + * 4 + * Copyright (c) 2017 Andreas Färber 5 + * 6 + * SPDX-License-Identifier: GPL-2.0+ 7 + */ 8 + 9 + #include <linux/clk.h> 10 + #include <linux/io.h> 11 + #include <linux/module.h> 12 + #include <linux/of.h> 13 + #include <linux/of_address.h> 14 + #include <linux/platform_device.h> 15 + #include <linux/rtc.h> 16 + #include <linux/spinlock.h> 17 + 18 + #define RTD_RTCSEC 0x00 19 + #define RTD_RTCMIN 0x04 20 + #define RTD_RTCHR 0x08 21 + #define RTD_RTCDATE1 0x0c 22 + #define RTD_RTCDATE2 0x10 23 + #define RTD_RTCACR 0x28 24 + #define RTD_RTCEN 0x2c 25 + #define RTD_RTCCR 0x30 26 + 27 + #define RTD_RTCSEC_RTCSEC_MASK 0x7f 28 + 29 + #define RTD_RTCMIN_RTCMIN_MASK 0x3f 30 + 31 + #define RTD_RTCHR_RTCHR_MASK 0x1f 32 + 33 + #define RTD_RTCDATE1_RTCDATE1_MASK 0xff 34 + 35 + #define RTD_RTCDATE2_RTCDATE2_MASK 0x7f 36 + 37 + #define RTD_RTCACR_RTCPWR BIT(7) 38 + 39 + #define RTD_RTCEN_RTCEN_MASK 0xff 40 + 41 + #define RTD_RTCCR_RTCRST BIT(6) 42 + 43 + struct rtd119x_rtc { 44 + void __iomem *base; 45 + struct clk *clk; 46 + struct rtc_device *rtcdev; 47 + unsigned int base_year; 48 + }; 49 + 50 + static inline int rtd119x_rtc_days_in_year(int year) 51 + { 52 + return 365 + (is_leap_year(year) ? 1 : 0); 53 + } 54 + 55 + static void rtd119x_rtc_reset(struct device *dev) 56 + { 57 + struct rtd119x_rtc *data = dev_get_drvdata(dev); 58 + u32 val; 59 + 60 + val = readl_relaxed(data->base + RTD_RTCCR); 61 + val |= RTD_RTCCR_RTCRST; 62 + writel_relaxed(val, data->base + RTD_RTCCR); 63 + 64 + val &= ~RTD_RTCCR_RTCRST; 65 + writel(val, data->base + RTD_RTCCR); 66 + } 67 + 68 + static void rtd119x_rtc_set_enabled(struct device *dev, bool enable) 69 + { 70 + struct rtd119x_rtc *data = dev_get_drvdata(dev); 71 + u32 val; 72 + 73 + val = readl_relaxed(data->base + RTD_RTCEN); 74 + if (enable) { 75 + if ((val & RTD_RTCEN_RTCEN_MASK) == 0x5a) 76 + return; 77 + writel_relaxed(0x5a, data->base + RTD_RTCEN); 78 + } else { 79 + writel_relaxed(0, data->base + RTD_RTCEN); 80 + } 81 + } 82 + 83 + static int rtd119x_rtc_read_time(struct device *dev, struct rtc_time *tm) 84 + { 85 + struct rtd119x_rtc *data = dev_get_drvdata(dev); 86 + s32 day; 87 + u32 sec; 88 + unsigned int year; 89 + int tries = 0; 90 + 91 + while (true) { 92 + tm->tm_sec = (readl_relaxed(data->base + RTD_RTCSEC) & RTD_RTCSEC_RTCSEC_MASK) >> 1; 93 + tm->tm_min = readl_relaxed(data->base + RTD_RTCMIN) & RTD_RTCMIN_RTCMIN_MASK; 94 + tm->tm_hour = readl_relaxed(data->base + RTD_RTCHR) & RTD_RTCHR_RTCHR_MASK; 95 + day = readl_relaxed(data->base + RTD_RTCDATE1) & RTD_RTCDATE1_RTCDATE1_MASK; 96 + day |= (readl_relaxed(data->base + RTD_RTCDATE2) & RTD_RTCDATE2_RTCDATE2_MASK) << 8; 97 + sec = (readl_relaxed(data->base + RTD_RTCSEC) & RTD_RTCSEC_RTCSEC_MASK) >> 1; 98 + tries++; 99 + 100 + if (sec == tm->tm_sec) 101 + break; 102 + 103 + if (tries >= 3) 104 + return -EINVAL; 105 + } 106 + if (tries > 1) 107 + dev_dbg(dev, "%s: needed %i tries\n", __func__, tries); 108 + 109 + year = data->base_year; 110 + while (day >= rtd119x_rtc_days_in_year(year)) { 111 + day -= rtd119x_rtc_days_in_year(year); 112 + year++; 113 + } 114 + tm->tm_year = year - 1900; 115 + tm->tm_yday = day; 116 + 117 + tm->tm_mon = 0; 118 + while (day >= rtc_month_days(tm->tm_mon, year)) { 119 + day -= rtc_month_days(tm->tm_mon, year); 120 + tm->tm_mon++; 121 + } 122 + tm->tm_mday = day + 1; 123 + 124 + return 0; 125 + } 126 + 127 + static int rtd119x_rtc_set_time(struct device *dev, struct rtc_time *tm) 128 + { 129 + struct rtd119x_rtc *data = dev_get_drvdata(dev); 130 + unsigned int day; 131 + int i; 132 + 133 + if (1900 + tm->tm_year < data->base_year) 134 + return -EINVAL; 135 + 136 + day = 0; 137 + for (i = data->base_year; i < 1900 + tm->tm_year; i++) 138 + day += rtd119x_rtc_days_in_year(i); 139 + 140 + day += tm->tm_yday; 141 + if (day > 0x7fff) 142 + return -EINVAL; 143 + 144 + rtd119x_rtc_set_enabled(dev, false); 145 + 146 + writel_relaxed((tm->tm_sec << 1) & RTD_RTCSEC_RTCSEC_MASK, data->base + RTD_RTCSEC); 147 + writel_relaxed(tm->tm_min & RTD_RTCMIN_RTCMIN_MASK, data->base + RTD_RTCMIN); 148 + writel_relaxed(tm->tm_hour & RTD_RTCHR_RTCHR_MASK, data->base + RTD_RTCHR); 149 + writel_relaxed(day & RTD_RTCDATE1_RTCDATE1_MASK, data->base + RTD_RTCDATE1); 150 + writel_relaxed((day >> 8) & RTD_RTCDATE2_RTCDATE2_MASK, data->base + RTD_RTCDATE2); 151 + 152 + rtd119x_rtc_set_enabled(dev, true); 153 + 154 + return 0; 155 + } 156 + 157 + static const struct rtc_class_ops rtd119x_rtc_ops = { 158 + .read_time = rtd119x_rtc_read_time, 159 + .set_time = rtd119x_rtc_set_time, 160 + }; 161 + 162 + static const struct of_device_id rtd119x_rtc_dt_ids[] = { 163 + { .compatible = "realtek,rtd1295-rtc" }, 164 + { } 165 + }; 166 + 167 + static int rtd119x_rtc_probe(struct platform_device *pdev) 168 + { 169 + struct rtd119x_rtc *data; 170 + struct resource *res; 171 + u32 val; 172 + int ret; 173 + 174 + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); 175 + if (!data) 176 + return -ENOMEM; 177 + 178 + platform_set_drvdata(pdev, data); 179 + data->base_year = 2014; 180 + 181 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 182 + data->base = devm_ioremap_resource(&pdev->dev, res); 183 + if (IS_ERR(data->base)) 184 + return PTR_ERR(data->base); 185 + 186 + data->clk = of_clk_get(pdev->dev.of_node, 0); 187 + if (IS_ERR(data->clk)) 188 + return PTR_ERR(data->clk); 189 + 190 + ret = clk_prepare_enable(data->clk); 191 + if (ret) { 192 + clk_put(data->clk); 193 + return ret; 194 + } 195 + 196 + val = readl_relaxed(data->base + RTD_RTCACR); 197 + if (!(val & RTD_RTCACR_RTCPWR)) { 198 + writel_relaxed(RTD_RTCACR_RTCPWR, data->base + RTD_RTCACR); 199 + 200 + rtd119x_rtc_reset(&pdev->dev); 201 + 202 + writel_relaxed(0, data->base + RTD_RTCMIN); 203 + writel_relaxed(0, data->base + RTD_RTCHR); 204 + writel_relaxed(0, data->base + RTD_RTCDATE1); 205 + writel_relaxed(0, data->base + RTD_RTCDATE2); 206 + } 207 + 208 + rtd119x_rtc_set_enabled(&pdev->dev, true); 209 + 210 + data->rtcdev = devm_rtc_device_register(&pdev->dev, "rtc", 211 + &rtd119x_rtc_ops, THIS_MODULE); 212 + if (IS_ERR(data->rtcdev)) { 213 + dev_err(&pdev->dev, "failed to register rtc device"); 214 + clk_disable_unprepare(data->clk); 215 + clk_put(data->clk); 216 + return PTR_ERR(data->rtcdev); 217 + } 218 + 219 + return 0; 220 + } 221 + 222 + static int rtd119x_rtc_remove(struct platform_device *pdev) 223 + { 224 + struct rtd119x_rtc *data = platform_get_drvdata(pdev); 225 + 226 + rtd119x_rtc_set_enabled(&pdev->dev, false); 227 + 228 + clk_disable_unprepare(data->clk); 229 + clk_put(data->clk); 230 + 231 + return 0; 232 + } 233 + 234 + static struct platform_driver rtd119x_rtc_driver = { 235 + .probe = rtd119x_rtc_probe, 236 + .remove = rtd119x_rtc_remove, 237 + .driver = { 238 + .name = "rtd1295-rtc", 239 + .of_match_table = rtd119x_rtc_dt_ids, 240 + }, 241 + }; 242 + builtin_platform_driver(rtd119x_rtc_driver);
+1 -1
drivers/rtc/rtc-rv3029c2.c
··· 868 return rv3029_probe(&client->dev, regmap, client->irq, client->name); 869 } 870 871 - static struct i2c_device_id rv3029_id[] = { 872 { "rv3029", 0 }, 873 { "rv3029c2", 0 }, 874 { }
··· 868 return rv3029_probe(&client->dev, regmap, client->irq, client->name); 869 } 870 871 + static const struct i2c_device_id rv3029_id[] = { 872 { "rv3029", 0 }, 873 { "rv3029c2", 0 }, 874 { }
+73 -31
drivers/rtc/rtc-s35390a.c
··· 106 return 0; 107 } 108 109 - /* 110 - * Returns <0 on error, 0 if rtc is setup fine and 1 if the chip was reset. 111 - * To keep the information if an irq is pending, pass the value read from 112 - * STATUS1 to the caller. 113 - */ 114 - static int s35390a_reset(struct s35390a *s35390a, char *status1) 115 { 116 char buf; 117 int ret; 118 unsigned initcount = 0; 119 - 120 - ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1); 121 - if (ret < 0) 122 - return ret; 123 - 124 - if (*status1 & S35390A_FLAG_POC) 125 - /* 126 - * Do not communicate for 0.5 seconds since the power-on 127 - * detection circuit is in operation. 128 - */ 129 - msleep(500); 130 - else if (!(*status1 & S35390A_FLAG_BLD)) 131 - /* 132 - * If both POC and BLD are unset everything is fine. 133 - */ 134 - return 0; 135 136 /* 137 * At least one of POC and BLD are set, so reinitialise chip. Keeping ··· 121 * The 24H bit is kept over reset, so set it already here. 122 */ 123 initialize: 124 - *status1 = S35390A_FLAG_24H; 125 buf = S35390A_FLAG_RESET | S35390A_FLAG_24H; 126 ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); 127 ··· 141 } 142 143 return 1; 144 } 145 146 static int s35390a_disable_test_mode(struct s35390a *s35390a) ··· 214 { 215 struct s35390a *s35390a = i2c_get_clientdata(client); 216 int i, err; 217 - char buf[7]; 218 219 dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d mday=%d, " 220 "mon=%d, year=%d, wday=%d\n", __func__, tm->tm_sec, 221 tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, 222 tm->tm_wday); 223 224 buf[S35390A_BYTE_YEAR] = bin2bcd(tm->tm_year - 100); 225 buf[S35390A_BYTE_MONTH] = bin2bcd(tm->tm_mon + 1); ··· 244 static int s35390a_get_datetime(struct i2c_client *client, struct rtc_time *tm) 245 { 246 struct s35390a *s35390a = i2c_get_clientdata(client); 247 - char buf[7]; 248 int i, err; 249 250 err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); 251 if (err < 0) ··· 404 return s35390a_set_datetime(to_i2c_client(dev), tm); 405 } 406 407 static const struct rtc_class_ops s35390a_rtc_ops = { 408 .read_time = s35390a_rtc_read_time, 409 .set_time = s35390a_rtc_set_time, 410 .set_alarm = s35390a_rtc_set_alarm, 411 .read_alarm = s35390a_rtc_read_alarm, 412 - 413 }; 414 415 static struct i2c_driver s35390a_driver; ··· 447 static int s35390a_probe(struct i2c_client *client, 448 const struct i2c_device_id *id) 449 { 450 - int err, err_reset; 451 unsigned int i; 452 struct s35390a *s35390a; 453 struct rtc_time tm; ··· 480 } 481 } 482 483 - err_reset = s35390a_reset(s35390a, &status1); 484 - if (err_reset < 0) { 485 - err = err_reset; 486 dev_err(&client->dev, "error resetting chip\n"); 487 goto exit_dummy; 488 } ··· 508 } 509 } 510 511 - if (err_reset > 0 || s35390a_get_datetime(client, &tm) < 0) 512 dev_warn(&client->dev, "clock needs to be set\n"); 513 514 device_set_wakeup_capable(&client->dev, 1);
··· 106 return 0; 107 } 108 109 + static int s35390a_init(struct s35390a *s35390a) 110 { 111 char buf; 112 int ret; 113 unsigned initcount = 0; 114 115 /* 116 * At least one of POC and BLD are set, so reinitialise chip. Keeping ··· 142 * The 24H bit is kept over reset, so set it already here. 143 */ 144 initialize: 145 buf = S35390A_FLAG_RESET | S35390A_FLAG_24H; 146 ret = s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); 147 ··· 163 } 164 165 return 1; 166 + } 167 + 168 + /* 169 + * Returns <0 on error, 0 if rtc is setup fine and 1 if the chip was reset. 170 + * To keep the information if an irq is pending, pass the value read from 171 + * STATUS1 to the caller. 172 + */ 173 + static int s35390a_read_status(struct s35390a *s35390a, char *status1) 174 + { 175 + int ret; 176 + 177 + ret = s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, status1, 1); 178 + if (ret < 0) 179 + return ret; 180 + 181 + if (*status1 & S35390A_FLAG_POC) { 182 + /* 183 + * Do not communicate for 0.5 seconds since the power-on 184 + * detection circuit is in operation. 185 + */ 186 + msleep(500); 187 + return 1; 188 + } else if (*status1 & S35390A_FLAG_BLD) 189 + return 1; 190 + /* 191 + * If both POC and BLD are unset everything is fine. 192 + */ 193 + return 0; 194 } 195 196 static int s35390a_disable_test_mode(struct s35390a *s35390a) ··· 208 { 209 struct s35390a *s35390a = i2c_get_clientdata(client); 210 int i, err; 211 + char buf[7], status; 212 213 dev_dbg(&client->dev, "%s: tm is secs=%d, mins=%d, hours=%d mday=%d, " 214 "mon=%d, year=%d, wday=%d\n", __func__, tm->tm_sec, 215 tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, 216 tm->tm_wday); 217 + 218 + if (s35390a_read_status(s35390a, &status) == 1) 219 + s35390a_init(s35390a); 220 221 buf[S35390A_BYTE_YEAR] = bin2bcd(tm->tm_year - 100); 222 buf[S35390A_BYTE_MONTH] = bin2bcd(tm->tm_mon + 1); ··· 235 static int s35390a_get_datetime(struct i2c_client *client, struct rtc_time *tm) 236 { 237 struct s35390a *s35390a = i2c_get_clientdata(client); 238 + char buf[7], status; 239 int i, err; 240 + 241 + if (s35390a_read_status(s35390a, &status) == 1) 242 + return -EINVAL; 243 244 err = s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); 245 if (err < 0) ··· 392 return s35390a_set_datetime(to_i2c_client(dev), tm); 393 } 394 395 + static int s35390a_rtc_ioctl(struct device *dev, unsigned int cmd, 396 + unsigned long arg) 397 + { 398 + struct i2c_client *client = to_i2c_client(dev); 399 + struct s35390a *s35390a = i2c_get_clientdata(client); 400 + char sts; 401 + int err; 402 + 403 + switch (cmd) { 404 + case RTC_VL_READ: 405 + /* s35390a_reset set lowvoltage flag and init RTC if needed */ 406 + err = s35390a_read_status(s35390a, &sts); 407 + if (err < 0) 408 + return err; 409 + if (copy_to_user((void __user *)arg, &err, sizeof(int))) 410 + return -EFAULT; 411 + break; 412 + case RTC_VL_CLR: 413 + /* update flag and clear register */ 414 + err = s35390a_init(s35390a); 415 + if (err < 0) 416 + return err; 417 + break; 418 + default: 419 + return -ENOIOCTLCMD; 420 + } 421 + 422 + return 0; 423 + } 424 + 425 static const struct rtc_class_ops s35390a_rtc_ops = { 426 .read_time = s35390a_rtc_read_time, 427 .set_time = s35390a_rtc_set_time, 428 .set_alarm = s35390a_rtc_set_alarm, 429 .read_alarm = s35390a_rtc_read_alarm, 430 + .ioctl = s35390a_rtc_ioctl, 431 }; 432 433 static struct i2c_driver s35390a_driver; ··· 405 static int s35390a_probe(struct i2c_client *client, 406 const struct i2c_device_id *id) 407 { 408 + int err, err_read; 409 unsigned int i; 410 struct s35390a *s35390a; 411 struct rtc_time tm; ··· 438 } 439 } 440 441 + err_read = s35390a_read_status(s35390a, &status1); 442 + if (err_read < 0) { 443 + err = err_read; 444 dev_err(&client->dev, "error resetting chip\n"); 445 goto exit_dummy; 446 } ··· 466 } 467 } 468 469 + if (err_read > 0 || s35390a_get_datetime(client, &tm) < 0) 470 dev_warn(&client->dev, "clock needs to be set\n"); 471 472 device_set_wakeup_capable(&client->dev, 1);
+22 -43
drivers/rtc/rtc-sa1100.c
··· 95 return IRQ_HANDLED; 96 } 97 98 - static int sa1100_rtc_open(struct device *dev) 99 - { 100 - struct sa1100_rtc *info = dev_get_drvdata(dev); 101 - struct rtc_device *rtc = info->rtc; 102 - int ret; 103 - 104 - ret = request_irq(info->irq_1hz, sa1100_rtc_interrupt, 0, "rtc 1Hz", dev); 105 - if (ret) { 106 - dev_err(dev, "IRQ %d already in use.\n", info->irq_1hz); 107 - goto fail_ui; 108 - } 109 - ret = request_irq(info->irq_alarm, sa1100_rtc_interrupt, 0, "rtc Alrm", dev); 110 - if (ret) { 111 - dev_err(dev, "IRQ %d already in use.\n", info->irq_alarm); 112 - goto fail_ai; 113 - } 114 - rtc->max_user_freq = RTC_FREQ; 115 - rtc_irq_set_freq(rtc, NULL, RTC_FREQ); 116 - 117 - return 0; 118 - 119 - fail_ai: 120 - free_irq(info->irq_1hz, dev); 121 - fail_ui: 122 - clk_disable_unprepare(info->clk); 123 - return ret; 124 - } 125 - 126 - static void sa1100_rtc_release(struct device *dev) 127 - { 128 - struct sa1100_rtc *info = dev_get_drvdata(dev); 129 - 130 - spin_lock_irq(&info->lock); 131 - writel_relaxed(0, info->rtsr); 132 - spin_unlock_irq(&info->lock); 133 - 134 - free_irq(info->irq_alarm, dev); 135 - free_irq(info->irq_1hz, dev); 136 - } 137 - 138 static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) 139 { 140 u32 rtsr; ··· 176 } 177 178 static const struct rtc_class_ops sa1100_rtc_ops = { 179 - .open = sa1100_rtc_open, 180 - .release = sa1100_rtc_release, 181 .read_time = sa1100_rtc_read_time, 182 .set_time = sa1100_rtc_set_time, 183 .read_alarm = sa1100_rtc_read_alarm, ··· 223 } 224 info->rtc = rtc; 225 226 /* Fix for a nasty initialization problem the in SA11xx RTSR register. 227 * See also the comments in sa1100_rtc_interrupt(). 228 * ··· 260 struct resource *iores; 261 void __iomem *base; 262 int irq_1hz, irq_alarm; 263 264 irq_1hz = platform_get_irq_byname(pdev, "rtc 1Hz"); 265 irq_alarm = platform_get_irq_byname(pdev, "rtc alarm"); ··· 272 return -ENOMEM; 273 info->irq_1hz = irq_1hz; 274 info->irq_alarm = irq_alarm; 275 276 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); 277 base = devm_ioremap_resource(&pdev->dev, iores); ··· 314 { 315 struct sa1100_rtc *info = platform_get_drvdata(pdev); 316 317 - if (info) 318 clk_disable_unprepare(info->clk); 319 320 return 0; 321 }
··· 95 return IRQ_HANDLED; 96 } 97 98 static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) 99 { 100 u32 rtsr; ··· 216 } 217 218 static const struct rtc_class_ops sa1100_rtc_ops = { 219 .read_time = sa1100_rtc_read_time, 220 .set_time = sa1100_rtc_set_time, 221 .read_alarm = sa1100_rtc_read_alarm, ··· 265 } 266 info->rtc = rtc; 267 268 + rtc->max_user_freq = RTC_FREQ; 269 + rtc_irq_set_freq(rtc, NULL, RTC_FREQ); 270 + 271 /* Fix for a nasty initialization problem the in SA11xx RTSR register. 272 * See also the comments in sa1100_rtc_interrupt(). 273 * ··· 299 struct resource *iores; 300 void __iomem *base; 301 int irq_1hz, irq_alarm; 302 + int ret; 303 304 irq_1hz = platform_get_irq_byname(pdev, "rtc 1Hz"); 305 irq_alarm = platform_get_irq_byname(pdev, "rtc alarm"); ··· 310 return -ENOMEM; 311 info->irq_1hz = irq_1hz; 312 info->irq_alarm = irq_alarm; 313 + 314 + ret = devm_request_irq(&pdev->dev, irq_1hz, sa1100_rtc_interrupt, 0, 315 + "rtc 1Hz", &pdev->dev); 316 + if (ret) { 317 + dev_err(&pdev->dev, "IRQ %d already in use.\n", irq_1hz); 318 + return ret; 319 + } 320 + ret = devm_request_irq(&pdev->dev, irq_alarm, sa1100_rtc_interrupt, 0, 321 + "rtc Alrm", &pdev->dev); 322 + if (ret) { 323 + dev_err(&pdev->dev, "IRQ %d already in use.\n", irq_alarm); 324 + return ret; 325 + } 326 327 iores = platform_get_resource(pdev, IORESOURCE_MEM, 0); 328 base = devm_ioremap_resource(&pdev->dev, iores); ··· 339 { 340 struct sa1100_rtc *info = platform_get_drvdata(pdev); 341 342 + if (info) { 343 + spin_lock_irq(&info->lock); 344 + writel_relaxed(0, info->rtsr); 345 + spin_unlock_irq(&info->lock); 346 clk_disable_unprepare(info->clk); 347 + } 348 349 return 0; 350 }
+28 -6
drivers/rtc/rtc-sun6i.c
··· 73 #define SUN6I_ALARM_CONFIG 0x0050 74 #define SUN6I_ALARM_CONFIG_WAKEUP BIT(0) 75 76 /* 77 * Get date values 78 */ ··· 128 struct clk_hw hw; 129 struct clk_hw *int_osc; 130 struct clk *losc; 131 132 spinlock_t lock; 133 }; ··· 192 struct clk_init_data init = { 193 .ops = &sun6i_rtc_osc_ops, 194 }; 195 const char *parents[2]; 196 197 rtc = kzalloc(sizeof(*rtc), GFP_KERNEL); 198 if (!rtc) 199 return; 200 - spin_lock_init(&rtc->lock); 201 202 - clk_data = kzalloc(sizeof(*clk_data) + sizeof(*clk_data->hws), 203 GFP_KERNEL); 204 if (!clk_data) 205 return; 206 spin_lock_init(&rtc->lock); 207 208 rtc->base = of_io_request_and_map(node, 0, of_node_full_name(node)); 209 if (IS_ERR(rtc->base)) { 210 pr_crit("Can't map RTC registers"); 211 - return; 212 } 213 214 /* Switch to the external, more precise, oscillator */ ··· 221 222 /* Deal with old DTs */ 223 if (!of_get_property(node, "clocks", NULL)) 224 - return; 225 226 rtc->int_osc = clk_hw_register_fixed_rate_with_accuracy(NULL, 227 "rtc-int-osc", ··· 240 241 init.parent_names = parents; 242 init.num_parents = of_clk_get_parent_count(node) + 1; 243 - of_property_read_string(node, "clock-output-names", &init.name); 244 245 rtc->losc = clk_register(NULL, &rtc->hw); 246 if (IS_ERR(rtc->losc)) { ··· 249 return; 250 } 251 252 - clk_data->num = 1; 253 clk_data->hws[0] = &rtc->hw; 254 of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data); 255 } 256 CLK_OF_DECLARE_DRIVER(sun6i_rtc_clk, "allwinner,sun6i-a31-rtc", 257 sun6i_rtc_clk_init);
··· 73 #define SUN6I_ALARM_CONFIG 0x0050 74 #define SUN6I_ALARM_CONFIG_WAKEUP BIT(0) 75 76 + #define SUN6I_LOSC_OUT_GATING 0x0060 77 + #define SUN6I_LOSC_OUT_GATING_EN BIT(0) 78 + 79 /* 80 * Get date values 81 */ ··· 125 struct clk_hw hw; 126 struct clk_hw *int_osc; 127 struct clk *losc; 128 + struct clk *ext_losc; 129 130 spinlock_t lock; 131 }; ··· 188 struct clk_init_data init = { 189 .ops = &sun6i_rtc_osc_ops, 190 }; 191 + const char *clkout_name = "osc32k-out"; 192 const char *parents[2]; 193 194 rtc = kzalloc(sizeof(*rtc), GFP_KERNEL); 195 if (!rtc) 196 return; 197 198 + clk_data = kzalloc(sizeof(*clk_data) + (sizeof(*clk_data->hws) * 2), 199 GFP_KERNEL); 200 if (!clk_data) 201 return; 202 + 203 spin_lock_init(&rtc->lock); 204 205 rtc->base = of_io_request_and_map(node, 0, of_node_full_name(node)); 206 if (IS_ERR(rtc->base)) { 207 pr_crit("Can't map RTC registers"); 208 + goto err; 209 } 210 211 /* Switch to the external, more precise, oscillator */ ··· 216 217 /* Deal with old DTs */ 218 if (!of_get_property(node, "clocks", NULL)) 219 + goto err; 220 221 rtc->int_osc = clk_hw_register_fixed_rate_with_accuracy(NULL, 222 "rtc-int-osc", ··· 235 236 init.parent_names = parents; 237 init.num_parents = of_clk_get_parent_count(node) + 1; 238 + of_property_read_string_index(node, "clock-output-names", 0, 239 + &init.name); 240 241 rtc->losc = clk_register(NULL, &rtc->hw); 242 if (IS_ERR(rtc->losc)) { ··· 243 return; 244 } 245 246 + of_property_read_string_index(node, "clock-output-names", 1, 247 + &clkout_name); 248 + rtc->ext_losc = clk_register_gate(NULL, clkout_name, rtc->hw.init->name, 249 + 0, rtc->base + SUN6I_LOSC_OUT_GATING, 250 + SUN6I_LOSC_OUT_GATING_EN, 0, 251 + &rtc->lock); 252 + if (IS_ERR(rtc->ext_losc)) { 253 + pr_crit("Couldn't register the LOSC external gate\n"); 254 + return; 255 + } 256 + 257 + clk_data->num = 2; 258 clk_data->hws[0] = &rtc->hw; 259 + clk_data->hws[1] = __clk_get_hw(rtc->ext_losc); 260 of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data); 261 + return; 262 + 263 + err: 264 + kfree(clk_data); 265 } 266 CLK_OF_DECLARE_DRIVER(sun6i_rtc_clk, "allwinner,sun6i-a31-rtc", 267 sun6i_rtc_clk_init);
-18
drivers/rtc/rtc-vr41xx.c
··· 119 spin_unlock_irq(&rtc_lock); 120 } 121 122 - static void vr41xx_rtc_release(struct device *dev) 123 - { 124 - 125 - spin_lock_irq(&rtc_lock); 126 - 127 - rtc1_write(ECMPLREG, 0); 128 - rtc1_write(ECMPMREG, 0); 129 - rtc1_write(ECMPHREG, 0); 130 - rtc1_write(RTCL1LREG, 0); 131 - rtc1_write(RTCL1HREG, 0); 132 - 133 - spin_unlock_irq(&rtc_lock); 134 - 135 - disable_irq(aie_irq); 136 - disable_irq(pie_irq); 137 - } 138 - 139 static int vr41xx_rtc_read_time(struct device *dev, struct rtc_time *time) 140 { 141 unsigned long epoch_sec, elapsed_sec; ··· 255 } 256 257 static const struct rtc_class_ops vr41xx_rtc_ops = { 258 - .release = vr41xx_rtc_release, 259 .ioctl = vr41xx_rtc_ioctl, 260 .read_time = vr41xx_rtc_read_time, 261 .set_time = vr41xx_rtc_set_time,
··· 119 spin_unlock_irq(&rtc_lock); 120 } 121 122 static int vr41xx_rtc_read_time(struct device *dev, struct rtc_time *time) 123 { 124 unsigned long epoch_sec, elapsed_sec; ··· 272 } 273 274 static const struct rtc_class_ops vr41xx_rtc_ops = { 275 .ioctl = vr41xx_rtc_ioctl, 276 .read_time = vr41xx_rtc_read_time, 277 .set_time = vr41xx_rtc_set_time,
-2
include/linux/rtc.h
··· 72 * issued through ioctl() ... 73 */ 74 struct rtc_class_ops { 75 - int (*open)(struct device *); 76 - void (*release)(struct device *); 77 int (*ioctl)(struct device *, unsigned int, unsigned long); 78 int (*read_time)(struct device *, struct rtc_time *); 79 int (*set_time)(struct device *, struct rtc_time *);
··· 72 * issued through ioctl() ... 73 */ 74 struct rtc_class_ops { 75 int (*ioctl)(struct device *, unsigned int, unsigned long); 76 int (*read_time)(struct device *, struct rtc_time *); 77 int (*set_time)(struct device *, struct rtc_time *);