ac97: added a few codec ids.

* minor code cleanup
This commit is contained in:
Jérôme Duval
2013-11-08 19:01:31 +01:00
parent 4d9dca1905
commit fe2d4a0fa3
2 changed files with 59 additions and 23 deletions
@@ -99,6 +99,7 @@ static void stac9708_init(ac97_dev *dev);
static void stac9721_init(ac97_dev *dev); static void stac9721_init(ac97_dev *dev);
static void stac9744_init(ac97_dev *dev); static void stac9744_init(ac97_dev *dev);
static void stac9756_init(ac97_dev *dev); static void stac9756_init(ac97_dev *dev);
static void stac9758_init(ac97_dev *dev);
static void tr28028_init(ac97_dev *dev); static void tr28028_init(ac97_dev *dev);
static void wm9701_init(ac97_dev *dev); static void wm9701_init(ac97_dev *dev);
static void wm9703_init(ac97_dev *dev); static void wm9703_init(ac97_dev *dev);
@@ -136,6 +137,8 @@ codec_table codecs[] =
{ CODEC_ID_AK4540, 0xffffffff, default_init, "Asahi Kasei AK4540" }, { CODEC_ID_AK4540, 0xffffffff, default_init, "Asahi Kasei AK4540" },
{ CODEC_ID_AK4542, 0xffffffff, default_init, "Asahi Kasei AK4542" }, { CODEC_ID_AK4542, 0xffffffff, default_init, "Asahi Kasei AK4542" },
{ CODEC_ID_AK4543, 0xffffffff, default_init, "Asahi Kasei AK4543" }, { CODEC_ID_AK4543, 0xffffffff, default_init, "Asahi Kasei AK4543" },
{ 0x414b4d06, 0xffffffff, default_init, "Asahi Kasei AK4544A" },
{ 0x414b4d07, 0xffffffff, default_init, "Asahi Kasei AK4545" },
{ 0x414c4300, 0xffffff00, default_init, "Avance Logic (Realtek) ALC100" }, /* 0x4300 = ALC100 */ { 0x414c4300, 0xffffff00, default_init, "Avance Logic (Realtek) ALC100" }, /* 0x4300 = ALC100 */
{ 0x414c4320, 0xfffffff0, default_init, "Avance Logic (Realtek) ALC100/ALC100P, RL5383/RL5522" }, { 0x414c4320, 0xfffffff0, default_init, "Avance Logic (Realtek) ALC100/ALC100P, RL5383/RL5522" },
{ CODEC_ID_ALC201A, 0xfffffff0, default_init, "Avance Logic (Realtek) ALC200/ALC200A, ALC201/ALC201A" }, /* 0x4710 = ALC201A */ { CODEC_ID_ALC201A, 0xfffffff0, default_init, "Avance Logic (Realtek) ALC200/ALC200A, ALC201/ALC201A" }, /* 0x4710 = ALC201A */
@@ -161,6 +164,9 @@ codec_table codecs[] =
{ 0x43525941, 0xffffffff, default_init, "Cirrus Logic CS4201A" }, { 0x43525941, 0xffffffff, default_init, "Cirrus Logic CS4201A" },
{ 0x43525951, 0xffffffff, default_init, "Cirrus Logic CS4205A" }, { 0x43525951, 0xffffffff, default_init, "Cirrus Logic CS4205A" },
{ 0x43525961, 0xffffffff, default_init, "Cirrus Logic CS4291A" }, { 0x43525961, 0xffffffff, default_init, "Cirrus Logic CS4291A" },
{ 0x43585421, 0xffffffff, default_init, "HSD11246" },
{ 0x44543031, 0xffffffff, default_init, "DT0398" },
{ 0x454d4328, 0xffffffff, default_init, "EM28028" },
{ 0x45838308, 0xffffffff, default_init, "ESS Technology ES1921" }, { 0x45838308, 0xffffffff, default_init, "ESS Technology ES1921" },
{ 0x49434501, 0xffffffff, default_init, "ICEnsemble ICE1230" }, { 0x49434501, 0xffffffff, default_init, "ICEnsemble ICE1230" },
{ 0x49434511, 0xffffffff, default_init, "ICEnsemble ICE1232" }, { 0x49434511, 0xffffffff, default_init, "ICEnsemble ICE1232" },
@@ -175,11 +181,14 @@ codec_table codecs[] =
{ CODEC_ID_STAC9708,0xffffffff, stac9708_init, "SigmaTel STAC9708/9711" }, { CODEC_ID_STAC9708,0xffffffff, stac9708_init, "SigmaTel STAC9708/9711" },
{ CODEC_ID_STAC9721,0xffffffff, stac9721_init, "SigmaTel STAC9721/9723" }, { CODEC_ID_STAC9721,0xffffffff, stac9721_init, "SigmaTel STAC9721/9723" },
{ CODEC_ID_STAC9744,0xffffffff, stac9744_init, "SigmaTel STAC9744" }, { CODEC_ID_STAC9744,0xffffffff, stac9744_init, "SigmaTel STAC9744" },
{ CODEC_ID_STAC9750,0xffffffff, default_init, "SigmaTel STAC9750/51" },
{ CODEC_ID_STAC9752,0xffffffff, default_init, "SigmaTel STAC9752/53" }, { CODEC_ID_STAC9752,0xffffffff, default_init, "SigmaTel STAC9752/53" },
{ CODEC_ID_STAC9756,0xffffffff, stac9756_init, "SigmaTel STAC9756/9757" }, { CODEC_ID_STAC9756,0xffffffff, stac9756_init, "SigmaTel STAC9756/9757" },
{ CODEC_ID_STAC9758,0xffffffff, stac9758_init, "SigmaTel STAC9758/59" },
{ CODEC_ID_STAC9766,0xffffffff, default_init, "SigmaTel STAC9766/67" }, { CODEC_ID_STAC9766,0xffffffff, default_init, "SigmaTel STAC9766/67" },
{ 0x53494c22, 0xffffffff, default_init, "Silicon Laboratory Si3036" }, { 0x53494c22, 0xffffffff, default_init, "Silicon Laboratory Si3036" },
{ 0x53494c23, 0xffffffff, default_init, "Silicon Laboratory Si3038" }, { 0x53494c23, 0xffffffff, default_init, "Silicon Laboratory Si3038" },
{ 0x53544d02, 0xffffffff, default_init, "ST7597" },
{ 0x54524103, 0xffffffff, default_init, "TriTech TR28023" }, { 0x54524103, 0xffffffff, default_init, "TriTech TR28023" },
{ 0x54524106, 0xffffffff, default_init, "TriTech TR28026" }, { 0x54524106, 0xffffffff, default_init, "TriTech TR28026" },
{ 0x54524108, 0xffffffff, tr28028_init, "TriTech TR28028" }, { 0x54524108, 0xffffffff, tr28028_init, "TriTech TR28028" },
@@ -207,6 +216,7 @@ codec_table codecs[] =
{ 0x83847600, 0xffffff00, default_init, "SigmaTel" }, { 0x83847600, 0xffffff00, default_init, "SigmaTel" },
{ 0x53494c00, 0xffffff00, default_init, "Silicon Laboratory" }, { 0x53494c00, 0xffffff00, default_init, "Silicon Laboratory" },
{ 0x54524100, 0xffffff00, default_init, "TriTech" }, { 0x54524100, 0xffffff00, default_init, "TriTech" },
{ 0x54584e00, 0xffffff00, default_init, "Texas Instruments" },
{ 0x56494100, 0xffffff00, default_init, "VIA Technologies" }, { 0x56494100, 0xffffff00, default_init, "VIA Technologies" },
{ 0x574d4c00, 0xffffff00, default_init, "Wolfson" }, { 0x574d4c00, 0xffffff00, default_init, "Wolfson" },
{ 0x594d4800, 0xffffff00, default_init, "Yamaha" }, { 0x594d4800, 0xffffff00, default_init, "Yamaha" },
@@ -1039,6 +1049,28 @@ stac9756_init(ac97_dev *dev)
} }
void
stac9758_init(ac97_dev *dev)
{
LOG(("stac9758_init\n"));
ac97_reg_update_bits(dev, AC97_PAGING, 0xf, 0);
if (dev->subsystem == 0x107b0601) {
ac97_reg_cached_write(dev, 0x64, 0xfc70);
ac97_reg_cached_write(dev, 0x68, 0x2102);
ac97_reg_cached_write(dev, 0x66, 0x0203);
ac97_reg_cached_write(dev, 0x72, 0x0041);
} else {
ac97_reg_cached_write(dev, 0x64, 0xd794);
ac97_reg_cached_write(dev, 0x68, 0x2001);
ac97_reg_cached_write(dev, 0x66, 0x0201);
ac97_reg_cached_write(dev, 0x72, 0x0040);
}
}
void void
tr28028_init(ac97_dev *dev) tr28028_init(ac97_dev *dev)
{ {
+7 -3
View File
@@ -134,8 +134,10 @@ enum {
CODEC_ID_STAC9708 = 0x83847608, // ok, STAC9708/11 CODEC_ID_STAC9708 = 0x83847608, // ok, STAC9708/11
CODEC_ID_STAC9721 = 0x83847609, // ok, STAC9721/23 CODEC_ID_STAC9721 = 0x83847609, // ok, STAC9721/23
CODEC_ID_STAC9744 = 0x83847644, // ok, STAC9744 CODEC_ID_STAC9744 = 0x83847644, // ok, STAC9744
CODEC_ID_STAC9750 = 0x83847650, // ok, STAC9750/51
CODEC_ID_STAC9752 = 0x83847652, // ok, STAC9752/53 CODEC_ID_STAC9752 = 0x83847652, // ok, STAC9752/53
CODEC_ID_STAC9756 = 0x83847656, // ok, STAC9756/57 CODEC_ID_STAC9756 = 0x83847656, // ok, STAC9756/57
CODEC_ID_STAC9758 = 0x83847658, // ????, STAC9758/59
CODEC_ID_STAC9766 = 0x83847666, // ok, STAC9766/67 CODEC_ID_STAC9766 = 0x83847666, // ok, STAC9766/67
}; };
@@ -216,8 +218,9 @@ struct ac97_dev {
extern "C" { extern "C" {
#endif #endif
void ac97_attach(ac97_dev **dev, codec_reg_read reg_read, codec_reg_write reg_write, void *cookie, void ac97_attach(ac97_dev **dev, codec_reg_read reg_read,
ushort subvendor_id, ushort subsystem_id); codec_reg_write reg_write, void *cookie, ushort subvendor_id,
ushort subsystem_id);
void ac97_detach(ac97_dev *dev); void ac97_detach(ac97_dev *dev);
void ac97_suspend(ac97_dev *dev); void ac97_suspend(ac97_dev *dev);
void ac97_resume(ac97_dev *dev); void ac97_resume(ac97_dev *dev);
@@ -228,7 +231,8 @@ void ac97_reg_uncached_write(ac97_dev *dev, uint8 reg, uint16 value);
uint16 ac97_reg_uncached_read(ac97_dev *dev, uint8 reg); uint16 ac97_reg_uncached_read(ac97_dev *dev, uint8 reg);
bool ac97_reg_update(ac97_dev *dev, uint8 reg, uint16 value); bool ac97_reg_update(ac97_dev *dev, uint8 reg, uint16 value);
bool ac97_reg_update_bits(ac97_dev *dev, uint8 reg, uint16 mask, uint16 value); bool ac97_reg_update_bits(ac97_dev *dev, uint8 reg, uint16 mask,
uint16 value);
bool ac97_set_rate(ac97_dev *dev, uint8 reg, uint32 rate); bool ac97_set_rate(ac97_dev *dev, uint8 reg, uint32 rate);
bool ac97_get_rate(ac97_dev *dev, uint8 reg, uint32 *rate); bool ac97_get_rate(ac97_dev *dev, uint8 reg, uint32 *rate);