aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2016-01-26 12:59:30 -0500
committerMark Brown <broonie@kernel.org>2016-01-27 13:46:38 -0500
commita06c488da0b0c1eebf710017675f00b9d5f9cf42 (patch)
tree10a608717ab425e5746a38485cd5cf007b50d32f
parent92e963f50fc74041b5e9e744c330dca48e04f08d (diff)
regmap: Add explict native endian flag to DT bindings
Currently the binding document says that if no endianness is configured we use native endian but this is not in fact true for all binding types and we do have some devices that really want native endianness such as Broadcom MIPS SoCs where switching the endianness of the CPU also switches the endianness of external IPs. Provide an explicit option for this. Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--Documentation/devicetree/bindings/regmap/regmap.txt11
-rw-r--r--drivers/base/regmap/regmap.c2
2 files changed, 9 insertions, 4 deletions
diff --git a/Documentation/devicetree/bindings/regmap/regmap.txt b/Documentation/devicetree/bindings/regmap/regmap.txt
index b494f8b8ef72..e98a9652ccc8 100644
--- a/Documentation/devicetree/bindings/regmap/regmap.txt
+++ b/Documentation/devicetree/bindings/regmap/regmap.txt
@@ -5,15 +5,18 @@ Index Device Endianness properties
5--------------------------------------------------- 5---------------------------------------------------
61 BE 'big-endian' 61 BE 'big-endian'
72 LE 'little-endian' 72 LE 'little-endian'
83 Native 'native-endian'
8 9
9For one device driver, which will run in different scenarios above 10For one device driver, which will run in different scenarios above
10on different SoCs using the devicetree, we need one way to simplify 11on different SoCs using the devicetree, we need one way to simplify
11this. 12this.
12 13
13Required properties: 14Optional properties:
14- {big,little}-endian: these are boolean properties, if absent 15- {big,little,native}-endian: these are boolean properties, if absent
15 meaning that the CPU and the Device are in the same endianness mode, 16 then the implementation will choose a default based on the device
16 these properties are for register values and all the buffers only. 17 being controlled. These properties are for register values and all
18 the buffers only. Native endian means that the CPU and device have
19 the same endianness.
17 20
18Examples: 21Examples:
19Scenario 1 : CPU in LE mode & device in LE mode. 22Scenario 1 : CPU in LE mode & device in LE mode.
diff --git a/drivers/base/regmap/regmap.c b/drivers/base/regmap/regmap.c
index ee54e841de4a..343263449aff 100644
--- a/drivers/base/regmap/regmap.c
+++ b/drivers/base/regmap/regmap.c
@@ -557,6 +557,8 @@ enum regmap_endian regmap_get_val_endian(struct device *dev,
557 endian = REGMAP_ENDIAN_BIG; 557 endian = REGMAP_ENDIAN_BIG;
558 else if (of_property_read_bool(np, "little-endian")) 558 else if (of_property_read_bool(np, "little-endian"))
559 endian = REGMAP_ENDIAN_LITTLE; 559 endian = REGMAP_ENDIAN_LITTLE;
560 else if (of_property_read_bool(np, "native-endian"))
561 endian = REGMAP_ENDIAN_NATIVE;
560 562
561 /* If the endianness was specified in DT, use that */ 563 /* If the endianness was specified in DT, use that */
562 if (endian != REGMAP_ENDIAN_DEFAULT) 564 if (endian != REGMAP_ENDIAN_DEFAULT)