Lines Matching refs:mixer

98 	vfree(chip->mixer.array_saved);
113 dev_dbg(chip->card->dev, "No valid mixer widget\n");
117 chip->mixer.nid = nid;
118 chip->mixer.caps = val;
119 chip->mixer.array = (struct lola_mixer_array __iomem *)
122 /* reserve memory to copy mixer data for sleep mode transitions */
123 chip->mixer.array_saved = vmalloc(sizeof(struct lola_mixer_array));
124 if (!chip->mixer.array_saved)
127 /* mixer matrix sources are physical input data and play streams */
128 chip->mixer.src_stream_outs = chip->pcm[PLAY].num_streams;
129 chip->mixer.src_phys_ins = chip->pin[CAPT].num_pins;
131 /* mixer matrix destinations are record streams and physical output */
132 chip->mixer.dest_stream_ins = chip->pcm[CAPT].num_streams;
133 chip->mixer.dest_phys_outs = chip->pin[PLAY].num_pins;
135 /* mixer matrix may have unused areas between PhysIn and
138 chip->mixer.src_stream_out_ofs = chip->mixer.src_phys_ins +
140 chip->mixer.dest_phys_out_ofs = chip->mixer.dest_stream_ins +
191 if (chip->mixer.src_stream_out_ofs > MAX_AUDIO_INOUT_COUNT ||
192 chip->mixer.dest_phys_out_ofs > MAX_STREAM_IN_COUNT) {
193 dev_err(chip->card->dev, "Invalid mixer widget size\n");
197 chip->mixer.src_mask = ((1U << chip->mixer.src_phys_ins) - 1) |
198 (((1U << chip->mixer.src_stream_outs) - 1)
199 << chip->mixer.src_stream_out_ofs);
200 chip->mixer.dest_mask = ((1U << chip->mixer.dest_stream_ins) - 1) |
201 (((1U << chip->mixer.dest_phys_outs) - 1)
202 << chip->mixer.dest_phys_out_ofs);
205 chip->mixer.src_mask, chip->mixer.dest_mask);
215 if (!(chip->mixer.src_mask & (1 << id)))
217 oldval = val = readl(&chip->mixer.array->src_gain_enable);
224 (gain == readw(&chip->mixer.array->src_gain[id])))
230 writew(gain, &chip->mixer.array->src_gain[id]);
231 writel(val, &chip->mixer.array->src_gain_enable);
234 return lola_codec_write(chip, chip->mixer.nid,
244 if ((chip->mixer.src_mask & mask) != mask)
248 writew(*gains, &chip->mixer.array->src_gain[i]);
252 writel(mask, &chip->mixer.array->src_gain_enable);
254 if (chip->mixer.caps & LOLA_PEAK_METER_CAN_AGC_MASK) {
256 return lola_codec_write(chip, chip->mixer.nid,
262 lola_codec_write(chip, chip->mixer.nid,
276 if (!(chip->mixer.src_mask & (1 << src)) ||
277 !(chip->mixer.dest_mask & (1 << dest)))
280 writew(gain, &chip->mixer.array->dest_mix_gain[dest][src]);
281 val = readl(&chip->mixer.array->dest_mix_gain_enable[dest]);
286 writel(val, &chip->mixer.array->dest_mix_gain_enable[dest]);
288 return lola_codec_write(chip, chip->mixer.nid, LOLA_VERB_SET_MIX_GAIN,
298 if (!(chip->mixer.dest_mask & (1 << id)) ||
299 (chip->mixer.src_mask & mask) != mask)
303 writew(*gains, &chip->mixer.array->dest_mix_gain[id][i]);
307 writel(mask, &chip->mixer.array->dest_mix_gain_enable[id]);
310 return lola_codec_write(chip, chip->mixer.nid,
342 if (chip->mixer.array_saved) {
343 /* store contents of mixer array */
344 memcpy_fromio(chip->mixer.array_saved, chip->mixer.array,
345 sizeof(*chip->mixer.array));
355 if (chip->mixer.array_saved) {
356 /* restore contents of mixer array */
357 memcpy_toio(chip->mixer.array, chip->mixer.array_saved,
358 sizeof(*chip->mixer.array));
362 for (i = 0; i < chip->mixer.src_phys_ins; i++)
363 lola_codec_write(chip, chip->mixer.nid,
366 for (i = 0; i < chip->mixer.src_stream_outs; i++)
367 lola_codec_write(chip, chip->mixer.nid,
369 chip->mixer.src_stream_out_ofs + i, 0);
370 for (i = 0; i < chip->mixer.dest_stream_ins; i++)
371 lola_codec_write(chip, chip->mixer.nid,
374 for (i = 0; i < chip->mixer.dest_phys_outs; i++)
375 lola_codec_write(chip, chip->mixer.nid,
377 chip->mixer.dest_phys_out_ofs + i, 0);
458 /* clear all mixer matrix settings */
459 memset_io(chip->mixer.array, 0, sizeof(*chip->mixer.array));
461 for (i = 0; i < chip->mixer.dest_stream_ins; i++)
462 lola_codec_write(chip, chip->mixer.nid,
466 for (i = 0; i < chip->mixer.dest_phys_outs; i++)
467 lola_codec_write(chip, chip->mixer.nid,
469 chip->mixer.dest_phys_out_ofs + i, 0);
472 for (i = 0; i < chip->mixer.src_phys_ins; i++)
476 for (i = 0; i < chip->mixer.src_stream_outs; i++)
478 i + chip->mixer.src_stream_out_ofs,
481 for (i = 0; i < chip->mixer.dest_stream_ins; i++) {
482 int src = i % chip->mixer.src_phys_ins;
489 for (i = 0; i < chip->mixer.src_stream_outs; i++) {
490 int src = chip->mixer.src_stream_out_ofs + i;
491 int dst = chip->mixer.dest_phys_out_ofs +
492 i % chip->mixer.dest_phys_outs;
499 * analog mixer control element
659 * src gain mixer
681 mask = readl(&chip->mixer.array->src_gain_enable);
685 if (!(chip->mixer.src_mask & (1 << idx)))
688 val = readw(&chip->mixer.array->src_gain[idx]) + 1;
740 * destination gain (matrix-like) mixer
764 mask = readl(&chip->mixer.array->dest_mix_gain_enable[dst]);
768 if (!(chip->mixer.src_mask & (1 << src)))
771 val = readw(&chip->mixer.array->dest_mix_gain[dst][src]) + 1;
844 err = create_src_gain_mixer(chip, chip->mixer.src_phys_ins, 0,
848 err = create_src_gain_mixer(chip, chip->mixer.src_stream_outs,
849 chip->mixer.src_stream_out_ofs,
854 /* FIXME: buggy mixer matrix handling */
856 chip->mixer.src_phys_ins, 0,
857 chip->mixer.dest_stream_ins, 0,
862 chip->mixer.src_stream_outs,
863 chip->mixer.src_stream_out_ofs,
864 chip->mixer.dest_stream_ins, 0,
869 chip->mixer.src_phys_ins, 0,
870 chip->mixer.dest_phys_outs,
871 chip->mixer.dest_phys_out_ofs,
876 chip->mixer.src_stream_outs,
877 chip->mixer.src_stream_out_ofs,
878 chip->mixer.dest_phys_outs,
879 chip->mixer.dest_phys_out_ofs,