aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2011-04-07 04:31:43 -0400
committerTakashi Iwai <tiwai@suse.de>2011-04-07 04:31:43 -0400
commit691f1fccf72e3092e3a7a79fd672940afc9305ef (patch)
tree5d14ba6f527e1ecc6392e0854b762000433e4706 /sound/pci
parenta7f2371f9e9730ccdb70d6d5803da2a732c97cf3 (diff)
ALSA: hda - Refactoring EAPD controls
Reduced the duplicated codes. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/patch_realtek.c75
1 files changed, 30 insertions, 45 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 4971d777d9c9..c798e18d453f 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -1236,6 +1236,34 @@ static void set_eapd(struct hda_codec *codec, hda_nid_t nid, int on)
1236 on ? 2 : 0); 1236 on ? 2 : 0);
1237} 1237}
1238 1238
1239/* turn on/off EAPD controls of the codec */
1240static void alc_auto_setup_eapd(struct hda_codec *codec, bool on)
1241{
1242 /* We currently only handle front, HP */
1243 switch (codec->vendor_id) {
1244 case 0x10ec0260:
1245 set_eapd(codec, 0x0f, on);
1246 set_eapd(codec, 0x10, on);
1247 break;
1248 case 0x10ec0262:
1249 case 0x10ec0267:
1250 case 0x10ec0268:
1251 case 0x10ec0269:
1252 case 0x10ec0270:
1253 case 0x10ec0272:
1254 case 0x10ec0660:
1255 case 0x10ec0662:
1256 case 0x10ec0663:
1257 case 0x10ec0665:
1258 case 0x10ec0862:
1259 case 0x10ec0889:
1260 case 0x10ec0892:
1261 set_eapd(codec, 0x14, on);
1262 set_eapd(codec, 0x15, on);
1263 break;
1264 }
1265}
1266
1239static void alc_auto_init_amp(struct hda_codec *codec, int type) 1267static void alc_auto_init_amp(struct hda_codec *codec, int type)
1240{ 1268{
1241 unsigned int tmp; 1269 unsigned int tmp;
@@ -1251,28 +1279,7 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)
1251 snd_hda_sequence_write(codec, alc_gpio3_init_verbs); 1279 snd_hda_sequence_write(codec, alc_gpio3_init_verbs);
1252 break; 1280 break;
1253 case ALC_INIT_DEFAULT: 1281 case ALC_INIT_DEFAULT:
1254 switch (codec->vendor_id) { 1282 alc_auto_setup_eapd(codec, true);
1255 case 0x10ec0260:
1256 set_eapd(codec, 0x0f, 1);
1257 set_eapd(codec, 0x10, 1);
1258 break;
1259 case 0x10ec0262:
1260 case 0x10ec0267:
1261 case 0x10ec0268:
1262 case 0x10ec0269:
1263 case 0x10ec0270:
1264 case 0x10ec0272:
1265 case 0x10ec0660:
1266 case 0x10ec0662:
1267 case 0x10ec0663:
1268 case 0x10ec0665:
1269 case 0x10ec0862:
1270 case 0x10ec0889:
1271 case 0x10ec0892:
1272 set_eapd(codec, 0x14, 1);
1273 set_eapd(codec, 0x15, 1);
1274 break;
1275 }
1276 switch (codec->vendor_id) { 1283 switch (codec->vendor_id) {
1277 case 0x10ec0260: 1284 case 0x10ec0260:
1278 snd_hda_codec_write(codec, 0x1a, 0, 1285 snd_hda_codec_write(codec, 0x1a, 0,
@@ -4227,29 +4234,7 @@ static void alc_free(struct hda_codec *codec)
4227#ifdef CONFIG_SND_HDA_POWER_SAVE 4234#ifdef CONFIG_SND_HDA_POWER_SAVE
4228static void alc_power_eapd(struct hda_codec *codec) 4235static void alc_power_eapd(struct hda_codec *codec)
4229{ 4236{
4230 /* We currently only handle front, HP */ 4237 alc_auto_setup_eapd(codec, false);
4231 switch (codec->vendor_id) {
4232 case 0x10ec0260:
4233 set_eapd(codec, 0x0f, 0);
4234 set_eapd(codec, 0x10, 0);
4235 break;
4236 case 0x10ec0262:
4237 case 0x10ec0267:
4238 case 0x10ec0268:
4239 case 0x10ec0269:
4240 case 0x10ec0270:
4241 case 0x10ec0272:
4242 case 0x10ec0660:
4243 case 0x10ec0662:
4244 case 0x10ec0663:
4245 case 0x10ec0665:
4246 case 0x10ec0862:
4247 case 0x10ec0889:
4248 case 0x10ec0892:
4249 set_eapd(codec, 0x14, 0);
4250 set_eapd(codec, 0x15, 0);
4251 break;
4252 }
4253} 4238}
4254 4239
4255static int alc_suspend(struct hda_codec *codec, pm_message_t state) 4240static int alc_suspend(struct hda_codec *codec, pm_message_t state)