Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1726282 > unrolled thread
| Started by | Andreas Färber <afaerber@suse.de> |
|---|---|
| First post | 2017-09-05 01:20 +0200 |
| Last post | 2017-09-10 18:30 +0200 |
| Articles | 6 — 2 participants |
Back to article view | Back to linux.kernel
[PATCH v2 0/3] arm64: Realtek RTD1295 watchdog Andreas Färber <afaerber@suse.de> - 2017-09-05 01:20 +0200
[PATCH v2 1/3] dt-bindings: watchdog: Add Realtek RTD1295 Andreas Färber <afaerber@suse.de> - 2017-09-05 01:20 +0200
Re: [PATCH v2 1/3] dt-bindings: watchdog: Add Realtek RTD1295 Guenter Roeck <linux@roeck-us.net> - 2017-09-10 17:20 +0200
[PATCH v2 2/3] watchdog: Add Realtek RTD1295 Andreas Färber <afaerber@suse.de> - 2017-09-05 01:20 +0200
Re: [PATCH v2 2/3] watchdog: Add Realtek RTD1295 Guenter Roeck <linux@roeck-us.net> - 2017-09-10 17:20 +0200
Re: [PATCH v2 2/3] watchdog: Add Realtek RTD1295 Andreas Färber <afaerber@suse.de> - 2017-09-10 18:30 +0200
| From | Andreas Färber <afaerber@suse.de> |
|---|---|
| Date | 2017-09-05 01:20 +0200 |
| Subject | [PATCH v2 0/3] arm64: Realtek RTD1295 watchdog |
| Message-ID | <um8OR-3k3-5@gated-at.bofh.it> |
Hello, This series adds the watchdog for the Realtek RTD1295 SoC. v2 does minor cleanups. The implementation is based on register offsets seen in the vendor DT, as well as older mach-rtk119x code published by QNAP. The DT node depends on my RTD1295 clk series. More experimental patches at: https://github.com/afaerber/linux/commits/rtd1295-next Have a lot of fun! Cheers, Andreas v1 -> v2: * Prepared remove (Guenther) * Set timeout field (Guenther) * Cleanups (Guenther, Andreas) Cc: Wim Van Sebroeck <wim@iguana.be> Cc: Guenter Roeck <linux@roeck-us.net> Cc: linux-watchdog@vger.kernel.org Cc: Roc He <hepeng@zidoo.tv> Cc: 蒋丽琴 <jiang.liqin@geniatech.com> Cc: devicetree@vger.kernel.org Andreas Färber (3): dt-bindings: watchdog: Add Realtek RTD1295 watchdog: Add Realtek RTD1295 arm64: dts: realtek: Add watchdog node for RTD1295 .../bindings/watchdog/realtek,rtd119x.txt | 17 +++ arch/arm64/boot/dts/realtek/rtd1295.dtsi | 6 + drivers/watchdog/Kconfig | 10 ++ drivers/watchdog/Makefile | 1 + drivers/watchdog/rtd119x_wdt.c | 168 +++++++++++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt create mode 100644 drivers/watchdog/rtd119x_wdt.c -- 2.13.5
[toc] | [next] | [standalone]
| From | Andreas Färber <afaerber@suse.de> |
|---|---|
| Date | 2017-09-05 01:20 +0200 |
| Subject | [PATCH v2 1/3] dt-bindings: watchdog: Add Realtek RTD1295 |
| Message-ID | <um8OR-3k3-9@gated-at.bofh.it> |
| In reply to | #1726282 |
Add a binding for the Realtek RTD1295 watchdog.
Acked-by: Rob Herring <robh@kernel.org>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
v1 -> v2: Unchanged
.../devicetree/bindings/watchdog/realtek,rtd119x.txt | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
create mode 100644 Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt
diff --git a/Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt b/Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt
new file mode 100644
index 000000000000..05653054bd5b
--- /dev/null
+++ b/Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt
@@ -0,0 +1,17 @@
+Realtek RTD1295 Watchdog
+========================
+
+Required properties:
+
+- compatible : Should be "realtek,rtd1295-watchdog"
+- reg : Specifies the physical base address and size of registers
+- clocks : Specifies one clock input
+
+
+Example:
+
+ watchdog@98007680 {
+ compatible = "realtek,rtd1295-watchdog";
+ reg = <0x98007680 0x100>;
+ clocks = <&osc27M>;
+ };
--
2.13.5
[toc] | [prev] | [next] | [standalone]
| From | Guenter Roeck <linux@roeck-us.net> |
|---|---|
| Date | 2017-09-10 17:20 +0200 |
| Subject | Re: [PATCH v2 1/3] dt-bindings: watchdog: Add Realtek RTD1295 |
| Message-ID | <uocbD-5CS-5@gated-at.bofh.it> |
| In reply to | #1726283 |
On 09/04/2017 04:16 PM, Andreas Färber wrote:
> Add a binding for the Realtek RTD1295 watchdog.
>
> Acked-by: Rob Herring <robh@kernel.org>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v1 -> v2: Unchanged
>
> .../devicetree/bindings/watchdog/realtek,rtd119x.txt | 17 +++++++++++++++++
> 1 file changed, 17 insertions(+)
> create mode 100644 Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt
>
> diff --git a/Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt b/Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt
> new file mode 100644
> index 000000000000..05653054bd5b
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/watchdog/realtek,rtd119x.txt
> @@ -0,0 +1,17 @@
> +Realtek RTD1295 Watchdog
> +========================
> +
> +Required properties:
> +
> +- compatible : Should be "realtek,rtd1295-watchdog"
> +- reg : Specifies the physical base address and size of registers
> +- clocks : Specifies one clock input
> +
> +
> +Example:
> +
> + watchdog@98007680 {
> + compatible = "realtek,rtd1295-watchdog";
> + reg = <0x98007680 0x100>;
> + clocks = <&osc27M>;
> + };
>
[toc] | [prev] | [next] | [standalone]
| From | Andreas Färber <afaerber@suse.de> |
|---|---|
| Date | 2017-09-05 01:20 +0200 |
| Subject | [PATCH v2 2/3] watchdog: Add Realtek RTD1295 |
| Message-ID | <um8OR-3k3-11@gated-at.bofh.it> |
| In reply to | #1726282 |
Add a watchdog driver for the Realtek RTD1295 SoC.
Based on QNAP's arch/arm/mach-rtk119x/driver/rtk_watchdog.c code and
mach-rtk119x/driver/dc2vo/fpga/include/iso_reg.h register defines.
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
v1 -> v2:
* Added explicit include of bitops.h (Guenther)
* Set timeout field in set_timeout (Guenther)
* Implemented remove (Guenther)
* Replaced remaining hardcoded frequency with clk_get_rate()
drivers/watchdog/Kconfig | 10 +++
drivers/watchdog/Makefile | 1 +
drivers/watchdog/rtd119x_wdt.c | 168 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 179 insertions(+)
create mode 100644 drivers/watchdog/rtd119x_wdt.c
diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
index c722cbfdc7e6..8fa81518c3fa 100644
--- a/drivers/watchdog/Kconfig
+++ b/drivers/watchdog/Kconfig
@@ -787,6 +787,16 @@ config UNIPHIER_WATCHDOG
To compile this driver as a module, choose M here: the
module will be called uniphier_wdt.
+config RTD119X_WATCHDOG
+ bool "Realtek RTD119x/RTD129x watchdog support"
+ depends on ARCH_REALTEK || COMPILE_TEST
+ depends on OF
+ select WATCHDOG_CORE
+ default ARCH_REALTEK
+ help
+ Say Y here to include support for the watchdog timer in
+ Realtek RTD1295 SoCs.
+
# AVR32 Architecture
config AT32AP700X_WDT
diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
index 56adf9fa67d0..63cb3ed8117d 100644
--- a/drivers/watchdog/Makefile
+++ b/drivers/watchdog/Makefile
@@ -87,6 +87,7 @@ obj-$(CONFIG_ASPEED_WATCHDOG) += aspeed_wdt.o
obj-$(CONFIG_ZX2967_WATCHDOG) += zx2967_wdt.o
obj-$(CONFIG_STM32_WATCHDOG) += stm32_iwdg.o
obj-$(CONFIG_UNIPHIER_WATCHDOG) += uniphier_wdt.o
+obj-$(CONFIG_RTD119X_WATCHDOG) += rtd119x_wdt.o
# AVR32 Architecture
obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
diff --git a/drivers/watchdog/rtd119x_wdt.c b/drivers/watchdog/rtd119x_wdt.c
new file mode 100644
index 000000000000..d001c17ddfde
--- /dev/null
+++ b/drivers/watchdog/rtd119x_wdt.c
@@ -0,0 +1,168 @@
+/*
+ * Realtek RTD129x watchdog
+ *
+ * Copyright (c) 2017 Andreas Färber
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <linux/bitops.h>
+#include <linux/clk.h>
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/platform_device.h>
+#include <linux/watchdog.h>
+
+#define RTD119X_TCWCR 0x0
+#define RTD119X_TCWTR 0x4
+#define RTD119X_TCWOV 0xc
+
+#define RTD119X_TCWCR_WDEN_DISABLED 0xa5
+#define RTD119X_TCWCR_WDEN_ENABLED 0xff
+#define RTD119X_TCWCR_WDEN_MASK 0xff
+
+#define RTD119X_TCWTR_WDCLR BIT(0)
+
+struct rtd119x_watchdog_device {
+ struct watchdog_device wdt_dev;
+ void __iomem *base;
+ struct clk *clk;
+};
+
+static int rtd119x_wdt_start(struct watchdog_device *wdev)
+{
+ struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
+ u32 val;
+
+ val = readl_relaxed(data->base + RTD119X_TCWCR);
+ val &= ~RTD119X_TCWCR_WDEN_MASK;
+ val |= RTD119X_TCWCR_WDEN_ENABLED;
+ writel(val, data->base + RTD119X_TCWCR);
+
+ return 0;
+}
+
+static int rtd119x_wdt_stop(struct watchdog_device *wdev)
+{
+ struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
+ u32 val;
+
+ val = readl_relaxed(data->base + RTD119X_TCWCR);
+ val &= ~RTD119X_TCWCR_WDEN_MASK;
+ val |= RTD119X_TCWCR_WDEN_DISABLED;
+ writel(val, data->base + RTD119X_TCWCR);
+
+ return 0;
+}
+
+static int rtd119x_wdt_ping(struct watchdog_device *wdev)
+{
+ struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
+
+ writel_relaxed(RTD119X_TCWTR_WDCLR, data->base + RTD119X_TCWTR);
+
+ return rtd119x_wdt_start(wdev);
+}
+
+static int rtd119x_wdt_set_timeout(struct watchdog_device *wdev, unsigned int val)
+{
+ struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
+
+ writel(val * clk_get_rate(data->clk), data->base + RTD119X_TCWOV);
+
+ data->wdt_dev.timeout = val;
+
+ return 0;
+}
+
+static const struct watchdog_ops rtd119x_wdt_ops = {
+ .owner = THIS_MODULE,
+ .start = rtd119x_wdt_start,
+ .stop = rtd119x_wdt_stop,
+ .ping = rtd119x_wdt_ping,
+ .set_timeout = rtd119x_wdt_set_timeout,
+};
+
+static const struct watchdog_info rtd119x_wdt_info = {
+ .identity = "rtd119x-wdt",
+ .options = 0,
+};
+
+static const struct of_device_id rtd119x_wdt_dt_ids[] = {
+ { .compatible = "realtek,rtd1295-watchdog" },
+ { }
+};
+
+static int rtd119x_wdt_probe(struct platform_device *pdev)
+{
+ struct rtd119x_watchdog_device *data;
+ struct resource *res;
+ int ret;
+
+ data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
+ if (!data)
+ return -ENOMEM;
+
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ data->base = devm_ioremap_resource(&pdev->dev, res);
+ if (IS_ERR(data->base))
+ return PTR_ERR(data->base);
+
+ data->clk = of_clk_get(pdev->dev.of_node, 0);
+ if (IS_ERR(data->clk))
+ return PTR_ERR(data->clk);
+
+ ret = clk_prepare_enable(data->clk);
+ if (ret) {
+ clk_put(data->clk);
+ return ret;
+ }
+
+ data->wdt_dev.info = &rtd119x_wdt_info;
+ data->wdt_dev.ops = &rtd119x_wdt_ops;
+ data->wdt_dev.timeout = 120;
+ data->wdt_dev.max_timeout = 0xffffffff / clk_get_rate(data->clk);
+ data->wdt_dev.min_timeout = 1;
+ data->wdt_dev.parent = &pdev->dev;
+
+ watchdog_stop_on_reboot(&data->wdt_dev);
+ watchdog_set_drvdata(&data->wdt_dev, data);
+ platform_set_drvdata(pdev, data);
+
+ writel_relaxed(RTD119X_TCWTR_WDCLR, data->base + RTD119X_TCWTR);
+ rtd119x_wdt_set_timeout(&data->wdt_dev, data->wdt_dev.timeout);
+ rtd119x_wdt_stop(&data->wdt_dev);
+
+ ret = devm_watchdog_register_device(&pdev->dev, &data->wdt_dev);
+ if (ret) {
+ clk_disable_unprepare(data->clk);
+ clk_put(data->clk);
+ return ret;
+ }
+
+ return 0;
+}
+
+static int rtd119x_wdt_remove(struct platform_device *pdev)
+{
+ struct rtd119x_watchdog_device *data = platform_get_drvdata(pdev);
+
+ watchdog_unregister_device(&data->wdt_dev);
+
+ clk_disable_unprepare(data->clk);
+ clk_put(data->clk);
+
+ return 0;
+}
+
+static struct platform_driver rtd119x_wdt_driver = {
+ .probe = rtd119x_wdt_probe,
+ .remove = rtd119x_wdt_remove,
+ .driver = {
+ .name = "rtd1295-watchdog",
+ .of_match_table = rtd119x_wdt_dt_ids,
+ },
+};
+builtin_platform_driver(rtd119x_wdt_driver);
--
2.13.5
[toc] | [prev] | [next] | [standalone]
| From | Guenter Roeck <linux@roeck-us.net> |
|---|---|
| Date | 2017-09-10 17:20 +0200 |
| Subject | Re: [PATCH v2 2/3] watchdog: Add Realtek RTD1295 |
| Message-ID | <uocbD-5CS-7@gated-at.bofh.it> |
| In reply to | #1726284 |
On 09/04/2017 04:16 PM, Andreas Färber wrote:
> Add a watchdog driver for the Realtek RTD1295 SoC.
>
> Based on QNAP's arch/arm/mach-rtk119x/driver/rtk_watchdog.c code and
> mach-rtk119x/driver/dc2vo/fpga/include/iso_reg.h register defines.
>
> Signed-off-by: Andreas Färber <afaerber@suse.de>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
> v1 -> v2:
> * Added explicit include of bitops.h (Guenther)
> * Set timeout field in set_timeout (Guenther)
> * Implemented remove (Guenther)
> * Replaced remaining hardcoded frequency with clk_get_rate()
>
> drivers/watchdog/Kconfig | 10 +++
> drivers/watchdog/Makefile | 1 +
> drivers/watchdog/rtd119x_wdt.c | 168 +++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 179 insertions(+)
> create mode 100644 drivers/watchdog/rtd119x_wdt.c
>
> diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig
> index c722cbfdc7e6..8fa81518c3fa 100644
> --- a/drivers/watchdog/Kconfig
> +++ b/drivers/watchdog/Kconfig
> @@ -787,6 +787,16 @@ config UNIPHIER_WATCHDOG
> To compile this driver as a module, choose M here: the
> module will be called uniphier_wdt.
>
> +config RTD119X_WATCHDOG
> + bool "Realtek RTD119x/RTD129x watchdog support"
> + depends on ARCH_REALTEK || COMPILE_TEST
> + depends on OF
> + select WATCHDOG_CORE
> + default ARCH_REALTEK
> + help
> + Say Y here to include support for the watchdog timer in
> + Realtek RTD1295 SoCs.
> +
> # AVR32 Architecture
>
> config AT32AP700X_WDT
> diff --git a/drivers/watchdog/Makefile b/drivers/watchdog/Makefile
> index 56adf9fa67d0..63cb3ed8117d 100644
> --- a/drivers/watchdog/Makefile
> +++ b/drivers/watchdog/Makefile
> @@ -87,6 +87,7 @@ obj-$(CONFIG_ASPEED_WATCHDOG) += aspeed_wdt.o
> obj-$(CONFIG_ZX2967_WATCHDOG) += zx2967_wdt.o
> obj-$(CONFIG_STM32_WATCHDOG) += stm32_iwdg.o
> obj-$(CONFIG_UNIPHIER_WATCHDOG) += uniphier_wdt.o
> +obj-$(CONFIG_RTD119X_WATCHDOG) += rtd119x_wdt.o
>
> # AVR32 Architecture
> obj-$(CONFIG_AT32AP700X_WDT) += at32ap700x_wdt.o
> diff --git a/drivers/watchdog/rtd119x_wdt.c b/drivers/watchdog/rtd119x_wdt.c
> new file mode 100644
> index 000000000000..d001c17ddfde
> --- /dev/null
> +++ b/drivers/watchdog/rtd119x_wdt.c
> @@ -0,0 +1,168 @@
> +/*
> + * Realtek RTD129x watchdog
> + *
> + * Copyright (c) 2017 Andreas Färber
> + *
> + * SPDX-License-Identifier: GPL-2.0+
> + */
> +
> +#include <linux/bitops.h>
> +#include <linux/clk.h>
> +#include <linux/io.h>
> +#include <linux/module.h>
> +#include <linux/of.h>
> +#include <linux/of_address.h>
> +#include <linux/platform_device.h>
> +#include <linux/watchdog.h>
> +
> +#define RTD119X_TCWCR 0x0
> +#define RTD119X_TCWTR 0x4
> +#define RTD119X_TCWOV 0xc
> +
> +#define RTD119X_TCWCR_WDEN_DISABLED 0xa5
> +#define RTD119X_TCWCR_WDEN_ENABLED 0xff
> +#define RTD119X_TCWCR_WDEN_MASK 0xff
> +
> +#define RTD119X_TCWTR_WDCLR BIT(0)
> +
> +struct rtd119x_watchdog_device {
> + struct watchdog_device wdt_dev;
> + void __iomem *base;
> + struct clk *clk;
> +};
> +
> +static int rtd119x_wdt_start(struct watchdog_device *wdev)
> +{
> + struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
> + u32 val;
> +
> + val = readl_relaxed(data->base + RTD119X_TCWCR);
> + val &= ~RTD119X_TCWCR_WDEN_MASK;
> + val |= RTD119X_TCWCR_WDEN_ENABLED;
> + writel(val, data->base + RTD119X_TCWCR);
> +
> + return 0;
> +}
> +
> +static int rtd119x_wdt_stop(struct watchdog_device *wdev)
> +{
> + struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
> + u32 val;
> +
> + val = readl_relaxed(data->base + RTD119X_TCWCR);
> + val &= ~RTD119X_TCWCR_WDEN_MASK;
> + val |= RTD119X_TCWCR_WDEN_DISABLED;
> + writel(val, data->base + RTD119X_TCWCR);
> +
> + return 0;
> +}
> +
> +static int rtd119x_wdt_ping(struct watchdog_device *wdev)
> +{
> + struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
> +
> + writel_relaxed(RTD119X_TCWTR_WDCLR, data->base + RTD119X_TCWTR);
> +
> + return rtd119x_wdt_start(wdev);
> +}
> +
> +static int rtd119x_wdt_set_timeout(struct watchdog_device *wdev, unsigned int val)
> +{
> + struct rtd119x_watchdog_device *data = watchdog_get_drvdata(wdev);
> +
> + writel(val * clk_get_rate(data->clk), data->base + RTD119X_TCWOV);
> +
> + data->wdt_dev.timeout = val;
> +
> + return 0;
> +}
> +
> +static const struct watchdog_ops rtd119x_wdt_ops = {
> + .owner = THIS_MODULE,
> + .start = rtd119x_wdt_start,
> + .stop = rtd119x_wdt_stop,
> + .ping = rtd119x_wdt_ping,
> + .set_timeout = rtd119x_wdt_set_timeout,
> +};
> +
> +static const struct watchdog_info rtd119x_wdt_info = {
> + .identity = "rtd119x-wdt",
> + .options = 0,
> +};
> +
> +static const struct of_device_id rtd119x_wdt_dt_ids[] = {
> + { .compatible = "realtek,rtd1295-watchdog" },
> + { }
> +};
> +
> +static int rtd119x_wdt_probe(struct platform_device *pdev)
> +{
> + struct rtd119x_watchdog_device *data;
> + struct resource *res;
> + int ret;
> +
> + data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
> + if (!data)
> + return -ENOMEM;
> +
> + res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + data->base = devm_ioremap_resource(&pdev->dev, res);
> + if (IS_ERR(data->base))
> + return PTR_ERR(data->base);
> +
> + data->clk = of_clk_get(pdev->dev.of_node, 0);
> + if (IS_ERR(data->clk))
> + return PTR_ERR(data->clk);
> +
> + ret = clk_prepare_enable(data->clk);
> + if (ret) {
> + clk_put(data->clk);
> + return ret;
> + }
> +
> + data->wdt_dev.info = &rtd119x_wdt_info;
> + data->wdt_dev.ops = &rtd119x_wdt_ops;
> + data->wdt_dev.timeout = 120;
> + data->wdt_dev.max_timeout = 0xffffffff / clk_get_rate(data->clk);
> + data->wdt_dev.min_timeout = 1;
> + data->wdt_dev.parent = &pdev->dev;
> +
> + watchdog_stop_on_reboot(&data->wdt_dev);
> + watchdog_set_drvdata(&data->wdt_dev, data);
> + platform_set_drvdata(pdev, data);
> +
> + writel_relaxed(RTD119X_TCWTR_WDCLR, data->base + RTD119X_TCWTR);
> + rtd119x_wdt_set_timeout(&data->wdt_dev, data->wdt_dev.timeout);
> + rtd119x_wdt_stop(&data->wdt_dev);
> +
> + ret = devm_watchdog_register_device(&pdev->dev, &data->wdt_dev);
> + if (ret) {
> + clk_disable_unprepare(data->clk);
> + clk_put(data->clk);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static int rtd119x_wdt_remove(struct platform_device *pdev)
> +{
> + struct rtd119x_watchdog_device *data = platform_get_drvdata(pdev);
> +
> + watchdog_unregister_device(&data->wdt_dev);
> +
> + clk_disable_unprepare(data->clk);
> + clk_put(data->clk);
> +
> + return 0;
> +}
> +
> +static struct platform_driver rtd119x_wdt_driver = {
> + .probe = rtd119x_wdt_probe,
> + .remove = rtd119x_wdt_remove,
> + .driver = {
> + .name = "rtd1295-watchdog",
> + .of_match_table = rtd119x_wdt_dt_ids,
> + },
> +};
> +builtin_platform_driver(rtd119x_wdt_driver);
>
[toc] | [prev] | [next] | [standalone]
| From | Andreas Färber <afaerber@suse.de> |
|---|---|
| Date | 2017-09-10 18:30 +0200 |
| Subject | Re: [PATCH v2 2/3] watchdog: Add Realtek RTD1295 |
| Message-ID | <uodho-6n2-23@gated-at.bofh.it> |
| In reply to | #1729990 |
Am 10.09.2017 um 17:17 schrieb Guenter Roeck: > On 09/04/2017 04:16 PM, Andreas Färber wrote: >> Add a watchdog driver for the Realtek RTD1295 SoC. >> >> Based on QNAP's arch/arm/mach-rtk119x/driver/rtk_watchdog.c code and >> mach-rtk119x/driver/dc2vo/fpga/include/iso_reg.h register defines. >> >> Signed-off-by: Andreas Färber <afaerber@suse.de> > > Reviewed-by: Guenter Roeck <linux@roeck-us.net> Thanks. Will patches 1-2 go through some watchdog tree, or should I queue them in my Realtek tree now? Regards, Andreas -- SUSE Linux GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany GF: Felix Imendörffer, Jane Smithard, Graham Norton HRB 21284 (AG Nürnberg)
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web