*** /tmp/kernel-source-2.4.18/drivers/sound/ac97_codec.c Mon Nov 12 19:02:54 2001 --- linux/drivers/sound/ac97_codec.c Wed Apr 10 23:43:49 2002 *************** *** 65,70 **** --- 65,71 ---- static int sigmatel_9708_init(struct ac97_codec *codec); static int sigmatel_9721_init(struct ac97_codec *codec); static int sigmatel_9744_init(struct ac97_codec *codec); + static int ad1886_init(struct ac97_codec *codec); static int eapd_control(struct ac97_codec *codec, int); static int crystal_digital_control(struct ac97_codec *codec, int mode); *************** *** 93,98 **** --- 94,100 ---- static struct ac97_ops sigmatel_9708_ops = { sigmatel_9708_init, NULL, NULL }; static struct ac97_ops sigmatel_9721_ops = { sigmatel_9721_init, NULL, NULL }; static struct ac97_ops sigmatel_9744_ops = { sigmatel_9744_init, NULL, NULL }; + static struct ac97_ops ad1886_ops = { ad1886_init, eapd_control, NULL }; static struct ac97_ops crystal_digital_ops = { NULL, eapd_control, crystal_digital_control }; /* sorted by vendor/device id */ *************** *** 106,111 **** --- 108,114 ---- {0x41445348, "Analog Devices AD1881A", &null_ops}, {0x41445360, "Analog Devices AD1885", &default_ops}, {0x41445460, "Analog Devices AD1885", &default_ops}, + {0x41445361, "Analog Devices AD1886", &ad1886_ops}, {0x414B4D00, "Asahi Kasei AK4540", &null_ops}, {0x414B4D01, "Asahi Kasei AK4542", &null_ops}, {0x414B4D02, "Asahi Kasei AK4543", &null_ops}, *************** *** 887,892 **** --- 890,911 ---- codec->codec_write(codec, AC97_POWER_CONTROL, codec->codec_read(codec, AC97_POWER_CONTROL)&~0x8000); return 0; + } + + /* + * Presario700 workaround + * for Jack Sense/SPDIF Register misetting causing + * no audible output + * by Santiago Nullo 04/05/2002 + */ + + #define AC97_AD1886_JACK_SENSE 0x72 + + static int ad1886_init(struct ac97_codec * codec) + { + /* from AD1886 Specs */ + codec->codec_write(codec, AC97_AD1886_JACK_SENSE, 0x0010); + return 0; } /*