mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2025-04-21 12:27:27 +03:00
brcm47xx: update watchdog driver
This watchdog driver should work with SoC having a PMU. This fixes #11720. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@34323 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
--- a/drivers/ssb/driver_extif.c
|
||||
+++ b/drivers/ssb/driver_extif.c
|
||||
@@ -112,11 +112,30 @@ void ssb_extif_get_clockcontrol(struct s
|
||||
*m = extif_read32(extif, SSB_EXTIF_CLOCK_SB);
|
||||
}
|
||||
|
||||
-void ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks)
|
||||
+u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt, u32 ticks)
|
||||
+{
|
||||
+ struct ssb_extif *extif = bcm47xx_wdt_get_drvdata(wdt);
|
||||
+
|
||||
+ return ssb_extif_watchdog_timer_set(extif, ticks);
|
||||
+}
|
||||
+
|
||||
+u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms)
|
||||
+{
|
||||
+ struct ssb_extif *extif = bcm47xx_wdt_get_drvdata(wdt);
|
||||
+ u32 ticks = (SSB_EXTIF_WATCHDOG_CLK / 1000) * ms;
|
||||
+
|
||||
+ ticks = ssb_extif_watchdog_timer_set(extif, ticks);
|
||||
+
|
||||
+ return (ticks * 1000) / SSB_EXTIF_WATCHDOG_CLK;
|
||||
+}
|
||||
+
|
||||
+u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks)
|
||||
{
|
||||
if (ticks > SSB_EXTIF_WATCHDOG_MAX_TIMER)
|
||||
ticks = SSB_EXTIF_WATCHDOG_MAX_TIMER;
|
||||
extif_write32(extif, SSB_EXTIF_WATCHDOG, ticks);
|
||||
+
|
||||
+ return ticks;
|
||||
}
|
||||
|
||||
u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask)
|
||||
--- a/drivers/ssb/ssb_private.h
|
||||
+++ b/drivers/ssb/ssb_private.h
|
||||
@@ -231,4 +231,19 @@ extern u32 ssb_chipco_watchdog_timer_set
|
||||
u32 ticks);
|
||||
extern u32 ssb_chipco_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms);
|
||||
|
||||
+#ifdef CONFIG_SSB_DRIVER_EXTIF
|
||||
+extern u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt, u32 ticks);
|
||||
+extern u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt, u32 ms);
|
||||
+#else
|
||||
+static inline u32 ssb_extif_watchdog_timer_set_wdt(struct bcm47xx_wdt *wdt,
|
||||
+ u32 ticks)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+static inline u32 ssb_extif_watchdog_timer_set_ms(struct bcm47xx_wdt *wdt,
|
||||
+ u32 ms)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+#endif
|
||||
#endif /* LINUX_SSB_PRIVATE_H_ */
|
||||
--- a/include/linux/ssb/ssb_driver_extif.h
|
||||
+++ b/include/linux/ssb/ssb_driver_extif.h
|
||||
@@ -153,6 +153,8 @@
|
||||
#define SSB_EXTIF_WATCHDOG_CLK 48000000 /* Hz */
|
||||
|
||||
#define SSB_EXTIF_WATCHDOG_MAX_TIMER ((1 << 28) - 1)
|
||||
+#define SSB_EXTIF_WATCHDOG_MAX_TIMER_MS (SSB_EXTIF_WATCHDOG_MAX_TIMER \
|
||||
+ / (SSB_EXTIF_WATCHDOG_CLK / 1000))
|
||||
|
||||
|
||||
#ifdef CONFIG_SSB_DRIVER_EXTIF
|
||||
@@ -172,8 +174,7 @@ extern void ssb_extif_get_clockcontrol(s
|
||||
extern void ssb_extif_timing_init(struct ssb_extif *extif,
|
||||
unsigned long ns);
|
||||
|
||||
-extern void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
|
||||
- u32 ticks);
|
||||
+extern u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks);
|
||||
|
||||
/* Extif GPIO pin access */
|
||||
u32 ssb_extif_gpio_in(struct ssb_extif *extif, u32 mask);
|
||||
@@ -206,9 +207,9 @@ void ssb_extif_get_clockcontrol(struct s
|
||||
}
|
||||
|
||||
static inline
|
||||
-void ssb_extif_watchdog_timer_set(struct ssb_extif *extif,
|
||||
- u32 ticks)
|
||||
+u32 ssb_extif_watchdog_timer_set(struct ssb_extif *extif, u32 ticks)
|
||||
{
|
||||
+ return 0;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_SSB_DRIVER_EXTIF */
|
||||
Reference in New Issue
Block a user