2020/11/17

regmap, 有關沒對齊的 reg, value bits 的 i2c transfer function.

regmap.c 中有...
    switch (config->reg_bits + map->reg_shift) {

    ...
    
    case 7:
        switch (config->val_bits) {
        case 9:
            map->format.format_write = regmap_format_7_9_write;
            break;
然後
static void regmap_format_7_9_write(struct regmap *map,
                    unsigned int reg, unsigned int val)
{
    __be16 *out = map->work_buf;
    *out = cpu_to_be16((reg << 9) | val);
}


所以wm8974 的 code:
static const struct regmap_config wm8974_regmap = {
    .reg_bits = 7,
    .val_bits = 9,

的確可以送出 follow wm8974 奇怪 protocol 的格式。

沒有留言:

張貼留言