regmap: Don't use format_val in regmap_bulk_read
authorCharles Keepax <ckeepax@opensource.cirrus.com>
Mon, 12 Feb 2018 18:15:46 +0000 (18:15 +0000)
committerMark Brown <broonie@kernel.org>
Tue, 13 Feb 2018 12:27:44 +0000 (12:27 +0000)
commit9ae27a8d1f3ebff09191fb8cb1341414547293b2
treeee8549ff39f7b3cb11b3aaeb5c365b371e36547f
parent7928b2cbe55b2a410a0f5c1f154610059c57b1b2
regmap: Don't use format_val in regmap_bulk_read

A bulk read can be implemented either through regmap_raw_read, or
by reading each register individually using regmap_read.  Both
regmap_read and regmap_bulk_read should return values in native
endian. In the individual case the current implementation calls
format_val to put the data into the output array, which can cause
endian issues. The regmap_read will have already converted the data
into native endian, if the hosts endian differs from the device then
format_val will switch the endian back again.

Rather than using format_val simply use the code that is called if
there is no format_val function. This code supports all cases except
24-bit but there don't appear to be any users of regmap_bulk_read for
24-bit. Additionally, it would have to be a big endian host for the
old code to actually function correctly anyway.

Fixes: 15b8d2c41fe5 ("regmap: Fix regmap_bulk_read in BE mode")
Reported-by: David Rhodes <david.rhodes@cirrus.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/base/regmap/regmap.c