regmap_update_bits is a three-in-one function. Its prototype is as follows:
int regmap_update_bits(struct regmap *map, unsigned int reg, unsigned int mask, unsigned int val)
It performs a read/modify/write cycle on the register map. It is a wrapper of _regmap_update_bits, which looks as follows:
static int _regmap_update_bits(struct regmap *map, unsigned int reg, unsigned int mask, unsigned int val, bool *change) { int ret; unsigned int tmp, orig; ret = _regmap_read(map, reg, &orig); if (ret != 0) return ret; tmp = orig& ~mask; tmp |= val & mask; if (tmp != orig) { ret = _regmap_write(map, reg, tmp); *change = true; } else { *change = false; } return ret; }
This way, bits you need to update must be set to