Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

Pull RTC updates from Alexandre Belloni:
"Not much this cycle apart from the ingenic rtc driver rework.

The fixes are mainly minor issues reported by coccinelle rather than
real world issues.

Subsystem:

- new VL flag for backup switch over

Drivers:

- ingenic: only support device tree

- pcf2127: report battery switch over, handle nowayout"

* tag 'rtc-5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux: (29 commits)
rtc: pcf2127: watchdog: handle nowayout feature
rtc: fsl-ftm-alarm: fix freeze(s2idle) failed to wake
rtc: abx80x: Provide debug feedback for invalid dt properties
rtc: abx80x: Add Device Tree matching table
rtc: rv3028: Add missed check for devm_regmap_init_i2c()
rtc: mpc5121: Use correct return value for mpc5121_rtc_probe()
rtc: goldfish: Use correct return value for goldfish_rtc_probe()
rtc: snvs: Add necessary clock operations for RTC APIs
rtc: snvs: Make SNVS clock always prepared
rtc: ingenic: Reset regulator register in probe
rtc: ingenic: Fix masking of error code
rtc: ingenic: Remove unused fields from private structure
rtc: ingenic: Set wakeup params in probe
rtc: ingenic: Enable clock in probe
rtc: ingenic: Use local 'dev' variable in probe
rtc: ingenic: Only support probing from devicetree
rtc: mc13xxx: fix a double-unlock issue
rtc: stmp3xxx: update contact email
rtc: max77686: Use single-byte writes on MAX77620
rtc: pcf2127: report battery switch over
...

