All of lore.kernel.org
 help / color / mirror / Atom feed
From: Guenter Roeck <linux@roeck-us.net>
To: Alexandre Belloni <alexandre.belloni@free-electrons.com>,
	Nicolas Ferre <nicolas.ferre@atmel.com>
Cc: Boris Brezillon <boris.brezillon@free-electrons.com>,
	Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Samuel Ortiz <sameo@linux.intel.com>,
	Lee Jones <lee.jones@linaro.org>,
	Wim Van Sebroeck <wim@iguana.be>,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
	linux-watchdog@vger.kernel.org
Subject: Re: [PATCH v2 3/8] watchdog: at91rm9200: use the regmap from mfd
Date: Fri, 09 Jan 2015 16:39:21 -0800	[thread overview]
Message-ID: <54B074B9.2090704@roeck-us.net> (raw)
In-Reply-To: <1420797094-9444-4-git-send-email-alexandre.belloni@free-electrons.com>

On 01/09/2015 01:51 AM, Alexandre Belloni wrote:
> The system timer MFD driver is providing a regmap. Use it to access the
> registers.
>
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>   drivers/watchdog/Kconfig          |  2 +-
>   drivers/watchdog/at91rm9200_wdt.c | 27 +++++++++------------------
>   2 files changed, 10 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index 08f41add1461..18c73bc159fc 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -154,7 +154,7 @@ config ARM_SP805_WATCHDOG
>
>   config AT91RM9200_WATCHDOG
>   	tristate "AT91RM9200 watchdog"
> -	depends on SOC_AT91RM9200
> +	depends on SOC_AT91RM9200 && MFD_ATMEL_ST
>   	help
>   	  Watchdog timer embedded into AT91RM9200 chips. This will reboot your
>   	  system when the timeout is reached.
> diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c
> index d244112d5b6f..a493fe4b0dfc 100644
> --- a/drivers/watchdog/at91rm9200_wdt.c
> +++ b/drivers/watchdog/at91rm9200_wdt.c
> @@ -14,25 +14,22 @@
>   #include <linux/bitops.h>
>   #include <linux/errno.h>
>   #include <linux/fs.h>
> -#include <linux/init.h>
> -#include <linux/io.h>
>   #include <linux/kernel.h>
> +#include <linux/mfd/atmel-st.h>
>   #include <linux/miscdevice.h>
>   #include <linux/module.h>
>   #include <linux/moduleparam.h>
>   #include <linux/platform_device.h>
> -#include <linux/types.h>
> +#include <linux/regmap.h>
>   #include <linux/watchdog.h>
>   #include <linux/uaccess.h>
> -#include <linux/of.h>
> -#include <linux/of_device.h>
> -#include <mach/at91_st.h>
>
>   #define WDT_DEFAULT_TIME	5	/* seconds */
>   #define WDT_MAX_TIME		256	/* seconds */
>
>   static int wdt_time = WDT_DEFAULT_TIME;
>   static bool nowayout = WATCHDOG_NOWAYOUT;
> +static struct regmap *regmap_st;
>
>   module_param(wdt_time, int, 0);
>   MODULE_PARM_DESC(wdt_time, "Watchdog time in seconds. (default="
> @@ -55,7 +52,7 @@ static unsigned long at91wdt_busy;
>    */
>   static inline void at91_wdt_stop(void)
>   {
> -	at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN);
> +	regmap_write(regmap_st, AT91_ST_WDMR, AT91_ST_EXTEN);
>   }
>
>   /*
> @@ -63,9 +60,9 @@ static inline void at91_wdt_stop(void)
>    */
>   static inline void at91_wdt_start(void)
>   {
> -	at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
> +	regmap_write(regmap_st, AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
>   				(((65536 * wdt_time) >> 8) & AT91_ST_WDV));
> -	at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
> +	regmap_write(regmap_st, AT91_ST_CR, AT91_ST_WDRST);
>   }
>
>   /*
> @@ -73,7 +70,7 @@ static inline void at91_wdt_start(void)
>    */
>   static inline void at91_wdt_reload(void)
>   {
> -	at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
> +	regmap_write(regmap_st, AT91_ST_CR, AT91_ST_WDRST);
>   }
>
>   /* ......................................................................... */
> @@ -204,6 +201,7 @@ static struct miscdevice at91wdt_miscdev = {
>   static int at91wdt_probe(struct platform_device *pdev)
>   {
>   	int res;
> +	regmap_st = dev_get_drvdata(pdev->dev.parent);
>

Is it guaranteed that parent is never NULL, and that the parent's
drvdata is always set ?

Also, it seems that regmap_st will be overwritten if the device
is already open (see code below). That may not be a good idea.

Guenter

>   	if (at91wdt_miscdev.parent)
>   		return -EBUSY;
> @@ -254,12 +252,6 @@ static int at91wdt_resume(struct platform_device *pdev)
>   #define at91wdt_resume	NULL
>   #endif
>
> -static const struct of_device_id at91_wdt_dt_ids[] = {
> -	{ .compatible = "atmel,at91rm9200-wdt" },
> -	{ /* sentinel */ }
> -};
> -MODULE_DEVICE_TABLE(of, at91_wdt_dt_ids);
> -
>   static struct platform_driver at91wdt_driver = {
>   	.probe		= at91wdt_probe,
>   	.remove		= at91wdt_remove,
> @@ -267,8 +259,7 @@ static struct platform_driver at91wdt_driver = {
>   	.suspend	= at91wdt_suspend,
>   	.resume		= at91wdt_resume,
>   	.driver		= {
> -		.name	= "at91_wdt",
> -		.of_match_table = at91_wdt_dt_ids,
> +		.name	= "atmel_st_watchdog",
>   	},
>   };
>
>


WARNING: multiple messages have this Message-ID (diff)
From: linux@roeck-us.net (Guenter Roeck)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 3/8] watchdog: at91rm9200: use the regmap from mfd
Date: Fri, 09 Jan 2015 16:39:21 -0800	[thread overview]
Message-ID: <54B074B9.2090704@roeck-us.net> (raw)
In-Reply-To: <1420797094-9444-4-git-send-email-alexandre.belloni@free-electrons.com>

On 01/09/2015 01:51 AM, Alexandre Belloni wrote:
> The system timer MFD driver is providing a regmap. Use it to access the
> registers.
>
> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
> ---
>   drivers/watchdog/Kconfig          |  2 +-
>   drivers/watchdog/at91rm9200_wdt.c | 27 +++++++++------------------
>   2 files changed, 10 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index 08f41add1461..18c73bc159fc 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -154,7 +154,7 @@ config ARM_SP805_WATCHDOG
>
>   config AT91RM9200_WATCHDOG
>   	tristate "AT91RM9200 watchdog"
> -	depends on SOC_AT91RM9200
> +	depends on SOC_AT91RM9200 && MFD_ATMEL_ST
>   	help
>   	  Watchdog timer embedded into AT91RM9200 chips. This will reboot your
>   	  system when the timeout is reached.
> diff --git a/drivers/watchdog/at91rm9200_wdt.c b/drivers/watchdog/at91rm9200_wdt.c
> index d244112d5b6f..a493fe4b0dfc 100644
> --- a/drivers/watchdog/at91rm9200_wdt.c
> +++ b/drivers/watchdog/at91rm9200_wdt.c
> @@ -14,25 +14,22 @@
>   #include <linux/bitops.h>
>   #include <linux/errno.h>
>   #include <linux/fs.h>
> -#include <linux/init.h>
> -#include <linux/io.h>
>   #include <linux/kernel.h>
> +#include <linux/mfd/atmel-st.h>
>   #include <linux/miscdevice.h>
>   #include <linux/module.h>
>   #include <linux/moduleparam.h>
>   #include <linux/platform_device.h>
> -#include <linux/types.h>
> +#include <linux/regmap.h>
>   #include <linux/watchdog.h>
>   #include <linux/uaccess.h>
> -#include <linux/of.h>
> -#include <linux/of_device.h>
> -#include <mach/at91_st.h>
>
>   #define WDT_DEFAULT_TIME	5	/* seconds */
>   #define WDT_MAX_TIME		256	/* seconds */
>
>   static int wdt_time = WDT_DEFAULT_TIME;
>   static bool nowayout = WATCHDOG_NOWAYOUT;
> +static struct regmap *regmap_st;
>
>   module_param(wdt_time, int, 0);
>   MODULE_PARM_DESC(wdt_time, "Watchdog time in seconds. (default="
> @@ -55,7 +52,7 @@ static unsigned long at91wdt_busy;
>    */
>   static inline void at91_wdt_stop(void)
>   {
> -	at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN);
> +	regmap_write(regmap_st, AT91_ST_WDMR, AT91_ST_EXTEN);
>   }
>
>   /*
> @@ -63,9 +60,9 @@ static inline void at91_wdt_stop(void)
>    */
>   static inline void at91_wdt_start(void)
>   {
> -	at91_st_write(AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
> +	regmap_write(regmap_st, AT91_ST_WDMR, AT91_ST_EXTEN | AT91_ST_RSTEN |
>   				(((65536 * wdt_time) >> 8) & AT91_ST_WDV));
> -	at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
> +	regmap_write(regmap_st, AT91_ST_CR, AT91_ST_WDRST);
>   }
>
>   /*
> @@ -73,7 +70,7 @@ static inline void at91_wdt_start(void)
>    */
>   static inline void at91_wdt_reload(void)
>   {
> -	at91_st_write(AT91_ST_CR, AT91_ST_WDRST);
> +	regmap_write(regmap_st, AT91_ST_CR, AT91_ST_WDRST);
>   }
>
>   /* ......................................................................... */
> @@ -204,6 +201,7 @@ static struct miscdevice at91wdt_miscdev = {
>   static int at91wdt_probe(struct platform_device *pdev)
>   {
>   	int res;
> +	regmap_st = dev_get_drvdata(pdev->dev.parent);
>

Is it guaranteed that parent is never NULL, and that the parent's
drvdata is always set ?

Also, it seems that regmap_st will be overwritten if the device
is already open (see code below). That may not be a good idea.

Guenter

>   	if (at91wdt_miscdev.parent)
>   		return -EBUSY;
> @@ -254,12 +252,6 @@ static int at91wdt_resume(struct platform_device *pdev)
>   #define at91wdt_resume	NULL
>   #endif
>
> -static const struct of_device_id at91_wdt_dt_ids[] = {
> -	{ .compatible = "atmel,at91rm9200-wdt" },
> -	{ /* sentinel */ }
> -};
> -MODULE_DEVICE_TABLE(of, at91_wdt_dt_ids);
> -
>   static struct platform_driver at91wdt_driver = {
>   	.probe		= at91wdt_probe,
>   	.remove		= at91wdt_remove,
> @@ -267,8 +259,7 @@ static struct platform_driver at91wdt_driver = {
>   	.suspend	= at91wdt_suspend,
>   	.resume		= at91wdt_resume,
>   	.driver		= {
> -		.name	= "at91_wdt",
> -		.of_match_table = at91_wdt_dt_ids,
> +		.name	= "atmel_st_watchdog",
>   	},
>   };
>
>

  reply	other threads:[~2015-01-10  0:39 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-09  9:51 [PATCH v2 0/8] Atmel System Timer cleanups Alexandre Belloni
2015-01-09  9:51 ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 1/8] ARM: at91/dt: declare atmel,at91rm9200-st as a syscon Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 2/8] mfd: Add atmel-st driver Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 3/8] watchdog: at91rm9200: use the regmap from mfd Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-10  0:39   ` Guenter Roeck [this message]
2015-01-10  0:39     ` Guenter Roeck
2015-01-10 18:41     ` Alexandre Belloni
2015-01-10 18:41       ` Alexandre Belloni
2015-01-11  1:14       ` Guenter Roeck
2015-01-11  1:14         ` Guenter Roeck
2015-01-12 14:08         ` Alexandre Belloni
2015-01-12 14:08           ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 4/8] ARM: at91: time: move the system timer driver to drivers/clocksource Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 5/8] ARM: at91: move the restart function to the system timer driver Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 6/8] clocksource: atmel-st: properly initialize driver Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 7/8] clocksource: atmel-st: use syscon/regmap Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni
2015-01-09  9:51 ` [PATCH v2 8/8] ARM: at91: remove useless include Alexandre Belloni
2015-01-09  9:51   ` Alexandre Belloni

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=54B074B9.2090704@roeck-us.net \
    --to=linux@roeck-us.net \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=boris.brezillon@free-electrons.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=lee.jones@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-watchdog@vger.kernel.org \
    --cc=nicolas.ferre@atmel.com \
    --cc=plagnioj@jcrosoft.com \
    --cc=sameo@linux.intel.com \
    --cc=tglx@linutronix.de \
    --cc=wim@iguana.be \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.