From: Damien Riegel <damien.riegel@savoirfairelinux.com> To: linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-watchdog@vger.kernel.org, devicetree@vger.kernel.org Cc: Lee Jones <lee.jones@linaro.org>, Rob Herring <robh+dt@kernel.org>, Pawel Moll <pawel.moll@arm.com>, Mark Rutland <mark.rutland@arm.com>, Ian Campbell <ijc+devicetree@hellion.org.uk>, Kumar Gala <galak@codeaurora.org>, Russell King <linux@arm.linux.org.uk>, Shawn Guo <shawnguo@kernel.org>, Sascha Hauer <kernel@pengutronix.de>, Arnd Bergmann <arnd@arndb.de>, Samuel Ortiz <sameo@linux.intel.com>, Wim Van Sebroeck <wim@iguana.be>, Guenter Roeck <linux@roeck-us.net>, kernel@savoirfairelinux.com, Damien Riegel <damien.riegel@savoirfairelinux.com> Subject: [PATCH v7 2/6] mfd: syscon: add a DT property to set value width Date: Mon, 30 Nov 2015 10:59:47 -0500 [thread overview] Message-ID: <1448899191-13891-3-git-send-email-damien.riegel@savoirfairelinux.com> (raw) In-Reply-To: <1448899191-13891-1-git-send-email-damien.riegel@savoirfairelinux.com> Currently syscon has a fixed configuration of 32 bits for register and values widths. In some cases, it would be desirable to be able to customize the value width. For example, certain boards (like the ones manufactured by Technologic Systems) have a FPGA that is memory-mapped, but its registers are only 16-bit wide. This patch adds an optional "reg-io-width" DT binding for syscon that allows to change the width for the data bus (i.e. val_bits). If this property is provided, it will also set the register stride to reg-io-width's value. If not provided, the default configuration is used. Signed-off-by: Damien Riegel <damien.riegel@savoirfairelinux.com> --- Documentation/devicetree/bindings/mfd/syscon.txt | 4 ++++ drivers/mfd/syscon.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/syscon.txt b/Documentation/devicetree/bindings/mfd/syscon.txt index fe8150b..408f768 100644 --- a/Documentation/devicetree/bindings/mfd/syscon.txt +++ b/Documentation/devicetree/bindings/mfd/syscon.txt @@ -13,6 +13,10 @@ Required properties: - compatible: Should contain "syscon". - reg: the register region can be accessed from syscon +Optional property: +- reg-io-width: the size (in bytes) of the IO accesses that should be + performed on the device. + Examples: gpr: iomuxc-gpr@020e0000 { compatible = "fsl,imx6q-iomuxc-gpr", "syscon"; diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c index 176bf0f..b7aabee 100644 --- a/drivers/mfd/syscon.c +++ b/drivers/mfd/syscon.c @@ -47,6 +47,7 @@ static struct syscon *of_syscon_register(struct device_node *np) struct syscon *syscon; struct regmap *regmap; void __iomem *base; + u32 reg_io_width; int ret; struct regmap_config syscon_config = syscon_regmap_config; @@ -69,6 +70,18 @@ static struct syscon *of_syscon_register(struct device_node *np) else if (of_property_read_bool(np, "little-endian")) syscon_config.val_format_endian = REGMAP_ENDIAN_LITTLE; + /* + * search for reg-io-width property in DT. If it is not provided, + * default to 4 bytes. regmap_init_mmio will return an error if values + * are invalid so there is no need to check them here. + */ + ret = of_property_read_u32(np, "reg-io-width", ®_io_width); + if (ret) + reg_io_width = 4; + + syscon_config.reg_stride = reg_io_width; + syscon_config.val_bits = reg_io_width * 8; + regmap = regmap_init_mmio(NULL, base, &syscon_config); if (IS_ERR(regmap)) { pr_err("regmap init failed\n"); -- 2.5.0
WARNING: multiple messages have this Message-ID (diff)
From: damien.riegel@savoirfairelinux.com (Damien Riegel) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v7 2/6] mfd: syscon: add a DT property to set value width Date: Mon, 30 Nov 2015 10:59:47 -0500 [thread overview] Message-ID: <1448899191-13891-3-git-send-email-damien.riegel@savoirfairelinux.com> (raw) In-Reply-To: <1448899191-13891-1-git-send-email-damien.riegel@savoirfairelinux.com> Currently syscon has a fixed configuration of 32 bits for register and values widths. In some cases, it would be desirable to be able to customize the value width. For example, certain boards (like the ones manufactured by Technologic Systems) have a FPGA that is memory-mapped, but its registers are only 16-bit wide. This patch adds an optional "reg-io-width" DT binding for syscon that allows to change the width for the data bus (i.e. val_bits). If this property is provided, it will also set the register stride to reg-io-width's value. If not provided, the default configuration is used. Signed-off-by: Damien Riegel <damien.riegel@savoirfairelinux.com> --- Documentation/devicetree/bindings/mfd/syscon.txt | 4 ++++ drivers/mfd/syscon.c | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/syscon.txt b/Documentation/devicetree/bindings/mfd/syscon.txt index fe8150b..408f768 100644 --- a/Documentation/devicetree/bindings/mfd/syscon.txt +++ b/Documentation/devicetree/bindings/mfd/syscon.txt @@ -13,6 +13,10 @@ Required properties: - compatible: Should contain "syscon". - reg: the register region can be accessed from syscon +Optional property: +- reg-io-width: the size (in bytes) of the IO accesses that should be + performed on the device. + Examples: gpr: iomuxc-gpr at 020e0000 { compatible = "fsl,imx6q-iomuxc-gpr", "syscon"; diff --git a/drivers/mfd/syscon.c b/drivers/mfd/syscon.c index 176bf0f..b7aabee 100644 --- a/drivers/mfd/syscon.c +++ b/drivers/mfd/syscon.c @@ -47,6 +47,7 @@ static struct syscon *of_syscon_register(struct device_node *np) struct syscon *syscon; struct regmap *regmap; void __iomem *base; + u32 reg_io_width; int ret; struct regmap_config syscon_config = syscon_regmap_config; @@ -69,6 +70,18 @@ static struct syscon *of_syscon_register(struct device_node *np) else if (of_property_read_bool(np, "little-endian")) syscon_config.val_format_endian = REGMAP_ENDIAN_LITTLE; + /* + * search for reg-io-width property in DT. If it is not provided, + * default to 4 bytes. regmap_init_mmio will return an error if values + * are invalid so there is no need to check them here. + */ + ret = of_property_read_u32(np, "reg-io-width", ®_io_width); + if (ret) + reg_io_width = 4; + + syscon_config.reg_stride = reg_io_width; + syscon_config.val_bits = reg_io_width * 8; + regmap = regmap_init_mmio(NULL, base, &syscon_config); if (IS_ERR(regmap)) { pr_err("regmap init failed\n"); -- 2.5.0
next prev parent reply other threads:[~2015-11-30 16:08 UTC|newest] Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-11-30 15:59 [PATCH v7 0/6] Add board support for TS-4800 Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` [PATCH v7 1/6] of: add vendor prefix for Technologic Systems Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel [this message] 2015-11-30 15:59 ` [PATCH v7 2/6] mfd: syscon: add a DT property to set value width Damien Riegel 2015-11-30 19:00 ` Rob Herring 2015-11-30 19:00 ` Rob Herring 2015-11-30 19:00 ` Rob Herring 2015-12-02 23:21 ` Damien Riegel 2015-12-02 23:21 ` Damien Riegel 2015-12-04 16:02 ` Arnd Bergmann 2015-12-04 16:02 ` Arnd Bergmann 2015-12-07 9:40 ` Lee Jones 2015-12-07 9:40 ` Lee Jones 2015-12-07 9:40 ` Lee Jones 2015-12-07 19:42 ` Damien Riegel 2015-12-07 19:42 ` Damien Riegel 2015-12-07 19:42 ` Damien Riegel 2015-12-07 19:42 ` Damien Riegel 2015-12-08 10:02 ` Arnd Bergmann 2015-12-08 10:02 ` Arnd Bergmann 2015-12-08 10:02 ` Arnd Bergmann 2015-12-08 13:50 ` Lee Jones 2015-12-08 13:50 ` Lee Jones 2015-12-08 13:50 ` Lee Jones 2015-12-08 13:50 ` Lee Jones 2015-12-08 14:18 ` Lee Jones 2015-12-08 14:18 ` Lee Jones 2015-12-08 14:18 ` Lee Jones 2015-11-30 15:59 ` [PATCH v7 3/6] watchdog: ts4800: add driver for TS-4800 watchdog Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 16:14 ` Guenter Roeck 2015-11-30 16:14 ` Guenter Roeck 2015-12-04 18:49 ` Damien Riegel 2015-12-04 18:49 ` Damien Riegel 2015-12-04 18:49 ` Damien Riegel 2015-11-30 19:01 ` Rob Herring 2015-11-30 19:01 ` Rob Herring 2015-11-30 19:01 ` Rob Herring 2015-11-30 15:59 ` [PATCH v7 4/6] ARM: imx_v6_v7_defconfig: add " Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` [PATCH v7 5/6] of: documentation: add bindings documentation for TS-4800 Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` [PATCH v7 6/6] ARM: dts: TS-4800: add basic device tree Damien Riegel 2015-11-30 15:59 ` Damien Riegel 2015-11-30 15:59 ` Damien Riegel
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=1448899191-13891-3-git-send-email-damien.riegel@savoirfairelinux.com \ --to=damien.riegel@savoirfairelinux.com \ --cc=arnd@arndb.de \ --cc=devicetree@vger.kernel.org \ --cc=galak@codeaurora.org \ --cc=ijc+devicetree@hellion.org.uk \ --cc=kernel@pengutronix.de \ --cc=kernel@savoirfairelinux.com \ --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=linux@arm.linux.org.uk \ --cc=linux@roeck-us.net \ --cc=mark.rutland@arm.com \ --cc=pawel.moll@arm.com \ --cc=robh+dt@kernel.org \ --cc=sameo@linux.intel.com \ --cc=shawnguo@kernel.org \ --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: linkBe 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.