diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-27 18:53:23 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-11-27 18:53:23 -0500 |
commit | d0bc387dbe7f93b5608e1d305a18f50060de69cb (patch) | |
tree | f60912cf4348cdbdef409bbe1804cbfcdf473de2 | |
parent | 80e0c505b22e64ab1787285b182a1e8395e53991 (diff) | |
parent | 5da2bf1ac8fbe701a138efb340b9f2ef26c10ed7 (diff) |
Merge git://www.linux-watchdog.org/linux-watchdog
Pull watchdog fixes from Wim Van Sebroeck:
- a null pointer dereference fix for omap_wdt
- some clock related fixes for pnx4008
- an underflow fix in wdt_set_timeout() for w83977f_wdt
- restart fix for tegra wdt
- Kconfig change to support Freescale Layerscape platforms
- fix for stopping the mtk_wdt watchdog
* git://www.linux-watchdog.org/linux-watchdog:
watchdog: mtk_wdt: Use MODE_KEY when stopping the watchdog
watchdog: Add support for Freescale Layerscape platforms
watchdog: tegra: Stop watchdog first if restarting
watchdog: w83977f_wdt: underflow in wdt_set_timeout()
watchdog: pnx4008: make global wdt_clk static
watchdog: pnx4008: fix warnings caused by enabling unprepared clock
watchdog: omap_wdt: fix null pointer dereference
-rw-r--r-- | drivers/watchdog/Kconfig | 2 | ||||
-rw-r--r-- | drivers/watchdog/mtk_wdt.c | 1 | ||||
-rw-r--r-- | drivers/watchdog/omap_wdt.c | 2 | ||||
-rw-r--r-- | drivers/watchdog/pnx4008_wdt.c | 8 | ||||
-rw-r--r-- | drivers/watchdog/tegra_wdt.c | 4 | ||||
-rw-r--r-- | drivers/watchdog/w83977f_wdt.c | 2 |
6 files changed, 11 insertions, 8 deletions
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig index 7a8a6c6952e9..1c427beffadd 100644 --- a/drivers/watchdog/Kconfig +++ b/drivers/watchdog/Kconfig | |||
@@ -446,7 +446,7 @@ config MAX63XX_WATCHDOG | |||
446 | 446 | ||
447 | config IMX2_WDT | 447 | config IMX2_WDT |
448 | tristate "IMX2+ Watchdog" | 448 | tristate "IMX2+ Watchdog" |
449 | depends on ARCH_MXC | 449 | depends on ARCH_MXC || ARCH_LAYERSCAPE |
450 | select REGMAP_MMIO | 450 | select REGMAP_MMIO |
451 | select WATCHDOG_CORE | 451 | select WATCHDOG_CORE |
452 | help | 452 | help |
diff --git a/drivers/watchdog/mtk_wdt.c b/drivers/watchdog/mtk_wdt.c index 6ad9df948711..b751f43d76ed 100644 --- a/drivers/watchdog/mtk_wdt.c +++ b/drivers/watchdog/mtk_wdt.c | |||
@@ -123,6 +123,7 @@ static int mtk_wdt_stop(struct watchdog_device *wdt_dev) | |||
123 | 123 | ||
124 | reg = readl(wdt_base + WDT_MODE); | 124 | reg = readl(wdt_base + WDT_MODE); |
125 | reg &= ~WDT_MODE_EN; | 125 | reg &= ~WDT_MODE_EN; |
126 | reg |= WDT_MODE_KEY; | ||
126 | iowrite32(reg, wdt_base + WDT_MODE); | 127 | iowrite32(reg, wdt_base + WDT_MODE); |
127 | 128 | ||
128 | return 0; | 129 | return 0; |
diff --git a/drivers/watchdog/omap_wdt.c b/drivers/watchdog/omap_wdt.c index d96bee017fd3..6f17c935a6cf 100644 --- a/drivers/watchdog/omap_wdt.c +++ b/drivers/watchdog/omap_wdt.c | |||
@@ -205,7 +205,7 @@ static int omap_wdt_set_timeout(struct watchdog_device *wdog, | |||
205 | 205 | ||
206 | static unsigned int omap_wdt_get_timeleft(struct watchdog_device *wdog) | 206 | static unsigned int omap_wdt_get_timeleft(struct watchdog_device *wdog) |
207 | { | 207 | { |
208 | struct omap_wdt_dev *wdev = watchdog_get_drvdata(wdog); | 208 | struct omap_wdt_dev *wdev = to_omap_wdt_dev(wdog); |
209 | void __iomem *base = wdev->base; | 209 | void __iomem *base = wdev->base; |
210 | u32 value; | 210 | u32 value; |
211 | 211 | ||
diff --git a/drivers/watchdog/pnx4008_wdt.c b/drivers/watchdog/pnx4008_wdt.c index 4224b3ec83a5..313cd1c6fda0 100644 --- a/drivers/watchdog/pnx4008_wdt.c +++ b/drivers/watchdog/pnx4008_wdt.c | |||
@@ -80,7 +80,7 @@ static unsigned int heartbeat = DEFAULT_HEARTBEAT; | |||
80 | 80 | ||
81 | static DEFINE_SPINLOCK(io_lock); | 81 | static DEFINE_SPINLOCK(io_lock); |
82 | static void __iomem *wdt_base; | 82 | static void __iomem *wdt_base; |
83 | struct clk *wdt_clk; | 83 | static struct clk *wdt_clk; |
84 | 84 | ||
85 | static int pnx4008_wdt_start(struct watchdog_device *wdd) | 85 | static int pnx4008_wdt_start(struct watchdog_device *wdd) |
86 | { | 86 | { |
@@ -161,7 +161,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev) | |||
161 | if (IS_ERR(wdt_clk)) | 161 | if (IS_ERR(wdt_clk)) |
162 | return PTR_ERR(wdt_clk); | 162 | return PTR_ERR(wdt_clk); |
163 | 163 | ||
164 | ret = clk_enable(wdt_clk); | 164 | ret = clk_prepare_enable(wdt_clk); |
165 | if (ret) | 165 | if (ret) |
166 | return ret; | 166 | return ret; |
167 | 167 | ||
@@ -184,7 +184,7 @@ static int pnx4008_wdt_probe(struct platform_device *pdev) | |||
184 | return 0; | 184 | return 0; |
185 | 185 | ||
186 | disable_clk: | 186 | disable_clk: |
187 | clk_disable(wdt_clk); | 187 | clk_disable_unprepare(wdt_clk); |
188 | return ret; | 188 | return ret; |
189 | } | 189 | } |
190 | 190 | ||
@@ -192,7 +192,7 @@ static int pnx4008_wdt_remove(struct platform_device *pdev) | |||
192 | { | 192 | { |
193 | watchdog_unregister_device(&pnx4008_wdd); | 193 | watchdog_unregister_device(&pnx4008_wdd); |
194 | 194 | ||
195 | clk_disable(wdt_clk); | 195 | clk_disable_unprepare(wdt_clk); |
196 | 196 | ||
197 | return 0; | 197 | return 0; |
198 | } | 198 | } |
diff --git a/drivers/watchdog/tegra_wdt.c b/drivers/watchdog/tegra_wdt.c index 7f97cdd53f29..9ec57608da82 100644 --- a/drivers/watchdog/tegra_wdt.c +++ b/drivers/watchdog/tegra_wdt.c | |||
@@ -140,8 +140,10 @@ static int tegra_wdt_set_timeout(struct watchdog_device *wdd, | |||
140 | { | 140 | { |
141 | wdd->timeout = timeout; | 141 | wdd->timeout = timeout; |
142 | 142 | ||
143 | if (watchdog_active(wdd)) | 143 | if (watchdog_active(wdd)) { |
144 | tegra_wdt_stop(wdd); | ||
144 | return tegra_wdt_start(wdd); | 145 | return tegra_wdt_start(wdd); |
146 | } | ||
145 | 147 | ||
146 | return 0; | 148 | return 0; |
147 | } | 149 | } |
diff --git a/drivers/watchdog/w83977f_wdt.c b/drivers/watchdog/w83977f_wdt.c index 91bf55a20024..20e2bba10400 100644 --- a/drivers/watchdog/w83977f_wdt.c +++ b/drivers/watchdog/w83977f_wdt.c | |||
@@ -224,7 +224,7 @@ static int wdt_keepalive(void) | |||
224 | 224 | ||
225 | static int wdt_set_timeout(int t) | 225 | static int wdt_set_timeout(int t) |
226 | { | 226 | { |
227 | int tmrval; | 227 | unsigned int tmrval; |
228 | 228 | ||
229 | /* | 229 | /* |
230 | * Convert seconds to watchdog counter time units, rounding up. | 230 | * Convert seconds to watchdog counter time units, rounding up. |