|
@@ -2872,3 +2872,41 @@ int patch_lm4550(struct snd_ac97 *ac97)
|
|
|
ac97->res_table = lm4550_restbl;
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * UCB1400 codec (http://www.semiconductors.philips.com/acrobat_download/datasheets/UCB1400-02.pdf)
|
|
|
+ */
|
|
|
+static const struct snd_kcontrol_new snd_ac97_controls_ucb1400[] = {
|
|
|
+/* enable/disable headphone driver which allows direct connection to
|
|
|
+ stereo headphone without the use of external DC blocking
|
|
|
+ capacitors */
|
|
|
+AC97_SINGLE("Headphone Driver", 0x6a, 6, 1, 0),
|
|
|
+/* Filter used to compensate the DC offset is added in the ADC to remove idle
|
|
|
+ tones from the audio band. */
|
|
|
+AC97_SINGLE("DC Filter", 0x6a, 4, 1, 0),
|
|
|
+/* Control smart-low-power mode feature. Allows automatic power down
|
|
|
+ of unused blocks in the ADC analog front end and the PLL. */
|
|
|
+AC97_SINGLE("Smart Low Power Mode", 0x6c, 4, 3, 0),
|
|
|
+};
|
|
|
+
|
|
|
+static int patch_ucb1400_specific(struct snd_ac97 * ac97)
|
|
|
+{
|
|
|
+ int idx, err;
|
|
|
+ for (idx = 0; idx < ARRAY_SIZE(snd_ac97_controls_ucb1400); idx++)
|
|
|
+ if ((err = snd_ctl_add(ac97->bus->card, snd_ctl_new1(&snd_ac97_controls_ucb1400[idx], ac97))) < 0)
|
|
|
+ return err;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static struct snd_ac97_build_ops patch_ucb1400_ops = {
|
|
|
+ .build_specific = patch_ucb1400_specific,
|
|
|
+};
|
|
|
+
|
|
|
+int patch_ucb1400(struct snd_ac97 * ac97)
|
|
|
+{
|
|
|
+ ac97->build_ops = &patch_ucb1400_ops;
|
|
|
+ /* enable headphone driver and smart low power mode by default */
|
|
|
+ snd_ac97_write(ac97, 0x6a, 0x0050);
|
|
|
+ snd_ac97_write(ac97, 0x6c, 0x0030);
|
|
|
+ return 0;
|
|
|
+}
|