核心3.1引入一套新的api regmap,目的是提取出關於i2c spi irq等相關註冊、使能以及讀寫的公共部分,以提高**的可重用性,並且使得在使用如上核心基礎元件時變得更為簡單易用。
struct regmap_config 結構體代表乙個裝置的暫存器配置資訊,在做 regmap 初始化時,驅動就需要把這個結構體傳給 regmap。這個結構體的定義在 include/linux/regmap.h,其中包含該裝置的暫存器數量,暫存器位寬,快取型別,讀寫屬性等:
struct regmap_config ;
這一層是直接和驅動對接的。regmap 根據傳進來的 regmap_config 初始化對應的快取和匯流排操作介面,驅動就可以正常呼叫 regmap_write 和 regmap_read 函式。
regmap_init_i2c(struct i2c_client *i2c, struct regmap_config *config);
regmap_init_spi(struct spi_device *spi, strcut regmap_config *config);
regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, int irq_base, struct regmap_irq_chip *chip, struct regmap_irq_chip_data **data);
前兩個是用來關聯i2c或者spi裝置和regmap_config的,第三個用來在關聯後的regmap上註冊 irq
在初始化好regmap之後,就可以呼叫regmap提供的read/write/update等操作了:
regmap_write(struct regmap *map, int reg, int val); // 向reg寫入val
regmap_raw_write(struct regmap *map, int reg, void *val, size_t val_len); // 向reg寫入指定長度的資料,資料存放在val中
regmap_read(struct regmap *map, int reg, int *val); // 讀取reg的資料到val中
regmap_raw_read(struct regmap *map, int reg, void *val, size_t val_len); // 讀取reg中指定長度的資料
regmap_bulk_read(struct regmap *map, int reg, void *val, size_t val_count); // 讀取從reg開始之後val_count個暫存器的資料到val中
regmap_update_bits(struct regmap *map, int reg, int mask, int val); // 更新reg暫存器中mask指定的位
regcache_cache_bypass(arizona->regmap, true); // 設定讀寫暫存器不通過cache模式而是bypass模式,讀寫立即生效,一般在audio等確保時序性驅動中用到
regmap_exit(struct regmap *map);
regmap使用介紹
核心3.1引入一套新的api regmap,目的是提取出關於i2c spi irq等相關註冊 使能以及讀寫的公共部分,以提高 的可重用性,並且使得在使用如上核心基礎元件時變得更為簡單易用。0 基礎結構struct regmap config 1 初始化regmap regmap init i2c s...
regmap使用介紹
核心3.1引入一套新的api regmap,目的是提取出關於i2c spi irq等相關註冊 使能以及讀寫的公共部分,以提高 的可重用性,並且使得在使用如上核心基礎元件時變得更為簡單易用。0 基礎結構 struct regmap config 1 初始化regmap regmap init i2c ...
regmap使用介紹
核心3.1引入一套新的api regmap,目的是提取出關於i2c spi irq等相關註冊 使能以及讀寫的公共部分,以提高 的可重用性,並且使得在使用如上核心基礎元件時變得更為簡單易用。0 基礎結構 struct regmap config 初始化regmap regmap init i2c st...