regmapの使用紹介

2244 ワード

カーネル3.1は、I 2 C SPI irqなどの関連登録、イネーブル化、および読み書きに関する共通部分を抽出し、コードの再利用性を向上させ、上記のカーネルベースコンポーネントを使用する際により容易に使用できるようにするための新しいAPI 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);