regmap_update_bits function

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

Get Linux Device Drivers Development now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.