Lines Matching defs:reg
36 #define get_verb(reg) (((reg) >> 8) & 0xfff)
38 static bool hda_volatile_reg(struct device *dev, unsigned int reg)
41 unsigned int verb = get_verb(reg);
65 static bool hda_writeable_reg(struct device *dev, unsigned int reg)
68 unsigned int verb = get_verb(reg);
114 static bool hda_readable_reg(struct device *dev, unsigned int reg)
117 unsigned int verb = get_verb(reg);
136 return hda_writeable_reg(dev, reg);
147 static bool is_stereo_amp_verb(unsigned int reg)
149 if (((reg >> 8) & 0x700) != AC_VERB_SET_AMP_GAIN_MUTE)
151 return (reg & (AC_AMP_SET_LEFT | AC_AMP_SET_RIGHT)) ==
157 unsigned int reg, unsigned int *val)
162 reg &= ~(AC_AMP_SET_LEFT | AC_AMP_SET_RIGHT);
163 err = snd_hdac_exec_verb(codec, reg | AC_AMP_GET_LEFT, 0, &left);
166 err = snd_hdac_exec_verb(codec, reg | AC_AMP_GET_RIGHT, 0, &right);
175 unsigned int reg, unsigned int val)
181 if (reg & AC_AMP_GET_OUTPUT)
184 verb |= AC_AMP_SET_INPUT | ((reg & 0xf) << 8);
185 reg = (reg & ~0xfffff) | verb;
190 reg |= AC_AMP_SET_LEFT | AC_AMP_SET_RIGHT;
191 return snd_hdac_exec_verb(codec, reg | left, 0, NULL);
194 err = snd_hdac_exec_verb(codec, reg | AC_AMP_SET_LEFT | left, 0, NULL);
197 err = snd_hdac_exec_verb(codec, reg | AC_AMP_SET_RIGHT | right, 0, NULL);
204 static int hda_reg_read_coef(struct hdac_device *codec, unsigned int reg,
213 verb = (reg & ~0xfff00) | (AC_VERB_SET_COEF_INDEX << 8);
217 verb = (reg & ~0xfffff) | (AC_VERB_GET_COEF_INDEX << 8);
222 static int hda_reg_write_coef(struct hdac_device *codec, unsigned int reg,
231 verb = (reg & ~0xfff00) | (AC_VERB_SET_COEF_INDEX << 8);
235 verb = (reg & ~0xfffff) | (AC_VERB_GET_COEF_INDEX << 8) |
240 static int hda_reg_read(void *context, unsigned int reg, unsigned int *val)
243 int verb = get_verb(reg);
252 reg |= (codec->addr << 28);
253 if (is_stereo_amp_verb(reg)) {
254 err = hda_reg_read_stereo_amp(codec, reg, val);
258 err = hda_reg_read_coef(codec, reg, val);
262 reg &= ~AC_AMP_FAKE_MUTE;
264 err = snd_hdac_exec_verb(codec, reg, 0, val);
279 static int hda_reg_write(void *context, unsigned int reg, unsigned int val)
289 reg &= ~0x00080000U; /* drop GET bit */
290 reg |= (codec->addr << 28);
291 verb = get_verb(reg);
299 if (is_stereo_amp_verb(reg)) {
300 err = hda_reg_write_stereo_amp(codec, reg, val);
305 err = hda_reg_write_coef(codec, reg, val);
311 if ((reg & AC_AMP_FAKE_MUTE) && (val & AC_AMP_MUTE))
314 if (reg & AC_AMP_GET_LEFT)
318 if (reg & AC_AMP_GET_OUTPUT) {
322 verb |= reg & 0xf;
340 reg &= ~0xfffff;
341 reg |= (verb + i) << 8 | ((val >> (8 * i)) & 0xff);
342 err = snd_hdac_exec_verb(codec, reg, 0, NULL);
425 static int reg_raw_write(struct hdac_device *codec, unsigned int reg,
430 return hda_reg_write(codec, reg, val);
432 return regmap_write(codec->regmap, reg, val);
450 * @reg: pseudo register
455 int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg,
458 return CALL_RAW_FUNC(codec, reg_raw_write(codec, reg, val));
462 static int reg_raw_read(struct hdac_device *codec, unsigned int reg,
467 return hda_reg_read(codec, reg, val);
469 return regmap_read(codec->regmap, reg, val);
473 unsigned int reg, unsigned int *val,
476 return CALL_RAW_FUNC(codec, reg_raw_read(codec, reg, val, uncached));
482 * @reg: pseudo register
487 int snd_hdac_regmap_read_raw(struct hdac_device *codec, unsigned int reg,
490 return __snd_hdac_regmap_read_raw(codec, reg, val, false);
498 unsigned int reg, unsigned int *val)
500 return __snd_hdac_regmap_read_raw(codec, reg, val, true);
503 static int reg_raw_update(struct hdac_device *codec, unsigned int reg,
512 err = regmap_update_bits_check(codec->regmap, reg, mask, val,
517 err = hda_reg_read(codec, reg, &orig);
522 err = hda_reg_write(codec, reg, val);
534 * @reg: pseudo register
540 int snd_hdac_regmap_update_raw(struct hdac_device *codec, unsigned int reg,
543 return CALL_RAW_FUNC(codec, reg_raw_update(codec, reg, mask, val));
547 static int reg_raw_update_once(struct hdac_device *codec, unsigned int reg,
551 return reg_raw_update(codec, reg, mask, val);
555 if (!regcache_reg_cached(codec->regmap, reg))
556 return regmap_update_bits(codec->regmap, reg, mask, val);
563 * @reg: pseudo register
571 int snd_hdac_regmap_update_raw_once(struct hdac_device *codec, unsigned int reg,
574 return CALL_RAW_FUNC(codec, reg_raw_update_once(codec, reg, mask, val));