Commit 4f04be62 authored by Andrew Lunn's avatar Andrew Lunn Committed by Mike Turquette

ARM: Orion: WDT: Add clk/clkdev support

Remove tclk from platform data.  This makes the platform data
structure empty, so remove it.
Signed-off-by: default avatarAndrew Lunn <andrew@lunn.ch>
Tested-by: default avatarJamie Lentin <jm@lentin.co.uk>
Signed-off-by: default avatarMike Turquette <mturquette@linaro.org>
parent 452503eb
...@@ -112,6 +112,7 @@ void __init kirkwood_clk_init(void) ...@@ -112,6 +112,7 @@ void __init kirkwood_clk_init(void)
orion_clkdev_add(NULL, "orion_spi.1", runit); orion_clkdev_add(NULL, "orion_spi.1", runit);
orion_clkdev_add(NULL, MV643XX_ETH_NAME ".0", ge0); orion_clkdev_add(NULL, MV643XX_ETH_NAME ".0", ge0);
orion_clkdev_add(NULL, MV643XX_ETH_NAME ".1", ge1); orion_clkdev_add(NULL, MV643XX_ETH_NAME ".1", ge1);
orion_clkdev_add(NULL, "orion_wdt", tclk);
} }
/***************************************************************************** /*****************************************************************************
...@@ -351,7 +352,7 @@ void __init kirkwood_xor1_init(void) ...@@ -351,7 +352,7 @@ void __init kirkwood_xor1_init(void)
****************************************************************************/ ****************************************************************************/
void __init kirkwood_wdt_init(void) void __init kirkwood_wdt_init(void)
{ {
orion_wdt_init(kirkwood_tclk); orion_wdt_init();
} }
......
...@@ -193,7 +193,7 @@ static void __init orion5x_crypto_init(void) ...@@ -193,7 +193,7 @@ static void __init orion5x_crypto_init(void)
****************************************************************************/ ****************************************************************************/
void __init orion5x_wdt_init(void) void __init orion5x_wdt_init(void)
{ {
orion_wdt_init(orion5x_tclk); orion_wdt_init();
} }
......
...@@ -19,7 +19,6 @@ ...@@ -19,7 +19,6 @@
#include <linux/mv643xx_eth.h> #include <linux/mv643xx_eth.h>
#include <linux/mv643xx_i2c.h> #include <linux/mv643xx_i2c.h>
#include <net/dsa.h> #include <net/dsa.h>
#include <plat/orion_wdt.h>
#include <plat/mv_xor.h> #include <plat/mv_xor.h>
#include <plat/ehci-orion.h> #include <plat/ehci-orion.h>
#include <mach/bridge-regs.h> #include <mach/bridge-regs.h>
...@@ -47,6 +46,7 @@ void __init orion_clkdev_init(struct clk *tclk) ...@@ -47,6 +46,7 @@ void __init orion_clkdev_init(struct clk *tclk)
orion_clkdev_add(NULL, MV643XX_ETH_NAME ".1", tclk); orion_clkdev_add(NULL, MV643XX_ETH_NAME ".1", tclk);
orion_clkdev_add(NULL, MV643XX_ETH_NAME ".2", tclk); orion_clkdev_add(NULL, MV643XX_ETH_NAME ".2", tclk);
orion_clkdev_add(NULL, MV643XX_ETH_NAME ".3", tclk); orion_clkdev_add(NULL, MV643XX_ETH_NAME ".3", tclk);
orion_clkdev_add(NULL, "orion_wdt", tclk);
} }
/* Fill in the resources structure and link it into the platform /* Fill in the resources structure and link it into the platform
...@@ -575,24 +575,18 @@ void __init orion_spi_1_init(unsigned long mapbase) ...@@ -575,24 +575,18 @@ void __init orion_spi_1_init(unsigned long mapbase)
/***************************************************************************** /*****************************************************************************
* Watchdog * Watchdog
****************************************************************************/ ****************************************************************************/
static struct orion_wdt_platform_data orion_wdt_data;
static struct resource orion_wdt_resource = static struct resource orion_wdt_resource =
DEFINE_RES_MEM(TIMER_VIRT_BASE, 0x28); DEFINE_RES_MEM(TIMER_VIRT_BASE, 0x28);
static struct platform_device orion_wdt_device = { static struct platform_device orion_wdt_device = {
.name = "orion_wdt", .name = "orion_wdt",
.id = -1, .id = -1,
.dev = {
.platform_data = &orion_wdt_data,
},
.resource = &orion_wdt_resource,
.num_resources = 1, .num_resources = 1,
.resource = &orion_wdt_resource,
}; };
void __init orion_wdt_init(unsigned long tclk) void __init orion_wdt_init(void)
{ {
orion_wdt_data.tclk = tclk;
platform_device_register(&orion_wdt_device); platform_device_register(&orion_wdt_device);
} }
......
...@@ -71,7 +71,7 @@ void __init orion_spi_init(unsigned long mapbase); ...@@ -71,7 +71,7 @@ void __init orion_spi_init(unsigned long mapbase);
void __init orion_spi_1_init(unsigned long mapbase); void __init orion_spi_1_init(unsigned long mapbase);
void __init orion_wdt_init(unsigned long tclk); void __init orion_wdt_init(void);
void __init orion_xor0_init(unsigned long mapbase_low, void __init orion_xor0_init(unsigned long mapbase_low,
unsigned long mapbase_high, unsigned long mapbase_high,
......
/*
* arch/arm/plat-orion/include/plat/orion_wdt.h
*
* This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied.
*/
#ifndef __PLAT_ORION_WDT_H
#define __PLAT_ORION_WDT_H
struct orion_wdt_platform_data {
u32 tclk; /* no <linux/clk.h> support yet */
};
#endif
...@@ -24,8 +24,8 @@ ...@@ -24,8 +24,8 @@
#include <linux/uaccess.h> #include <linux/uaccess.h>
#include <linux/io.h> #include <linux/io.h>
#include <linux/spinlock.h> #include <linux/spinlock.h>
#include <linux/clk.h>
#include <mach/bridge-regs.h> #include <mach/bridge-regs.h>
#include <plat/orion_wdt.h>
/* /*
* Watchdog timer block registers. * Watchdog timer block registers.
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
static bool nowayout = WATCHDOG_NOWAYOUT; static bool nowayout = WATCHDOG_NOWAYOUT;
static int heartbeat = -1; /* module parameter (seconds) */ static int heartbeat = -1; /* module parameter (seconds) */
static unsigned int wdt_max_duration; /* (seconds) */ static unsigned int wdt_max_duration; /* (seconds) */
static struct clk *clk;
static unsigned int wdt_tclk; static unsigned int wdt_tclk;
static void __iomem *wdt_reg; static void __iomem *wdt_reg;
static unsigned long wdt_status; static unsigned long wdt_status;
...@@ -237,16 +238,16 @@ static struct miscdevice orion_wdt_miscdev = { ...@@ -237,16 +238,16 @@ static struct miscdevice orion_wdt_miscdev = {
static int __devinit orion_wdt_probe(struct platform_device *pdev) static int __devinit orion_wdt_probe(struct platform_device *pdev)
{ {
struct orion_wdt_platform_data *pdata = pdev->dev.platform_data;
struct resource *res; struct resource *res;
int ret; int ret;
if (pdata) { clk = clk_get(&pdev->dev, NULL);
wdt_tclk = pdata->tclk; if (IS_ERR(clk)) {
} else { printk(KERN_ERR "Orion Watchdog missing clock\n");
pr_err("misses platform data\n");
return -ENODEV; return -ENODEV;
} }
clk_prepare_enable(clk);
wdt_tclk = clk_get_rate(clk);
res = platform_get_resource(pdev, IORESOURCE_MEM, 0); res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
...@@ -282,6 +283,9 @@ static int __devexit orion_wdt_remove(struct platform_device *pdev) ...@@ -282,6 +283,9 @@ static int __devexit orion_wdt_remove(struct platform_device *pdev)
if (!ret) if (!ret)
orion_wdt_miscdev.parent = NULL; orion_wdt_miscdev.parent = NULL;
clk_disable_unprepare(clk);
clk_put(clk);
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment