[PATCH 02/11] watchdog: gemini/ftwdt010: rename driver and symbols

Guenter Roeck linux at roeck-us.net
Mon Aug 14 08:01:05 PDT 2017


On Sat, Aug 12, 2017 at 08:43:09PM +0200, Linus Walleij wrote:
> This renames all the driver files and symbols for the Gemini
> watchdog to FTWDT010 as it has been revealed that this IP block
> is a generic watchdog timer from Faraday Technology used in
> several SoC designs.
> 
> Select thid driver by default for the Gemini, it is a sensible
> driver to always have enabled.
> 
> Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
> ---
>  drivers/watchdog/Kconfig                          |  14 +--
>  drivers/watchdog/Makefile                         |   2 +-
>  drivers/watchdog/{gemini_wdt.c => ftwdt010_wdt.c} | 117 +++++++++++-----------
>  3 files changed, 68 insertions(+), 65 deletions(-)
>  rename drivers/watchdog/{gemini_wdt.c => ftwdt010_wdt.c} (50%)
> 
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index c722cbfdc7e6..fd44a542036a 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -321,16 +321,18 @@ config 977_WATCHDOG
>  
>  	  Not sure? It's safe to say N.
>  
> -config GEMINI_WATCHDOG
> -	tristate "Gemini watchdog"
> -	depends on ARCH_GEMINI
> +config FTWDT010_WATCHDOG
> +	tristate "Faraday Technology FTWDT010 watchdog"
> +	depends on ARM || COMPILE_TEST

Did you test this ? I am kind of wary about COMPILE_TEST in watchdog drivers.
I tried to enable that a while ago, and we had to spend a couple of releases
fixing the fallout (even though I had tried to make sure that everything
builds).

