Lines Matching +full:boost +full:- +full:bypass
1 // SPDX-License-Identifier: GPL-2.0-or-later
37 idx, ak4531->regs[idx]);
62 int mask = (kcontrol->private_value >> 24) & 0xff;
64 uinfo->type = mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
65 uinfo->count = 1;
66 uinfo->value.integer.min = 0;
67 uinfo->value.integer.max = mask;
74 int reg = kcontrol->private_value & 0xff;
75 int shift = (kcontrol->private_value >> 16) & 0x07;
76 int mask = (kcontrol->private_value >> 24) & 0xff;
77 int invert = (kcontrol->private_value >> 22) & 1;
80 guard(mutex)(&ak4531->reg_mutex);
81 val = (ak4531->regs[reg] >> shift) & mask;
83 val = mask - val;
85 ucontrol->value.integer.value[0] = val;
92 int reg = kcontrol->private_value & 0xff;
93 int shift = (kcontrol->private_value >> 16) & 0x07;
94 int mask = (kcontrol->private_value >> 24) & 0xff;
95 int invert = (kcontrol->private_value >> 22) & 1;
99 val = ucontrol->value.integer.value[0] & mask;
101 val = mask - val;
104 guard(mutex)(&ak4531->reg_mutex);
105 val = (ak4531->regs[reg] & ~(mask << shift)) | val;
106 change = val != ak4531->regs[reg];
107 ak4531->write(ak4531, reg, ak4531->regs[reg] = val);
127 int mask = (kcontrol->private_value >> 24) & 0xff;
129 uinfo->type = mask == 1 ? SNDRV_CTL_ELEM_TYPE_BOOLEAN : SNDRV_CTL_ELEM_TYPE_INTEGER;
130 uinfo->count = 2;
131 uinfo->value.integer.min = 0;
132 uinfo->value.integer.max = mask;
139 int left_reg = kcontrol->private_value & 0xff;
140 int right_reg = (kcontrol->private_value >> 8) & 0xff;
141 int left_shift = (kcontrol->private_value >> 16) & 0x07;
142 int right_shift = (kcontrol->private_value >> 19) & 0x07;
143 int mask = (kcontrol->private_value >> 24) & 0xff;
144 int invert = (kcontrol->private_value >> 22) & 1;
147 guard(mutex)(&ak4531->reg_mutex);
148 left = (ak4531->regs[left_reg] >> left_shift) & mask;
149 right = (ak4531->regs[right_reg] >> right_shift) & mask;
151 left = mask - left;
152 right = mask - right;
154 ucontrol->value.integer.value[0] = left;
155 ucontrol->value.integer.value[1] = right;
162 int left_reg = kcontrol->private_value & 0xff;
163 int right_reg = (kcontrol->private_value >> 8) & 0xff;
164 int left_shift = (kcontrol->private_value >> 16) & 0x07;
165 int right_shift = (kcontrol->private_value >> 19) & 0x07;
166 int mask = (kcontrol->private_value >> 24) & 0xff;
167 int invert = (kcontrol->private_value >> 22) & 1;
171 left = ucontrol->value.integer.value[0] & mask;
172 right = ucontrol->value.integer.value[1] & mask;
174 left = mask - left;
175 right = mask - right;
179 guard(mutex)(&ak4531->reg_mutex);
181 left = (ak4531->regs[left_reg] & ~((mask << left_shift) | (mask << right_shift))) | left | right;
182 change = left != ak4531->regs[left_reg];
183 ak4531->write(ak4531, left_reg, ak4531->regs[left_reg] = left);
185 left = (ak4531->regs[left_reg] & ~(mask << left_shift)) | left;
186 right = (ak4531->regs[right_reg] & ~(mask << right_shift)) | right;
187 change = left != ak4531->regs[left_reg] || right != ak4531->regs[right_reg];
188 ak4531->write(ak4531, left_reg, ak4531->regs[left_reg] = left);
189 ak4531->write(ak4531, right_reg, ak4531->regs[right_reg] = right);
202 uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
203 uinfo->count = 4;
204 uinfo->value.integer.min = 0;
205 uinfo->value.integer.max = 1;
212 int reg1 = kcontrol->private_value & 0xff;
213 int reg2 = (kcontrol->private_value >> 8) & 0xff;
214 int left_shift = (kcontrol->private_value >> 16) & 0x0f;
215 int right_shift = (kcontrol->private_value >> 24) & 0x0f;
217 guard(mutex)(&ak4531->reg_mutex);
218 ucontrol->value.integer.value[0] = (ak4531->regs[reg1] >> left_shift) & 1;
219 ucontrol->value.integer.value[1] = (ak4531->regs[reg2] >> left_shift) & 1;
220 ucontrol->value.integer.value[2] = (ak4531->regs[reg1] >> right_shift) & 1;
221 ucontrol->value.integer.value[3] = (ak4531->regs[reg2] >> right_shift) & 1;
228 int reg1 = kcontrol->private_value & 0xff;
229 int reg2 = (kcontrol->private_value >> 8) & 0xff;
230 int left_shift = (kcontrol->private_value >> 16) & 0x0f;
231 int right_shift = (kcontrol->private_value >> 24) & 0x0f;
235 guard(mutex)(&ak4531->reg_mutex);
236 val1 = ak4531->regs[reg1] & ~((1 << left_shift) | (1 << right_shift));
237 val2 = ak4531->regs[reg2] & ~((1 << left_shift) | (1 << right_shift));
238 val1 |= (ucontrol->value.integer.value[0] & 1) << left_shift;
239 val2 |= (ucontrol->value.integer.value[1] & 1) << left_shift;
240 val1 |= (ucontrol->value.integer.value[2] & 1) << right_shift;
241 val2 |= (ucontrol->value.integer.value[3] & 1) << right_shift;
242 change = val1 != ak4531->regs[reg1] || val2 != ak4531->regs[reg2];
243 ak4531->write(ak4531, reg1, ak4531->regs[reg1] = val1);
244 ak4531->write(ak4531, reg2, ak4531->regs[reg2] = val2);
248 static const DECLARE_TLV_DB_SCALE(db_scale_master, -6200, 200, 0);
249 static const DECLARE_TLV_DB_SCALE(db_scale_mono, -2800, 400, 0);
250 static const DECLARE_TLV_DB_SCALE(db_scale_input, -5000, 200, 0);
308 AK4531_DOUBLE("Mic Bypass Capture Switch", 0, AK4531_LIN_SW2, AK4531_RIN_SW2, 7, 7, 1, 0),
309 AK4531_DOUBLE("Mono1 Bypass Capture Switch", 0, AK4531_LIN_SW2, AK4531_RIN_SW2, 6, 6, 1, 0),
310 AK4531_DOUBLE("Mono2 Bypass Capture Switch", 0, AK4531_LIN_SW2, AK4531_RIN_SW2, 5, 5, 1, 0),
313 AK4531_SINGLE("Mic Boost (+30dB)", 0, AK4531_MIC_GAIN, 0, 1, 0)
319 if (ak4531->private_free)
320 ak4531->private_free(ak4531);
328 struct snd_ak4531 *ak4531 = device->device_data;
348 0x87, /* 0f: Mono-out Volume */
373 return -EINVAL;
378 return -ENOMEM;
380 mutex_init(&ak4531->reg_mutex);
386 strscpy(card->mixername, "Asahi Kasei AK4531");
387 ak4531->write(ak4531, AK4531_RESET, 0x03); /* no RST, PD */
389 ak4531->write(ak4531, AK4531_CLOCK, 0x00); /* CODEC ADC and CODEC DAC use {LR,B}CLK2 and run off LRCLK2 PLL */
393 ak4531->write(ak4531, idx, ak4531->regs[idx] = snd_ak4531_initial_map[idx]); /* recording source is mixer */
424 ak4531->write(ak4531, AK4531_LMASTER, 0x9f);
425 ak4531->write(ak4531, AK4531_RMASTER, 0x9f);
427 ak4531->write(ak4531, AK4531_RESET, 0x01);
435 ak4531->write(ak4531, AK4531_RESET, 0x03);
437 ak4531->write(ak4531, AK4531_CLOCK, 0x00);
442 ak4531->write(ak4531, idx, ak4531->regs[idx]);
454 struct snd_ak4531 *ak4531 = entry->private_data;
459 ak4531->regs[AK4531_AD_IN] & 1 ? "external" : "mixer",
460 ak4531->regs[AK4531_MIC_GAIN] & 1 ? "+30dB" : "+0dB");