Lines Matching full:mixer

98 	vfree(chip->mixer.array_saved);  in lola_free_mixer()
113 dev_dbg(chip->card->dev, "No valid mixer widget\n"); in lola_init_mixer_widget()
117 chip->mixer.nid = nid; in lola_init_mixer_widget()
118 chip->mixer.caps = val; in lola_init_mixer_widget()
119 chip->mixer.array = (struct lola_mixer_array __iomem *) in lola_init_mixer_widget()
122 /* reserve memory to copy mixer data for sleep mode transitions */ in lola_init_mixer_widget()
123 chip->mixer.array_saved = vmalloc(sizeof(struct lola_mixer_array)); in lola_init_mixer_widget()
124 if (!chip->mixer.array_saved) in lola_init_mixer_widget()
127 /* mixer matrix sources are physical input data and play streams */ in lola_init_mixer_widget()
128 chip->mixer.src_stream_outs = chip->pcm[PLAY].num_streams; in lola_init_mixer_widget()
129 chip->mixer.src_phys_ins = chip->pin[CAPT].num_pins; in lola_init_mixer_widget()
131 /* mixer matrix destinations are record streams and physical output */ in lola_init_mixer_widget()
132 chip->mixer.dest_stream_ins = chip->pcm[CAPT].num_streams; in lola_init_mixer_widget()
133 chip->mixer.dest_phys_outs = chip->pin[PLAY].num_pins; in lola_init_mixer_widget()
135 /* mixer matrix may have unused areas between PhysIn and in lola_init_mixer_widget()
138 chip->mixer.src_stream_out_ofs = chip->mixer.src_phys_ins + in lola_init_mixer_widget()
140 chip->mixer.dest_phys_out_ofs = chip->mixer.dest_stream_ins + in lola_init_mixer_widget()
191 if (chip->mixer.src_stream_out_ofs > MAX_AUDIO_INOUT_COUNT || in lola_init_mixer_widget()
192 chip->mixer.dest_phys_out_ofs > MAX_STREAM_IN_COUNT) { in lola_init_mixer_widget()
193 dev_err(chip->card->dev, "Invalid mixer widget size\n"); in lola_init_mixer_widget()
197 chip->mixer.src_mask = ((1U << chip->mixer.src_phys_ins) - 1) | in lola_init_mixer_widget()
198 (((1U << chip->mixer.src_stream_outs) - 1) in lola_init_mixer_widget()
199 << chip->mixer.src_stream_out_ofs); in lola_init_mixer_widget()
200 chip->mixer.dest_mask = ((1U << chip->mixer.dest_stream_ins) - 1) | in lola_init_mixer_widget()
201 (((1U << chip->mixer.dest_phys_outs) - 1) in lola_init_mixer_widget()
202 << chip->mixer.dest_phys_out_ofs); in lola_init_mixer_widget()
204 dev_dbg(chip->card->dev, "Mixer src_mask=%x, dest_mask=%x\n", in lola_init_mixer_widget()
205 chip->mixer.src_mask, chip->mixer.dest_mask); in lola_init_mixer_widget()
215 if (!(chip->mixer.src_mask & (1 << id))) in lola_mixer_set_src_gain()
217 oldval = val = readl(&chip->mixer.array->src_gain_enable); in lola_mixer_set_src_gain()
224 (gain == readw(&chip->mixer.array->src_gain[id]))) in lola_mixer_set_src_gain()
230 writew(gain, &chip->mixer.array->src_gain[id]); in lola_mixer_set_src_gain()
231 writel(val, &chip->mixer.array->src_gain_enable); in lola_mixer_set_src_gain()
234 return lola_codec_write(chip, chip->mixer.nid, in lola_mixer_set_src_gain()
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)) || in lola_mixer_set_mapping_gain()
277 !(chip->mixer.dest_mask & (1 << dest))) in lola_mixer_set_mapping_gain()
280 writew(gain, &chip->mixer.array->dest_mix_gain[dest][src]); in lola_mixer_set_mapping_gain()
281 val = readl(&chip->mixer.array->dest_mix_gain_enable[dest]); in lola_mixer_set_mapping_gain()
286 writel(val, &chip->mixer.array->dest_mix_gain_enable[dest]); in lola_mixer_set_mapping_gain()
288 return lola_codec_write(chip, chip->mixer.nid, LOLA_VERB_SET_MIX_GAIN, in lola_mixer_set_mapping_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,
415 /* clear all mixer matrix settings */ in init_mixer_values()
416 memset_io(chip->mixer.array, 0, sizeof(*chip->mixer.array)); in init_mixer_values()
418 for (i = 0; i < chip->mixer.dest_stream_ins; i++) in init_mixer_values()
419 lola_codec_write(chip, chip->mixer.nid, in init_mixer_values()
423 for (i = 0; i < chip->mixer.dest_phys_outs; i++) in init_mixer_values()
424 lola_codec_write(chip, chip->mixer.nid, in init_mixer_values()
426 chip->mixer.dest_phys_out_ofs + i, 0); in init_mixer_values()
429 for (i = 0; i < chip->mixer.src_phys_ins; i++) in init_mixer_values()
433 for (i = 0; i < chip->mixer.src_stream_outs; i++) in init_mixer_values()
435 i + chip->mixer.src_stream_out_ofs, in init_mixer_values()
438 for (i = 0; i < chip->mixer.dest_stream_ins; i++) { in init_mixer_values()
439 int src = i % chip->mixer.src_phys_ins; in init_mixer_values()
446 for (i = 0; i < chip->mixer.src_stream_outs; i++) { in init_mixer_values()
447 int src = chip->mixer.src_stream_out_ofs + i; in init_mixer_values()
448 int dst = chip->mixer.dest_phys_out_ofs + in init_mixer_values()
449 i % chip->mixer.dest_phys_outs; in init_mixer_values()
456 * analog mixer control element
616 * src gain mixer
638 mask = readl(&chip->mixer.array->src_gain_enable); in lola_src_gain_get()
642 if (!(chip->mixer.src_mask & (1 << idx))) in lola_src_gain_get()
645 val = readw(&chip->mixer.array->src_gain[idx]) + 1; in lola_src_gain_get()
697 * destination gain (matrix-like) mixer
721 mask = readl(&chip->mixer.array->dest_mix_gain_enable[dst]);
725 if (!(chip->mixer.src_mask & (1 << src)))
728 val = readw(&chip->mixer.array->dest_mix_gain[dst][src]) + 1;
801 err = create_src_gain_mixer(chip, chip->mixer.src_phys_ins, 0, in lola_create_mixer()
805 err = create_src_gain_mixer(chip, chip->mixer.src_stream_outs, in lola_create_mixer()
806 chip->mixer.src_stream_out_ofs, in lola_create_mixer()
811 /* FIXME: buggy mixer matrix handling */ in lola_create_mixer()
813 chip->mixer.src_phys_ins, 0, in lola_create_mixer()
814 chip->mixer.dest_stream_ins, 0, in lola_create_mixer()
819 chip->mixer.src_stream_outs, in lola_create_mixer()
820 chip->mixer.src_stream_out_ofs, in lola_create_mixer()
821 chip->mixer.dest_stream_ins, 0, in lola_create_mixer()
826 chip->mixer.src_phys_ins, 0, in lola_create_mixer()
827 chip->mixer.dest_phys_outs, in lola_create_mixer()
828 chip->mixer.dest_phys_out_ofs, in lola_create_mixer()
833 chip->mixer.src_stream_outs, in lola_create_mixer()
834 chip->mixer.src_stream_out_ofs, in lola_create_mixer()
835 chip->mixer.dest_phys_outs, in lola_create_mixer()
836 chip->mixer.dest_phys_out_ofs, in lola_create_mixer()