diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-12 13:00:06 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-12 13:00:06 -0400 |
commit | 14a4fa20a10d76eb98b7feb25be60735217929ba (patch) | |
tree | 56e8201d1646540f8726330d82b03748debe2dfa | |
parent | 16bb85bc12e7d0b066b1471185f3889cb1ceb382 (diff) | |
parent | c6774bcd33b21d57457d4c604388670efdf03258 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
ASoC: add AD1980 obsolete information
ASoC: register cache should be 1 byte aligned for 1 byte long register
ALSA: hda - Adding support for new IDT 92HD87XX codecs
ASoC: Fix inverted mute controls for WM8580
ALSA: HDA: Use model=auto for LG R510
ALSA: hda - Update model entries in HD-Audio-Models.txt
ALSA: hda: document VIA models
ALSA: hda - patch_nvhdmi.c: Add missing codec IDs, unify names
ALSA: hda - add support for Conexant CX20584
ALSA: hda - New snd-hda-intel model/pin config for hp dv7-4000
ALSA: hda - Fix missing stream for second ADC on Realtek ALC260 HDA codec
ALSA: hda - Make converter setups sticky
ALSA: hda - Add support for Acer ZGA ALC271 (1025:047c)
sound/oss: Adjust confusing if indentation
sound: oss: au1550_ac97.c removed duplicated #include
ASoC: Fix for changed Eureka Kconfig symbol names
-rw-r--r-- | Documentation/sound/alsa/HD-Audio-Models.txt | 13 | ||||
-rw-r--r-- | sound/oss/ad1848.c | 2 | ||||
-rw-r--r-- | sound/oss/au1550_ac97.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.c | 150 | ||||
-rw-r--r-- | sound/pci/hda/hda_codec.h | 12 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 3 | ||||
-rw-r--r-- | sound/pci/hda/patch_nvhdmi.c | 61 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 41 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 13 | ||||
-rw-r--r-- | sound/soc/blackfin/Kconfig | 7 | ||||
-rw-r--r-- | sound/soc/blackfin/bf5xx-ad1980.c | 10 | ||||
-rw-r--r-- | sound/soc/codecs/ad1980.c | 10 | ||||
-rw-r--r-- | sound/soc/codecs/ad1980.h | 6 | ||||
-rw-r--r-- | sound/soc/codecs/wm8580.c | 6 | ||||
-rw-r--r-- | sound/soc/imx/Kconfig | 4 | ||||
-rw-r--r-- | sound/soc/soc-cache.c | 4 |
17 files changed, 304 insertions, 45 deletions
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt index 03771d7c5dd..ce46fa1e643 100644 --- a/Documentation/sound/alsa/HD-Audio-Models.txt +++ b/Documentation/sound/alsa/HD-Audio-Models.txt | |||
@@ -83,8 +83,8 @@ ALC269 | |||
83 | ====== | 83 | ====== |
84 | basic Basic preset | 84 | basic Basic preset |
85 | quanta Quanta FL1 | 85 | quanta Quanta FL1 |
86 | eeepc-p703 ASUS Eeepc P703 P900A | 86 | laptop-amic Laptops with analog-mic input |
87 | eeepc-p901 ASUS Eeepc P901 S101 | 87 | laptop-dmic Laptops with digital-mic input |
88 | fujitsu FSC Amilo | 88 | fujitsu FSC Amilo |
89 | lifebook Fujitsu Lifebook S6420 | 89 | lifebook Fujitsu Lifebook S6420 |
90 | auto auto-config reading BIOS (default) | 90 | auto auto-config reading BIOS (default) |
@@ -109,6 +109,8 @@ ALC662/663/272 | |||
109 | asus-mode4 ASUS | 109 | asus-mode4 ASUS |
110 | asus-mode5 ASUS | 110 | asus-mode5 ASUS |
111 | asus-mode6 ASUS | 111 | asus-mode6 ASUS |
112 | asus-mode7 ASUS | ||
113 | asus-mode8 ASUS | ||
112 | dell Dell with ALC272 | 114 | dell Dell with ALC272 |
113 | dell-zm1 Dell ZM1 with ALC272 | 115 | dell-zm1 Dell ZM1 with ALC272 |
114 | samsung-nc10 Samsung NC10 mini notebook | 116 | samsung-nc10 Samsung NC10 mini notebook |
@@ -295,8 +297,10 @@ Conexant 5066 | |||
295 | ============= | 297 | ============= |
296 | laptop Basic Laptop config (default) | 298 | laptop Basic Laptop config (default) |
297 | dell-laptop Dell laptops | 299 | dell-laptop Dell laptops |
300 | dell-vostro Dell Vostro | ||
298 | olpc-xo-1_5 OLPC XO 1.5 | 301 | olpc-xo-1_5 OLPC XO 1.5 |
299 | ideapad Lenovo IdeaPad U150 | 302 | ideapad Lenovo IdeaPad U150 |
303 | thinkpad Lenovo Thinkpad | ||
300 | 304 | ||
301 | STAC9200 | 305 | STAC9200 |
302 | ======== | 306 | ======== |
@@ -404,6 +408,7 @@ STAC92HD83* | |||
404 | mic-ref Reference board with power management for ports | 408 | mic-ref Reference board with power management for ports |
405 | dell-s14 Dell laptop | 409 | dell-s14 Dell laptop |
406 | hp HP laptops with (inverted) mute-LED | 410 | hp HP laptops with (inverted) mute-LED |
411 | hp-dv7-4000 HP dv-7 4000 | ||
407 | auto BIOS setup (default) | 412 | auto BIOS setup (default) |
408 | 413 | ||
409 | STAC9872 | 414 | STAC9872 |
@@ -416,3 +421,7 @@ Cirrus Logic CS4206/4207 | |||
416 | mbp55 MacBook Pro 5,5 | 421 | mbp55 MacBook Pro 5,5 |
417 | imac27 IMac 27 Inch | 422 | imac27 IMac 27 Inch |
418 | auto BIOS setup (default) | 423 | auto BIOS setup (default) |
424 | |||
425 | VIA VT17xx/VT18xx/VT20xx | ||
426 | ======================== | ||
427 | auto BIOS setup (default) | ||
diff --git a/sound/oss/ad1848.c b/sound/oss/ad1848.c index 24793c5b65a..4d2a6ae978f 100644 --- a/sound/oss/ad1848.c +++ b/sound/oss/ad1848.c | |||
@@ -716,7 +716,7 @@ static int ad1848_mixer_ioctl(int dev, unsigned int cmd, void __user *arg) | |||
716 | 716 | ||
717 | default: | 717 | default: |
718 | if (get_user(val, (int __user *)arg)) | 718 | if (get_user(val, (int __user *)arg)) |
719 | return -EFAULT; | 719 | return -EFAULT; |
720 | val = ad1848_mixer_set(devc, cmd & 0xff, val); | 720 | val = ad1848_mixer_set(devc, cmd & 0xff, val); |
721 | break; | 721 | break; |
722 | } | 722 | } |
diff --git a/sound/oss/au1550_ac97.c b/sound/oss/au1550_ac97.c index c4a4cdc07ab..c6f2621221b 100644 --- a/sound/oss/au1550_ac97.c +++ b/sound/oss/au1550_ac97.c | |||
@@ -50,7 +50,6 @@ | |||
50 | #include <linux/poll.h> | 50 | #include <linux/poll.h> |
51 | #include <linux/bitops.h> | 51 | #include <linux/bitops.h> |
52 | #include <linux/spinlock.h> | 52 | #include <linux/spinlock.h> |
53 | #include <linux/smp_lock.h> | ||
54 | #include <linux/ac97_codec.h> | 53 | #include <linux/ac97_codec.h> |
55 | #include <linux/mutex.h> | 54 | #include <linux/mutex.h> |
56 | 55 | ||
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index a7802b99436..720a81d711e 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c | |||
@@ -971,6 +971,36 @@ static void restore_init_pincfgs(struct hda_codec *codec) | |||
971 | } | 971 | } |
972 | 972 | ||
973 | /* | 973 | /* |
974 | * audio-converter setup caches | ||
975 | */ | ||
976 | struct hda_cvt_setup { | ||
977 | hda_nid_t nid; | ||
978 | u8 stream_tag; | ||
979 | u8 channel_id; | ||
980 | u16 format_id; | ||
981 | unsigned char active; /* cvt is currently used */ | ||
982 | unsigned char dirty; /* setups should be cleared */ | ||
983 | }; | ||
984 | |||
985 | /* get or create a cache entry for the given audio converter NID */ | ||
986 | static struct hda_cvt_setup * | ||
987 | get_hda_cvt_setup(struct hda_codec *codec, hda_nid_t nid) | ||
988 | { | ||
989 | struct hda_cvt_setup *p; | ||
990 | int i; | ||
991 | |||
992 | for (i = 0; i < codec->cvt_setups.used; i++) { | ||
993 | p = snd_array_elem(&codec->cvt_setups, i); | ||
994 | if (p->nid == nid) | ||
995 | return p; | ||
996 | } | ||
997 | p = snd_array_new(&codec->cvt_setups); | ||
998 | if (p) | ||
999 | p->nid = nid; | ||
1000 | return p; | ||
1001 | } | ||
1002 | |||
1003 | /* | ||
974 | * codec destructor | 1004 | * codec destructor |
975 | */ | 1005 | */ |
976 | static void snd_hda_codec_free(struct hda_codec *codec) | 1006 | static void snd_hda_codec_free(struct hda_codec *codec) |
@@ -1038,12 +1068,14 @@ int /*__devinit*/ snd_hda_codec_new(struct hda_bus *bus, | |||
1038 | codec->addr = codec_addr; | 1068 | codec->addr = codec_addr; |
1039 | mutex_init(&codec->spdif_mutex); | 1069 | mutex_init(&codec->spdif_mutex); |
1040 | mutex_init(&codec->control_mutex); | 1070 | mutex_init(&codec->control_mutex); |
1071 | mutex_init(&codec->prepare_mutex); | ||
1041 | init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info)); | 1072 | init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info)); |
1042 | init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head)); | 1073 | init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head)); |
1043 | snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32); | 1074 | snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32); |
1044 | snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32); | 1075 | snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32); |
1045 | snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16); | 1076 | snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16); |
1046 | snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16); | 1077 | snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16); |
1078 | snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8); | ||
1047 | if (codec->bus->modelname) { | 1079 | if (codec->bus->modelname) { |
1048 | codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL); | 1080 | codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL); |
1049 | if (!codec->modelname) { | 1081 | if (!codec->modelname) { |
@@ -1181,16 +1213,51 @@ void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, | |||
1181 | u32 stream_tag, | 1213 | u32 stream_tag, |
1182 | int channel_id, int format) | 1214 | int channel_id, int format) |
1183 | { | 1215 | { |
1216 | struct hda_cvt_setup *p; | ||
1217 | unsigned int oldval, newval; | ||
1218 | int i; | ||
1219 | |||
1184 | if (!nid) | 1220 | if (!nid) |
1185 | return; | 1221 | return; |
1186 | 1222 | ||
1187 | snd_printdd("hda_codec_setup_stream: " | 1223 | snd_printdd("hda_codec_setup_stream: " |
1188 | "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n", | 1224 | "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n", |
1189 | nid, stream_tag, channel_id, format); | 1225 | nid, stream_tag, channel_id, format); |
1190 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, | 1226 | p = get_hda_cvt_setup(codec, nid); |
1191 | (stream_tag << 4) | channel_id); | 1227 | if (!p) |
1192 | msleep(1); | 1228 | return; |
1193 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format); | 1229 | /* update the stream-id if changed */ |
1230 | if (p->stream_tag != stream_tag || p->channel_id != channel_id) { | ||
1231 | oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0); | ||
1232 | newval = (stream_tag << 4) | channel_id; | ||
1233 | if (oldval != newval) | ||
1234 | snd_hda_codec_write(codec, nid, 0, | ||
1235 | AC_VERB_SET_CHANNEL_STREAMID, | ||
1236 | newval); | ||
1237 | p->stream_tag = stream_tag; | ||
1238 | p->channel_id = channel_id; | ||
1239 | } | ||
1240 | /* update the format-id if changed */ | ||
1241 | if (p->format_id != format) { | ||
1242 | oldval = snd_hda_codec_read(codec, nid, 0, | ||
1243 | AC_VERB_GET_STREAM_FORMAT, 0); | ||
1244 | if (oldval != format) { | ||
1245 | msleep(1); | ||
1246 | snd_hda_codec_write(codec, nid, 0, | ||
1247 | AC_VERB_SET_STREAM_FORMAT, | ||
1248 | format); | ||
1249 | } | ||
1250 | p->format_id = format; | ||
1251 | } | ||
1252 | p->active = 1; | ||
1253 | p->dirty = 0; | ||
1254 | |||
1255 | /* make other inactive cvts with the same stream-tag dirty */ | ||
1256 | for (i = 0; i < codec->cvt_setups.used; i++) { | ||
1257 | p = snd_array_elem(&codec->cvt_setups, i); | ||
1258 | if (!p->active && p->stream_tag == stream_tag) | ||
1259 | p->dirty = 1; | ||
1260 | } | ||
1194 | } | 1261 | } |
1195 | EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream); | 1262 | EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream); |
1196 | 1263 | ||
@@ -1201,17 +1268,54 @@ EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream); | |||
1201 | */ | 1268 | */ |
1202 | void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid) | 1269 | void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid) |
1203 | { | 1270 | { |
1271 | struct hda_cvt_setup *p; | ||
1272 | |||
1204 | if (!nid) | 1273 | if (!nid) |
1205 | return; | 1274 | return; |
1206 | 1275 | ||
1207 | snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid); | 1276 | snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid); |
1277 | /* here we just clear the active flag; actual clean-ups will be done | ||
1278 | * in purify_inactive_streams() | ||
1279 | */ | ||
1280 | p = get_hda_cvt_setup(codec, nid); | ||
1281 | if (p) | ||
1282 | p->active = 0; | ||
1283 | } | ||
1284 | EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream); | ||
1285 | |||
1286 | static void really_cleanup_stream(struct hda_codec *codec, | ||
1287 | struct hda_cvt_setup *q) | ||
1288 | { | ||
1289 | hda_nid_t nid = q->nid; | ||
1208 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0); | 1290 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0); |
1209 | #if 0 /* keep the format */ | ||
1210 | msleep(1); | ||
1211 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0); | 1291 | snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0); |
1212 | #endif | 1292 | memset(q, 0, sizeof(*q)); |
1293 | q->nid = nid; | ||
1294 | } | ||
1295 | |||
1296 | /* clean up the all conflicting obsolete streams */ | ||
1297 | static void purify_inactive_streams(struct hda_codec *codec) | ||
1298 | { | ||
1299 | int i; | ||
1300 | |||
1301 | for (i = 0; i < codec->cvt_setups.used; i++) { | ||
1302 | struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i); | ||
1303 | if (p->dirty) | ||
1304 | really_cleanup_stream(codec, p); | ||
1305 | } | ||
1306 | } | ||
1307 | |||
1308 | /* clean up all streams; called from suspend */ | ||
1309 | static void hda_cleanup_all_streams(struct hda_codec *codec) | ||
1310 | { | ||
1311 | int i; | ||
1312 | |||
1313 | for (i = 0; i < codec->cvt_setups.used; i++) { | ||
1314 | struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i); | ||
1315 | if (p->stream_tag) | ||
1316 | really_cleanup_stream(codec, p); | ||
1317 | } | ||
1213 | } | 1318 | } |
1214 | EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream); | ||
1215 | 1319 | ||
1216 | /* | 1320 | /* |
1217 | * amp access functions | 1321 | * amp access functions |
@@ -2928,6 +3032,7 @@ static void hda_call_codec_suspend(struct hda_codec *codec) | |||
2928 | { | 3032 | { |
2929 | if (codec->patch_ops.suspend) | 3033 | if (codec->patch_ops.suspend) |
2930 | codec->patch_ops.suspend(codec, PMSG_SUSPEND); | 3034 | codec->patch_ops.suspend(codec, PMSG_SUSPEND); |
3035 | hda_cleanup_all_streams(codec); | ||
2931 | hda_set_power_state(codec, | 3036 | hda_set_power_state(codec, |
2932 | codec->afg ? codec->afg : codec->mfg, | 3037 | codec->afg ? codec->afg : codec->mfg, |
2933 | AC_PWRST_D3); | 3038 | AC_PWRST_D3); |
@@ -3377,6 +3482,35 @@ static int set_pcm_default_values(struct hda_codec *codec, | |||
3377 | return 0; | 3482 | return 0; |
3378 | } | 3483 | } |
3379 | 3484 | ||
3485 | /* | ||
3486 | * codec prepare/cleanup entries | ||
3487 | */ | ||
3488 | int snd_hda_codec_prepare(struct hda_codec *codec, | ||
3489 | struct hda_pcm_stream *hinfo, | ||
3490 | unsigned int stream, | ||
3491 | unsigned int format, | ||
3492 | struct snd_pcm_substream *substream) | ||
3493 | { | ||
3494 | int ret; | ||
3495 | mutex_lock(&codec->prepare_mutex); | ||
3496 | ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream); | ||
3497 | if (ret >= 0) | ||
3498 | purify_inactive_streams(codec); | ||
3499 | mutex_unlock(&codec->prepare_mutex); | ||
3500 | return ret; | ||
3501 | } | ||
3502 | EXPORT_SYMBOL_HDA(snd_hda_codec_prepare); | ||
3503 | |||
3504 | void snd_hda_codec_cleanup(struct hda_codec *codec, | ||
3505 | struct hda_pcm_stream *hinfo, | ||
3506 | struct snd_pcm_substream *substream) | ||
3507 | { | ||
3508 | mutex_lock(&codec->prepare_mutex); | ||
3509 | hinfo->ops.cleanup(hinfo, codec, substream); | ||
3510 | mutex_unlock(&codec->prepare_mutex); | ||
3511 | } | ||
3512 | EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup); | ||
3513 | |||
3380 | /* global */ | 3514 | /* global */ |
3381 | const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = { | 3515 | const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = { |
3382 | "Audio", "SPDIF", "HDMI", "Modem" | 3516 | "Audio", "SPDIF", "HDMI", "Modem" |
diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index 0328cf55cdb..3f7a479881e 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h | |||
@@ -826,12 +826,14 @@ struct hda_codec { | |||
826 | 826 | ||
827 | struct mutex spdif_mutex; | 827 | struct mutex spdif_mutex; |
828 | struct mutex control_mutex; | 828 | struct mutex control_mutex; |
829 | struct mutex prepare_mutex; | ||
829 | unsigned int spdif_status; /* IEC958 status bits */ | 830 | unsigned int spdif_status; /* IEC958 status bits */ |
830 | unsigned short spdif_ctls; /* SPDIF control bits */ | 831 | unsigned short spdif_ctls; /* SPDIF control bits */ |
831 | unsigned int spdif_in_enable; /* SPDIF input enable? */ | 832 | unsigned int spdif_in_enable; /* SPDIF input enable? */ |
832 | hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */ | 833 | hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */ |
833 | struct snd_array init_pins; /* initial (BIOS) pin configurations */ | 834 | struct snd_array init_pins; /* initial (BIOS) pin configurations */ |
834 | struct snd_array driver_pins; /* pin configs set by codec parser */ | 835 | struct snd_array driver_pins; /* pin configs set by codec parser */ |
836 | struct snd_array cvt_setups; /* audio convert setups */ | ||
835 | 837 | ||
836 | #ifdef CONFIG_SND_HDA_HWDEP | 838 | #ifdef CONFIG_SND_HDA_HWDEP |
837 | struct snd_hwdep *hwdep; /* assigned hwdep device */ | 839 | struct snd_hwdep *hwdep; /* assigned hwdep device */ |
@@ -948,6 +950,16 @@ int snd_hda_codec_build_controls(struct hda_codec *codec); | |||
948 | */ | 950 | */ |
949 | int snd_hda_build_pcms(struct hda_bus *bus); | 951 | int snd_hda_build_pcms(struct hda_bus *bus); |
950 | int snd_hda_codec_build_pcms(struct hda_codec *codec); | 952 | int snd_hda_codec_build_pcms(struct hda_codec *codec); |
953 | |||
954 | int snd_hda_codec_prepare(struct hda_codec *codec, | ||
955 | struct hda_pcm_stream *hinfo, | ||
956 | unsigned int stream, | ||
957 | unsigned int format, | ||
958 | struct snd_pcm_substream *substream); | ||
959 | void snd_hda_codec_cleanup(struct hda_codec *codec, | ||
960 | struct hda_pcm_stream *hinfo, | ||
961 | struct snd_pcm_substream *substream); | ||
962 | |||
951 | void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, | 963 | void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, |
952 | u32 stream_tag, | 964 | u32 stream_tag, |
953 | int channel_id, int format); | 965 | int channel_id, int format); |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 66d420212d9..1053fff4bd0 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -1634,7 +1634,7 @@ static int azx_pcm_hw_free(struct snd_pcm_substream *substream) | |||
1634 | azx_dev->period_bytes = 0; | 1634 | azx_dev->period_bytes = 0; |
1635 | azx_dev->format_val = 0; | 1635 | azx_dev->format_val = 0; |
1636 | 1636 | ||
1637 | hinfo->ops.cleanup(hinfo, apcm->codec, substream); | 1637 | snd_hda_codec_cleanup(apcm->codec, hinfo, substream); |
1638 | 1638 | ||
1639 | return snd_pcm_lib_free_pages(substream); | 1639 | return snd_pcm_lib_free_pages(substream); |
1640 | } | 1640 | } |
@@ -1688,8 +1688,8 @@ static int azx_pcm_prepare(struct snd_pcm_substream *substream) | |||
1688 | else | 1688 | else |
1689 | azx_dev->fifo_size = 0; | 1689 | azx_dev->fifo_size = 0; |
1690 | 1690 | ||
1691 | return hinfo->ops.prepare(hinfo, apcm->codec, azx_dev->stream_tag, | 1691 | return snd_hda_codec_prepare(apcm->codec, hinfo, azx_dev->stream_tag, |
1692 | azx_dev->format_val, substream); | 1692 | azx_dev->format_val, substream); |
1693 | } | 1693 | } |
1694 | 1694 | ||
1695 | static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd) | 1695 | static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd) |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index df8b19b1730..f7e234e5ee9 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
@@ -3206,6 +3206,8 @@ static struct hda_codec_preset snd_hda_preset_conexant[] = { | |||
3206 | .patch = patch_cxt5066 }, | 3206 | .patch = patch_cxt5066 }, |
3207 | { .id = 0x14f15067, .name = "CX20583 (Pebble HSF)", | 3207 | { .id = 0x14f15067, .name = "CX20583 (Pebble HSF)", |
3208 | .patch = patch_cxt5066 }, | 3208 | .patch = patch_cxt5066 }, |
3209 | { .id = 0x14f15068, .name = "CX20584", | ||
3210 | .patch = patch_cxt5066 }, | ||
3209 | { .id = 0x14f15069, .name = "CX20585", | 3211 | { .id = 0x14f15069, .name = "CX20585", |
3210 | .patch = patch_cxt5066 }, | 3212 | .patch = patch_cxt5066 }, |
3211 | {} /* terminator */ | 3213 | {} /* terminator */ |
@@ -3216,6 +3218,7 @@ MODULE_ALIAS("snd-hda-codec-id:14f15047"); | |||
3216 | MODULE_ALIAS("snd-hda-codec-id:14f15051"); | 3218 | MODULE_ALIAS("snd-hda-codec-id:14f15051"); |
3217 | MODULE_ALIAS("snd-hda-codec-id:14f15066"); | 3219 | MODULE_ALIAS("snd-hda-codec-id:14f15066"); |
3218 | MODULE_ALIAS("snd-hda-codec-id:14f15067"); | 3220 | MODULE_ALIAS("snd-hda-codec-id:14f15067"); |
3221 | MODULE_ALIAS("snd-hda-codec-id:14f15068"); | ||
3219 | MODULE_ALIAS("snd-hda-codec-id:14f15069"); | 3222 | MODULE_ALIAS("snd-hda-codec-id:14f15069"); |
3220 | 3223 | ||
3221 | MODULE_LICENSE("GPL"); | 3224 | MODULE_LICENSE("GPL"); |
diff --git a/sound/pci/hda/patch_nvhdmi.c b/sound/pci/hda/patch_nvhdmi.c index a281836fd47..77e2b4028b9 100644 --- a/sound/pci/hda/patch_nvhdmi.c +++ b/sound/pci/hda/patch_nvhdmi.c | |||
@@ -540,26 +540,32 @@ static int patch_nvhdmi_2ch(struct hda_codec *codec) | |||
540 | * patch entries | 540 | * patch entries |
541 | */ | 541 | */ |
542 | static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { | 542 | static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { |
543 | { .id = 0x10de0002, .name = "MCP77/78 HDMI", | 543 | { .id = 0x10de0002, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, |
544 | .patch = patch_nvhdmi_8ch_7x }, | 544 | { .id = 0x10de0003, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, |
545 | { .id = 0x10de0003, .name = "MCP77/78 HDMI", | 545 | { .id = 0x10de0005, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, |
546 | .patch = patch_nvhdmi_8ch_7x }, | 546 | { .id = 0x10de0006, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, |
547 | { .id = 0x10de0005, .name = "MCP77/78 HDMI", | 547 | { .id = 0x10de0007, .name = "MCP79/7A HDMI", .patch = patch_nvhdmi_8ch_7x }, |
548 | .patch = patch_nvhdmi_8ch_7x }, | 548 | { .id = 0x10de000a, .name = "GPU 0a HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
549 | { .id = 0x10de0006, .name = "MCP77/78 HDMI", | 549 | { .id = 0x10de000b, .name = "GPU 0b HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
550 | .patch = patch_nvhdmi_8ch_7x }, | 550 | { .id = 0x10de000c, .name = "MCP89 HDMI", .patch = patch_nvhdmi_8ch_89 }, |
551 | { .id = 0x10de0007, .name = "MCP79/7A HDMI", | 551 | { .id = 0x10de000d, .name = "GPU 0d HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
552 | .patch = patch_nvhdmi_8ch_7x }, | 552 | { .id = 0x10de0010, .name = "GPU 10 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
553 | { .id = 0x10de000a, .name = "GT220 HDMI", | 553 | { .id = 0x10de0011, .name = "GPU 11 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
554 | .patch = patch_nvhdmi_8ch_89 }, | 554 | { .id = 0x10de0012, .name = "GPU 12 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
555 | { .id = 0x10de000b, .name = "GT21x HDMI", | 555 | { .id = 0x10de0013, .name = "GPU 13 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
556 | .patch = patch_nvhdmi_8ch_89 }, | 556 | { .id = 0x10de0014, .name = "GPU 14 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
557 | { .id = 0x10de000c, .name = "MCP89 HDMI", | 557 | { .id = 0x10de0018, .name = "GPU 18 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
558 | .patch = patch_nvhdmi_8ch_89 }, | 558 | { .id = 0x10de0019, .name = "GPU 19 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
559 | { .id = 0x10de000d, .name = "GT240 HDMI", | 559 | { .id = 0x10de001a, .name = "GPU 1a HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
560 | .patch = patch_nvhdmi_8ch_89 }, | 560 | { .id = 0x10de001b, .name = "GPU 1b HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
561 | { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, | 561 | { .id = 0x10de001c, .name = "GPU 1c HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
562 | { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch }, | 562 | { .id = 0x10de0040, .name = "GPU 40 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, |
563 | { .id = 0x10de0041, .name = "GPU 41 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, | ||
564 | { .id = 0x10de0042, .name = "GPU 42 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, | ||
565 | { .id = 0x10de0043, .name = "GPU 43 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, | ||
566 | { .id = 0x10de0044, .name = "GPU 44 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, | ||
567 | { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, | ||
568 | { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch }, | ||
563 | {} /* terminator */ | 569 | {} /* terminator */ |
564 | }; | 570 | }; |
565 | 571 | ||
@@ -572,6 +578,21 @@ MODULE_ALIAS("snd-hda-codec-id:10de000a"); | |||
572 | MODULE_ALIAS("snd-hda-codec-id:10de000b"); | 578 | MODULE_ALIAS("snd-hda-codec-id:10de000b"); |
573 | MODULE_ALIAS("snd-hda-codec-id:10de000c"); | 579 | MODULE_ALIAS("snd-hda-codec-id:10de000c"); |
574 | MODULE_ALIAS("snd-hda-codec-id:10de000d"); | 580 | MODULE_ALIAS("snd-hda-codec-id:10de000d"); |
581 | MODULE_ALIAS("snd-hda-codec-id:10de0010"); | ||
582 | MODULE_ALIAS("snd-hda-codec-id:10de0011"); | ||
583 | MODULE_ALIAS("snd-hda-codec-id:10de0012"); | ||
584 | MODULE_ALIAS("snd-hda-codec-id:10de0013"); | ||
585 | MODULE_ALIAS("snd-hda-codec-id:10de0014"); | ||
586 | MODULE_ALIAS("snd-hda-codec-id:10de0018"); | ||
587 | MODULE_ALIAS("snd-hda-codec-id:10de0019"); | ||
588 | MODULE_ALIAS("snd-hda-codec-id:10de001a"); | ||
589 | MODULE_ALIAS("snd-hda-codec-id:10de001b"); | ||
590 | MODULE_ALIAS("snd-hda-codec-id:10de001c"); | ||
591 | MODULE_ALIAS("snd-hda-codec-id:10de0040"); | ||
592 | MODULE_ALIAS("snd-hda-codec-id:10de0041"); | ||
593 | MODULE_ALIAS("snd-hda-codec-id:10de0042"); | ||
594 | MODULE_ALIAS("snd-hda-codec-id:10de0043"); | ||
595 | MODULE_ALIAS("snd-hda-codec-id:10de0044"); | ||
575 | MODULE_ALIAS("snd-hda-codec-id:10de0067"); | 596 | MODULE_ALIAS("snd-hda-codec-id:10de0067"); |
576 | MODULE_ALIAS("snd-hda-codec-id:10de8001"); | 597 | MODULE_ALIAS("snd-hda-codec-id:10de8001"); |
577 | 598 | ||
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 6ac53f7de54..55d6e5b6bb7 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -137,6 +137,7 @@ enum { | |||
137 | ALC269VB_DMIC, | 137 | ALC269VB_DMIC, |
138 | ALC269_FUJITSU, | 138 | ALC269_FUJITSU, |
139 | ALC269_LIFEBOOK, | 139 | ALC269_LIFEBOOK, |
140 | ALC271_ACER, | ||
140 | ALC269_AUTO, | 141 | ALC269_AUTO, |
141 | ALC269_MODEL_LAST /* last tag */ | 142 | ALC269_MODEL_LAST /* last tag */ |
142 | }; | 143 | }; |
@@ -7041,6 +7042,7 @@ static int patch_alc260(struct hda_codec *codec) | |||
7041 | 7042 | ||
7042 | spec->stream_analog_playback = &alc260_pcm_analog_playback; | 7043 | spec->stream_analog_playback = &alc260_pcm_analog_playback; |
7043 | spec->stream_analog_capture = &alc260_pcm_analog_capture; | 7044 | spec->stream_analog_capture = &alc260_pcm_analog_capture; |
7045 | spec->stream_analog_alt_capture = &alc260_pcm_analog_capture; | ||
7044 | 7046 | ||
7045 | spec->stream_digital_playback = &alc260_pcm_digital_playback; | 7047 | spec->stream_digital_playback = &alc260_pcm_digital_playback; |
7046 | spec->stream_digital_capture = &alc260_pcm_digital_capture; | 7048 | spec->stream_digital_capture = &alc260_pcm_digital_capture; |
@@ -13475,7 +13477,6 @@ static struct snd_pci_quirk alc268_cfg_tbl[] = { | |||
13475 | SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), | 13477 | SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), |
13476 | SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), | 13478 | SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), |
13477 | SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), | 13479 | SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), |
13478 | SND_PCI_QUIRK(0x1854, 0x1775, "LG R510", ALC268_DELL), | ||
13479 | {} | 13480 | {} |
13480 | }; | 13481 | }; |
13481 | 13482 | ||
@@ -13866,6 +13867,12 @@ static struct snd_kcontrol_new alc269vb_laptop_mixer[] = { | |||
13866 | { } /* end */ | 13867 | { } /* end */ |
13867 | }; | 13868 | }; |
13868 | 13869 | ||
13870 | static struct snd_kcontrol_new alc269_asus_mixer[] = { | ||
13871 | HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), | ||
13872 | HDA_CODEC_MUTE("Master Playback Switch", 0x0c, 0x0, HDA_INPUT), | ||
13873 | { } /* end */ | ||
13874 | }; | ||
13875 | |||
13869 | /* capture mixer elements */ | 13876 | /* capture mixer elements */ |
13870 | static struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { | 13877 | static struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { |
13871 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | 13878 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), |
@@ -14086,6 +14093,20 @@ static struct hda_verb alc269vb_laptop_amic_init_verbs[] = { | |||
14086 | {} | 14093 | {} |
14087 | }; | 14094 | }; |
14088 | 14095 | ||
14096 | static struct hda_verb alc271_acer_dmic_verbs[] = { | ||
14097 | {0x20, AC_VERB_SET_COEF_INDEX, 0x0d}, | ||
14098 | {0x20, AC_VERB_SET_PROC_COEF, 0x4000}, | ||
14099 | {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
14100 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
14101 | {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
14102 | {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
14103 | {0x21, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
14104 | {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, | ||
14105 | {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT}, | ||
14106 | {0x22, AC_VERB_SET_CONNECT_SEL, 6}, | ||
14107 | { } | ||
14108 | }; | ||
14109 | |||
14089 | /* toggle speaker-output according to the hp-jack state */ | 14110 | /* toggle speaker-output according to the hp-jack state */ |
14090 | static void alc269_speaker_automute(struct hda_codec *codec) | 14111 | static void alc269_speaker_automute(struct hda_codec *codec) |
14091 | { | 14112 | { |
@@ -14465,6 +14486,7 @@ static const char *alc269_models[ALC269_MODEL_LAST] = { | |||
14465 | 14486 | ||
14466 | static struct snd_pci_quirk alc269_cfg_tbl[] = { | 14487 | static struct snd_pci_quirk alc269_cfg_tbl[] = { |
14467 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_QUANTA_FL1), | 14488 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_QUANTA_FL1), |
14489 | SND_PCI_QUIRK(0x1025, 0x047c, "ACER ZGA", ALC271_ACER), | ||
14468 | SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", | 14490 | SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", |
14469 | ALC269_AMIC), | 14491 | ALC269_AMIC), |
14470 | SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269VB_AMIC), | 14492 | SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269VB_AMIC), |
@@ -14626,6 +14648,23 @@ static struct alc_config_preset alc269_presets[] = { | |||
14626 | .unsol_event = alc269_lifebook_unsol_event, | 14648 | .unsol_event = alc269_lifebook_unsol_event, |
14627 | .init_hook = alc269_lifebook_init_hook, | 14649 | .init_hook = alc269_lifebook_init_hook, |
14628 | }, | 14650 | }, |
14651 | [ALC271_ACER] = { | ||
14652 | .mixers = { alc269_asus_mixer }, | ||
14653 | .cap_mixer = alc269vb_laptop_digital_capture_mixer, | ||
14654 | .init_verbs = { alc269_init_verbs, alc271_acer_dmic_verbs }, | ||
14655 | .num_dacs = ARRAY_SIZE(alc269_dac_nids), | ||
14656 | .dac_nids = alc269_dac_nids, | ||
14657 | .adc_nids = alc262_dmic_adc_nids, | ||
14658 | .num_adc_nids = ARRAY_SIZE(alc262_dmic_adc_nids), | ||
14659 | .capsrc_nids = alc262_dmic_capsrc_nids, | ||
14660 | .num_channel_mode = ARRAY_SIZE(alc269_modes), | ||
14661 | .channel_mode = alc269_modes, | ||
14662 | .input_mux = &alc269_capture_source, | ||
14663 | .dig_out_nid = ALC880_DIGOUT_NID, | ||
14664 | .unsol_event = alc_sku_unsol_event, | ||
14665 | .setup = alc269vb_laptop_dmic_setup, | ||
14666 | .init_hook = alc_inithook, | ||
14667 | }, | ||
14629 | }; | 14668 | }; |
14630 | 14669 | ||
14631 | static int patch_alc269(struct hda_codec *codec) | 14670 | static int patch_alc269(struct hda_codec *codec) |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index b8d730c47df..f3f861bd1bf 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -94,6 +94,7 @@ enum { | |||
94 | STAC_92HD83XXX_PWR_REF, | 94 | STAC_92HD83XXX_PWR_REF, |
95 | STAC_DELL_S14, | 95 | STAC_DELL_S14, |
96 | STAC_92HD83XXX_HP, | 96 | STAC_92HD83XXX_HP, |
97 | STAC_HP_DV7_4000, | ||
97 | STAC_92HD83XXX_MODELS | 98 | STAC_92HD83XXX_MODELS |
98 | }; | 99 | }; |
99 | 100 | ||
@@ -1632,10 +1633,17 @@ static unsigned int dell_s14_pin_configs[10] = { | |||
1632 | 0x40f000f0, 0x40f000f0, | 1633 | 0x40f000f0, 0x40f000f0, |
1633 | }; | 1634 | }; |
1634 | 1635 | ||
1636 | static unsigned int hp_dv7_4000_pin_configs[10] = { | ||
1637 | 0x03a12050, 0x0321201f, 0x40f000f0, 0x90170110, | ||
1638 | 0x40f000f0, 0x40f000f0, 0x90170110, 0xd5a30140, | ||
1639 | 0x40f000f0, 0x40f000f0, | ||
1640 | }; | ||
1641 | |||
1635 | static unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = { | 1642 | static unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = { |
1636 | [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs, | 1643 | [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs, |
1637 | [STAC_92HD83XXX_PWR_REF] = ref92hd83xxx_pin_configs, | 1644 | [STAC_92HD83XXX_PWR_REF] = ref92hd83xxx_pin_configs, |
1638 | [STAC_DELL_S14] = dell_s14_pin_configs, | 1645 | [STAC_DELL_S14] = dell_s14_pin_configs, |
1646 | [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs, | ||
1639 | }; | 1647 | }; |
1640 | 1648 | ||
1641 | static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { | 1649 | static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { |
@@ -1644,6 +1652,7 @@ static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { | |||
1644 | [STAC_92HD83XXX_PWR_REF] = "mic-ref", | 1652 | [STAC_92HD83XXX_PWR_REF] = "mic-ref", |
1645 | [STAC_DELL_S14] = "dell-s14", | 1653 | [STAC_DELL_S14] = "dell-s14", |
1646 | [STAC_92HD83XXX_HP] = "hp", | 1654 | [STAC_92HD83XXX_HP] = "hp", |
1655 | [STAC_HP_DV7_4000] = "hp-dv7-4000", | ||
1647 | }; | 1656 | }; |
1648 | 1657 | ||
1649 | static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { | 1658 | static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { |
@@ -5340,6 +5349,8 @@ again: | |||
5340 | case 0x111d7667: | 5349 | case 0x111d7667: |
5341 | case 0x111d7668: | 5350 | case 0x111d7668: |
5342 | case 0x111d7669: | 5351 | case 0x111d7669: |
5352 | case 0x111d76d1: | ||
5353 | case 0x111d76d9: | ||
5343 | spec->num_pins = ARRAY_SIZE(stac92hd88xxx_pin_nids); | 5354 | spec->num_pins = ARRAY_SIZE(stac92hd88xxx_pin_nids); |
5344 | spec->pin_nids = stac92hd88xxx_pin_nids; | 5355 | spec->pin_nids = stac92hd88xxx_pin_nids; |
5345 | spec->mono_nid = 0; | 5356 | spec->mono_nid = 0; |
@@ -6274,6 +6285,8 @@ static struct hda_codec_preset snd_hda_preset_sigmatel[] = { | |||
6274 | { .id = 0x111d76d4, .name = "92HD83C1C5", .patch = patch_stac92hd83xxx}, | 6285 | { .id = 0x111d76d4, .name = "92HD83C1C5", .patch = patch_stac92hd83xxx}, |
6275 | { .id = 0x111d7605, .name = "92HD81B1X5", .patch = patch_stac92hd83xxx}, | 6286 | { .id = 0x111d7605, .name = "92HD81B1X5", .patch = patch_stac92hd83xxx}, |
6276 | { .id = 0x111d76d5, .name = "92HD81B1C5", .patch = patch_stac92hd83xxx}, | 6287 | { .id = 0x111d76d5, .name = "92HD81B1C5", .patch = patch_stac92hd83xxx}, |
6288 | { .id = 0x111d76d1, .name = "92HD87B1/3", .patch = patch_stac92hd83xxx}, | ||
6289 | { .id = 0x111d76d9, .name = "92HD87B2/4", .patch = patch_stac92hd83xxx}, | ||
6277 | { .id = 0x111d7666, .name = "92HD88B3", .patch = patch_stac92hd83xxx}, | 6290 | { .id = 0x111d7666, .name = "92HD88B3", .patch = patch_stac92hd83xxx}, |
6278 | { .id = 0x111d7667, .name = "92HD88B1", .patch = patch_stac92hd83xxx}, | 6291 | { .id = 0x111d7667, .name = "92HD88B1", .patch = patch_stac92hd83xxx}, |
6279 | { .id = 0x111d7668, .name = "92HD88B2", .patch = patch_stac92hd83xxx}, | 6292 | { .id = 0x111d7668, .name = "92HD88B2", .patch = patch_stac92hd83xxx}, |
diff --git a/sound/soc/blackfin/Kconfig b/sound/soc/blackfin/Kconfig index 8ef25025f3d..3abeeddc67d 100644 --- a/sound/soc/blackfin/Kconfig +++ b/sound/soc/blackfin/Kconfig | |||
@@ -105,13 +105,18 @@ config SND_BF5XX_RESET_GPIO_NUM | |||
105 | Set the correct GPIO for RESET the sound chip. | 105 | Set the correct GPIO for RESET the sound chip. |
106 | 106 | ||
107 | config SND_BF5XX_SOC_AD1980 | 107 | config SND_BF5XX_SOC_AD1980 |
108 | tristate "SoC AD1980/1 Audio support for BF5xx" | 108 | tristate "SoC AD1980/1 Audio support for BF5xx (Obsolete)" |
109 | depends on SND_BF5XX_AC97 | 109 | depends on SND_BF5XX_AC97 |
110 | select SND_BF5XX_SOC_AC97 | 110 | select SND_BF5XX_SOC_AC97 |
111 | select SND_SOC_AD1980 | 111 | select SND_SOC_AD1980 |
112 | help | 112 | help |
113 | Say Y if you want to add support for SoC audio on BF5xx STAMP/EZKIT. | 113 | Say Y if you want to add support for SoC audio on BF5xx STAMP/EZKIT. |
114 | 114 | ||
115 | Warning: | ||
116 | Because Analog Devices Inc. discontinued the ad1980 sound chip since | ||
117 | Sep. 2009, this ad1980 driver is not maintained, tested and supported | ||
118 | by ADI now. | ||
119 | |||
115 | config SND_BF5XX_SOC_SPORT | 120 | config SND_BF5XX_SOC_SPORT |
116 | tristate | 121 | tristate |
117 | 122 | ||
diff --git a/sound/soc/blackfin/bf5xx-ad1980.c b/sound/soc/blackfin/bf5xx-ad1980.c index d8f59127377..92f7c327bb7 100644 --- a/sound/soc/blackfin/bf5xx-ad1980.c +++ b/sound/soc/blackfin/bf5xx-ad1980.c | |||
@@ -26,6 +26,14 @@ | |||
26 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 26 | * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
27 | */ | 27 | */ |
28 | 28 | ||
29 | /* | ||
30 | * WARNING: | ||
31 | * | ||
32 | * Because Analog Devices Inc. discontinued the ad1980 sound chip since | ||
33 | * Sep. 2009, this ad1980 driver is not maintained, tested and supported | ||
34 | * by ADI now. | ||
35 | */ | ||
36 | |||
29 | #include <linux/module.h> | 37 | #include <linux/module.h> |
30 | #include <linux/moduleparam.h> | 38 | #include <linux/moduleparam.h> |
31 | #include <linux/device.h> | 39 | #include <linux/device.h> |
@@ -109,5 +117,5 @@ module_exit(bf5xx_board_exit); | |||
109 | 117 | ||
110 | /* Module information */ | 118 | /* Module information */ |
111 | MODULE_AUTHOR("Cliff Cai"); | 119 | MODULE_AUTHOR("Cliff Cai"); |
112 | MODULE_DESCRIPTION("ALSA SoC AD1980/1 BF5xx board"); | 120 | MODULE_DESCRIPTION("ALSA SoC AD1980/1 BF5xx board (Obsolete)"); |
113 | MODULE_LICENSE("GPL"); | 121 | MODULE_LICENSE("GPL"); |
diff --git a/sound/soc/codecs/ad1980.c b/sound/soc/codecs/ad1980.c index 042072738cd..70cfaec3be2 100644 --- a/sound/soc/codecs/ad1980.c +++ b/sound/soc/codecs/ad1980.c | |||
@@ -11,6 +11,14 @@ | |||
11 | * option) any later version. | 11 | * option) any later version. |
12 | */ | 12 | */ |
13 | 13 | ||
14 | /* | ||
15 | * WARNING: | ||
16 | * | ||
17 | * Because Analog Devices Inc. discontinued the ad1980 sound chip since | ||
18 | * Sep. 2009, this ad1980 driver is not maintained, tested and supported | ||
19 | * by ADI now. | ||
20 | */ | ||
21 | |||
14 | #include <linux/init.h> | 22 | #include <linux/init.h> |
15 | #include <linux/slab.h> | 23 | #include <linux/slab.h> |
16 | #include <linux/module.h> | 24 | #include <linux/module.h> |
@@ -298,6 +306,6 @@ struct snd_soc_codec_device soc_codec_dev_ad1980 = { | |||
298 | }; | 306 | }; |
299 | EXPORT_SYMBOL_GPL(soc_codec_dev_ad1980); | 307 | EXPORT_SYMBOL_GPL(soc_codec_dev_ad1980); |
300 | 308 | ||
301 | MODULE_DESCRIPTION("ASoC ad1980 driver"); | 309 | MODULE_DESCRIPTION("ASoC ad1980 driver (Obsolete)"); |
302 | MODULE_AUTHOR("Roy Huang, Cliff Cai"); | 310 | MODULE_AUTHOR("Roy Huang, Cliff Cai"); |
303 | MODULE_LICENSE("GPL"); | 311 | MODULE_LICENSE("GPL"); |
diff --git a/sound/soc/codecs/ad1980.h b/sound/soc/codecs/ad1980.h index db6c8500d66..538f37c9080 100644 --- a/sound/soc/codecs/ad1980.h +++ b/sound/soc/codecs/ad1980.h | |||
@@ -1,5 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * ad1980.h -- ad1980 Soc Audio driver | 2 | * ad1980.h -- ad1980 Soc Audio driver |
3 | * | ||
4 | * WARNING: | ||
5 | * | ||
6 | * Because Analog Devices Inc. discontinued the ad1980 sound chip since | ||
7 | * Sep. 2009, this ad1980 driver is not maintained, tested and supported | ||
8 | * by ADI now. | ||
3 | */ | 9 | */ |
4 | 10 | ||
5 | #ifndef _AD1980_H | 11 | #ifndef _AD1980_H |
diff --git a/sound/soc/codecs/wm8580.c b/sound/soc/codecs/wm8580.c index c3571ee5c11..72deeabef4f 100644 --- a/sound/soc/codecs/wm8580.c +++ b/sound/soc/codecs/wm8580.c | |||
@@ -269,9 +269,9 @@ SOC_DOUBLE("DAC2 Invert Switch", WM8580_DAC_CONTROL4, 2, 3, 1, 0), | |||
269 | SOC_DOUBLE("DAC3 Invert Switch", WM8580_DAC_CONTROL4, 4, 5, 1, 0), | 269 | SOC_DOUBLE("DAC3 Invert Switch", WM8580_DAC_CONTROL4, 4, 5, 1, 0), |
270 | 270 | ||
271 | SOC_SINGLE("DAC ZC Switch", WM8580_DAC_CONTROL5, 5, 1, 0), | 271 | SOC_SINGLE("DAC ZC Switch", WM8580_DAC_CONTROL5, 5, 1, 0), |
272 | SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 0), | 272 | SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 1), |
273 | SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 0), | 273 | SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 1), |
274 | SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 0), | 274 | SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 1), |
275 | 275 | ||
276 | SOC_DOUBLE("ADC Mute Switch", WM8580_ADC_CONTROL1, 0, 1, 1, 0), | 276 | SOC_DOUBLE("ADC Mute Switch", WM8580_ADC_CONTROL1, 0, 1, 1, 0), |
277 | SOC_SINGLE("ADC High-Pass Filter Switch", WM8580_ADC_CONTROL1, 4, 1, 0), | 277 | SOC_SINGLE("ADC High-Pass Filter Switch", WM8580_ADC_CONTROL1, 4, 1, 0), |
diff --git a/sound/soc/imx/Kconfig b/sound/soc/imx/Kconfig index 52dac5e3874..687c76fc083 100644 --- a/sound/soc/imx/Kconfig +++ b/sound/soc/imx/Kconfig | |||
@@ -28,7 +28,9 @@ config SND_SOC_PHYCORE_AC97 | |||
28 | 28 | ||
29 | config SND_SOC_EUKREA_TLV320 | 29 | config SND_SOC_EUKREA_TLV320 |
30 | tristate "Eukrea TLV320" | 30 | tristate "Eukrea TLV320" |
31 | depends on MACH_EUKREA_MBIMX27_BASEBOARD || MACH_EUKREA_MBIMXSD_BASEBOARD | 31 | depends on MACH_EUKREA_MBIMX27_BASEBOARD \ |
32 | || MACH_EUKREA_MBIMXSD25_BASEBOARD \ | ||
33 | || MACH_EUKREA_MBIMXSD35_BASEBOARD | ||
32 | select SND_SOC_TLV320AIC23 | 34 | select SND_SOC_TLV320AIC23 |
33 | help | 35 | help |
34 | Enable I2S based access to the TLV320AIC23B codec attached | 36 | Enable I2S based access to the TLV320AIC23B codec attached |
diff --git a/sound/soc/soc-cache.c b/sound/soc/soc-cache.c index 472af38188c..adbc68ce905 100644 --- a/sound/soc/soc-cache.c +++ b/sound/soc/soc-cache.c | |||
@@ -340,7 +340,7 @@ static unsigned int snd_soc_16_8_read_i2c(struct snd_soc_codec *codec, | |||
340 | static unsigned int snd_soc_16_8_read(struct snd_soc_codec *codec, | 340 | static unsigned int snd_soc_16_8_read(struct snd_soc_codec *codec, |
341 | unsigned int reg) | 341 | unsigned int reg) |
342 | { | 342 | { |
343 | u16 *cache = codec->reg_cache; | 343 | u8 *cache = codec->reg_cache; |
344 | 344 | ||
345 | reg &= 0xff; | 345 | reg &= 0xff; |
346 | if (reg >= codec->reg_cache_size) | 346 | if (reg >= codec->reg_cache_size) |
@@ -351,7 +351,7 @@ static unsigned int snd_soc_16_8_read(struct snd_soc_codec *codec, | |||
351 | static int snd_soc_16_8_write(struct snd_soc_codec *codec, unsigned int reg, | 351 | static int snd_soc_16_8_write(struct snd_soc_codec *codec, unsigned int reg, |
352 | unsigned int value) | 352 | unsigned int value) |
353 | { | 353 | { |
354 | u16 *cache = codec->reg_cache; | 354 | u8 *cache = codec->reg_cache; |
355 | u8 data[3]; | 355 | u8 data[3]; |
356 | int ret; | 356 | int ret; |
357 | 357 | ||