3.10版本开始出现了regmap的接口,这个regmap将i2c、spi、mmio、irq都抽象出统一的接口regmap_read、regmap_write、regmap_update_bits等接口
例如对于i2c接口
devm_regmap_init_i2c(i2c, ®map_i2c);或者使用
devm_regmap_init(&i2c->dev, ®map_i2c, &i2c->dev, config)
|
regmap_init(struct device *dev, struct regmap_bus *bus, void *bus_content, struct regmap_config *config);
1)注册方法regmap_bus和对象i2c:
通过把struct regmap_bus regmap_i2c和i2c->dev注册到regmap模块中去,而regmap_bus中已经实现了read和write函数(调用的就是i2c_master_send与i2c_transfer)
2)使用注册的对象和方法
当调用regmap_read或者regmap_write的时候,这两个函数会取出struct regmap中的content即i2c,并调用之前注册的regmap_bus中的read和write函数来实现读和写。
regmap_update_bit内部调用了regmap_read和regmap_write