Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f728f4bf authored by Xiubo Li's avatar Xiubo Li Committed by Wim Van Sebroeck
Browse files

watchdog: imx2_wdt: adds big endianness support.



This watchdog driver will be working on IMX2+, Vybrid, LS1, LS2+
platforms, and will be in different endianness mode in those SoCs:

    SoCs       WDT endian mode
------------------------------------
    IMX2+           LE
    Vybird          LE
    LS1             BE
    LS2             LE

Signed-off-by: default avatarXiubo Li <Li.Xiubo@freescale.com>
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarWim Van Sebroeck <wim@iguana.be>
parent 2cdf25bb
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -5,10 +5,15 @@ Required properties:
- reg : Should contain WDT registers location and length
- interrupts : Should contain WDT interrupt

Optional property:
- big-endian: If present the watchdog device's registers are implemented
  in big endian mode, otherwise in little mode.

Examples:

wdt@73f98000 {
	compatible = "fsl,imx51-wdt", "fsl,imx21-wdt";
	reg = <0x73f98000 0x4000>;
	interrupts = <58>;
	big-endian;
};
+7 −0
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/of_address.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/timer.h>
@@ -190,10 +191,12 @@ static struct regmap_config imx2_wdt_regmap_config = {

static int __init imx2_wdt_probe(struct platform_device *pdev)
{
	struct device_node *np = pdev->dev.of_node;
	struct imx2_wdt_device *wdev;
	struct watchdog_device *wdog;
	struct resource *res;
	void __iomem *base;
	bool big_endian;
	int ret;
	u32 val;

@@ -201,6 +204,10 @@ static int __init imx2_wdt_probe(struct platform_device *pdev)
	if (!wdev)
		return -ENOMEM;

	big_endian = of_property_read_bool(np, "big-endian");
	if (big_endian)
		imx2_wdt_regmap_config.val_format_endian = REGMAP_ENDIAN_BIG;

	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	base = devm_ioremap_resource(&pdev->dev, res);
	if (IS_ERR(base))