@@ -13,7 +13,7 @@
#include <linux/platform_device.h>
#include <linux/watchdog.h>
#include <linux/uaccess.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
#include <linux/mfd/wm831x/core.h>
#include <linux/mfd/wm831x/pdata.h>
@@ -29,7 +29,7 @@ struct wm831x_wdt_drvdata {
struct watchdog_device wdt;
struct wm831x *wm831x;
struct mutex lock;
- int update_gpio;
+ struct gpio_desc *update_gpiod;
int update_state;
};
@@ -103,8 +103,8 @@ static int wm831x_wdt_ping(struct watchdog_device *wdt_dev)
mutex_lock(&driver_data->lock);
- if (driver_data->update_gpio) {
- gpio_set_value_cansleep(driver_data->update_gpio,
+ if (driver_data->update_gpiod) {
+ gpiod_set_value_cansleep(driver_data->update_gpiod,
driver_data->update_state);
driver_data->update_state = !driver_data->update_state;
ret = 0;
@@ -239,18 +239,8 @@ static int wm831x_wdt_probe(struct platform_device *pdev)
reg |= pdata->secondary << WM831X_WDOG_SECACT_SHIFT;
reg |= pdata->software << WM831X_WDOG_RST_SRC_SHIFT;
- if (pdata->update_gpio) {
- ret = devm_gpio_request_one(dev, pdata->update_gpio,
- GPIOF_OUT_INIT_LOW,
- "Watchdog update");
- if (ret < 0) {
- dev_err(wm831x->dev,
- "Failed to request update GPIO: %d\n",
- ret);
- return ret;
- }
-
- driver_data->update_gpio = pdata->update_gpio;
+ if (pdata->update_gpiod) {
+ driver_data->update_gpiod = pdata->update_gpiod;
/* Make sure the watchdog takes hardware updates */
reg |= WM831X_WDOG_RST_SRC;
@@ -10,6 +10,7 @@
#ifndef __MFD_WM831X_PDATA_H__
#define __MFD_WM831X_PDATA_H__
+struct gpio_desc;
struct wm831x;
struct regulator_init_data;
@@ -89,7 +90,7 @@ enum wm831x_watchdog_action {
struct wm831x_watchdog_pdata {
enum wm831x_watchdog_action primary, secondary;
- int update_gpio;
+ struct gpio_desc *update_gpiod;
unsigned int software:1;
};
The WM831x watchdog driver passes a global GPIO number from platform data into this driver, this is discouraged so pass a GPIO descriptor instead. More thorough approaches are possible passing descriptors associated with the device through machine descriptor tables, but no boardfiles in the kernel currently use this driver so it is hard to test. Cc: Richard Fitzgerald <rf@opensource.cirrus.com> Cc: Charles Keepax <ckeepax@opensource.cirrus.com> Cc: Mark Brown <broonie@kernel.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/watchdog/wm831x_wdt.c | 22 ++++++---------------- include/linux/mfd/wm831x/pdata.h | 3 ++- 2 files changed, 8 insertions(+), 17 deletions(-)