• C
    regmap: Don't use format_val in regmap_bulk_read · 9ae27a8d
    Charles Keepax 提交于
    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: 15b8d2c4 ("regmap: Fix regmap_bulk_read in BE mode")
    Reported-by: NDavid Rhodes <david.rhodes@cirrus.com>
    Signed-off-by: NCharles Keepax <ckeepax@opensource.cirrus.com>
    Signed-off-by: NMark Brown <broonie@kernel.org>
    9ae27a8d
regmap.c 71.8 KB