summaryrefslogtreecommitdiff
path: root/target/linux/omap24xx/patches-2.6.38/535-cbus-retu-wdt-cleanup.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/omap24xx/patches-2.6.38/535-cbus-retu-wdt-cleanup.patch')
-rw-r--r--target/linux/omap24xx/patches-2.6.38/535-cbus-retu-wdt-cleanup.patch194
1 files changed, 194 insertions, 0 deletions
diff --git a/target/linux/omap24xx/patches-2.6.38/535-cbus-retu-wdt-cleanup.patch b/target/linux/omap24xx/patches-2.6.38/535-cbus-retu-wdt-cleanup.patch
new file mode 100644
index 0000000000..4b650686fd
--- /dev/null
+++ b/target/linux/omap24xx/patches-2.6.38/535-cbus-retu-wdt-cleanup.patch
@@ -0,0 +1,194 @@
+Index: linux-2.6.38-rc6/drivers/cbus/retu-wdt.c
+===================================================================
+--- linux-2.6.38-rc6.orig/drivers/cbus/retu-wdt.c 2011-03-02 16:49:51.231863891 +0100
++++ linux-2.6.38-rc6/drivers/cbus/retu-wdt.c 2011-03-02 16:53:47.189454637 +0100
+@@ -52,7 +52,6 @@ static DEFINE_MUTEX(retu_wdt_mutex);
+
+ /* Current period of watchdog */
+ static unsigned int period_val = RETU_WDT_DEFAULT_TIMER;
+-static int counter_param = RETU_WDT_MAX_TIMER;
+
+ struct retu_wdt_dev {
+ struct device *dev;
+@@ -109,56 +108,6 @@ static void retu_wdt_ping_work(struct wo
+ retu_wdt_ping_enable(wdev);
+ }
+
+-static ssize_t retu_wdt_period_show(struct device *dev,
+- struct device_attribute *attr, char *buf)
+-{
+- /* Show current max counter */
+- return sprintf(buf, "%u\n", (u16)period_val);
+-}
+-
+-/*
+- * Note: This inteface is non-standard and likely to disappear!
+- * Use /dev/watchdog instead, that's the standard.
+- */
+-static ssize_t retu_wdt_period_store(struct device *dev,
+- struct device_attribute *attr,
+- const char *buf, size_t count)
+-{
+- unsigned int new_period;
+- int ret;
+-
+-#ifdef CONFIG_WATCHDOG_NOWAYOUT
+- retu_wdt_ping_disable(retu_wdt);
+-#endif
+-
+- if (sscanf(buf, "%u", &new_period) != 1) {
+- printk(KERN_ALERT "retu_wdt_period_store: Invalid input\n");
+- return -EINVAL;
+- }
+-
+- ret = retu_modify_counter(new_period);
+- if (ret < 0)
+- return ret;
+-
+- return strnlen(buf, count);
+-}
+-
+-static ssize_t retu_wdt_counter_show(struct device *dev,
+- struct device_attribute *attr, char *buf)
+-{
+- u16 counter;
+-
+- /* Show current value in watchdog counter */
+- counter = retu_read_reg(dev, RETU_REG_WATCHDOG);
+-
+- /* Only the 5 LSB are important */
+- return snprintf(buf, PAGE_SIZE, "%u\n", (counter & 0x3F));
+-}
+-
+-static DEVICE_ATTR(period, S_IRUGO | S_IWUSR, retu_wdt_period_show, \
+- retu_wdt_period_store);
+-static DEVICE_ATTR(counter, S_IRUGO, retu_wdt_counter_show, NULL);
+-
+ static int retu_wdt_open(struct inode *inode, struct file *file)
+ {
+ if (test_and_set_bit(0, &retu_wdt->users))
+@@ -175,9 +124,9 @@ static int retu_wdt_release(struct inode
+ struct retu_wdt_dev *wdev = file->private_data;
+
+ #ifndef CONFIG_WATCHDOG_NOWAYOUT
+- retu_wdt_ping_enable(retu_wdt);
++ retu_wdt_ping_enable(wdev);
+ #endif
+- clear_bit(0, &retu_wdt->users);
++ clear_bit(0, &wdev->users);
+
+ return 0;
+ }
+@@ -232,18 +181,6 @@ static long retu_wdt_ioctl(struct file *
+ return 0;
+ }
+
+-/* Start kicking retu watchdog until user space starts doing the kicking */
+-static int __devinit retu_wdt_ping(void)
+-{
+-#ifdef CONFIG_WATCHDOG_NOWAYOUT
+- retu_modify_counter(RETU_WDT_MAX_TIMER);
+-#else
+- retu_wdt_ping_enable(retu_wdt);
+-#endif
+-
+- return 0;
+-}
+-
+ static const struct file_operations retu_wdt_fops = {
+ .owner = THIS_MODULE,
+ .write = retu_wdt_write,
+@@ -252,8 +189,6 @@ static const struct file_operations retu
+ .release = retu_wdt_release,
+ };
+
+-/*----------------------------------------------------------------------------*/
+-
+ static int __init retu_wdt_probe(struct platform_device *pdev)
+ {
+ struct retu_wdt_dev *wdev;
+@@ -265,18 +200,6 @@ static int __init retu_wdt_probe(struct
+
+ wdev->dev = &pdev->dev;
+
+- ret = device_create_file(&pdev->dev, &dev_attr_period);
+- if (ret) {
+- dev_err(&pdev->dev, "Error creating sysfs period\n");
+- goto free1;
+- }
+-
+- ret = device_create_file(&pdev->dev, &dev_attr_counter);
+- if (ret) {
+- dev_err(&pdev->dev, "Error creating sysfs counter\n");
+- goto free2;
+- }
+-
+ platform_set_drvdata(pdev, wdev);
+ retu_wdt = wdev;
+ wdev->retu_wdt_miscdev.parent = &pdev->dev;
+@@ -286,38 +209,21 @@ static int __init retu_wdt_probe(struct
+
+ ret = misc_register(&(wdev->retu_wdt_miscdev));
+ if (ret)
+- goto free3;
++ goto err_free_wdev;
+
+ INIT_DELAYED_WORK(&wdev->ping_work, retu_wdt_ping_work);
+
+- /* passed as module parameter? */
+- ret = retu_modify_counter(counter_param);
+- if (ret == -EINVAL) {
+- ret = retu_modify_counter(RETU_WDT_DEFAULT_TIMER);
+- dev_dbg(&pdev->dev, "Initializing to default value\n");
+- }
+-
+- /* Kick the watchdog for kernel booting to finish */
++ /* 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);
+-
+- ret = retu_wdt_ping();
+- if (ret < 0) {
+- dev_err(&pdev->dev, "Failed to ping\n");
+- goto free4;
+- }
++#else
++ retu_wdt_ping_enable(retu_wdt);
++#endif
+
+ return 0;
+
+-free4:
+- misc_deregister(&wdev->retu_wdt_miscdev);
+-
+-free3:
+- device_remove_file(&pdev->dev, &dev_attr_counter);
+-
+-free2:
+- device_remove_file(&pdev->dev, &dev_attr_period);
+-
+-free1:
++err_free_wdev:
+ kfree(wdev);
+
+ return ret;
+@@ -329,8 +235,6 @@ static int __devexit retu_wdt_remove(str
+
+ wdev = platform_get_drvdata(pdev);
+ misc_deregister(&wdev->retu_wdt_miscdev);
+- device_remove_file(&pdev->dev, &dev_attr_period);
+- device_remove_file(&pdev->dev, &dev_attr_counter);
+ cancel_delayed_work_sync(&wdev->ping_work);
+ kfree(wdev);
+
+@@ -356,9 +260,7 @@ static void __exit retu_wdt_exit(void)
+
+ module_init(retu_wdt_init);
+ module_exit(retu_wdt_exit);
+-module_param(counter_param, int, 0);
+
+ MODULE_DESCRIPTION("Retu WatchDog");
+ MODULE_AUTHOR("Amit Kucheria");
+ MODULE_LICENSE("GPL");
+-