[ALSA] emu10k1: Add support for Audigy4 (not Pro)
Signed-off-by: James Courtier-Dutton <James@superbug.co.uk>
This commit is contained in:
parent
6129daaa0d
commit
21fdddea8e
|
@ -245,6 +245,7 @@
|
||||||
#define A_IOCFG_GPOUT0 0x0044 /* analog/digital */
|
#define A_IOCFG_GPOUT0 0x0044 /* analog/digital */
|
||||||
#define A_IOCFG_DISABLE_ANALOG 0x0040 /* = 'enable' for Audigy2 (chiprev=4) */
|
#define A_IOCFG_DISABLE_ANALOG 0x0040 /* = 'enable' for Audigy2 (chiprev=4) */
|
||||||
#define A_IOCFG_ENABLE_DIGITAL 0x0004
|
#define A_IOCFG_ENABLE_DIGITAL 0x0004
|
||||||
|
#define A_IOCFG_ENABLE_DIGITAL_AUDIGY4 0x0080
|
||||||
#define A_IOCFG_UNKNOWN_20 0x0020
|
#define A_IOCFG_UNKNOWN_20 0x0020
|
||||||
#define A_IOCFG_DISABLE_AC97_FRONT 0x0080 /* turn off ac97 front -> front (10k2.1) */
|
#define A_IOCFG_DISABLE_AC97_FRONT 0x0080 /* turn off ac97 front -> front (10k2.1) */
|
||||||
#define A_IOCFG_GPOUT1 0x0002 /* IR? drive's internal bypass (?) */
|
#define A_IOCFG_GPOUT1 0x0002 /* IR? drive's internal bypass (?) */
|
||||||
|
@ -1065,6 +1066,7 @@ struct snd_emu_chip_details {
|
||||||
unsigned char emu1212m; /* EMU 1212m card */
|
unsigned char emu1212m; /* EMU 1212m card */
|
||||||
unsigned char spi_dac; /* SPI interface for DAC */
|
unsigned char spi_dac; /* SPI interface for DAC */
|
||||||
unsigned char i2c_adc; /* I2C interface for ADC */
|
unsigned char i2c_adc; /* I2C interface for ADC */
|
||||||
|
unsigned char adc_1361t; /* Use Philips 1361T ADC */
|
||||||
const char *driver;
|
const char *driver;
|
||||||
const char *name;
|
const char *name;
|
||||||
const char *id; /* for backward compatibility - can be NULL if not needed */
|
const char *id; /* for backward compatibility - can be NULL if not needed */
|
||||||
|
|
|
@ -563,7 +563,7 @@ AC97_SINGLE("PC Speaker Playback Volume", AC97_PC_BEEP, 1, 15, 1)
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_kcontrol_new snd_ac97_controls_mic_boost =
|
static const struct snd_kcontrol_new snd_ac97_controls_mic_boost =
|
||||||
AC97_SINGLE("Mic Boost (+20dB)", AC97_MIC, 6, 1, 0);
|
AC97_SINGLE("Mic Boost (+20dB) Capture Switch", AC97_MIC, 6, 1, 0);
|
||||||
|
|
||||||
|
|
||||||
static const char* std_rec_sel[] = {"Mic", "CD", "Video", "Aux", "Line", "Mix", "Mix Mono", "Phone"};
|
static const char* std_rec_sel[] = {"Mic", "CD", "Video", "Aux", "Line", "Mix", "Mix Mono", "Phone"};
|
||||||
|
@ -605,7 +605,7 @@ AC97_SINGLE("Simulated Stereo Enhancement", AC97_GENERAL_PURPOSE, 14, 1, 0),
|
||||||
AC97_SINGLE("3D Control - Switch", AC97_GENERAL_PURPOSE, 13, 1, 0),
|
AC97_SINGLE("3D Control - Switch", AC97_GENERAL_PURPOSE, 13, 1, 0),
|
||||||
AC97_SINGLE("Loudness (bass boost)", AC97_GENERAL_PURPOSE, 12, 1, 0),
|
AC97_SINGLE("Loudness (bass boost)", AC97_GENERAL_PURPOSE, 12, 1, 0),
|
||||||
AC97_ENUM("Mono Output Select", std_enum[2]),
|
AC97_ENUM("Mono Output Select", std_enum[2]),
|
||||||
AC97_ENUM("Mic Select", std_enum[3]),
|
AC97_ENUM("Mic Select Capture Switch", std_enum[3]),
|
||||||
AC97_SINGLE("ADC/DAC Loopback", AC97_GENERAL_PURPOSE, 7, 1, 0)
|
AC97_SINGLE("ADC/DAC Loopback", AC97_GENERAL_PURPOSE, 7, 1, 0)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -563,7 +563,7 @@ AC97_SINGLE("Mic 1 to Phone Switch", AC97_MIC, 14, 1, 1),
|
||||||
AC97_SINGLE("Mic 2 to Phone Switch", AC97_MIC, 13, 1, 1),
|
AC97_SINGLE("Mic 2 to Phone Switch", AC97_MIC, 13, 1, 1),
|
||||||
AC97_ENUM("Mic Select Source", wm9711_enum[7]),
|
AC97_ENUM("Mic Select Source", wm9711_enum[7]),
|
||||||
AC97_SINGLE("Mic 1 Volume", AC97_MIC, 8, 32, 1),
|
AC97_SINGLE("Mic 1 Volume", AC97_MIC, 8, 32, 1),
|
||||||
AC97_SINGLE("Mic 20dB Boost Switch", AC97_MIC, 7, 1, 0),
|
AC97_SINGLE("Mic 20dB Boost Capture Switch", AC97_MIC, 7, 1, 0),
|
||||||
|
|
||||||
AC97_SINGLE("Master ZC Switch", AC97_MASTER, 7, 1, 0),
|
AC97_SINGLE("Master ZC Switch", AC97_MASTER, 7, 1, 0),
|
||||||
AC97_SINGLE("Headphone ZC Switch", AC97_HEADPHONE, 7, 1, 0),
|
AC97_SINGLE("Headphone ZC Switch", AC97_HEADPHONE, 7, 1, 0),
|
||||||
|
@ -653,7 +653,7 @@ AC97_SINGLE("Mic 1 Volume", AC97_MIC, 8, 31, 1),
|
||||||
AC97_SINGLE("Mic 2 Volume", AC97_MIC, 0, 31, 1),
|
AC97_SINGLE("Mic 2 Volume", AC97_MIC, 0, 31, 1),
|
||||||
AC97_SINGLE("Mic 1 to Mono Switch", AC97_LINE, 7, 1, 1),
|
AC97_SINGLE("Mic 1 to Mono Switch", AC97_LINE, 7, 1, 1),
|
||||||
AC97_SINGLE("Mic 2 to Mono Switch", AC97_LINE, 6, 1, 1),
|
AC97_SINGLE("Mic 2 to Mono Switch", AC97_LINE, 6, 1, 1),
|
||||||
AC97_SINGLE("Mic Boost (+20dB) Switch", AC97_LINE, 5, 1, 0),
|
AC97_SINGLE("Mic Boost (+20dB) Capture Switch", AC97_LINE, 5, 1, 0),
|
||||||
AC97_ENUM("Mic to Headphone Mux", wm9713_enum[0]),
|
AC97_ENUM("Mic to Headphone Mux", wm9713_enum[0]),
|
||||||
AC97_SINGLE("Mic Headphone Mixer Volume", AC97_LINE, 0, 7, 1),
|
AC97_SINGLE("Mic Headphone Mixer Volume", AC97_LINE, 0, 7, 1),
|
||||||
|
|
||||||
|
|
|
@ -777,14 +777,6 @@ static int snd_emu10k1_dev_free(struct snd_device *device)
|
||||||
|
|
||||||
static struct snd_emu_chip_details emu_chip_details[] = {
|
static struct snd_emu_chip_details emu_chip_details[] = {
|
||||||
/* Audigy 2 Value AC3 out does not work yet. Need to find out how to turn off interpolators.*/
|
/* Audigy 2 Value AC3 out does not work yet. Need to find out how to turn off interpolators.*/
|
||||||
/* Audigy4 SB0400 */
|
|
||||||
{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
|
|
||||||
.driver = "Audigy2", .name = "Audigy 4 [SB0400]",
|
|
||||||
.id = "Audigy2",
|
|
||||||
.emu10k2_chip = 1,
|
|
||||||
.ca0108_chip = 1,
|
|
||||||
.spk71 = 1,
|
|
||||||
.ac97_chip = 1} ,
|
|
||||||
/* Tested by James@superbug.co.uk 3rd July 2005 */
|
/* Tested by James@superbug.co.uk 3rd July 2005 */
|
||||||
/* DSP: CA0108-IAT
|
/* DSP: CA0108-IAT
|
||||||
* DAC: CS4382-KQ
|
* DAC: CS4382-KQ
|
||||||
|
@ -799,13 +791,59 @@ static struct snd_emu_chip_details emu_chip_details[] = {
|
||||||
.ca0108_chip = 1,
|
.ca0108_chip = 1,
|
||||||
.spk71 = 1,
|
.spk71 = 1,
|
||||||
.ac97_chip = 1} ,
|
.ac97_chip = 1} ,
|
||||||
|
/* Audigy4 (Not PRO) SB0610 */
|
||||||
|
/* Tested by James@superbug.co.uk 4th April 2006 */
|
||||||
|
/* A_IOCFG bits
|
||||||
|
* Output
|
||||||
|
* 0: ?
|
||||||
|
* 1: ?
|
||||||
|
* 2: ?
|
||||||
|
* 3: 0 - Digital Out, 1 - Line in
|
||||||
|
* 4: ?
|
||||||
|
* 5: ?
|
||||||
|
* 6: ?
|
||||||
|
* 7: ?
|
||||||
|
* Input
|
||||||
|
* 8: ?
|
||||||
|
* 9: ?
|
||||||
|
* A: Green jack sense (Front)
|
||||||
|
* B: ?
|
||||||
|
* C: Black jack sense (Rear/Side Right)
|
||||||
|
* D: Yellow jack sense (Center/LFE/Side Left)
|
||||||
|
* E: ?
|
||||||
|
* F: ?
|
||||||
|
*
|
||||||
|
* Digital Out/Line in switch using A_IOCFG bit 3 (0x08)
|
||||||
|
* 0 - Digital Out
|
||||||
|
* 1 - Line in
|
||||||
|
*/
|
||||||
|
/* Mic input not tested.
|
||||||
|
* Analog CD input not tested
|
||||||
|
* Digital Out not tested.
|
||||||
|
* Line in working.
|
||||||
|
* Audio output 5.1 working. Side outputs not working.
|
||||||
|
*/
|
||||||
|
/* DSP: CA10300-IAT LF
|
||||||
|
* DAC: Cirrus Logic CS4382-KQZ
|
||||||
|
* ADC: Philips 1361T
|
||||||
|
* AC97: Sigmatel STAC9750
|
||||||
|
* CA0151: None
|
||||||
|
*/
|
||||||
|
{.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10211102,
|
||||||
|
.driver = "Audigy2", .name = "Audigy 4 [SB0610]",
|
||||||
|
.id = "Audigy2",
|
||||||
|
.emu10k2_chip = 1,
|
||||||
|
.ca0108_chip = 1,
|
||||||
|
.spk71 = 1,
|
||||||
|
.adc_1361t = 1, /* 24 bit capture instead of 16bit */
|
||||||
|
.ac97_chip = 1} ,
|
||||||
/* Audigy 2 ZS Notebook Cardbus card.*/
|
/* Audigy 2 ZS Notebook Cardbus card.*/
|
||||||
/* Tested by James@superbug.co.uk 22th December 2005 */
|
/* Tested by James@superbug.co.uk 22th December 2005 */
|
||||||
/* Audio output 7.1/Headphones working.
|
/* Audio output 7.1/Headphones working.
|
||||||
* Digital output working. (AC3 not checked, only PCM)
|
* Digital output working. (AC3 not checked, only PCM)
|
||||||
* Audio inputs not tested.
|
* Audio inputs not tested.
|
||||||
*/
|
*/
|
||||||
/* DSP: Tiny2
|
/* DSP: Tina2
|
||||||
* DAC: Wolfson WM8768/WM8568
|
* DAC: Wolfson WM8768/WM8568
|
||||||
* ADC: Wolfson WM8775
|
* ADC: Wolfson WM8775
|
||||||
* AC97: None
|
* AC97: None
|
||||||
|
|
|
@ -777,6 +777,8 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
|
||||||
};
|
};
|
||||||
static char *audigy_remove_ctls[] = {
|
static char *audigy_remove_ctls[] = {
|
||||||
/* Master/PCM controls on ac97 of Audigy has no effect */
|
/* Master/PCM controls on ac97 of Audigy has no effect */
|
||||||
|
/* On the Audigy2 the AC97 playback is piped into
|
||||||
|
* the Philips ADC for 24bit capture */
|
||||||
"PCM Playback Switch",
|
"PCM Playback Switch",
|
||||||
"PCM Playback Volume",
|
"PCM Playback Volume",
|
||||||
"Master Mono Playback Switch",
|
"Master Mono Playback Switch",
|
||||||
|
@ -804,6 +806,47 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
|
||||||
"AMic Playback Volume", "Mic Playback Volume",
|
"AMic Playback Volume", "Mic Playback Volume",
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
static char *audigy_remove_ctls_1361t_adc[] = {
|
||||||
|
/* On the Audigy2 the AC97 playback is piped into
|
||||||
|
* the Philips ADC for 24bit capture */
|
||||||
|
"PCM Playback Switch",
|
||||||
|
"PCM Playback Volume",
|
||||||
|
"Master Mono Playback Switch",
|
||||||
|
"Master Mono Playback Volume",
|
||||||
|
"Capture Source",
|
||||||
|
"Capture Switch",
|
||||||
|
"Capture Volume",
|
||||||
|
"Mic Capture Volume",
|
||||||
|
"Headphone Playback Switch",
|
||||||
|
"Headphone Playback Volume",
|
||||||
|
"3D Control - Center",
|
||||||
|
"3D Control - Depth",
|
||||||
|
"3D Control - Switch",
|
||||||
|
"Line2 Playback Volume",
|
||||||
|
"Line2 Capture Volume",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
static char *audigy_rename_ctls_1361t_adc[] = {
|
||||||
|
"Master Playback Switch", "Master Capture Switch",
|
||||||
|
"Master Playback Volume", "Master Capture Volume",
|
||||||
|
"Wave Master Playback Volume", "Master Playback Volume",
|
||||||
|
"PC Speaker Playback Switch", "PC Speaker Capture Switch",
|
||||||
|
"PC Speaker Playback Volume", "PC Speaker Capture Volume",
|
||||||
|
"Phone Playback Switch", "Phone Capture Switch",
|
||||||
|
"Phone Playback Volume", "Phone Capture Volume",
|
||||||
|
"Mic Playback Switch", "Mic Capture Switch",
|
||||||
|
"Mic Playback Volume", "Mic Capture Volume",
|
||||||
|
"Line Playback Switch", "Line Capture Switch",
|
||||||
|
"Line Playback Volume", "Line Capture Volume",
|
||||||
|
"CD Playback Switch", "CD Capture Switch",
|
||||||
|
"CD Playback Volume", "CD Capture Volume",
|
||||||
|
"Aux Playback Switch", "Aux Capture Switch",
|
||||||
|
"Aux Playback Volume", "Aux Capture Volume",
|
||||||
|
"Video Playback Switch", "Video Capture Switch",
|
||||||
|
"Video Playback Volume", "Video Capture Volume",
|
||||||
|
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
if (emu->card_capabilities->ac97_chip) {
|
if (emu->card_capabilities->ac97_chip) {
|
||||||
struct snd_ac97_bus *pbus;
|
struct snd_ac97_bus *pbus;
|
||||||
|
@ -834,6 +877,9 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
|
||||||
snd_ac97_write_cache(emu->ac97, AC97_MASTER, 0x0000);
|
snd_ac97_write_cache(emu->ac97, AC97_MASTER, 0x0000);
|
||||||
/* set capture source to mic */
|
/* set capture source to mic */
|
||||||
snd_ac97_write_cache(emu->ac97, AC97_REC_SEL, 0x0000);
|
snd_ac97_write_cache(emu->ac97, AC97_REC_SEL, 0x0000);
|
||||||
|
if (emu->card_capabilities->adc_1361t)
|
||||||
|
c = audigy_remove_ctls_1361t_adc;
|
||||||
|
else
|
||||||
c = audigy_remove_ctls;
|
c = audigy_remove_ctls;
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
|
@ -863,11 +909,15 @@ int __devinit snd_emu10k1_mixer(struct snd_emu10k1 *emu,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (emu->audigy)
|
if (emu->audigy)
|
||||||
|
if (emu->card_capabilities->adc_1361t)
|
||||||
|
c = audigy_rename_ctls_1361t_adc;
|
||||||
|
else
|
||||||
c = audigy_rename_ctls;
|
c = audigy_rename_ctls;
|
||||||
else
|
else
|
||||||
c = emu10k1_rename_ctls;
|
c = emu10k1_rename_ctls;
|
||||||
for (; *c; c += 2)
|
for (; *c; c += 2)
|
||||||
rename_ctl(card, c[0], c[1]);
|
rename_ctl(card, c[0], c[1]);
|
||||||
|
|
||||||
if (emu->card_capabilities->subsystem == 0x20071102) { /* Audigy 4 Pro */
|
if (emu->card_capabilities->subsystem == 0x20071102) { /* Audigy 4 Pro */
|
||||||
rename_ctl(card, "Line2 Capture Volume", "Line1/Mic Capture Volume");
|
rename_ctl(card, "Line2 Capture Volume", "Line1/Mic Capture Volume");
|
||||||
rename_ctl(card, "Analog Mix Capture Volume", "Line2 Capture Volume");
|
rename_ctl(card, "Analog Mix Capture Volume", "Line2 Capture Volume");
|
||||||
|
|
|
@ -1,11 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) by James Courtier-Dutton <James@superbug.demon.co.uk>
|
* Copyright (c) by James Courtier-Dutton <James@superbug.demon.co.uk>
|
||||||
* Driver p16v chips
|
* Driver tina2 chips
|
||||||
* Version: 0.21
|
* Version: 0.1
|
||||||
*
|
|
||||||
*
|
|
||||||
* This code was initally based on code from ALSA's emu10k1x.c which is:
|
|
||||||
* Copyright (c) by Francisco Moraes <fmoraes@nc.rr.com>
|
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
|
Loading…
Reference in New Issue