diff options
| author | mb <mb@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-03-04 15:40:32 +0000 | 
|---|---|---|
| committer | mb <mb@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2011-03-04 15:40:32 +0000 | 
| commit | d0699bf918d91c46dc88bdc32509e653b6b03e54 (patch) | |
| tree | cc68a276ab8660f20ad83611fbc7f5afb6032d10 /target/linux/omap24xx/patches-2.6.38/540-cbus-retu-wdt-remove-static-variables.patch | |
| parent | ea0082e3def06b28551d735d0ee10ecb3e8d1f08 (diff) | |
n810: More retu-wdt cleanups
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@25863 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/omap24xx/patches-2.6.38/540-cbus-retu-wdt-remove-static-variables.patch')
| -rw-r--r-- | target/linux/omap24xx/patches-2.6.38/540-cbus-retu-wdt-remove-static-variables.patch | 191 | 
1 files changed, 191 insertions, 0 deletions
| diff --git a/target/linux/omap24xx/patches-2.6.38/540-cbus-retu-wdt-remove-static-variables.patch b/target/linux/omap24xx/patches-2.6.38/540-cbus-retu-wdt-remove-static-variables.patch new file mode 100644 index 000000000..14d31112e --- /dev/null +++ b/target/linux/omap24xx/patches-2.6.38/540-cbus-retu-wdt-remove-static-variables.patch @@ -0,0 +1,191 @@ +Index: linux-2.6.38-rc6/drivers/cbus/retu-wdt.c +=================================================================== +--- linux-2.6.38-rc6.orig/drivers/cbus/retu-wdt.c	2011-03-04 16:22:03.524019824 +0100 ++++ linux-2.6.38-rc6/drivers/cbus/retu-wdt.c	2011-03-04 16:22:31.186357952 +0100 +@@ -7,6 +7,8 @@ +  * +  * Written by Amit Kucheria <amit.kucheria@nokia.com> +  * ++ * Cleanups by Michael Buesch <mb@bu3sch.de> (C) 2011 ++ * +  * This file is subject to the terms and conditions of the GNU General +  * Public License. See the file "COPYING" in the main directory of this +  * archive for more details. +@@ -48,37 +50,31 @@ + #define RETU_WDT_DEFAULT_TIMER 32 + #define RETU_WDT_MAX_TIMER 63 +  +-static DEFINE_MUTEX(retu_wdt_mutex); +- +-/* Current period of watchdog */ +-static unsigned int period_val = RETU_WDT_DEFAULT_TIMER; +- + struct retu_wdt_dev { + 	struct device		*dev; ++	unsigned int		period_val;	/* Current period of watchdog */ + 	unsigned long		users; +-	struct miscdevice	retu_wdt_miscdev; ++	struct miscdevice	miscdev; + 	struct delayed_work	ping_work; ++	struct mutex		mutex; + }; +  +-static struct retu_wdt_dev *retu_wdt; +  +-static int _retu_modify_counter(unsigned int new) ++static inline void _retu_modify_counter(struct retu_wdt_dev *wdev, ++					unsigned int new) + { +-	if (retu_wdt) +-		retu_write_reg(retu_wdt->dev, RETU_REG_WATCHDOG, (u16)new); +- +-	return 0; ++	retu_write_reg(wdev->dev, RETU_REG_WATCHDOG, (u16)new); + } +  +-static int retu_modify_counter(unsigned int new) ++static int retu_modify_counter(struct retu_wdt_dev *wdev, unsigned int new) + { + 	if (new < RETU_WDT_MIN_TIMER || new > RETU_WDT_MAX_TIMER) + 		return -EINVAL; +  +-	mutex_lock(&retu_wdt_mutex); +-	period_val = new; +-	_retu_modify_counter(period_val); +-	mutex_unlock(&retu_wdt_mutex); ++	mutex_lock(&wdev->mutex); ++	wdev->period_val = new; ++	_retu_modify_counter(wdev, wdev->period_val); ++	mutex_unlock(&wdev->mutex); +  + 	return 0; + } +@@ -90,14 +86,14 @@ static int retu_modify_counter(unsigned +  */ + static void retu_wdt_ping_enable(struct retu_wdt_dev *wdev) + { +-	_retu_modify_counter(RETU_WDT_MAX_TIMER); ++	_retu_modify_counter(wdev, RETU_WDT_MAX_TIMER); + 	schedule_delayed_work(&wdev->ping_work, + 			      round_jiffies_relative(RETU_WDT_DEFAULT_TIMER * HZ)); + } +  + static void retu_wdt_ping_disable(struct retu_wdt_dev *wdev) + { +-	_retu_modify_counter(RETU_WDT_MAX_TIMER); ++	_retu_modify_counter(wdev, RETU_WDT_MAX_TIMER); + 	cancel_delayed_work_sync(&wdev->ping_work); + } +  +@@ -110,18 +106,21 @@ static void retu_wdt_ping_work(struct wo +  + static int retu_wdt_open(struct inode *inode, struct file *file) + { +-	if (test_and_set_bit(0, &retu_wdt->users)) ++	struct miscdevice *mdev = file->private_data; ++	struct retu_wdt_dev *wdev = container_of(mdev, struct retu_wdt_dev, miscdev); ++ ++	if (test_and_set_bit(0, &wdev->users)) + 		return -EBUSY; +  +-	file->private_data = (void *)retu_wdt; +-	retu_wdt_ping_disable(retu_wdt); ++	retu_wdt_ping_disable(wdev); +  + 	return nonseekable_open(inode, file); + } +  + static int retu_wdt_release(struct inode *inode, struct file *file) + { +-	struct retu_wdt_dev *wdev = file->private_data; ++	struct miscdevice *mdev = file->private_data; ++	struct retu_wdt_dev *wdev = container_of(mdev, struct retu_wdt_dev, miscdev); +  + #ifndef CONFIG_WATCHDOG_NOWAYOUT + 	retu_wdt_ping_enable(wdev); +@@ -134,8 +133,11 @@ static int retu_wdt_release(struct inode + static ssize_t retu_wdt_write(struct file *file, const char __user *data, + 						size_t len, loff_t *ppos) + { ++	struct miscdevice *mdev = file->private_data; ++	struct retu_wdt_dev *wdev = container_of(mdev, struct retu_wdt_dev, miscdev); ++ + 	if (len) +-		retu_modify_counter(RETU_WDT_MAX_TIMER); ++		retu_modify_counter(wdev, RETU_WDT_MAX_TIMER); +  + 	return len; + } +@@ -143,6 +145,8 @@ static ssize_t retu_wdt_write(struct fil + static long retu_wdt_ioctl(struct file *file, unsigned int cmd, + 			   unsigned long arg) + { ++	struct miscdevice *mdev = file->private_data; ++	struct retu_wdt_dev *wdev = container_of(mdev, struct retu_wdt_dev, miscdev); + 	int new_margin; +  + 	static struct watchdog_info ident = { +@@ -167,15 +171,15 @@ static long retu_wdt_ioctl(struct file * + 			return put_user(omap_prcm_get_reset_sources(), + 					(int __user *)arg); + 	case WDIOC_KEEPALIVE: +-		retu_modify_counter(RETU_WDT_MAX_TIMER); ++		retu_modify_counter(wdev, RETU_WDT_MAX_TIMER); + 		break; + 	case WDIOC_SETTIMEOUT: + 		if (get_user(new_margin, (int __user *)arg)) + 			return -EFAULT; +-		retu_modify_counter(new_margin); ++		retu_modify_counter(wdev, new_margin); + 		/* Fall through */ + 	case WDIOC_GETTIMEOUT: +-		return put_user(period_val, (int __user *)arg); ++		return put_user(wdev->period_val, (int __user *)arg); + 	} +  + 	return 0; +@@ -199,15 +203,17 @@ static int __init retu_wdt_probe(struct + 		return -ENOMEM; +  + 	wdev->dev = &pdev->dev; ++	wdev->period_val = RETU_WDT_DEFAULT_TIMER; ++	mutex_init(&wdev->mutex); +  + 	platform_set_drvdata(pdev, wdev); +-	retu_wdt = wdev; +-	wdev->retu_wdt_miscdev.parent = &pdev->dev; +-	wdev->retu_wdt_miscdev.minor = WATCHDOG_MINOR; +-	wdev->retu_wdt_miscdev.name = "watchdog"; +-	wdev->retu_wdt_miscdev.fops = &retu_wdt_fops; +  +-	ret = misc_register(&(wdev->retu_wdt_miscdev)); ++	wdev->miscdev.parent = &pdev->dev; ++	wdev->miscdev.minor = WATCHDOG_MINOR; ++	wdev->miscdev.name = "watchdog"; ++	wdev->miscdev.fops = &retu_wdt_fops; ++ ++	ret = misc_register(&wdev->miscdev); + 	if (ret) + 		goto err_free_wdev; +  +@@ -216,9 +222,9 @@ static int __init retu_wdt_probe(struct + 	/* Kick the watchdog for kernel booting to finish. + 	 * If nowayout is not set, we start the ping work. */ + #ifdef CONFIG_WATCHDOG_NOWAYOUT +-	retu_modify_counter(RETU_WDT_MAX_TIMER); ++	retu_modify_counter(wdev, RETU_WDT_MAX_TIMER); + #else +-	retu_wdt_ping_enable(retu_wdt); ++	retu_wdt_ping_enable(wdev); + #endif +  + 	return 0; +@@ -234,7 +240,7 @@ static int __devexit retu_wdt_remove(str + 	struct retu_wdt_dev *wdev; +  + 	wdev = platform_get_drvdata(pdev); +-	misc_deregister(&wdev->retu_wdt_miscdev); ++	misc_deregister(&wdev->miscdev); + 	cancel_delayed_work_sync(&wdev->ping_work); + 	kfree(wdev); +  | 