+259 -152
+1
drivers/rtc/Kconfig
··· 1680 1680 config RTC_DRV_JZ4740 1681 1681 tristate "Ingenic JZ4740 SoC" 1682 1682 depends on MIPS || COMPILE_TEST 1683 + depends on OF 1683 1684 help 1684 1685 If you say yes here you get support for the Ingenic JZ47xx SoCs RTC 1685 1686 controllers.
-6
drivers/rtc/rtc-88pm860x.c
··· 106 106 unsigned char buf[4]; 107 107 unsigned long ticks, base, data; 108 108 109 - if (tm->tm_year > 206) { 110 - dev_dbg(info->dev, "Set time %d out of range. " 111 - "Please set time between 1970 to 2106.\n", 112 - 1900 + tm->tm_year); 113 - return -EINVAL; 114 - } 115 109 ticks = rtc_tm_to_time64(tm); 116 110 117 111 /* load 32-bit read-only counter */
+60 -6
drivers/rtc/rtc-abx80x.c
··· 13 13 #include <linux/bcd.h> 14 14 #include <linux/i2c.h> 15 15 #include <linux/module.h> 16 + #include <linux/of_device.h> 16 17 #include <linux/rtc.h> 17 18 #include <linux/watchdog.h> 18 19 ··· 555 554 .ioctl = abx80x_ioctl, 556 555 }; 557 556 558 - static int abx80x_dt_trickle_cfg(struct device_node *np) 557 + static int abx80x_dt_trickle_cfg(struct i2c_client *client) 559 558 { 559 + struct device_node *np = client->dev.of_node; 560 560 const char *diode; 561 561 int trickle_cfg = 0; 562 562 int i, ret; ··· 567 565 if (ret) 568 566 return ret; 569 567 570 - if (!strcmp(diode, "standard")) 568 + if (!strcmp(diode, "standard")) { 571 569 trickle_cfg |= ABX8XX_TRICKLE_STANDARD_DIODE; 572 - else if (!strcmp(diode, "schottky")) 570 + } else if (!strcmp(diode, "schottky")) { 573 571 trickle_cfg |= ABX8XX_TRICKLE_SCHOTTKY_DIODE; 574 - else 572 + } else { 573 + dev_dbg(&client->dev, "Invalid tc-diode value: %s\n", diode); 575 574 return -EINVAL; 575 + } 576 576 577 577 ret = of_property_read_u32(np, "abracon,tc-resistor", &tmp); 578 578 if (ret) ··· 584 580 if (trickle_resistors[i] == tmp) 585 581 break; 586 582 587 - if (i == sizeof(trickle_resistors)) 583 + if (i == sizeof(trickle_resistors)) { 584 + dev_dbg(&client->dev, "Invalid tc-resistor value: %u\n", tmp); 588 585 return -EINVAL; 586 + } 589 587 590 588 return (trickle_cfg | i); 591 589 } ··· 799 793 } 800 794 801 795 if (np && abx80x_caps[part].has_tc) 802 - trickle_cfg = abx80x_dt_trickle_cfg(np); 796 + trickle_cfg = abx80x_dt_trickle_cfg(client); 803 797 804 798 if (trickle_cfg > 0) { 805 799 dev_info(&client->dev, "Enabling trickle charger: %02x\n", ··· 869 863 }; 870 864 MODULE_DEVICE_TABLE(i2c, abx80x_id); 871 865 866 + #ifdef CONFIG_OF 867 + static const struct of_device_id abx80x_of_match[] = { 868 + { 869 + .compatible = "abracon,abx80x", 870 + .data = (void *)ABX80X 871 + }, 872 + { 873 + .compatible = "abracon,ab0801", 874 + .data = (void *)AB0801 875 + }, 876 + { 877 + .compatible = "abracon,ab0803", 878 + .data = (void *)AB0803 879 + }, 880 + { 881 + .compatible = "abracon,ab0804", 882 + .data = (void *)AB0804 883 + }, 884 + { 885 + .compatible = "abracon,ab0805", 886 + .data = (void *)AB0805 887 + }, 888 + { 889 + .compatible = "abracon,ab1801", 890 + .data = (void *)AB1801 891 + }, 892 + { 893 + .compatible = "abracon,ab1803", 894 + .data = (void *)AB1803 895 + }, 896 + { 897 + .compatible = "abracon,ab1804", 898 + .data = (void *)AB1804 899 + }, 900 + { 901 + .compatible = "abracon,ab1805", 902 + .data = (void *)AB1805 903 + }, 904 + { 905 + .compatible = "microcrystal,rv1805", 906 + .data = (void *)RV1805 907 + }, 908 + { } 909 + }; 910 + MODULE_DEVICE_TABLE(of, abx80x_of_match); 911 + #endif 912 + 872 913 static struct i2c_driver abx80x_driver = { 873 914 .driver = { 874 915 .name = "rtc-abx80x", 916 + .of_match_table = of_match_ptr(abx80x_of_match), 875 917 }, 876 918 .probe = abx80x_probe, 877 919 .id_table = abx80x_id,
+6 -4
drivers/rtc/rtc-fsl-ftm-alarm.c
··· 21 21 #include <linux/rtc.h> 22 22 #include <linux/time.h> 23 23 #include <linux/acpi.h> 24 + #include <linux/pm_wakeirq.h> 24 25 25 26 #define FTM_SC_CLK(c) ((c) << FTM_SC_CLK_MASK_SHIFT) 26 27 ··· 269 268 } 270 269 271 270 irq = platform_get_irq(pdev, 0); 272 - if (irq < 0) { 273 - dev_err(&pdev->dev, "can't get irq number\n"); 271 + if (irq < 0) 274 272 return irq; 275 - } 276 273 277 274 ret = devm_request_irq(&pdev->dev, irq, ftm_rtc_alarm_interrupt, 278 - IRQF_NO_SUSPEND, dev_name(&pdev->dev), rtc); 275 + 0, dev_name(&pdev->dev), rtc); 279 276 if (ret < 0) { 280 277 dev_err(&pdev->dev, "failed to request irq\n"); 281 278 return ret; ··· 286 287 rtc->rtc_dev->ops = &ftm_rtc_ops; 287 288 288 289 device_init_wakeup(&pdev->dev, true); 290 + ret = dev_pm_set_wake_irq(&pdev->dev, irq); 291 + if (ret) 292 + dev_err(&pdev->dev, "failed to enable irq wake\n"); 289 293 290 294 ret = rtc_register_device(rtc->rtc_dev); 291 295 if (ret) {
+1 -1
drivers/rtc/rtc-goldfish.c
··· 174 174 platform_set_drvdata(pdev, rtcdrv); 175 175 rtcdrv->base = devm_platform_ioremap_resource(pdev, 0); 176 176 if (IS_ERR(rtcdrv->base)) 177 - return -ENODEV; 177 + return PTR_ERR(rtcdrv->base); 178 178 179 179 rtcdrv->irq = platform_get_irq(pdev, 0); 180 180 if (rtcdrv->irq < 0)
+87 -92
drivers/rtc/rtc-jz4740.c
··· 55 55 enum jz4740_rtc_type type; 56 56 57 57 struct rtc_device *rtc; 58 - struct clk *clk; 59 - 60 - int irq; 61 58 62 59 spinlock_t lock; 63 - 64 - unsigned int min_wakeup_pin_assert_time; 65 - unsigned int reset_pin_assert_time; 66 60 }; 67 61 68 62 static struct device *dev_for_power_off; ··· 253 259 254 260 static void jz4740_rtc_power_off(void) 255 261 { 256 - struct jz4740_rtc *rtc = dev_get_drvdata(dev_for_power_off); 257 - unsigned long rtc_rate; 258 - unsigned long wakeup_filter_ticks; 259 - unsigned long reset_counter_ticks; 260 - 261 - clk_prepare_enable(rtc->clk); 262 - 263 - rtc_rate = clk_get_rate(rtc->clk); 264 - 265 - /* 266 - * Set minimum wakeup pin assertion time: 100 ms. 267 - * Range is 0 to 2 sec if RTC is clocked at 32 kHz. 268 - */ 269 - wakeup_filter_ticks = 270 - (rtc->min_wakeup_pin_assert_time * rtc_rate) / 1000; 271 - if (wakeup_filter_ticks < JZ_RTC_WAKEUP_FILTER_MASK) 272 - wakeup_filter_ticks &= JZ_RTC_WAKEUP_FILTER_MASK; 273 - else 274 - wakeup_filter_ticks = JZ_RTC_WAKEUP_FILTER_MASK; 275 - jz4740_rtc_reg_write(rtc, 276 - JZ_REG_RTC_WAKEUP_FILTER, wakeup_filter_ticks); 277 - 278 - /* 279 - * Set reset pin low-level assertion time after wakeup: 60 ms. 280 - * Range is 0 to 125 ms if RTC is clocked at 32 kHz. 281 - */ 282 - reset_counter_ticks = (rtc->reset_pin_assert_time * rtc_rate) / 1000; 283 - if (reset_counter_ticks < JZ_RTC_RESET_COUNTER_MASK) 284 - reset_counter_ticks &= JZ_RTC_RESET_COUNTER_MASK; 285 - else 286 - reset_counter_ticks = JZ_RTC_RESET_COUNTER_MASK; 287 - jz4740_rtc_reg_write(rtc, 288 - JZ_REG_RTC_RESET_COUNTER, reset_counter_ticks); 289 - 290 262 jz4740_rtc_poweroff(dev_for_power_off); 291 263 kernel_halt(); 264 + } 265 + 266 + static void jz4740_rtc_clk_disable(void *data) 267 + { 268 + clk_disable_unprepare(data); 292 269 } 293 270 294 271 static const struct of_device_id jz4740_rtc_of_match[] = { ··· 270 305 }; 271 306 MODULE_DEVICE_TABLE(of, jz4740_rtc_of_match); 272 307 308 + static void jz4740_rtc_set_wakeup_params(struct jz4740_rtc *rtc, 309 + struct device_node *np, 310 + unsigned long rate) 311 + { 312 + unsigned long wakeup_ticks, reset_ticks; 313 + unsigned int min_wakeup_pin_assert_time = 60; /* Default: 60ms */ 314 + unsigned int reset_pin_assert_time = 100; /* Default: 100ms */ 315 + 316 + of_property_read_u32(np, "ingenic,reset-pin-assert-time-ms", 317 + &reset_pin_assert_time); 318 + of_property_read_u32(np, "ingenic,min-wakeup-pin-assert-time-ms", 319 + &min_wakeup_pin_assert_time); 320 + 321 + /* 322 + * Set minimum wakeup pin assertion time: 100 ms. 323 + * Range is 0 to 2 sec if RTC is clocked at 32 kHz. 324 + */ 325 + wakeup_ticks = (min_wakeup_pin_assert_time * rate) / 1000; 326 + if (wakeup_ticks < JZ_RTC_WAKEUP_FILTER_MASK) 327 + wakeup_ticks &= JZ_RTC_WAKEUP_FILTER_MASK; 328 + else 329 + wakeup_ticks = JZ_RTC_WAKEUP_FILTER_MASK; 330 + jz4740_rtc_reg_write(rtc, JZ_REG_RTC_WAKEUP_FILTER, wakeup_ticks); 331 + 332 + /* 333 + * Set reset pin low-level assertion time after wakeup: 60 ms. 334 + * Range is 0 to 125 ms if RTC is clocked at 32 kHz. 335 + */ 336 + reset_ticks = (reset_pin_assert_time * rate) / 1000; 337 + if (reset_ticks < JZ_RTC_RESET_COUNTER_MASK) 338 + reset_ticks &= JZ_RTC_RESET_COUNTER_MASK; 339 + else 340 + reset_ticks = JZ_RTC_RESET_COUNTER_MASK; 341 + jz4740_rtc_reg_write(rtc, JZ_REG_RTC_RESET_COUNTER, reset_ticks); 342 + } 343 + 273 344 static int jz4740_rtc_probe(struct platform_device *pdev) 274 345 { 275 - int ret; 346 + struct device *dev = &pdev->dev; 347 + struct device_node *np = dev->of_node; 276 348 struct jz4740_rtc *rtc; 277 - const struct platform_device_id *id = platform_get_device_id(pdev); 278 - const struct of_device_id *of_id = of_match_device( 279 - jz4740_rtc_of_match, &pdev->dev); 280 - struct device_node *np = pdev->dev.of_node; 349 + unsigned long rate; 350 + struct clk *clk; 351 + int ret, irq; 281 352 282 - rtc = devm_kzalloc(&pdev->dev, sizeof(*rtc), GFP_KERNEL); 353 + rtc = devm_kzalloc(dev, sizeof(*rtc), GFP_KERNEL); 283 354 if (!rtc) 284 355 return -ENOMEM; 285 356 286 - if (of_id) 287 - rtc->type = (enum jz4740_rtc_type)of_id->data; 288 - else 289 - rtc->type = id->driver_data; 357 + rtc->type = (enum jz4740_rtc_type)device_get_match_data(dev); 290 358 291 - rtc->irq = platform_get_irq(pdev, 0); 292 - if (rtc->irq < 0) 293 - return -ENOENT; 359 + irq = platform_get_irq(pdev, 0); 360 + if (irq < 0) 361 + return irq; 294 362 295 363 rtc->base = devm_platform_ioremap_resource(pdev, 0); 296 364 if (IS_ERR(rtc->base)) 297 365 return PTR_ERR(rtc->base); 298 366 299 - rtc->clk = devm_clk_get(&pdev->dev, "rtc"); 300 - if (IS_ERR(rtc->clk)) { 301 - dev_err(&pdev->dev, "Failed to get RTC clock\n"); 302 - return PTR_ERR(rtc->clk); 367 + clk = devm_clk_get(dev, "rtc"); 368 + if (IS_ERR(clk)) { 369 + dev_err(dev, "Failed to get RTC clock\n"); 370 + return PTR_ERR(clk); 371 + } 372 + 373 + ret = clk_prepare_enable(clk); 374 + if (ret) { 375 + dev_err(dev, "Failed to enable clock\n"); 376 + return ret; 377 + } 378 + 379 + ret = devm_add_action_or_reset(dev, jz4740_rtc_clk_disable, clk); 380 + if (ret) { 381 + dev_err(dev, "Failed to register devm action\n"); 382 + return ret; 303 383 } 304 384 305 385 spin_lock_init(&rtc->lock); 306 386 307 387 platform_set_drvdata(pdev, rtc); 308 388 309 - device_init_wakeup(&pdev->dev, 1); 389 + device_init_wakeup(dev, 1); 310 390 311 - ret = dev_pm_set_wake_irq(&pdev->dev, rtc->irq); 391 + ret = dev_pm_set_wake_irq(dev, irq); 312 392 if (ret) { 313 - dev_err(&pdev->dev, "Failed to set wake irq: %d\n", ret); 393 + dev_err(dev, "Failed to set wake irq: %d\n", ret); 314 394 return ret; 315 395 } 316 396 317 - rtc->rtc = devm_rtc_allocate_device(&pdev->dev); 397 + rtc->rtc = devm_rtc_allocate_device(dev); 318 398 if (IS_ERR(rtc->rtc)) { 319 399 ret = PTR_ERR(rtc->rtc); 320 - dev_err(&pdev->dev, "Failed to allocate rtc device: %d\n", ret); 400 + dev_err(dev, "Failed to allocate rtc device: %d\n", ret); 321 401 return ret; 322 402 } 323 403 324 404 rtc->rtc->ops = &jz4740_rtc_ops; 325 405 rtc->rtc->range_max = U32_MAX; 326 406 407 + rate = clk_get_rate(clk); 408 + jz4740_rtc_set_wakeup_params(rtc, np, rate); 409 + 410 + /* Each 1 Hz pulse should happen after (rate) ticks */ 411 + jz4740_rtc_reg_write(rtc, JZ_REG_RTC_REGULATOR, rate - 1); 412 + 327 413 ret = rtc_register_device(rtc->rtc); 328 414 if (ret) 329 415 return ret; 330 416 331 - ret = devm_request_irq(&pdev->dev, rtc->irq, jz4740_rtc_irq, 0, 332 - pdev->name, rtc); 417 + ret = devm_request_irq(dev, irq, jz4740_rtc_irq, 0, 418 + pdev->name, rtc); 333 419 if (ret) { 334 - dev_err(&pdev->dev, "Failed to request rtc irq: %d\n", ret); 420 + dev_err(dev, "Failed to request rtc irq: %d\n", ret); 335 421 return ret; 336 422 } 337 423 338 - if (np && of_device_is_system_power_controller(np)) { 339 - if (!pm_power_off) { 340 - /* Default: 60ms */ 341 - rtc->reset_pin_assert_time = 60; 342 - of_property_read_u32(np, 343 - "ingenic,reset-pin-assert-time-ms", 344 - &rtc->reset_pin_assert_time); 424 + if (of_device_is_system_power_controller(np)) { 425 + dev_for_power_off = dev; 345 426 346 - /* Default: 100ms */ 347 - rtc->min_wakeup_pin_assert_time = 100; 348 - of_property_read_u32(np, 349 - "ingenic,min-wakeup-pin-assert-time-ms", 350 - &rtc->min_wakeup_pin_assert_time); 351 - 352 - dev_for_power_off = &pdev->dev; 427 + if (!pm_power_off) 353 428 pm_power_off = jz4740_rtc_power_off; 354 - } else { 355 - dev_warn(&pdev->dev, 356 - "Poweroff handler already present!\n"); 357 - } 429 + else 430 + dev_warn(dev, "Poweroff handler already present!\n"); 358 431 } 359 432 360 433 return 0; 361 434 } 362 435 363 - static const struct platform_device_id jz4740_rtc_ids[] = { 364 - { "jz4740-rtc", ID_JZ4740 }, 365 - { "jz4780-rtc", ID_JZ4780 }, 366 - {} 367 - }; 368 - MODULE_DEVICE_TABLE(platform, jz4740_rtc_ids); 369 - 370 436 static struct platform_driver jz4740_rtc_driver = { 371 437 .probe = jz4740_rtc_probe, 372 438 .driver = { 373 439 .name = "jz4740-rtc", 374 - .of_match_table = of_match_ptr(jz4740_rtc_of_match), 440 + .of_match_table = jz4740_rtc_of_match, 375 441 }, 376 - .id_table = jz4740_rtc_ids, 377 442 }; 378 443 379 444 module_platform_driver(jz4740_rtc_driver);
+1 -3
drivers/rtc/rtc-lpc24xx.c
··· 205 205 return PTR_ERR(rtc->rtc_base); 206 206 207 207 irq = platform_get_irq(pdev, 0); 208 - if (irq < 0) { 209 - dev_warn(&pdev->dev, "can't get interrupt resource\n"); 208 + if (irq < 0) 210 209 return irq; 211 - } 212 210 213 211 rtc->clk_rtc = devm_clk_get(&pdev->dev, "rtc"); 214 212 if (IS_ERR(rtc->clk_rtc)) {
+16 -6
drivers/rtc/rtc-max77686.c
··· 78 78 int alarm_pending_status_reg; 79 79 /* RTC IRQ CHIP for regmap */ 80 80 const struct regmap_irq_chip *rtc_irq_chip; 81 + /* regmap configuration for the chip */ 82 + const struct regmap_config *regmap_config; 81 83 }; 82 84 83 85 struct max77686_rtc_info { ··· 184 182 .num_irqs = ARRAY_SIZE(max77686_rtc_irqs), 185 183 }; 186 184 185 + static const struct regmap_config max77686_rtc_regmap_config = { 186 + .reg_bits = 8, 187 + .val_bits = 8, 188 + }; 189 + 187 190 static const struct max77686_rtc_driver_data max77686_drv_data = { 188 191 .delay = 16000, 189 192 .mask = 0x7f, ··· 198 191 .alarm_pending_status_reg = MAX77686_REG_STATUS2, 199 192 .rtc_i2c_addr = MAX77686_I2C_ADDR_RTC, 200 193 .rtc_irq_chip = &max77686_rtc_irq_chip, 194 + .regmap_config = &max77686_rtc_regmap_config, 195 + }; 196 + 197 + static const struct regmap_config max77620_rtc_regmap_config = { 198 + .reg_bits = 8, 199 + .val_bits = 8, 200 + .use_single_write = true, 201 201 }; 202 202 203 203 static const struct max77686_rtc_driver_data max77620_drv_data = { ··· 216 202 .alarm_pending_status_reg = MAX77686_INVALID_REG, 217 203 .rtc_i2c_addr = MAX77620_I2C_ADDR_RTC, 218 204 .rtc_irq_chip = &max77686_rtc_irq_chip, 205 + .regmap_config = &max77620_rtc_regmap_config, 219 206 }; 220 207 221 208 static const unsigned int max77802_map[REG_RTC_END] = { ··· 673 658 return ret; 674 659 } 675 660 676 - static const struct regmap_config max77686_rtc_regmap_config = { 677 - .reg_bits = 8, 678 - .val_bits = 8, 679 - }; 680 - 681 661 static int max77686_init_rtc_regmap(struct max77686_rtc_info *info) 682 662 { 683 663 struct device *parent = info->dev->parent; ··· 708 698 } 709 699 710 700 info->rtc_regmap = devm_regmap_init_i2c(info->rtc, 711 - &max77686_rtc_regmap_config); 701 + info->drv_data->regmap_config); 712 702 if (IS_ERR(info->rtc_regmap)) { 713 703 ret = PTR_ERR(info->rtc_regmap); 714 704 dev_err(info->dev, "Failed to allocate RTC regmap: %d\n", ret);
+3 -1
drivers/rtc/rtc-mc13xxx.c
··· 308 308 mc13xxx_unlock(mc13xxx); 309 309 310 310 ret = rtc_register_device(priv->rtc); 311 - if (ret) 311 + if (ret) { 312 + mc13xxx_lock(mc13xxx); 312 313 goto err_irq_request; 314 + } 313 315 314 316 return 0; 315 317
+1 -1
drivers/rtc/rtc-mpc5121.c
··· 316 316 rtc->regs = devm_platform_ioremap_resource(op, 0); 317 317 if (IS_ERR(rtc->regs)) { 318 318 dev_err(&op->dev, "%s: couldn't map io space\n", __func__); 319 - return -ENOSYS; 319 + return PTR_ERR(rtc->regs); 320 320 } 321 321 322 322 device_init_wakeup(&op->dev, 1);
+3 -13
drivers/rtc/rtc-mt2712.c
··· 310 310 311 311 static int mt2712_rtc_probe(struct platform_device *pdev) 312 312 { 313 - struct resource *res; 314 313 struct mt2712_rtc *mt2712_rtc; 315 314 int ret; 316 315 ··· 318 319 if (!mt2712_rtc) 319 320 return -ENOMEM; 320 321 321 - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 322 - mt2712_rtc->base = devm_ioremap_resource(&pdev->dev, res); 322 + mt2712_rtc->base = devm_platform_ioremap_resource(pdev, 0); 323 323 if (IS_ERR(mt2712_rtc->base)) 324 324 return PTR_ERR(mt2712_rtc->base); 325 325 ··· 326 328 mt2712_rtc_hw_init(mt2712_rtc); 327 329 328 330 mt2712_rtc->irq = platform_get_irq(pdev, 0); 329 - if (mt2712_rtc->irq < 0) { 330 - dev_err(&pdev->dev, "No IRQ resource\n"); 331 + if (mt2712_rtc->irq < 0) 331 332 return mt2712_rtc->irq; 332 - } 333 333 334 334 platform_set_drvdata(pdev, mt2712_rtc); 335 335 ··· 352 356 mt2712_rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 353 357 mt2712_rtc->rtc->range_max = MT2712_RTC_TIMESTAMP_END_2127; 354 358 355 - ret = rtc_register_device(mt2712_rtc->rtc); 356 - if (ret) { 357 - dev_err(&pdev->dev, "register rtc device failed\n"); 358 - return ret; 359 - } 360 - 361 - return 0; 359 + return rtc_register_device(mt2712_rtc->rtc); 362 360 } 363 361 364 362 #ifdef CONFIG_PM_SLEEP
+20 -11
drivers/rtc/rtc-pcf2127.c
··· 137 137 tm->tm_wday = buf[PCF2127_REG_DW] & 0x07; 138 138 tm->tm_mon = bcd2bin(buf[PCF2127_REG_MO] & 0x1F) - 1; /* rtc mn 1-12 */ 139 139 tm->tm_year = bcd2bin(buf[PCF2127_REG_YR]); 140 - if (tm->tm_year < 70) 141 - tm->tm_year += 100; /* assume we are in 1970...2069 */ 140 + tm->tm_year += 100; 142 141 143 142 dev_dbg(dev, "%s: tm is secs=%d, mins=%d, hours=%d, " 144 143 "mday=%d, mon=%d, year=%d, wday=%d\n", ··· 171 172 buf[i++] = bin2bcd(tm->tm_mon + 1); 172 173 173 174 /* year */ 174 - buf[i++] = bin2bcd(tm->tm_year % 100); 175 + buf[i++] = bin2bcd(tm->tm_year - 100); 175 176 176 177 /* write register's data */ 177 178 err = regmap_bulk_write(pcf2127->regmap, PCF2127_REG_SC, buf, i); ··· 184 185 return 0; 185 186 } 186 187 187 - #ifdef CONFIG_RTC_INTF_DEV 188 188 static int pcf2127_rtc_ioctl(struct device *dev, 189 189 unsigned int cmd, unsigned long arg) 190 190 { 191 191 struct pcf2127 *pcf2127 = dev_get_drvdata(dev); 192 - int touser; 192 + int val, touser = 0; 193 193 int ret; 194 194 195 195 switch (cmd) { 196 196 case RTC_VL_READ: 197 - ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &touser); 197 + ret = regmap_read(pcf2127->regmap, PCF2127_REG_CTRL3, &val); 198 198 if (ret) 199 199 return ret; 200 200 201 - touser = touser & PCF2127_BIT_CTRL3_BLF ? RTC_VL_BACKUP_LOW : 0; 201 + if (val & PCF2127_BIT_CTRL3_BLF) 202 + touser |= RTC_VL_BACKUP_LOW; 203 + 204 + if (val & PCF2127_BIT_CTRL3_BF) 205 + touser |= RTC_VL_BACKUP_SWITCH; 202 206 203 207 return put_user(touser, (unsigned int __user *)arg); 208 + 209 + case RTC_VL_CLR: 210 + return regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3, 211 + PCF2127_BIT_CTRL3_BF, 0); 212 + 204 213 default: 205 214 return -ENOIOCTLCMD; 206 215 } 207 216 } 208 - #else 209 - #define pcf2127_rtc_ioctl NULL 210 - #endif 211 217 212 218 static const struct rtc_class_ops pcf2127_rtc_ops = { 213 219 .ioctl = pcf2127_rtc_ioctl, ··· 437 433 return PTR_ERR(pcf2127->rtc); 438 434 439 435 pcf2127->rtc->ops = &pcf2127_rtc_ops; 436 + pcf2127->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000; 437 + pcf2127->rtc->range_max = RTC_TIMESTAMP_END_2099; 438 + pcf2127->rtc->set_start_time = true; /* Sets actual start to 1970 */ 440 439 441 440 pcf2127->wdd.parent = dev; 442 441 pcf2127->wdd.info = &pcf2127_wdt_info; ··· 448 441 pcf2127->wdd.max_timeout = PCF2127_WD_VAL_MAX; 449 442 pcf2127->wdd.timeout = PCF2127_WD_VAL_DEFAULT; 450 443 pcf2127->wdd.min_hw_heartbeat_ms = 500; 444 + pcf2127->wdd.status = WATCHDOG_NOWAYOUT_INIT_STATUS; 451 445 452 446 watchdog_set_drvdata(&pcf2127->wdd, pcf2127); 453 447 ··· 503 495 */ 504 496 ret = regmap_update_bits(pcf2127->regmap, PCF2127_REG_CTRL3, 505 497 PCF2127_BIT_CTRL3_BTSE | 506 - PCF2127_BIT_CTRL3_BF | 507 498 PCF2127_BIT_CTRL3_BIE | 508 499 PCF2127_BIT_CTRL3_BLIE, 0); 509 500 if (ret) { ··· 643 636 static const struct regmap_config config = { 644 637 .reg_bits = 8, 645 638 .val_bits = 8, 639 + .max_register = 0x1d, 646 640 }; 647 641 648 642 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) ··· 711 703 .val_bits = 8, 712 704 .read_flag_mask = 0xa0, 713 705 .write_flag_mask = 0x20, 706 + .max_register = 0x1d, 714 707 }; 715 708 struct regmap *regmap; 716 709
+1 -3
drivers/rtc/rtc-rc5t619.c
··· 356 356 int err; 357 357 358 358 rtc = devm_kzalloc(dev, sizeof(*rtc), GFP_KERNEL); 359 - if (IS_ERR(rtc)) { 360 - err = PTR_ERR(rtc); 359 + if (!rtc) 361 360 return -ENOMEM; 362 - } 363 361 364 362 rtc->rn5t618 = rn5t618; 365 363
+2
drivers/rtc/rtc-rv3028.c
··· 755 755 return -ENOMEM; 756 756 757 757 rv3028->regmap = devm_regmap_init_i2c(client, &regmap_config); 758 + if (IS_ERR(rv3028->regmap)) 759 + return PTR_ERR(rv3028->regmap); 758 760 759 761 i2c_set_clientdata(client, rv3028); 760 762
+55 -4
drivers/rtc/rtc-snvs.c
··· 148 148 static int snvs_rtc_read_time(struct device *dev, struct rtc_time *tm) 149 149 { 150 150 struct snvs_rtc_data *data = dev_get_drvdata(dev); 151 - unsigned long time = rtc_read_lp_counter(data); 151 + unsigned long time; 152 + int ret; 152 153 154 + if (data->clk) { 155 + ret = clk_enable(data->clk); 156 + if (ret) 157 + return ret; 158 + } 159 + 160 + time = rtc_read_lp_counter(data); 153 161 rtc_time64_to_tm(time, tm); 162 + 163 + if (data->clk) 164 + clk_disable(data->clk); 154 165 155 166 return 0; 156 167 } ··· 171 160 struct snvs_rtc_data *data = dev_get_drvdata(dev); 172 161 unsigned long time = rtc_tm_to_time64(tm); 173 162 int ret; 163 + 164 + if (data->clk) { 165 + ret = clk_enable(data->clk); 166 + if (ret) 167 + return ret; 168 + } 174 169 175 170 /* Disable RTC first */ 176 171 ret = snvs_rtc_enable(data, false); ··· 190 173 /* Enable RTC again */ 191 174 ret = snvs_rtc_enable(data, true); 192 175 176 + if (data->clk) 177 + clk_disable(data->clk); 178 + 193 179 return ret; 194 180 } 195 181 ··· 200 180 { 201 181 struct snvs_rtc_data *data = dev_get_drvdata(dev); 202 182 u32 lptar, lpsr; 183 + int ret; 184 + 185 + if (data->clk) { 186 + ret = clk_enable(data->clk); 187 + if (ret) 188 + return ret; 189 + } 203 190 204 191 regmap_read(data->regmap, data->offset + SNVS_LPTAR, &lptar); 205 192 rtc_time64_to_tm(lptar, &alrm->time); ··· 214 187 regmap_read(data->regmap, data->offset + SNVS_LPSR, &lpsr); 215 188 alrm->pending = (lpsr & SNVS_LPSR_LPTA) ? 1 : 0; 216 189 190 + if (data->clk) 191 + clk_disable(data->clk); 192 + 217 193 return 0; 218 194 } 219 195 220 196 static int snvs_rtc_alarm_irq_enable(struct device *dev, unsigned int enable) 221 197 { 222 198 struct snvs_rtc_data *data = dev_get_drvdata(dev); 199 + int ret; 200 + 201 + if (data->clk) { 202 + ret = clk_enable(data->clk); 203 + if (ret) 204 + return ret; 205 + } 223 206 224 207 regmap_update_bits(data->regmap, data->offset + SNVS_LPCR, 225 208 (SNVS_LPCR_LPTA_EN | SNVS_LPCR_LPWUI_EN), 226 209 enable ? (SNVS_LPCR_LPTA_EN | SNVS_LPCR_LPWUI_EN) : 0); 227 210 228 - return rtc_write_sync_lp(data); 211 + ret = rtc_write_sync_lp(data); 212 + 213 + if (data->clk) 214 + clk_disable(data->clk); 215 + 216 + return ret; 229 217 } 230 218 231 219 static int snvs_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) ··· 248 206 struct snvs_rtc_data *data = dev_get_drvdata(dev); 249 207 unsigned long time = rtc_tm_to_time64(&alrm->time); 250 208 int ret; 209 + 210 + if (data->clk) { 211 + ret = clk_enable(data->clk); 212 + if (ret) 213 + return ret; 214 + } 251 215 252 216 regmap_update_bits(data->regmap, data->offset + SNVS_LPCR, SNVS_LPCR_LPTA_EN, 0); 253 217 ret = rtc_write_sync_lp(data); ··· 263 215 264 216 /* Clear alarm interrupt status bit */ 265 217 regmap_write(data->regmap, data->offset + SNVS_LPSR, SNVS_LPSR_LPTA); 218 + 219 + if (data->clk) 220 + clk_disable(data->clk); 266 221 267 222 return snvs_rtc_alarm_irq_enable(dev, alrm->enabled); 268 223 } ··· 413 362 struct snvs_rtc_data *data = dev_get_drvdata(dev); 414 363 415 364 if (data->clk) 416 - clk_disable_unprepare(data->clk); 365 + clk_disable(data->clk); 417 366 418 367 return 0; 419 368 } ··· 423 372 struct snvs_rtc_data *data = dev_get_drvdata(dev); 424 373 425 374 if (data->clk) 426 - return clk_prepare_enable(data->clk); 375 + return clk_enable(data->clk); 427 376 428 377 return 0; 429 378 }
+1 -1
drivers/rtc/rtc-stmp3xxx.c
··· 416 416 417 417 MODULE_DESCRIPTION("STMP3xxx RTC Driver"); 418 418 MODULE_AUTHOR("dmitry pervushin <dpervushin@embeddedalley.com> and " 419 - "Wolfram Sang <w.sang@pengutronix.de>"); 419 + "Wolfram Sang <kernel@pengutronix.de>"); 420 420 MODULE_LICENSE("GPL");
+1
include/uapi/linux/rtc.h
··· 99 99 #define RTC_VL_BACKUP_LOW _BITUL(1) /* Backup voltage is low */ 100 100 #define RTC_VL_BACKUP_EMPTY _BITUL(2) /* Backup empty or not present */ 101 101 #define RTC_VL_ACCURACY_LOW _BITUL(3) /* Voltage is low, RTC accuracy is reduced */ 102 + #define RTC_VL_BACKUP_SWITCH _BITUL(4) /* Backup switchover happened */ 102 103 103 104 #define RTC_VL_READ _IOR('p', 0x13, unsigned int) /* Voltage low detection */ 104 105 #define RTC_VL_CLR _IO('p', 0x14) /* Clear voltage low information */