Merge tag 'watchdog-for-linus-v4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging

Pull watchdog updates from Wim Van Sebroeck and Guenter Roeck:

- new driver for Add Loongson1 SoC

- minor cleanup and fixes in various drivers

* tag 'watchdog-for-linus-v4.10' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging:
watchdog: it87_wdt: add IT8620E ID
watchdog: mpc8xxx: Remove unneeded linux/miscdevice.h include
watchdog: octeon: Remove unneeded linux/miscdevice.h include
watchdog: bcm2835_wdt: set WDOG_HW_RUNNING bit when appropriate
watchdog: loongson1: Add Loongson1 SoC watchdog driver
watchdog: cpwd: remove memory allocate failure message
watchdog: da9062/61: watchdog driver
intel-mid_wdt: Error code is just an integer
intel-mid_wdt: make sure watchdog is not running at startup
watchdog: mei_wdt: request stop on reboot to prevent false positive event
watchdog: hpwdt: changed maintainer information
watchdog: jz4740: Fix modular build
watchdog: qcom: fix kernel panic due to external abort on non-linefetch
watchdog: davinci: add support for deferred probing
watchdog: meson: Remove unneeded platform MODULE_ALIAS
watchdog: Standardize leading tabs and spaces in Kconfig file
watchdog: max77620_wdt: fix module autoload
watchdog: bcm7038_wdt: fix module autoload

