Lines Matching refs:ak4531
23 static void snd_ak4531_proc_init(struct snd_card *card, struct snd_ak4531 *ak4531);
31 static void snd_ak4531_dump(struct snd_ak4531 *ak4531)
36 printk(KERN_DEBUG "ak4531 0x%x: 0x%x\n",
37 idx, ak4531->regs[idx]);
73 struct snd_ak4531 *ak4531 = snd_kcontrol_chip(kcontrol);
80 mutex_lock(&ak4531->reg_mutex);
81 val = (ak4531->regs[reg] >> shift) & mask;
82 mutex_unlock(&ak4531->reg_mutex);
92 struct snd_ak4531 *ak4531 = snd_kcontrol_chip(kcontrol);
105 mutex_lock(&ak4531->reg_mutex);
106 val = (ak4531->regs[reg] & ~(mask << shift)) | val;
107 change = val != ak4531->regs[reg];
108 ak4531->write(ak4531, reg, ak4531->regs[reg] = val);
109 mutex_unlock(&ak4531->reg_mutex);
140 struct snd_ak4531 *ak4531 = snd_kcontrol_chip(kcontrol);
149 mutex_lock(&ak4531->reg_mutex);
150 left = (ak4531->regs[left_reg] >> left_shift) & mask;
151 right = (ak4531->regs[right_reg] >> right_shift) & mask;
152 mutex_unlock(&ak4531->reg_mutex);
164 struct snd_ak4531 *ak4531 = snd_kcontrol_chip(kcontrol);
182 mutex_lock(&ak4531->reg_mutex);
184 left = (ak4531->regs[left_reg] & ~((mask << left_shift) | (mask << right_shift))) | left | right;
185 change = left != ak4531->regs[left_reg];
186 ak4531->write(ak4531, left_reg, ak4531->regs[left_reg] = left);
188 left = (ak4531->regs[left_reg] & ~(mask << left_shift)) | left;
189 right = (ak4531->regs[right_reg] & ~(mask << right_shift)) | right;
190 change = left != ak4531->regs[left_reg] || right != ak4531->regs[right_reg];
191 ak4531->write(ak4531, left_reg, ak4531->regs[left_reg] = left);
192 ak4531->write(ak4531, right_reg, ak4531->regs[right_reg] = right);
194 mutex_unlock(&ak4531->reg_mutex);
215 struct snd_ak4531 *ak4531 = snd_kcontrol_chip(kcontrol);
221 mutex_lock(&ak4531->reg_mutex);
222 ucontrol->value.integer.value[0] = (ak4531->regs[reg1] >> left_shift) & 1;
223 ucontrol->value.integer.value[1] = (ak4531->regs[reg2] >> left_shift) & 1;
224 ucontrol->value.integer.value[2] = (ak4531->regs[reg1] >> right_shift) & 1;
225 ucontrol->value.integer.value[3] = (ak4531->regs[reg2] >> right_shift) & 1;
226 mutex_unlock(&ak4531->reg_mutex);
232 struct snd_ak4531 *ak4531 = snd_kcontrol_chip(kcontrol);
240 mutex_lock(&ak4531->reg_mutex);
241 val1 = ak4531->regs[reg1] & ~((1 << left_shift) | (1 << right_shift));
242 val2 = ak4531->regs[reg2] & ~((1 << left_shift) | (1 << right_shift));
247 change = val1 != ak4531->regs[reg1] || val2 != ak4531->regs[reg2];
248 ak4531->write(ak4531, reg1, ak4531->regs[reg1] = val1);
249 ak4531->write(ak4531, reg2, ak4531->regs[reg2] = val2);
250 mutex_unlock(&ak4531->reg_mutex);
322 static int snd_ak4531_free(struct snd_ak4531 *ak4531)
324 if (ak4531) {
325 if (ak4531->private_free)
326 ak4531->private_free(ak4531);
327 kfree(ak4531);
334 struct snd_ak4531 *ak4531 = device->device_data;
335 return snd_ak4531_free(ak4531);
373 struct snd_ak4531 *ak4531;
382 ak4531 = kzalloc(sizeof(*ak4531), GFP_KERNEL);
383 if (ak4531 == NULL)
385 *ak4531 = *_ak4531;
386 mutex_init(&ak4531->reg_mutex);
388 snd_ak4531_free(ak4531);
392 ak4531->write(ak4531, AK4531_RESET, 0x03); /* no RST, PD */
394 ak4531->write(ak4531, AK4531_CLOCK, 0x00); /* CODEC ADC and CODEC DAC use {LR,B}CLK2 and run off LRCLK2 PLL */
398 ak4531->write(ak4531, idx, ak4531->regs[idx] = snd_ak4531_initial_map[idx]); /* recording source is mixer */
401 if ((err = snd_ctl_add(card, snd_ctl_new1(&snd_ak4531_controls[idx], ak4531))) < 0) {
402 snd_ak4531_free(ak4531);
406 snd_ak4531_proc_init(card, ak4531);
407 if ((err = snd_device_new(card, SNDRV_DEV_CODEC, ak4531, &ops)) < 0) {
408 snd_ak4531_free(ak4531);
413 snd_ak4531_dump(ak4531);
416 *rak4531 = ak4531;
424 void snd_ak4531_suspend(struct snd_ak4531 *ak4531)
427 ak4531->write(ak4531, AK4531_LMASTER, 0x9f);
428 ak4531->write(ak4531, AK4531_RMASTER, 0x9f);
430 ak4531->write(ak4531, AK4531_RESET, 0x01);
433 void snd_ak4531_resume(struct snd_ak4531 *ak4531)
438 ak4531->write(ak4531, AK4531_RESET, 0x03);
440 ak4531->write(ak4531, AK4531_CLOCK, 0x00);
445 ak4531->write(ak4531, idx, ak4531->regs[idx]);
457 struct snd_ak4531 *ak4531 = entry->private_data;
462 ak4531->regs[AK4531_AD_IN] & 1 ? "external" : "mixer",
463 ak4531->regs[AK4531_MIC_GAIN] & 1 ? "+30dB" : "+0dB");
467 snd_ak4531_proc_init(struct snd_card *card, struct snd_ak4531 *ak4531)
469 snd_card_ro_proc_new(card, "ak4531", ak4531, snd_ak4531_proc_read);