regmapの使用紹介
2244 ワード
カーネル3.1は、I 2 C SPI irqなどの関連登録、イネーブル化、および読み書きに関する共通部分を抽出し、コードの再利用性を向上させ、上記のカーネルベースコンポーネントを使用する際により容易に使用できるようにするための新しいAPI regmapを導入する.
0インフラストラクチャ
1 regmapの初期化
最初の2つはi 2 cまたはspiデバイスとregmap_を関連付けるために使用されます.configの、3番目は関連付けられたregmapにirqを登録するために使用されます
2 regmapを使用してregmapを初期化した後、regmapが提供するread/write/updateなどの操作を呼び出すことができます.
3 regmapを解放する
0インフラストラクチャ
struct regmap_config {
int reg_bits; // , , I2C 8
int pad_bits; // ,
int val_bits;
bool (*writeable_reg)(struct device *dev, unsigned int reg); // ,maintain
bool (*readable_reg)(struct device *dev, unsigned int reg); // , maintain
bool (*volatile_reg)(struct device *dev, unsigned int reg); // , cache,maintain
bool (*precious_reg)(struct device *dev, unsigned int reg); // ,maintain
unsigned int max_register; // max_register:
const struct reg_default *reg_defaults;
unsigned int num_reg_defaults;
enum regcache_type cache_type;
const void *reg_defaults_raw;
unsigned int num_reg_defaults_raw;
u8 read_flag_mask;
u8 write_flag_mask;
};
1 regmapの初期化
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);
最初の2つはi 2 cまたはspiデバイスとregmap_を関連付けるために使用されます.configの、3番目は関連付けられたregmapにirqを登録するために使用されます
2 regmapを使用して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
3 regmapを解放する
regmap_exit(struct regmap *map);