>  	select WATCHDOG_CORE
> +	default ARCH_GEMINI
>  	help
> -	  Say Y here if to include support for the watchdog timer
> -	  embedded in the Cortina Systems Gemini family of devices.
> +	  Say Y here if to include support for the Faraday Technology
> +	  FTWDT010 watchdog timer embedded in the Cortina Systems Gemini
> +	  family of devices.
>  
>  	  To compile this driver as a module, choose M here: the
> -	  module will be called gemini_wdt.
> +	  module will be called ftwdt010_wdt.
>  
>  config IXP4XX_WATCHDOG
>  	tristate "IXP4xx Watchdog"
> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
> index 56adf9fa67d0..df91d7db821c 100644
> --- a/drivers/watchdog/Makefile
> +++ b/drivers/watchdog/Makefile
> @@ -45,7 +45,7 @@ obj-$(CONFIG_OMAP_WATCHDOG) += omap_wdt.o
>  obj-$(CONFIG_TWL4030_WATCHDOG) += twl4030_wdt.o
>  obj-$(CONFIG_21285_WATCHDOG) += wdt285.o
>  obj-$(CONFIG_977_WATCHDOG) += wdt977.o
> -obj-$(CONFIG_GEMINI_WATCHDOG) += gemini_wdt.o
> +obj-$(CONFIG_FTWDT010_WATCHDOG) += ftwdt010_wdt.o
>  obj-$(CONFIG_IXP4XX_WATCHDOG) += ixp4xx_wdt.o
>  obj-$(CONFIG_KS8695_WATCHDOG) += ks8695_wdt.o
>  obj-$(CONFIG_S3C2410_WATCHDOG) += s3c2410_wdt.o
> diff --git a/drivers/watchdog/gemini_wdt.c b/drivers/watchdog/ftwdt010_wdt.c
> similarity index 50%
> rename from drivers/watchdog/gemini_wdt.c
> rename to drivers/watchdog/ftwdt010_wdt.c
> index 8155aa619e4c..637ffd812f0b 100644
> --- a/drivers/watchdog/gemini_wdt.c
> +++ b/drivers/watchdog/ftwdt010_wdt.c
> @@ -1,5 +1,5 @@
>  /*
> - * Watchdog driver for Cortina Systems Gemini SoC
> + * Watchdog driver for Faraday Technology FTWDT010
>   *
>   * Copyright (C) 2017 Linus Walleij <linus.walleij at linaro.org>
>   *
> @@ -22,10 +22,10 @@
>  #include <linux/slab.h>
>  #include <linux/watchdog.h>
>  
> -#define GEMINI_WDCOUNTER	0x0
> -#define GEMINI_WDLOAD		0x4
> -#define GEMINI_WDRESTART	0x8
> -#define GEMINI_WDCR		0xC
> +#define FTWDT010_WDCOUNTER	0x0
> +#define FTWDT010_WDLOAD		0x4
> +#define FTWDT010_WDRESTART	0x8
> +#define FTWDT010_WDCR		0xC
>  
>  #define WDRESTART_MAGIC		0x5AB9
>  
> @@ -35,79 +35,79 @@
>  
>  #define WDT_CLOCK		5000000		/* 5 MHz */
>  
> -struct gemini_wdt {
> +struct ftwdt010_wdt {
>  	struct watchdog_device	wdd;
>  	struct device		*dev;
>  	void __iomem		*base;
>  };
>  
>  static inline
> -struct gemini_wdt *to_gemini_wdt(struct watchdog_device *wdd)
> +struct ftwdt010_wdt *to_ftwdt010_wdt(struct watchdog_device *wdd)
>  {
> -	return container_of(wdd, struct gemini_wdt, wdd);
> +	return container_of(wdd, struct ftwdt010_wdt, wdd);
>  }
>  
> -static int gemini_wdt_start(struct watchdog_device *wdd)
> +static int ftwdt010_wdt_start(struct watchdog_device *wdd)
>  {
> -	struct gemini_wdt *gwdt = to_gemini_wdt(wdd);
> +	struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd);
>  
> -	writel(wdd->timeout * WDT_CLOCK, gwdt->base + GEMINI_WDLOAD);
> -	writel(WDRESTART_MAGIC, gwdt->base + GEMINI_WDRESTART);
> +	writel(wdd->timeout * WDT_CLOCK, gwdt->base + FTWDT010_WDLOAD);
> +	writel(WDRESTART_MAGIC, gwdt->base + FTWDT010_WDRESTART);
>  	/* set clock before enabling */
>  	writel(WDCR_CLOCK_5MHZ | WDCR_SYS_RST,
> -			gwdt->base + GEMINI_WDCR);
> +			gwdt->base + FTWDT010_WDCR);
>  	writel(WDCR_CLOCK_5MHZ | WDCR_SYS_RST | WDCR_ENABLE,
> -			gwdt->base + GEMINI_WDCR);
> +			gwdt->base + FTWDT010_WDCR);
>  
>  	return 0;
>  }
>  
> -static int gemini_wdt_stop(struct watchdog_device *wdd)
> +static int ftwdt010_wdt_stop(struct watchdog_device *wdd)
>  {
> -	struct gemini_wdt *gwdt = to_gemini_wdt(wdd);
> +	struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd);
>  
> -	writel(0, gwdt->base + GEMINI_WDCR);
> +	writel(0, gwdt->base + FTWDT010_WDCR);
>  
>  	return 0;
>  }
>  
> -static int gemini_wdt_ping(struct watchdog_device *wdd)
> +static int ftwdt010_wdt_ping(struct watchdog_device *wdd)
>  {
> -	struct gemini_wdt *gwdt = to_gemini_wdt(wdd);
> +	struct ftwdt010_wdt *gwdt = to_ftwdt010_wdt(wdd);
>  
> -	writel(WDRESTART_MAGIC, gwdt->base + GEMINI_WDRESTART);
> +	writel(WDRESTART_MAGIC, gwdt->base + FTWDT010_WDRESTART);
>  
>  	return 0;
>  }
>  
> -static int gemini_wdt_set_timeout(struct watchdog_device *wdd,
> +static int ftwdt010_wdt_set_timeout(struct watchdog_device *wdd,
>  				  unsigned int timeout)
>  {
>  	wdd->timeout = timeout;
>  	if (watchdog_active(wdd))
> -		gemini_wdt_start(wdd);
> +		ftwdt010_wdt_start(wdd);
>  
>  	return 0;
>  }
>  
> -static irqreturn_t gemini_wdt_interrupt(int irq, void *data)
> +static irqreturn_t ftwdt010_wdt_interrupt(int irq, void *data)
>  {
> -	struct gemini_wdt *gwdt = data;
> +	struct ftwdt010_wdt *gwdt = data;
>  
>  	watchdog_notify_pretimeout(&gwdt->wdd);
>  
>  	return IRQ_HANDLED;
>  }
>  
> -static const struct watchdog_ops gemini_wdt_ops = {
> -	.start		= gemini_wdt_start,
> -	.stop		= gemini_wdt_stop,
> -	.ping		= gemini_wdt_ping,
> -	.set_timeout	= gemini_wdt_set_timeout,
> +static const struct watchdog_ops ftwdt010_wdt_ops = {
> +	.start		= ftwdt010_wdt_start,
> +	.stop		= ftwdt010_wdt_stop,
> +	.ping		= ftwdt010_wdt_ping,
> +	.set_timeout	= ftwdt010_wdt_set_timeout,
>  	.owner		= THIS_MODULE,
>  };
>  
> -static const struct watchdog_info gemini_wdt_info = {
> +static const struct watchdog_info ftwdt010_wdt_info = {
>  	.options	= WDIOF_KEEPALIVEPING
>  			| WDIOF_MAGICCLOSE
>  			| WDIOF_SETTIMEOUT,
> @@ -115,11 +115,11 @@ static const struct watchdog_info gemini_wdt_info = {
>  };
>  
>  
> -static int gemini_wdt_probe(struct platform_device *pdev)
> +static int ftwdt010_wdt_probe(struct platform_device *pdev)
>  {
>  	struct device *dev = &pdev->dev;
>  	struct resource *res;
> -	struct gemini_wdt *gwdt;
> +	struct ftwdt010_wdt *gwdt;
>  	unsigned int reg;
>  	int irq;
>  	int ret;
> @@ -138,8 +138,8 @@ static int gemini_wdt_probe(struct platform_device *pdev)
>  		return -EINVAL;
>  
>  	gwdt->dev = dev;
> -	gwdt->wdd.info = &gemini_wdt_info;
> -	gwdt->wdd.ops = &gemini_wdt_ops;
> +	gwdt->wdd.info = &ftwdt010_wdt_info;
> +	gwdt->wdd.ops = &ftwdt010_wdt_ops;
>  	gwdt->wdd.min_timeout = 1;
>  	gwdt->wdd.max_timeout = 0xFFFFFFFF / WDT_CLOCK;
>  	gwdt->wdd.parent = dev;
> @@ -151,14 +151,14 @@ static int gemini_wdt_probe(struct platform_device *pdev)
>  	gwdt->wdd.timeout = 13U;
>  	watchdog_init_timeout(&gwdt->wdd, 0, dev);
>  
> -	reg = readw(gwdt->base + GEMINI_WDCR);
> +	reg = readw(gwdt->base + FTWDT010_WDCR);
>  	if (reg & WDCR_ENABLE) {
>  		/* Watchdog was enabled by the bootloader, disable it. */
>  		reg &= ~WDCR_ENABLE;
> -		writel(reg, gwdt->base + GEMINI_WDCR);
> +		writel(reg, gwdt->base + FTWDT010_WDCR);
>  	}
>  
> -	ret = devm_request_irq(dev, irq, gemini_wdt_interrupt, 0,
> +	ret = devm_request_irq(dev, irq, ftwdt010_wdt_interrupt, 0,
>  			       "watchdog bark", gwdt);
>  	if (ret)
>  		return ret;
> @@ -171,59 +171,60 @@ static int gemini_wdt_probe(struct platform_device *pdev)
>  
>  	/* Set up platform driver data */
>  	platform_set_drvdata(pdev, gwdt);
> -	dev_info(dev, "Gemini watchdog driver enabled\n");
> +	dev_info(dev, "FTWDT010 watchdog driver enabled\n");
>  
>  	return 0;
>  }
>  
> -static int __maybe_unused gemini_wdt_suspend(struct device *dev)
> +static int __maybe_unused ftwdt010_wdt_suspend(struct device *dev)
>  {
> -	struct gemini_wdt *gwdt = dev_get_drvdata(dev);
> +	struct ftwdt010_wdt *gwdt = dev_get_drvdata(dev);
>  	unsigned int reg;
>  
> -	reg = readw(gwdt->base + GEMINI_WDCR);
> +	reg = readw(gwdt->base + FTWDT010_WDCR);
>  	reg &= ~WDCR_ENABLE;
> -	writel(reg, gwdt->base + GEMINI_WDCR);
> +	writel(reg, gwdt->base + FTWDT010_WDCR);
>  
>  	return 0;
>  }
>  
> -static int __maybe_unused gemini_wdt_resume(struct device *dev)
> +static int __maybe_unused ftwdt010_wdt_resume(struct device *dev)
>  {
> -	struct gemini_wdt *gwdt = dev_get_drvdata(dev);
> +	struct ftwdt010_wdt *gwdt = dev_get_drvdata(dev);
>  	unsigned int reg;
>  
>  	if (watchdog_active(&gwdt->wdd)) {
> -		reg = readw(gwdt->base + GEMINI_WDCR);
> +		reg = readw(gwdt->base + FTWDT010_WDCR);
>  		reg |= WDCR_ENABLE;
> -		writel(reg, gwdt->base + GEMINI_WDCR);
> +		writel(reg, gwdt->base + FTWDT010_WDCR);
>  	}
>  
>  	return 0;
>  }
>  
> -static const struct dev_pm_ops gemini_wdt_dev_pm_ops = {
> -	SET_SYSTEM_SLEEP_PM_OPS(gemini_wdt_suspend,
> -				gemini_wdt_resume)
> +static const struct dev_pm_ops ftwdt010_wdt_dev_pm_ops = {
> +	SET_SYSTEM_SLEEP_PM_OPS(ftwdt010_wdt_suspend,
> +				ftwdt010_wdt_resume)
>  };
>  
>  #ifdef CONFIG_OF
> -static const struct of_device_id gemini_wdt_match[] = {
> +static const struct of_device_id ftwdt010_wdt_match[] = {
> +	{ .compatible = "faraday,ftwdt010" },
>  	{ .compatible = "cortina,gemini-watchdog" },
>  	{},
>  };
> -MODULE_DEVICE_TABLE(of, gemini_wdt_match);
> +MODULE_DEVICE_TABLE(of, ftwdt010_wdt_match);
>  #endif
>  
> -static struct platform_driver gemini_wdt_driver = {
> -	.probe		= gemini_wdt_probe,
> +static struct platform_driver ftwdt010_wdt_driver = {
> +	.probe		= ftwdt010_wdt_probe,
>  	.driver		= {
> -		.name	= "gemini-wdt",
> -		.of_match_table = of_match_ptr(gemini_wdt_match),
> -		.pm = &gemini_wdt_dev_pm_ops,
> +		.name	= "ftwdt010-wdt",
> +		.of_match_table = of_match_ptr(ftwdt010_wdt_match),
> +		.pm = &ftwdt010_wdt_dev_pm_ops,
>  	},
>  };
> -module_platform_driver(gemini_wdt_driver);
> +module_platform_driver(ftwdt010_wdt_driver);
>  MODULE_AUTHOR("Linus Walleij");
> -MODULE_DESCRIPTION("Watchdog driver for Gemini");
> +MODULE_DESCRIPTION("Watchdog driver for Faraday Technology FTWDT010");
>  MODULE_LICENSE("GPL");
> -- 
> 2.13.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-watchdog" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



More information about the linux-arm-kernel mailing list