Skip to content

Commit

Permalink
regmap: Merge redundant handling in regmap_bulk_write
Browse files Browse the repository at this point in the history
The handling for the first two cases in regmap_bulk_write is
essentially identical. The first case is just a better implementation of
the second, supporting 8 byte registers and doing the locking manually to
avoid bouncing the lock for each register. Drop some redundant code by
removing the second of these cases and allowing both situations to be
handled by the same code.

Signed-off-by: Charles Keepax <[email protected]>
Signed-off-by: Mark Brown <[email protected]>
  • Loading branch information
charleskeepax authored and broonie committed Feb 26, 2018
1 parent 364e378 commit fb44f3c
Showing 1 changed file with 3 additions and 36 deletions.
39 changes: 3 additions & 36 deletions drivers/base/regmap/regmap.c
Original file line number Diff line number Diff line change
Expand Up @@ -1965,17 +1965,10 @@ int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
return -EINVAL;

/*
* Some devices don't support bulk write, for
* them we have a series of single write operations in the first two if
* blocks.
*
* The first if block is used for memory mapped io. It does not allow
* val_bytes of 3 for example.
* The second one is for busses that do not provide raw I/O.
* The third one is used for busses which do not have these limitations
* and can write arbitrary value lengths.
* Some devices don't support bulk write, for them we have a series of
* single write operations.
*/
if (!map->bus) {
if (!map->bus || !map->format.parse_inplace) {
map->lock(map->lock_arg);
for (i = 0; i < val_count; i++) {
unsigned int ival;
Expand Down Expand Up @@ -2008,32 +2001,6 @@ int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
}
out:
map->unlock(map->lock_arg);
} else if (map->bus && !map->format.parse_inplace) {
const u8 *u8 = val;
const u16 *u16 = val;
const u32 *u32 = val;
unsigned int ival;

for (i = 0; i < val_count; i++) {
switch (map->format.val_bytes) {
case 4:
ival = u32[i];
break;
case 2:
ival = u16[i];
break;
case 1:
ival = u8[i];
break;
default:
return -EINVAL;
}

ret = regmap_write(map, reg + regmap_get_offset(map, i),
ival);
if (ret)
return ret;
}
} else {
void *wval;

Expand Down

0 comments on commit fb44f3c

Please sign in to comment.