Merge tag 'char-misc-4.9-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[cascardo/linux.git] / drivers / watchdog / watchdog_dev.c
index d2d0b5e..32930a0 100644 (file)
@@ -489,6 +489,13 @@ static ssize_t state_show(struct device *dev, struct device_attribute *attr,
 }
 static DEVICE_ATTR_RO(state);
 
+static ssize_t pretimeout_available_governors_show(struct device *dev,
+                                  struct device_attribute *attr, char *buf)
+{
+       return watchdog_pretimeout_available_governors_get(buf);
+}
+static DEVICE_ATTR_RO(pretimeout_available_governors);
+
 static ssize_t pretimeout_governor_show(struct device *dev,
                                        struct device_attribute *attr,
                                        char *buf)
@@ -497,7 +504,20 @@ static ssize_t pretimeout_governor_show(struct device *dev,
 
        return watchdog_pretimeout_governor_get(wdd, buf);
 }
-static DEVICE_ATTR_RO(pretimeout_governor);
+
+static ssize_t pretimeout_governor_store(struct device *dev,
+                                        struct device_attribute *attr,
+                                        const char *buf, size_t count)
+{
+       struct watchdog_device *wdd = dev_get_drvdata(dev);
+       int ret = watchdog_pretimeout_governor_set(wdd, buf);
+
+       if (!ret)
+               ret = count;
+
+       return ret;
+}
+static DEVICE_ATTR_RW(pretimeout_governor);
 
 static umode_t wdt_is_visible(struct kobject *kobj, struct attribute *attr,
                                int n)
@@ -511,7 +531,8 @@ static umode_t wdt_is_visible(struct kobject *kobj, struct attribute *attr,
        else if (attr == &dev_attr_pretimeout.attr &&
                 !(wdd->info->options & WDIOF_PRETIMEOUT))
                mode = 0;
-       else if (attr == &dev_attr_pretimeout_governor.attr &&
+       else if ((attr == &dev_attr_pretimeout_governor.attr ||
+                 attr == &dev_attr_pretimeout_available_governors.attr) &&
                 (!(wdd->info->options & WDIOF_PRETIMEOUT) ||
                  !IS_ENABLED(CONFIG_WATCHDOG_PRETIMEOUT_GOV)))
                mode = 0;
@@ -528,6 +549,7 @@ static struct attribute *wdt_attrs[] = {
        &dev_attr_status.attr,
        &dev_attr_nowayout.attr,
        &dev_attr_pretimeout_governor.attr,
+       &dev_attr_pretimeout_available_governors.attr,
        NULL,
 };