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