Lines Matching refs:mix
198 static int tumbler_set_master_volume(struct pmac_tumbler *mix)
203 if (! mix->i2c.client)
206 if (! mix->master_switch[0])
209 left_vol = mix->master_vol[0];
214 if (! mix->master_switch[1])
217 right_vol = mix->master_vol[1];
231 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, TAS_REG_VOL, 6,
256 struct pmac_tumbler *mix = chip->mixer_data;
258 ucontrol->value.integer.value[0] = mix->master_vol[0];
259 ucontrol->value.integer.value[1] = mix->master_vol[1];
267 struct pmac_tumbler *mix = chip->mixer_data;
276 change = mix->master_vol[0] != vol[0] ||
277 mix->master_vol[1] != vol[1];
279 mix->master_vol[0] = vol[0];
280 mix->master_vol[1] = vol[1];
281 tumbler_set_master_volume(mix);
291 struct pmac_tumbler *mix = chip->mixer_data;
293 ucontrol->value.integer.value[0] = mix->master_switch[0];
294 ucontrol->value.integer.value[1] = mix->master_switch[1];
302 struct pmac_tumbler *mix = chip->mixer_data;
305 change = mix->master_switch[0] != ucontrol->value.integer.value[0] ||
306 mix->master_switch[1] != ucontrol->value.integer.value[1];
308 mix->master_switch[0] = !!ucontrol->value.integer.value[0];
309 mix->master_switch[1] = !!ucontrol->value.integer.value[1];
310 tumbler_set_master_volume(mix);
322 static int tumbler_set_drc(struct pmac_tumbler *mix)
326 if (! mix->i2c.client)
329 if (mix->drc_enable) {
331 if (mix->drc_range > TAS3001_DRC_MAX)
333 else if (mix->drc_range < 0)
336 val[1] = mix->drc_range + 0x91;
342 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, TAS_REG_DRC,
357 static int snapper_set_drc(struct pmac_tumbler *mix)
361 if (! mix->i2c.client)
364 if (mix->drc_enable)
369 if (mix->drc_range > 0xef)
371 else if (mix->drc_range < 0)
374 val[2] = mix->drc_range;
379 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, TAS_REG_DRC,
404 struct pmac_tumbler *mix;
405 mix = chip->mixer_data;
406 if (!mix)
408 ucontrol->value.integer.value[0] = mix->drc_range;
416 struct pmac_tumbler *mix;
420 mix = chip->mixer_data;
421 if (!mix)
431 change = mix->drc_range != val;
433 mix->drc_range = val;
435 tumbler_set_drc(mix);
437 snapper_set_drc(mix);
446 struct pmac_tumbler *mix;
447 mix = chip->mixer_data;
448 if (!mix)
450 ucontrol->value.integer.value[0] = mix->drc_enable;
458 struct pmac_tumbler *mix;
461 mix = chip->mixer_data;
462 if (!mix)
464 change = mix->drc_enable != ucontrol->value.integer.value[0];
466 mix->drc_enable = !!ucontrol->value.integer.value[0];
468 tumbler_set_drc(mix);
470 snapper_set_drc(mix);
488 static int tumbler_set_mono_volume(struct pmac_tumbler *mix,
495 if (! mix->i2c.client)
498 vol = mix->mono_vol[info->index];
504 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, info->reg,
530 struct pmac_tumbler *mix;
531 mix = chip->mixer_data;
532 if (!mix)
534 ucontrol->value.integer.value[0] = mix->mono_vol[info->index];
543 struct pmac_tumbler *mix;
547 mix = chip->mixer_data;
548 if (!mix)
553 change = mix->mono_vol[info->index] != vol;
555 mix->mono_vol[info->index] = vol;
556 tumbler_set_mono_volume(mix, info);
627 static int snapper_set_mix_vol1(struct pmac_tumbler *mix, int idx, int ch, int reg)
632 vol = mix->mix_vol[idx][ch];
635 mix->mix_vol[idx][ch] = vol;
639 vol = mix->mix_vol[i][ch];
644 if (i2c_smbus_write_i2c_block_data(mix->i2c.client, reg,
652 static int snapper_set_mix_vol(struct pmac_tumbler *mix, int idx)
654 if (! mix->i2c.client)
656 if (snapper_set_mix_vol1(mix, idx, 0, TAS_REG_LMIX) < 0 ||
657 snapper_set_mix_vol1(mix, idx, 1, TAS_REG_RMIX) < 0)
677 struct pmac_tumbler *mix;
678 mix = chip->mixer_data;
679 if (!mix)
681 ucontrol->value.integer.value[0] = mix->mix_vol[idx][0];
682 ucontrol->value.integer.value[1] = mix->mix_vol[idx][1];
691 struct pmac_tumbler *mix;
695 mix = chip->mixer_data;
696 if (!mix)
703 change = mix->mix_vol[idx][0] != vol[0] ||
704 mix->mix_vol[idx][1] != vol[1];
706 mix->mix_vol[idx][0] = vol[0];
707 mix->mix_vol[idx][1] = vol[1];
708 snapper_set_mix_vol(mix, idx);
725 struct pmac_tumbler *mix;
727 mix = chip->mixer_data;
728 if (!mix)
732 gp = &mix->hp_mute; break;
734 gp = &mix->amp_mute; break;
736 gp = &mix->line_mute; break;
750 struct pmac_tumbler *mix;
757 mix = chip->mixer_data;
758 if (!mix)
762 gp = &mix->hp_mute; break;
764 gp = &mix->amp_mute; break;
766 gp = &mix->line_mute; break;
780 static int snapper_set_capture_source(struct pmac_tumbler *mix)
782 if (! mix->i2c.client)
784 if (mix->capture_source)
785 mix->acs |= 2;
787 mix->acs &= ~2;
788 return i2c_smbus_write_byte_data(mix->i2c.client, TAS_REG_ACS, mix->acs);
805 struct pmac_tumbler *mix = chip->mixer_data;
807 ucontrol->value.enumerated.item[0] = mix->capture_source;
815 struct pmac_tumbler *mix = chip->mixer_data;
818 change = ucontrol->value.enumerated.item[0] != mix->capture_source;
820 mix->capture_source = !!ucontrol->value.enumerated.item[0];
821 snapper_set_capture_source(mix);
935 struct pmac_tumbler *mix = chip->mixer_data;
938 if (mix->hp_detect.addr)
939 detect |= read_audio_gpio(&mix->hp_detect);
945 struct pmac_tumbler *mix = chip->mixer_data;
948 if (mix->line_detect.addr)
949 detect |= read_audio_gpio(&mix->line_detect);
970 struct pmac_tumbler *mix;
976 mix = chip->mixer_data;
977 if (snd_BUG_ON(!mix))
988 check_mute(chip, &mix->hp_mute, 0, mix->auto_mute_notify,
990 if (lineout && mix->line_mute.addr != 0)
991 check_mute(chip, &mix->line_mute, 0, mix->auto_mute_notify,
993 if (mix->anded_reset)
995 check_mute(chip, &mix->amp_mute, !IS_G4DA, mix->auto_mute_notify,
999 check_mute(chip, &mix->amp_mute, 0, mix->auto_mute_notify,
1001 if (mix->anded_reset)
1003 check_mute(chip, &mix->hp_mute, 1, mix->auto_mute_notify,
1005 if (mix->line_mute.addr != 0)
1006 check_mute(chip, &mix->line_mute, 1, mix->auto_mute_notify,
1009 if (mix->auto_mute_notify)
1014 mix->drc_enable = ! (headphone || lineout);
1015 if (mix->auto_mute_notify)
1019 tumbler_set_drc(mix);
1021 snapper_set_drc(mix);
1025 tumbler_set_master_volume(mix);
1031 struct pmac_tumbler *mix;
1032 mix = chip->mixer_data;
1033 if (snd_BUG_ON(!mix))
1035 mix->auto_mute_notify = do_notify;
1166 struct pmac_tumbler *mix = chip->mixer_data;
1168 if (mix->anded_reset) {
1170 write_audio_gpio(&mix->hp_mute, 0);
1171 write_audio_gpio(&mix->amp_mute, 0);
1173 write_audio_gpio(&mix->hp_mute, 1);
1174 write_audio_gpio(&mix->amp_mute, 1);
1176 write_audio_gpio(&mix->hp_mute, 0);
1177 write_audio_gpio(&mix->amp_mute, 0);
1182 write_audio_gpio(&mix->audio_reset, 0);
1184 write_audio_gpio(&mix->audio_reset, 1);
1186 write_audio_gpio(&mix->audio_reset, 0);
1195 struct pmac_tumbler *mix = chip->mixer_data;
1197 if (mix->headphone_irq >= 0)
1198 disable_irq(mix->headphone_irq);
1199 if (mix->lineout_irq >= 0)
1200 disable_irq(mix->lineout_irq);
1201 mix->save_master_switch[0] = mix->master_switch[0];
1202 mix->save_master_switch[1] = mix->master_switch[1];
1203 mix->save_master_vol[0] = mix->master_vol[0];
1204 mix->save_master_vol[1] = mix->master_vol[1];
1205 mix->master_switch[0] = mix->master_switch[1] = 0;
1206 tumbler_set_master_volume(mix);
1207 if (!mix->anded_reset) {
1208 write_audio_gpio(&mix->amp_mute, 1);
1209 write_audio_gpio(&mix->hp_mute, 1);
1212 mix->acs |= 1;
1213 i2c_smbus_write_byte_data(mix->i2c.client, TAS_REG_ACS, mix->acs);
1215 if (mix->anded_reset) {
1216 write_audio_gpio(&mix->amp_mute, 1);
1217 write_audio_gpio(&mix->hp_mute, 1);
1219 write_audio_gpio(&mix->audio_reset, 1);
1225 struct pmac_tumbler *mix = chip->mixer_data;
1227 mix->acs &= ~1;
1228 mix->master_switch[0] = mix->save_master_switch[0];
1229 mix->master_switch[1] = mix->save_master_switch[1];
1230 mix->master_vol[0] = mix->save_master_vol[0];
1231 mix->master_vol[1] = mix->save_master_vol[1];
1233 if (mix->i2c.client && mix->i2c.init_client) {
1234 if (mix->i2c.init_client(&mix->i2c) < 0)
1239 tumbler_set_mono_volume(mix, &tumbler_pcm_vol_info);
1240 tumbler_set_mono_volume(mix, &tumbler_bass_vol_info);
1241 tumbler_set_mono_volume(mix, &tumbler_treble_vol_info);
1242 tumbler_set_drc(mix);
1244 snapper_set_mix_vol(mix, VOL_IDX_PCM);
1245 snapper_set_mix_vol(mix, VOL_IDX_PCM2);
1246 snapper_set_mix_vol(mix, VOL_IDX_ADC);
1247 tumbler_set_mono_volume(mix, &snapper_bass_vol_info);
1248 tumbler_set_mono_volume(mix, &snapper_treble_vol_info);
1249 snapper_set_drc(mix);
1250 snapper_set_capture_source(mix);
1252 tumbler_set_master_volume(mix);
1255 if (mix->headphone_irq >= 0) {
1258 enable_irq(mix->headphone_irq);
1260 val = do_gpio_read(&mix->hp_detect);
1261 do_gpio_write(&mix->hp_detect, val | 0x80);
1263 if (mix->lineout_irq >= 0)
1264 enable_irq(mix->lineout_irq);
1272 struct pmac_tumbler *mix = chip->mixer_data;
1276 &mix->audio_reset, 0) < 0)
1279 &mix->audio_reset, 1);
1282 &mix->amp_mute, 0) < 0)
1285 &mix->amp_mute, 1);
1288 &mix->hp_mute, 0) < 0)
1291 &mix->hp_mute, 1);
1294 &mix->line_mute, 0) < 0)
1297 &mix->line_mute, 1);
1299 NULL, &mix->hp_detect, 0);
1302 NULL, &mix->hp_detect, 1);
1305 NULL, &mix->hp_detect, 1);
1306 mix->headphone_irq = irq;
1308 NULL, &mix->line_detect, 0);
1311 NULL, &mix->line_detect, 1);
1314 NULL, &mix->line_detect, 1);
1315 mix->lineout_irq = irq;
1324 struct pmac_tumbler *mix = chip->mixer_data;
1325 if (! mix)
1328 if (mix->headphone_irq >= 0)
1329 free_irq(mix->headphone_irq, chip);
1330 if (mix->lineout_irq >= 0)
1331 free_irq(mix->lineout_irq, chip);
1332 tumbler_gpio_free(&mix->audio_reset);
1333 tumbler_gpio_free(&mix->amp_mute);
1334 tumbler_gpio_free(&mix->hp_mute);
1335 tumbler_gpio_free(&mix->hp_detect);
1336 snd_pmac_keywest_cleanup(&mix->i2c);
1337 kfree(mix);
1345 struct pmac_tumbler *mix;
1352 mix = kzalloc(sizeof(*mix), GFP_KERNEL);
1353 if (! mix)
1355 mix->headphone_irq = -1;
1357 chip->mixer_data = mix;
1359 mix->anded_reset = 0;
1360 mix->reset_on_sleep = 1;
1365 mix->anded_reset = 1;
1367 mix->reset_on_sleep = 0;
1387 mix->i2c.addr = (*paddr) >> 1;
1389 mix->i2c.addr = TAS_I2C_ADDR;
1392 DBG("(I) TAS i2c address is: %x\n", mix->i2c.addr);
1395 mix->i2c.init_client = tumbler_init_client;
1396 mix->i2c.name = "TAS3001c";
1399 mix->i2c.init_client = snapper_init_client;
1400 mix->i2c.name = "TAS3004";
1404 err = snd_pmac_keywest_init(&mix->i2c);
1434 if (mix->line_mute.addr != 0) {
1447 mix->drc_range = (TAS3001_DRC_MAX * 6) / 10;
1449 mix->drc_range = (TAS3004_DRC_MAX * 6) / 10;
1450 mix->drc_enable = 1; /* will be changed later if AUTO_DRC is set */
1452 tumbler_set_drc(mix);
1454 snapper_set_drc(mix);
1465 if (mix->headphone_irq >= 0 || mix->lineout_irq >= 0) {
1475 if (mix->headphone_irq >= 0) {
1477 err = request_irq(mix->headphone_irq, headphone_intr, 0,
1482 val = do_gpio_read(&mix->hp_detect);
1483 do_gpio_write(&mix->hp_detect, val | 0x80);
1485 if (mix->lineout_irq >= 0) {
1487 err = request_irq(mix->lineout_irq, headphone_intr, 0,
1492 val = do_gpio_read(&mix->line_detect);
1493 do_gpio_write(&mix->line_detect, val | 0x80);