Browse Source

ramips: add watchdog device for RT305x

SVN-Revision: 25127
Gabor Juhos 15 years ago
parent
commit
42e36cf732

+ 5 - 0
target/linux/ramips/files/arch/mips/include/asm/mach-ralink/rt305x_regs.h

@@ -62,6 +62,11 @@
 #define SYSTEM_CONFIG_CPUCLK_MASK	0x1
 #define SYSTEM_CONFIG_CPUCLK_320	0x0
 #define SYSTEM_CONFIG_CPUCLK_384	0x1
+#define SYSTEM_CONFIG_SRAM_CS0_MODE_SHIFT	2
+#define SYSTEM_CONFIG_SRAM_CS0_MODE_MASK	0x3
+#define SYSTEM_CONFIG_SRAM_CS0_MODE_NORMAL	0
+#define SYSTEM_CONFIG_SRAM_CS0_MODE_WDT		1
+#define SYSTEM_CONFIG_SRAM_CS0_MODE_BTCOEX	2
 
 #define RT305X_GPIO_MODE_I2C		BIT(0)
 #define RT305X_GPIO_MODE_SPI		BIT(1)

+ 28 - 0
target/linux/ramips/files/arch/mips/ralink/rt305x/devices.c

@@ -189,3 +189,31 @@ void __init rt305x_register_wifi(void)
 {
 	platform_device_register(&rt305x_wifi_device);
 }
+
+static struct resource rt305x_wdt_resources[] = {
+	{
+		.start	= RT305X_TIMER_BASE,
+		.end	= RT305X_TIMER_BASE + RT305X_TIMER_SIZE - 1,
+		.flags	= IORESOURCE_MEM,
+	},
+};
+
+static struct platform_device rt305x_wdt_device = {
+	.name		= "ramips-wdt",
+	.id		= -1,
+	.resource	= rt305x_wdt_resources,
+	.num_resources	= ARRAY_SIZE(rt305x_wdt_resources),
+};
+
+void __init rt305x_register_wdt(void)
+{
+	u32 t;
+
+	/* enable WDT reset output on pin SRAM_CS_N */
+	t = rt305x_sysc_rr(SYSC_REG_SYSTEM_CONFIG);
+	t |= SYSTEM_CONFIG_SRAM_CS0_MODE_WDT <<
+	     SYSTEM_CONFIG_SRAM_CS0_MODE_SHIFT;
+	rt305x_sysc_wr(t, SYSC_REG_SYSTEM_CONFIG);
+
+	platform_device_register(&rt305x_wdt_device);
+}

+ 1 - 0
target/linux/ramips/files/arch/mips/ralink/rt305x/devices.h

@@ -20,6 +20,7 @@ extern struct rt305x_esw_platform_data rt305x_esw_data;
 void rt305x_register_flash(unsigned int id, struct physmap_flash_data *pdata);
 void rt305x_register_ethernet(void);
 void rt305x_register_wifi(void);
+void rt305x_register_wdt(void);
 
 #endif  /* __RT305X_DEVICES_H */