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",
> },
> };
>
>
next prev parent 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.