+262 -58
+1 -1
MAINTAINERS
··· 5735 5735 F: drivers/media/dvb-frontends/hd29l2* 5736 5736 5737 5737 HEWLETT PACKARD ENTERPRISE ILO NMI WATCHDOG DRIVER 5738 - M: Brian Boylston <brian.boylston@hpe.com> 5738 + M: Jimmy Vance <jimmy.vance@hpe.com> 5739 5739 S: Supported 5740 5740 F: Documentation/watchdog/hpwdt.txt 5741 5741 F: drivers/watchdog/hpwdt.c
+28 -21
drivers/watchdog/Kconfig
··· 72 72 module will be called softdog. 73 73 74 74 config DA9052_WATCHDOG 75 - tristate "Dialog DA9052 Watchdog" 76 - depends on PMIC_DA9052 77 - select WATCHDOG_CORE 78 - help 79 - Support for the watchdog in the DA9052 PMIC. Watchdog trigger 80 - cause system reset. 75 + tristate "Dialog DA9052 Watchdog" 76 + depends on PMIC_DA9052 77 + select WATCHDOG_CORE 78 + help 79 + Support for the watchdog in the DA9052 PMIC. Watchdog trigger 80 + cause system reset. 81 81 82 - Say Y here to include support for the DA9052 watchdog. 83 - Alternatively say M to compile the driver as a module, 84 - which will be called da9052_wdt. 82 + Say Y here to include support for the DA9052 watchdog. 83 + Alternatively say M to compile the driver as a module, 84 + which will be called da9052_wdt. 85 85 86 86 config DA9055_WATCHDOG 87 87 tristate "Dialog Semiconductor DA9055 Watchdog" ··· 104 104 This driver can be built as a module. The module name is da9063_wdt. 105 105 106 106 config DA9062_WATCHDOG 107 - tristate "Dialog DA9062 Watchdog" 107 + tristate "Dialog DA9062/61 Watchdog" 108 108 depends on MFD_DA9062 109 109 select WATCHDOG_CORE 110 110 help 111 - Support for the watchdog in the DA9062 PMIC. 111 + Support for the watchdog in the DA9062 and DA9061 PMICs. 112 112 113 113 This driver can be built as a module. The module name is da9062_wdt. 114 114 ··· 1008 1008 tristate "IT87 Watchdog Timer" 1009 1009 depends on X86 1010 1010 ---help--- 1011 - This is the driver for the hardware watchdog on the ITE IT8702, 1012 - IT8712, IT8716, IT8718, IT8720, IT8721, IT8726 and IT8728 1011 + This is the driver for the hardware watchdog on the ITE IT8620, 1012 + IT8702, IT8712, IT8716, IT8718, IT8720, IT8721, IT8726 and IT8728 1013 1013 Super I/O chips. 1014 1014 1015 1015 If the driver does not work, then make sure that the game port in ··· 1514 1514 help 1515 1515 Hardware driver for the Lantiq SoC Watchdog Timer. 1516 1516 1517 + config LOONGSON1_WDT 1518 + tristate "Loongson1 SoC hardware watchdog" 1519 + depends on MACH_LOONGSON32 1520 + select WATCHDOG_CORE 1521 + help 1522 + Hardware driver for the Loongson1 SoC Watchdog Timer. 1523 + 1517 1524 config RALINK_WDT 1518 1525 tristate "Ralink SoC watchdog" 1519 1526 select WATCHDOG_CORE ··· 1631 1624 The value can be overridden by the wdt_period command-line parameter. 1632 1625 1633 1626 config MEN_A21_WDT 1634 - tristate "MEN A21 VME CPU Carrier Board Watchdog Timer" 1635 - select WATCHDOG_CORE 1636 - depends on GPIOLIB || COMPILE_TEST 1637 - help 1638 - Watchdog driver for MEN A21 VMEbus CPU Carrier Boards. 1627 + tristate "MEN A21 VME CPU Carrier Board Watchdog Timer" 1628 + select WATCHDOG_CORE 1629 + depends on GPIOLIB || COMPILE_TEST 1630 + help 1631 + Watchdog driver for MEN A21 VMEbus CPU Carrier Boards. 1639 1632 1640 - The driver can also be built as a module. If so, the module will be 1641 - called mena21_wdt. 1633 + The driver can also be built as a module. If so, the module will be 1634 + called mena21_wdt. 1642 1635 1643 - If unsure select N here. 1636 + If unsure select N here. 1644 1637 1645 1638 # PPC64 Architecture 1646 1639
+1
drivers/watchdog/Makefile
··· 163 163 obj-$(CONFIG_OCTEON_WDT) += octeon-wdt.o 164 164 octeon-wdt-y := octeon-wdt-main.o octeon-wdt-nmi.o 165 165 obj-$(CONFIG_LANTIQ_WDT) += lantiq_wdt.o 166 + obj-$(CONFIG_LOONGSON1_WDT) += loongson1_wdt.o 166 167 obj-$(CONFIG_RALINK_WDT) += rt2880_wdt.o 167 168 obj-$(CONFIG_IMGPDC_WDT) += imgpdc_wdt.o 168 169 obj-$(CONFIG_MT7621_WDT) += mt7621_wdt.o
+20
drivers/watchdog/bcm2835_wdt.c
··· 55 55 static unsigned int heartbeat; 56 56 static bool nowayout = WATCHDOG_NOWAYOUT; 57 57 58 + static bool bcm2835_wdt_is_running(struct bcm2835_wdt *wdt) 59 + { 60 + uint32_t cur; 61 + 62 + cur = readl(wdt->base + PM_RSTC); 63 + 64 + return !!(cur & PM_RSTC_WRCFG_FULL_RESET); 65 + } 66 + 58 67 static int bcm2835_wdt_start(struct watchdog_device *wdog) 59 68 { 60 69 struct bcm2835_wdt *wdt = watchdog_get_drvdata(wdog); ··· 190 181 watchdog_init_timeout(&bcm2835_wdt_wdd, heartbeat, dev); 191 182 watchdog_set_nowayout(&bcm2835_wdt_wdd, nowayout); 192 183 bcm2835_wdt_wdd.parent = &pdev->dev; 184 + if (bcm2835_wdt_is_running(wdt)) { 185 + /* 186 + * The currently active timeout value (set by the 187 + * bootloader) may be different from the module 188 + * heartbeat parameter or the value in device 189 + * tree. But we just need to set WDOG_HW_RUNNING, 190 + * because then the framework will "immediately" ping 191 + * the device, updating the timeout. 192 + */ 193 + set_bit(WDOG_HW_RUNNING, &bcm2835_wdt_wdd.status); 194 + } 193 195 err = watchdog_register_device(&bcm2835_wdt_wdd); 194 196 if (err) { 195 197 dev_err(dev, "Failed to register watchdog device");
+1
drivers/watchdog/bcm7038_wdt.c
··· 216 216 { .compatible = "brcm,bcm7038-wdt" }, 217 217 {}, 218 218 }; 219 + MODULE_DEVICE_TABLE(of, bcm7038_wdt_match); 219 220 220 221 static struct platform_driver bcm7038_wdt_driver = { 221 222 .probe = bcm7038_wdt_probe,
+7 -16
drivers/watchdog/cpwd.c
··· 538 538 if (cpwd_device) 539 539 return -EINVAL; 540 540 541 - p = kzalloc(sizeof(*p), GFP_KERNEL); 542 - err = -ENOMEM; 543 - if (!p) { 544 - pr_err("Unable to allocate struct cpwd\n"); 545 - goto out; 546 - } 541 + p = devm_kzalloc(&op->dev, sizeof(*p), GFP_KERNEL); 542 + if (!p) 543 + return -ENOMEM; 547 544 548 545 p->irq = op->archdata.irqs[0]; 549 546 ··· 550 553 4 * WD_TIMER_REGSZ, DRIVER_NAME); 551 554 if (!p->regs) { 552 555 pr_err("Unable to map registers\n"); 553 - goto out_free; 556 + return -ENOMEM; 554 557 } 555 558 556 559 options = of_find_node_by_path("/options"); 557 - err = -ENODEV; 558 560 if (!options) { 561 + err = -ENODEV; 559 562 pr_err("Unable to find /options node\n"); 560 563 goto out_iounmap; 561 564 } ··· 617 620 618 621 platform_set_drvdata(op, p); 619 622 cpwd_device = p; 620 - err = 0; 621 - 622 - out: 623 - return err; 623 + return 0; 624 624 625 625 out_unregister: 626 626 for (i--; i >= 0; i--) ··· 626 632 out_iounmap: 627 633 of_iounmap(&op->resource[0], p->regs, 4 * WD_TIMER_REGSZ); 628 634 629 - out_free: 630 - kfree(p); 631 - goto out; 635 + return err; 632 636 } 633 637 634 638 static int cpwd_remove(struct platform_device *op) ··· 651 659 free_irq(p->irq, p); 652 660 653 661 of_iounmap(&op->resource[0], p->regs, 4 * WD_TIMER_REGSZ); 654 - kfree(p); 655 662 656 663 cpwd_device = NULL; 657 664
+10 -2
drivers/watchdog/da9062_wdt.c
··· 1 1 /* 2 - * da9062_wdt.c - WDT device driver for DA9062 2 + * Watchdog device driver for DA9062 and DA9061 PMICs 3 3 * Copyright (C) 2015 Dialog Semiconductor Ltd. 4 4 * 5 5 * This program is free software; you can redistribute it and/or ··· 188 188 .set_timeout = da9062_wdt_set_timeout, 189 189 }; 190 190 191 + static const struct of_device_id da9062_compatible_id_table[] = { 192 + { .compatible = "dlg,da9062-watchdog", }, 193 + { }, 194 + }; 195 + 196 + MODULE_DEVICE_TABLE(of, da9062_compatible_id_table); 197 + 191 198 static int da9062_wdt_probe(struct platform_device *pdev) 192 199 { 193 200 int ret; ··· 251 244 .remove = da9062_wdt_remove, 252 245 .driver = { 253 246 .name = "da9062-watchdog", 247 + .of_match_table = da9062_compatible_id_table, 254 248 }, 255 249 }; 256 250 module_platform_driver(da9062_wdt_driver); 257 251 258 252 MODULE_AUTHOR("S Twiss <stwiss.opensource@diasemi.com>"); 259 - MODULE_DESCRIPTION("WDT device driver for Dialog DA9062"); 253 + MODULE_DESCRIPTION("WDT device driver for Dialog DA9062 and DA9061"); 260 254 MODULE_LICENSE("GPL"); 261 255 MODULE_ALIAS("platform:da9062-watchdog");
+5 -1
drivers/watchdog/davinci_wdt.c
··· 166 166 return -ENOMEM; 167 167 168 168 davinci_wdt->clk = devm_clk_get(dev, NULL); 169 - if (WARN_ON(IS_ERR(davinci_wdt->clk))) 169 + 170 + if (IS_ERR(davinci_wdt->clk)) { 171 + if (PTR_ERR(davinci_wdt->clk) != -EPROBE_DEFER) 172 + dev_err(&pdev->dev, "failed to get clock node\n"); 170 173 return PTR_ERR(davinci_wdt->clk); 174 + } 171 175 172 176 clk_prepare_enable(davinci_wdt->clk); 173 177
+11 -11
drivers/watchdog/intel-mid_wdt.c
··· 43 43 44 44 static int wdt_start(struct watchdog_device *wd) 45 45 { 46 + struct device *dev = watchdog_get_drvdata(wd); 46 47 int ret, in_size; 47 48 int timeout = wd->timeout; 48 49 struct ipc_wd_start { ··· 58 57 in_size = DIV_ROUND_UP(sizeof(ipc_wd_start), 4); 59 58 60 59 ret = wdt_command(SCU_WATCHDOG_START, (u32 *)&ipc_wd_start, in_size); 61 - if (ret) { 62 - struct device *dev = watchdog_get_drvdata(wd); 60 + if (ret) 63 61 dev_crit(dev, "error starting watchdog: %d\n", ret); 64 - } 65 62 66 63 return ret; 67 64 } 68 65 69 66 static int wdt_ping(struct watchdog_device *wd) 70 67 { 68 + struct device *dev = watchdog_get_drvdata(wd); 71 69 int ret; 72 70 73 71 ret = wdt_command(SCU_WATCHDOG_KEEPALIVE, NULL, 0); 74 - if (ret) { 75 - struct device *dev = watchdog_get_drvdata(wd); 76 - dev_crit(dev, "Error executing keepalive: 0x%x\n", ret); 77 - } 72 + if (ret) 73 + dev_crit(dev, "Error executing keepalive: %d\n", ret); 78 74 79 75 return ret; 80 76 } 81 77 82 78 static int wdt_stop(struct watchdog_device *wd) 83 79 { 80 + struct device *dev = watchdog_get_drvdata(wd); 84 81 int ret; 85 82 86 83 ret = wdt_command(SCU_WATCHDOG_STOP, NULL, 0); 87 - if (ret) { 88 - struct device *dev = watchdog_get_drvdata(wd); 89 - dev_crit(dev, "Error stopping watchdog: 0x%x\n", ret); 90 - } 84 + if (ret) 85 + dev_crit(dev, "Error stopping watchdog: %d\n", ret); 91 86 92 87 return ret; 93 88 } ··· 147 150 pdata->irq); 148 151 return ret; 149 152 } 153 + 154 + /* Make sure the watchdog is not running */ 155 + wdt_stop(wdt_dev); 150 156 151 157 ret = watchdog_register_device(wdt_dev); 152 158 if (ret) {
+3 -1
drivers/watchdog/it87_wdt.c
··· 12 12 * http://www.ite.com.tw/ 13 13 * 14 14 * Support of the watchdog timers, which are available on 15 - * IT8702, IT8712, IT8716, IT8718, IT8720, IT8721, IT8726, 15 + * IT8620, IT8702, IT8712, IT8716, IT8718, IT8720, IT8721, IT8726, 16 16 * IT8728 and IT8783. 17 17 * 18 18 * This program is free software; you can redistribute it and/or ··· 78 78 79 79 /* Chip Id numbers */ 80 80 #define NO_DEV_ID 0xffff 81 + #define IT8620_ID 0x8620 81 82 #define IT8702_ID 0x8702 82 83 #define IT8705_ID 0x8705 83 84 #define IT8712_ID 0x8712 ··· 631 630 case IT8726_ID: 632 631 max_units = 65535; 633 632 break; 633 + case IT8620_ID: 634 634 case IT8718_ID: 635 635 case IT8720_ID: 636 636 case IT8721_ID:
+1 -1
drivers/watchdog/jz4740_wdt.c
··· 148 148 { .compatible = "ingenic,jz4740-watchdog", }, 149 149 { /* sentinel */ } 150 150 }; 151 - MODULE_DEVICE_TABLE(of, jz4740_wdt_of_matches) 151 + MODULE_DEVICE_TABLE(of, jz4740_wdt_of_matches); 152 152 #endif 153 153 154 154 static int jz4740_wdt_probe(struct platform_device *pdev)
+170
drivers/watchdog/loongson1_wdt.c
··· 1 + /* 2 + * Copyright (c) 2016 Yang Ling <gnaygnil@gmail.com> 3 + * 4 + * This program is free software; you can redistribute it and/or modify it 5 + * under the terms of the GNU General Public License as published by the 6 + * Free Software Foundation; either version 2 of the License, or (at your 7 + * option) any later version. 8 + */ 9 + 10 + #include <linux/clk.h> 11 + #include <linux/module.h> 12 + #include <linux/platform_device.h> 13 + #include <linux/watchdog.h> 14 + #include <loongson1.h> 15 + 16 + #define DEFAULT_HEARTBEAT 30 17 + 18 + static bool nowayout = WATCHDOG_NOWAYOUT; 19 + module_param(nowayout, bool, 0444); 20 + 21 + static unsigned int heartbeat; 22 + module_param(heartbeat, uint, 0444); 23 + 24 + struct ls1x_wdt_drvdata { 25 + void __iomem *base; 26 + struct clk *clk; 27 + unsigned long clk_rate; 28 + struct watchdog_device wdt; 29 + }; 30 + 31 + static int ls1x_wdt_ping(struct watchdog_device *wdt_dev) 32 + { 33 + struct ls1x_wdt_drvdata *drvdata = watchdog_get_drvdata(wdt_dev); 34 + 35 + writel(0x1, drvdata->base + WDT_SET); 36 + 37 + return 0; 38 + } 39 + 40 + static int ls1x_wdt_set_timeout(struct watchdog_device *wdt_dev, 41 + unsigned int timeout) 42 + { 43 + struct ls1x_wdt_drvdata *drvdata = watchdog_get_drvdata(wdt_dev); 44 + unsigned int max_hw_heartbeat = wdt_dev->max_hw_heartbeat_ms / 1000; 45 + unsigned int counts; 46 + 47 + wdt_dev->timeout = timeout; 48 + 49 + counts = drvdata->clk_rate * min(timeout, max_hw_heartbeat); 50 + writel(counts, drvdata->base + WDT_TIMER); 51 + 52 + return 0; 53 + } 54 + 55 + static int ls1x_wdt_start(struct watchdog_device *wdt_dev) 56 + { 57 + struct ls1x_wdt_drvdata *drvdata = watchdog_get_drvdata(wdt_dev); 58 + 59 + writel(0x1, drvdata->base + WDT_EN); 60 + 61 + return 0; 62 + } 63 + 64 + static int ls1x_wdt_stop(struct watchdog_device *wdt_dev) 65 + { 66 + struct ls1x_wdt_drvdata *drvdata = watchdog_get_drvdata(wdt_dev); 67 + 68 + writel(0x0, drvdata->base + WDT_EN); 69 + 70 + return 0; 71 + } 72 + 73 + static const struct watchdog_info ls1x_wdt_info = { 74 + .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING | WDIOF_MAGICCLOSE, 75 + .identity = "Loongson1 Watchdog", 76 + }; 77 + 78 + static const struct watchdog_ops ls1x_wdt_ops = { 79 + .owner = THIS_MODULE, 80 + .start = ls1x_wdt_start, 81 + .stop = ls1x_wdt_stop, 82 + .ping = ls1x_wdt_ping, 83 + .set_timeout = ls1x_wdt_set_timeout, 84 + }; 85 + 86 + static int ls1x_wdt_probe(struct platform_device *pdev) 87 + { 88 + struct ls1x_wdt_drvdata *drvdata; 89 + struct watchdog_device *ls1x_wdt; 90 + unsigned long clk_rate; 91 + struct resource *res; 92 + int err; 93 + 94 + drvdata = devm_kzalloc(&pdev->dev, sizeof(*drvdata), GFP_KERNEL); 95 + if (!drvdata) 96 + return -ENOMEM; 97 + 98 + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 99 + drvdata->base = devm_ioremap_resource(&pdev->dev, res); 100 + if (IS_ERR(drvdata->base)) 101 + return PTR_ERR(drvdata->base); 102 + 103 + drvdata->clk = devm_clk_get(&pdev->dev, pdev->name); 104 + if (IS_ERR(drvdata->clk)) 105 + return PTR_ERR(drvdata->clk); 106 + 107 + err = clk_prepare_enable(drvdata->clk); 108 + if (err) { 109 + dev_err(&pdev->dev, "clk enable failed\n"); 110 + return err; 111 + } 112 + 113 + clk_rate = clk_get_rate(drvdata->clk); 114 + if (!clk_rate) { 115 + err = -EINVAL; 116 + goto err0; 117 + } 118 + drvdata->clk_rate = clk_rate; 119 + 120 + ls1x_wdt = &drvdata->wdt; 121 + ls1x_wdt->info = &ls1x_wdt_info; 122 + ls1x_wdt->ops = &ls1x_wdt_ops; 123 + ls1x_wdt->timeout = DEFAULT_HEARTBEAT; 124 + ls1x_wdt->min_timeout = 1; 125 + ls1x_wdt->max_hw_heartbeat_ms = U32_MAX / clk_rate * 1000; 126 + ls1x_wdt->parent = &pdev->dev; 127 + 128 + watchdog_init_timeout(ls1x_wdt, heartbeat, &pdev->dev); 129 + watchdog_set_nowayout(ls1x_wdt, nowayout); 130 + watchdog_set_drvdata(ls1x_wdt, drvdata); 131 + 132 + err = watchdog_register_device(&drvdata->wdt); 133 + if (err) { 134 + dev_err(&pdev->dev, "failed to register watchdog device\n"); 135 + goto err0; 136 + } 137 + 138 + platform_set_drvdata(pdev, drvdata); 139 + 140 + dev_info(&pdev->dev, "Loongson1 Watchdog driver registered\n"); 141 + 142 + return 0; 143 + err0: 144 + clk_disable_unprepare(drvdata->clk); 145 + return err; 146 + } 147 + 148 + static int ls1x_wdt_remove(struct platform_device *pdev) 149 + { 150 + struct ls1x_wdt_drvdata *drvdata = platform_get_drvdata(pdev); 151 + 152 + watchdog_unregister_device(&drvdata->wdt); 153 + clk_disable_unprepare(drvdata->clk); 154 + 155 + return 0; 156 + } 157 + 158 + static struct platform_driver ls1x_wdt_driver = { 159 + .probe = ls1x_wdt_probe, 160 + .remove = ls1x_wdt_remove, 161 + .driver = { 162 + .name = "ls1x-wdt", 163 + }, 164 + }; 165 + 166 + module_platform_driver(ls1x_wdt_driver); 167 + 168 + MODULE_AUTHOR("Yang Ling <gnaygnil@gmail.com>"); 169 + MODULE_DESCRIPTION("Loongson1 Watchdog Driver"); 170 + MODULE_LICENSE("GPL");
+1
drivers/watchdog/max77620_wdt.c
··· 205 205 { .name = "max77620-watchdog", }, 206 206 { }, 207 207 }; 208 + MODULE_DEVICE_TABLE(platform, max77620_wdt_devtype); 208 209 209 210 static struct platform_driver max77620_wdt_driver = { 210 211 .driver = {
+2
drivers/watchdog/mei_wdt.c
··· 389 389 wdt->wdd.max_timeout = MEI_WDT_MAX_TIMEOUT; 390 390 391 391 watchdog_set_drvdata(&wdt->wdd, wdt); 392 + watchdog_stop_on_reboot(&wdt->wdd); 393 + 392 394 ret = watchdog_register_device(&wdt->wdd); 393 395 if (ret) { 394 396 dev_err(dev, "unable to register watchdog device = %d.\n", ret);
-1
drivers/watchdog/meson_gxbb_wdt.c
··· 264 264 265 265 module_platform_driver(meson_gxbb_wdt_driver); 266 266 267 - MODULE_ALIAS("platform:meson-gxbb-wdt"); 268 267 MODULE_AUTHOR("Neil Armstrong <narmstrong@baylibre.com>"); 269 268 MODULE_DESCRIPTION("Amlogic Meson GXBB Watchdog timer driver"); 270 269 MODULE_LICENSE("Dual BSD/GPL");
-1
drivers/watchdog/mpc8xxx_wdt.c
··· 23 23 #include <linux/init.h> 24 24 #include <linux/kernel.h> 25 25 #include <linux/timer.h> 26 - #include <linux/miscdevice.h> 27 26 #include <linux/of_address.h> 28 27 #include <linux/of_platform.h> 29 28 #include <linux/module.h>
-1
drivers/watchdog/octeon-wdt-main.c
··· 56 56 57 57 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 58 58 59 - #include <linux/miscdevice.h> 60 59 #include <linux/interrupt.h> 61 60 #include <linux/watchdog.h> 62 61 #include <linux/cpumask.h>
+1 -1
drivers/watchdog/qcom-wdt.c
··· 209 209 wdt->wdd.parent = &pdev->dev; 210 210 wdt->layout = regs; 211 211 212 - if (readl(wdt->base + WDT_STS) & 1) 212 + if (readl(wdt_addr(wdt, WDT_STS)) & 1) 213 213 wdt->wdd.bootstatus = WDIOF_CARDRESET; 214 214 215 215 /*