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

Commit a06c488d authored by Mark Brown's avatar Mark Brown
Browse files

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: default avatarMark Brown <broonie@kernel.org>
parent 92e963f5
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -5,15 +5,18 @@ Index Device Endianness properties
---------------------------------------------------
1         BE         'big-endian'
2         LE         'little-endian'
3	  Native     'native-endian'

For one device driver, which will run in different scenarios above
on different SoCs using the devicetree, we need one way to simplify
this.

Required properties:
- {big,little}-endian: these are boolean properties, if absent
  meaning that the CPU and the Device are in the same endianness mode,
  these properties are for register values and all the buffers only.
Optional properties:
- {big,little,native}-endian: these are boolean properties, if absent
  then the implementation will choose a default based on the device
  being controlled.  These properties are for register values and all
  the buffers only.  Native endian means that the CPU and device have
  the same endianness.

Examples:
Scenario 1 : CPU in LE mode & device in LE mode.
+2 −0
Original line number Diff line number Diff line
@@ -557,6 +557,8 @@ enum regmap_endian regmap_get_val_endian(struct device *dev,
			endian = REGMAP_ENDIAN_BIG;
		else if (of_property_read_bool(np, "little-endian"))
			endian = REGMAP_ENDIAN_LITTLE;
		else if (of_property_read_bool(np, "native-endian"))
			endian = REGMAP_ENDIAN_NATIVE;

		/* If the endianness was specified in DT, use that */
		if (endian != REGMAP_ENDIAN_DEFAULT)