Lines Matching refs:codec

25 #define codec_is_running(codec)				\  argument
26 (atomic_read(&(codec)->in_pm) || \
27 !pm_runtime_suspended(&(codec)->dev))
29 #define codec_is_running(codec) true argument
36 struct hdac_device *codec = dev_to_hdac_dev(dev); in hda_volatile_reg() local
41 return !codec->cache_coef; in hda_volatile_reg()
63 struct hdac_device *codec = dev_to_hdac_dev(dev); in hda_writeable_reg() local
67 for (i = 0; i < codec->vendor_verbs.used; i++) { in hda_writeable_reg()
68 unsigned int *v = snd_array_elem(&codec->vendor_verbs, i); in hda_writeable_reg()
73 if (codec->caps_overwriting) in hda_writeable_reg()
81 return codec->cache_coef; in hda_writeable_reg()
112 struct hdac_device *codec = dev_to_hdac_dev(dev); in hda_readable_reg() local
115 if (codec->caps_overwriting) in hda_readable_reg()
152 static int hda_reg_read_stereo_amp(struct hdac_device *codec, in hda_reg_read_stereo_amp() argument
159 err = snd_hdac_exec_verb(codec, reg | AC_AMP_GET_LEFT, 0, &left); in hda_reg_read_stereo_amp()
162 err = snd_hdac_exec_verb(codec, reg | AC_AMP_GET_RIGHT, 0, &right); in hda_reg_read_stereo_amp()
170 static int hda_reg_write_stereo_amp(struct hdac_device *codec, in hda_reg_write_stereo_amp() argument
187 return snd_hdac_exec_verb(codec, reg | left, 0, NULL); in hda_reg_write_stereo_amp()
190 err = snd_hdac_exec_verb(codec, reg | AC_AMP_SET_LEFT | left, 0, NULL); in hda_reg_write_stereo_amp()
193 err = snd_hdac_exec_verb(codec, reg | AC_AMP_SET_RIGHT | right, 0, NULL); in hda_reg_write_stereo_amp()
200 static int hda_reg_read_coef(struct hdac_device *codec, unsigned int reg, in hda_reg_read_coef() argument
206 if (!codec->cache_coef) in hda_reg_read_coef()
210 err = snd_hdac_exec_verb(codec, verb, 0, NULL); in hda_reg_read_coef()
214 return snd_hdac_exec_verb(codec, verb, 0, val); in hda_reg_read_coef()
218 static int hda_reg_write_coef(struct hdac_device *codec, unsigned int reg, in hda_reg_write_coef() argument
224 if (!codec->cache_coef) in hda_reg_write_coef()
228 err = snd_hdac_exec_verb(codec, verb, 0, NULL); in hda_reg_write_coef()
233 return snd_hdac_exec_verb(codec, verb, 0, NULL); in hda_reg_write_coef()
238 struct hdac_device *codec = context; in hda_reg_read() local
242 if (!codec_is_running(codec) && verb != AC_VERB_GET_POWER_STATE) in hda_reg_read()
244 reg |= (codec->addr << 28); in hda_reg_read()
246 return hda_reg_read_stereo_amp(codec, reg, val); in hda_reg_read()
248 return hda_reg_read_coef(codec, reg, val); in hda_reg_read()
252 err = snd_hdac_exec_verb(codec, reg, 0, val); in hda_reg_read()
267 struct hdac_device *codec = context; in hda_reg_write() local
271 if (codec->caps_overwriting) in hda_reg_write()
275 reg |= (codec->addr << 28); in hda_reg_write()
278 if (!codec_is_running(codec) && verb != AC_VERB_SET_POWER_STATE) in hda_reg_write()
279 return codec->lazy_cache ? 0 : -EAGAIN; in hda_reg_write()
282 return hda_reg_write_stereo_amp(codec, reg, val); in hda_reg_write()
285 return hda_reg_write_coef(codec, reg, val); in hda_reg_write()
320 err = snd_hdac_exec_verb(codec, reg, 0, NULL); in hda_reg_write()
348 int snd_hdac_regmap_init(struct hdac_device *codec) in snd_hdac_regmap_init() argument
352 regmap = regmap_init(&codec->dev, NULL, codec, &hda_regmap_cfg); in snd_hdac_regmap_init()
355 codec->regmap = regmap; in snd_hdac_regmap_init()
356 snd_array_init(&codec->vendor_verbs, sizeof(unsigned int), 8); in snd_hdac_regmap_init()
365 void snd_hdac_regmap_exit(struct hdac_device *codec) in snd_hdac_regmap_exit() argument
367 if (codec->regmap) { in snd_hdac_regmap_exit()
368 regmap_exit(codec->regmap); in snd_hdac_regmap_exit()
369 codec->regmap = NULL; in snd_hdac_regmap_exit()
370 snd_array_free(&codec->vendor_verbs); in snd_hdac_regmap_exit()
382 int snd_hdac_regmap_add_vendor_verb(struct hdac_device *codec, in snd_hdac_regmap_add_vendor_verb() argument
385 unsigned int *p = snd_array_new(&codec->vendor_verbs); in snd_hdac_regmap_add_vendor_verb()
399 static int reg_raw_write(struct hdac_device *codec, unsigned int reg, in reg_raw_write() argument
402 if (!codec->regmap) in reg_raw_write()
403 return hda_reg_write(codec, reg, val); in reg_raw_write()
405 return regmap_write(codec->regmap, reg, val); in reg_raw_write()
416 int snd_hdac_regmap_write_raw(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_write_raw() argument
421 err = reg_raw_write(codec, reg, val); in snd_hdac_regmap_write_raw()
423 err = snd_hdac_power_up_pm(codec); in snd_hdac_regmap_write_raw()
425 err = reg_raw_write(codec, reg, val); in snd_hdac_regmap_write_raw()
426 snd_hdac_power_down_pm(codec); in snd_hdac_regmap_write_raw()
432 static int reg_raw_read(struct hdac_device *codec, unsigned int reg, in reg_raw_read() argument
435 if (!codec->regmap) in reg_raw_read()
436 return hda_reg_read(codec, reg, val); in reg_raw_read()
438 return regmap_read(codec->regmap, reg, val); in reg_raw_read()
449 int snd_hdac_regmap_read_raw(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_read_raw() argument
454 err = reg_raw_read(codec, reg, val); in snd_hdac_regmap_read_raw()
456 err = snd_hdac_power_up_pm(codec); in snd_hdac_regmap_read_raw()
458 err = reg_raw_read(codec, reg, val); in snd_hdac_regmap_read_raw()
459 snd_hdac_power_down_pm(codec); in snd_hdac_regmap_read_raw()
474 int snd_hdac_regmap_update_raw(struct hdac_device *codec, unsigned int reg, in snd_hdac_regmap_update_raw() argument
481 err = snd_hdac_regmap_read_raw(codec, reg, &orig); in snd_hdac_regmap_update_raw()
487 err = snd_hdac_regmap_write_raw(codec, reg, val); in snd_hdac_regmap_update_raw()