Lines Matching refs:reg
37 #define get_verb(reg) (((reg) >> 8) & 0xfff) argument
39 static bool hda_volatile_reg(struct device *dev, unsigned int reg) in hda_volatile_reg() argument
42 unsigned int verb = get_verb(reg); in hda_volatile_reg()
66 static bool hda_writeable_reg(struct device *dev, unsigned int reg) in hda_writeable_reg() argument
69 unsigned int verb = get_verb(reg); in hda_writeable_reg()
115 static bool hda_readable_reg(struct device *dev, unsigned int reg) in hda_readable_reg() argument
118 unsigned int verb = get_verb(reg); in hda_readable_reg()
137 return hda_writeable_reg(dev, reg); in hda_readable_reg()
148 static bool is_stereo_amp_verb(unsigned int reg) in is_stereo_amp_verb() argument
150 if (((reg >> 8) & 0x700) != AC_VERB_SET_AMP_GAIN_MUTE) in is_stereo_amp_verb()
152 return (reg & (AC_AMP_SET_LEFT | AC_AMP_SET_RIGHT)) == in is_stereo_amp_verb()
158 unsigned int reg, unsigned int *val) in hda_reg_read_stereo_amp() argument
163 reg &= ~(AC_AMP_SET_LEFT | AC_AMP_SET_RIGHT); in hda_reg_read_stereo_amp()
164 err = snd_hdac_exec_verb(codec, reg | AC_AMP_GET_LEFT, 0, &left); in hda_reg_read_stereo_amp()
167 err = snd_hdac_exec_verb(codec, reg | AC_AMP_GET_RIGHT, 0, &right); in hda_reg_read_stereo_amp()
176 unsigned int reg, unsigned int val) in hda_reg_write_stereo_amp() argument
182 if (reg & AC_AMP_GET_OUTPUT) in hda_reg_write_stereo_amp()
185 verb |= AC_AMP_SET_INPUT | ((reg & 0xf) << 8); in hda_reg_write_stereo_amp()
186 reg = (reg & ~0xfffff) | verb; in hda_reg_write_stereo_amp()
191 reg |= AC_AMP_SET_LEFT | AC_AMP_SET_RIGHT; in hda_reg_write_stereo_amp()
192 return snd_hdac_exec_verb(codec, reg | left, 0, NULL); in hda_reg_write_stereo_amp()
195 err = snd_hdac_exec_verb(codec, reg | AC_AMP_SET_LEFT | left, 0, NULL); in hda_reg_write_stereo_amp()
198 err = snd_hdac_exec_verb(codec, reg | AC_AMP_SET_RIGHT | right, 0, NULL); in hda_reg_write_stereo_amp()
205 static int hda_reg_read_coef(struct hdac_device *codec, unsigned int reg, in hda_reg_read_coef() argument
214 verb = (reg & ~0xfff00) | (AC_VERB_SET_COEF_INDEX << 8); in hda_reg_read_coef()
218 verb = (reg & ~0xfffff) | (AC_VERB_GET_COEF_INDEX << 8); in hda_reg_read_coef()
223 static int hda_reg_write_coef(struct hdac_device *codec, unsigned int reg, in hda_reg_write_coef() argument
232 verb = (reg & ~0xfff00) | (AC_VERB_SET_COEF_INDEX << 8); in hda_reg_write_coef()
236 verb = (reg & ~0xfffff) | (AC_VERB_GET_COEF_INDEX << 8) | in hda_reg_write_coef()
241 static int hda_reg_read(void *context, unsigned int reg, unsigned int *val) in hda_reg_read() argument
244 int verb = get_verb(reg); in hda_reg_read()
253 reg |= (codec->addr << 28); in hda_reg_read()
254 if (is_stereo_amp_verb(reg)) { in hda_reg_read()
255 err = hda_reg_read_stereo_amp(codec, reg, val); in hda_reg_read()
259 err = hda_reg_read_coef(codec, reg, val); in hda_reg_read()
263 reg &= ~AC_AMP_FAKE_MUTE; in hda_reg_read()
265 err = snd_hdac_exec_verb(codec, reg, 0, val); in hda_reg_read()
280 static int hda_reg_write(void *context, unsigned int reg, unsigned int val) in hda_reg_write() argument
290 reg &= ~0x00080000U; /* drop GET bit */ in hda_reg_write()
291 reg |= (codec->addr << 28); in hda_reg_write()
292 verb = get_verb(reg); in hda_reg_write()
300 if (is_stereo_amp_verb(reg)) { in hda_reg_write()
301 err = hda_reg_write_stereo_amp(codec, reg, val); in hda_reg_write()
306 err = hda_reg_write_coef(codec, reg, val); in hda_reg_write()
312 if ((reg & AC_AMP_FAKE_MUTE) && (val & AC_AMP_MUTE)) in hda_reg_write()
315 if (reg & AC_AMP_GET_LEFT) in hda_reg_write()
319 if (reg & AC_AMP_GET_OUTPUT) { in hda_reg_write()
323 verb |= reg & 0xf; in hda_reg_write()
341 reg &= ~0xfffff; in hda_reg_write()
342 reg |= (verb + i) << 8 | ((val >> (8 * i)) & 0xff); in hda_reg_write()
343 err = snd_hdac_exec_verb(codec, reg, 0, NULL); in hda_reg_write()
426 static int reg_raw_write(struct hdac_device *codec, unsigned int reg, in reg_raw_write() argument
433 err = hda_reg_write(codec, reg, val); in reg_raw_write()
435 err = regmap_write(codec->regmap, reg, val); in reg_raw_write()
460 int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_write_raw() argument
463 return CALL_RAW_FUNC(codec, reg_raw_write(codec, reg, val)); in snd_hdac_regmap_write_raw()
467 static int reg_raw_read(struct hdac_device *codec, unsigned int reg, in reg_raw_read() argument
474 err = hda_reg_read(codec, reg, val); in reg_raw_read()
476 err = regmap_read(codec->regmap, reg, val); in reg_raw_read()
482 unsigned int reg, unsigned int *val, in __snd_hdac_regmap_read_raw() argument
485 return CALL_RAW_FUNC(codec, reg_raw_read(codec, reg, val, uncached)); in __snd_hdac_regmap_read_raw()
496 int snd_hdac_regmap_read_raw(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_read_raw() argument
499 return __snd_hdac_regmap_read_raw(codec, reg, val, false); in snd_hdac_regmap_read_raw()
507 unsigned int reg, unsigned int *val) in snd_hdac_regmap_read_raw_uncached() argument
509 return __snd_hdac_regmap_read_raw(codec, reg, val, true); in snd_hdac_regmap_read_raw_uncached()
512 static int reg_raw_update(struct hdac_device *codec, unsigned int reg, in reg_raw_update() argument
521 err = regmap_update_bits_check(codec->regmap, reg, mask, val, in reg_raw_update()
526 err = hda_reg_read(codec, reg, &orig); in reg_raw_update()
531 err = hda_reg_write(codec, reg, val); in reg_raw_update()
550 int snd_hdac_regmap_update_raw(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_update_raw() argument
553 return CALL_RAW_FUNC(codec, reg_raw_update(codec, reg, mask, val)); in snd_hdac_regmap_update_raw()
557 static int reg_raw_update_once(struct hdac_device *codec, unsigned int reg, in reg_raw_update_once() argument
564 return reg_raw_update(codec, reg, mask, val); in reg_raw_update_once()
568 err = regmap_read(codec->regmap, reg, &orig); in reg_raw_update_once()
571 err = regmap_update_bits(codec->regmap, reg, mask, val); in reg_raw_update_once()
587 int snd_hdac_regmap_update_raw_once(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_update_raw_once() argument
590 return CALL_RAW_FUNC(codec, reg_raw_update_once(codec, reg, mask, val)); in snd_hdac_regmap_update_raw_once()