Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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

+305 -46
+11 -2
Documentation/sound/alsa/HD-Audio-Models.txt
··· 83 83 ====== 84 84 basic Basic preset 85 85 quanta Quanta FL1 86 - eeepc-p703 ASUS Eeepc P703 P900A 87 - eeepc-p901 ASUS Eeepc P901 S101 86 + laptop-amic Laptops with analog-mic input 87 + laptop-dmic Laptops with digital-mic input 88 88 fujitsu FSC Amilo 89 89 lifebook Fujitsu Lifebook S6420 90 90 auto auto-config reading BIOS (default) ··· 109 109 asus-mode4 ASUS 110 110 asus-mode5 ASUS 111 111 asus-mode6 ASUS 112 + asus-mode7 ASUS 113 + asus-mode8 ASUS 112 114 dell Dell with ALC272 113 115 dell-zm1 Dell ZM1 with ALC272 114 116 samsung-nc10 Samsung NC10 mini notebook ··· 297 295 ============= 298 296 laptop Basic Laptop config (default) 299 297 dell-laptop Dell laptops 298 + dell-vostro Dell Vostro 300 299 olpc-xo-1_5 OLPC XO 1.5 301 300 ideapad Lenovo IdeaPad U150 301 + thinkpad Lenovo Thinkpad 302 302 303 303 STAC9200 304 304 ======== ··· 408 404 mic-ref Reference board with power management for ports 409 405 dell-s14 Dell laptop 410 406 hp HP laptops with (inverted) mute-LED 407 + hp-dv7-4000 HP dv-7 4000 411 408 auto BIOS setup (default) 412 409 413 410 STAC9872 ··· 420 415 ======================== 421 416 mbp55 MacBook Pro 5,5 422 417 imac27 IMac 27 Inch 418 + auto BIOS setup (default) 419 + 420 + VIA VT17xx/VT18xx/VT20xx 421 + ======================== 423 422 auto BIOS setup (default)
+1 -1
sound/oss/ad1848.c
··· 716 716 717 717 default: 718 718 if (get_user(val, (int __user *)arg)) 719 - return -EFAULT; 719 + return -EFAULT; 720 720 val = ad1848_mixer_set(devc, cmd & 0xff, val); 721 721 break; 722 722 }
-1
sound/oss/au1550_ac97.c
··· 50 50 #include <linux/poll.h> 51 51 #include <linux/bitops.h> 52 52 #include <linux/spinlock.h> 53 - #include <linux/smp_lock.h> 54 53 #include <linux/ac97_codec.h> 55 54 #include <linux/mutex.h> 56 55
+143 -9
sound/pci/hda/hda_codec.c
··· 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 1004 * codec destructor 975 1005 */ 976 1006 static void snd_hda_codec_free(struct hda_codec *codec) ··· 1068 1038 codec->addr = codec_addr; 1069 1039 mutex_init(&codec->spdif_mutex); 1070 1040 mutex_init(&codec->control_mutex); 1041 + mutex_init(&codec->prepare_mutex); 1071 1042 init_hda_cache(&codec->amp_cache, sizeof(struct hda_amp_info)); 1072 1043 init_hda_cache(&codec->cmd_cache, sizeof(struct hda_cache_head)); 1073 1044 snd_array_init(&codec->mixers, sizeof(struct hda_nid_item), 32); 1074 1045 snd_array_init(&codec->nids, sizeof(struct hda_nid_item), 32); 1075 1046 snd_array_init(&codec->init_pins, sizeof(struct hda_pincfg), 16); 1076 1047 snd_array_init(&codec->driver_pins, sizeof(struct hda_pincfg), 16); 1048 + snd_array_init(&codec->cvt_setups, sizeof(struct hda_cvt_setup), 8); 1077 1049 if (codec->bus->modelname) { 1078 1050 codec->modelname = kstrdup(codec->bus->modelname, GFP_KERNEL); 1079 1051 if (!codec->modelname) { ··· 1213 1181 u32 stream_tag, 1214 1182 int channel_id, int format) 1215 1183 { 1184 + struct hda_cvt_setup *p; 1185 + unsigned int oldval, newval; 1186 + int i; 1187 + 1216 1188 if (!nid) 1217 1189 return; 1218 1190 1219 1191 snd_printdd("hda_codec_setup_stream: " 1220 1192 "NID=0x%x, stream=0x%x, channel=%d, format=0x%x\n", 1221 1193 nid, stream_tag, channel_id, format); 1222 - snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 1223 - (stream_tag << 4) | channel_id); 1224 - msleep(1); 1225 - snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, format); 1194 + p = get_hda_cvt_setup(codec, nid); 1195 + if (!p) 1196 + return; 1197 + /* update the stream-id if changed */ 1198 + if (p->stream_tag != stream_tag || p->channel_id != channel_id) { 1199 + oldval = snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_CONV, 0); 1200 + newval = (stream_tag << 4) | channel_id; 1201 + if (oldval != newval) 1202 + snd_hda_codec_write(codec, nid, 0, 1203 + AC_VERB_SET_CHANNEL_STREAMID, 1204 + newval); 1205 + p->stream_tag = stream_tag; 1206 + p->channel_id = channel_id; 1207 + } 1208 + /* update the format-id if changed */ 1209 + if (p->format_id != format) { 1210 + oldval = snd_hda_codec_read(codec, nid, 0, 1211 + AC_VERB_GET_STREAM_FORMAT, 0); 1212 + if (oldval != format) { 1213 + msleep(1); 1214 + snd_hda_codec_write(codec, nid, 0, 1215 + AC_VERB_SET_STREAM_FORMAT, 1216 + format); 1217 + } 1218 + p->format_id = format; 1219 + } 1220 + p->active = 1; 1221 + p->dirty = 0; 1222 + 1223 + /* make other inactive cvts with the same stream-tag dirty */ 1224 + for (i = 0; i < codec->cvt_setups.used; i++) { 1225 + p = snd_array_elem(&codec->cvt_setups, i); 1226 + if (!p->active && p->stream_tag == stream_tag) 1227 + p->dirty = 1; 1228 + } 1226 1229 } 1227 1230 EXPORT_SYMBOL_HDA(snd_hda_codec_setup_stream); 1228 1231 ··· 1268 1201 */ 1269 1202 void snd_hda_codec_cleanup_stream(struct hda_codec *codec, hda_nid_t nid) 1270 1203 { 1204 + struct hda_cvt_setup *p; 1205 + 1271 1206 if (!nid) 1272 1207 return; 1273 1208 1274 1209 snd_printdd("hda_codec_cleanup_stream: NID=0x%x\n", nid); 1275 - snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0); 1276 - #if 0 /* keep the format */ 1277 - msleep(1); 1278 - snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0); 1279 - #endif 1210 + /* here we just clear the active flag; actual clean-ups will be done 1211 + * in purify_inactive_streams() 1212 + */ 1213 + p = get_hda_cvt_setup(codec, nid); 1214 + if (p) 1215 + p->active = 0; 1280 1216 } 1281 1217 EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup_stream); 1218 + 1219 + static void really_cleanup_stream(struct hda_codec *codec, 1220 + struct hda_cvt_setup *q) 1221 + { 1222 + hda_nid_t nid = q->nid; 1223 + snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_CHANNEL_STREAMID, 0); 1224 + snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_STREAM_FORMAT, 0); 1225 + memset(q, 0, sizeof(*q)); 1226 + q->nid = nid; 1227 + } 1228 + 1229 + /* clean up the all conflicting obsolete streams */ 1230 + static void purify_inactive_streams(struct hda_codec *codec) 1231 + { 1232 + int i; 1233 + 1234 + for (i = 0; i < codec->cvt_setups.used; i++) { 1235 + struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i); 1236 + if (p->dirty) 1237 + really_cleanup_stream(codec, p); 1238 + } 1239 + } 1240 + 1241 + /* clean up all streams; called from suspend */ 1242 + static void hda_cleanup_all_streams(struct hda_codec *codec) 1243 + { 1244 + int i; 1245 + 1246 + for (i = 0; i < codec->cvt_setups.used; i++) { 1247 + struct hda_cvt_setup *p = snd_array_elem(&codec->cvt_setups, i); 1248 + if (p->stream_tag) 1249 + really_cleanup_stream(codec, p); 1250 + } 1251 + } 1282 1252 1283 1253 /* 1284 1254 * amp access functions ··· 3032 2928 { 3033 2929 if (codec->patch_ops.suspend) 3034 2930 codec->patch_ops.suspend(codec, PMSG_SUSPEND); 2931 + hda_cleanup_all_streams(codec); 3035 2932 hda_set_power_state(codec, 3036 2933 codec->afg ? codec->afg : codec->mfg, 3037 2934 AC_PWRST_D3); ··· 3481 3376 } 3482 3377 return 0; 3483 3378 } 3379 + 3380 + /* 3381 + * codec prepare/cleanup entries 3382 + */ 3383 + int snd_hda_codec_prepare(struct hda_codec *codec, 3384 + struct hda_pcm_stream *hinfo, 3385 + unsigned int stream, 3386 + unsigned int format, 3387 + struct snd_pcm_substream *substream) 3388 + { 3389 + int ret; 3390 + mutex_lock(&codec->prepare_mutex); 3391 + ret = hinfo->ops.prepare(hinfo, codec, stream, format, substream); 3392 + if (ret >= 0) 3393 + purify_inactive_streams(codec); 3394 + mutex_unlock(&codec->prepare_mutex); 3395 + return ret; 3396 + } 3397 + EXPORT_SYMBOL_HDA(snd_hda_codec_prepare); 3398 + 3399 + void snd_hda_codec_cleanup(struct hda_codec *codec, 3400 + struct hda_pcm_stream *hinfo, 3401 + struct snd_pcm_substream *substream) 3402 + { 3403 + mutex_lock(&codec->prepare_mutex); 3404 + hinfo->ops.cleanup(hinfo, codec, substream); 3405 + mutex_unlock(&codec->prepare_mutex); 3406 + } 3407 + EXPORT_SYMBOL_HDA(snd_hda_codec_cleanup); 3484 3408 3485 3409 /* global */ 3486 3410 const char *snd_hda_pcm_type_name[HDA_PCM_NTYPES] = {
+12
sound/pci/hda/hda_codec.h
··· 826 826 827 827 struct mutex spdif_mutex; 828 828 struct mutex control_mutex; 829 + struct mutex prepare_mutex; 829 830 unsigned int spdif_status; /* IEC958 status bits */ 830 831 unsigned short spdif_ctls; /* SPDIF control bits */ 831 832 unsigned int spdif_in_enable; /* SPDIF input enable? */ 832 833 hda_nid_t *slave_dig_outs; /* optional digital out slave widgets */ 833 834 struct snd_array init_pins; /* initial (BIOS) pin configurations */ 834 835 struct snd_array driver_pins; /* pin configs set by codec parser */ 836 + struct snd_array cvt_setups; /* audio convert setups */ 835 837 836 838 #ifdef CONFIG_SND_HDA_HWDEP 837 839 struct snd_hwdep *hwdep; /* assigned hwdep device */ ··· 950 948 */ 951 949 int snd_hda_build_pcms(struct hda_bus *bus); 952 950 int snd_hda_codec_build_pcms(struct hda_codec *codec); 951 + 952 + int snd_hda_codec_prepare(struct hda_codec *codec, 953 + struct hda_pcm_stream *hinfo, 954 + unsigned int stream, 955 + unsigned int format, 956 + struct snd_pcm_substream *substream); 957 + void snd_hda_codec_cleanup(struct hda_codec *codec, 958 + struct hda_pcm_stream *hinfo, 959 + struct snd_pcm_substream *substream); 960 + 953 961 void snd_hda_codec_setup_stream(struct hda_codec *codec, hda_nid_t nid, 954 962 u32 stream_tag, 955 963 int channel_id, int format);
+3 -3
sound/pci/hda/hda_intel.c
··· 1634 1634 azx_dev->period_bytes = 0; 1635 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 1639 return snd_pcm_lib_free_pages(substream); 1640 1640 } ··· 1688 1688 else 1689 1689 azx_dev->fifo_size = 0; 1690 1690 1691 - return hinfo->ops.prepare(hinfo, apcm->codec, azx_dev->stream_tag, 1692 - azx_dev->format_val, substream); 1691 + return snd_hda_codec_prepare(apcm->codec, hinfo, azx_dev->stream_tag, 1692 + azx_dev->format_val, substream); 1693 1693 } 1694 1694 1695 1695 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
+3
sound/pci/hda/patch_conexant.c
··· 3206 3206 .patch = patch_cxt5066 }, 3207 3207 { .id = 0x14f15067, .name = "CX20583 (Pebble HSF)", 3208 3208 .patch = patch_cxt5066 }, 3209 + { .id = 0x14f15068, .name = "CX20584", 3210 + .patch = patch_cxt5066 }, 3209 3211 { .id = 0x14f15069, .name = "CX20585", 3210 3212 .patch = patch_cxt5066 }, 3211 3213 {} /* terminator */ ··· 3218 3216 MODULE_ALIAS("snd-hda-codec-id:14f15051"); 3219 3217 MODULE_ALIAS("snd-hda-codec-id:14f15066"); 3220 3218 MODULE_ALIAS("snd-hda-codec-id:14f15067"); 3219 + MODULE_ALIAS("snd-hda-codec-id:14f15068"); 3221 3220 MODULE_ALIAS("snd-hda-codec-id:14f15069"); 3222 3221 3223 3222 MODULE_LICENSE("GPL");
+41 -20
sound/pci/hda/patch_nvhdmi.c
··· 540 540 * patch entries 541 541 */ 542 542 static struct hda_codec_preset snd_hda_preset_nvhdmi[] = { 543 - { .id = 0x10de0002, .name = "MCP77/78 HDMI", 544 - .patch = patch_nvhdmi_8ch_7x }, 545 - { .id = 0x10de0003, .name = "MCP77/78 HDMI", 546 - .patch = patch_nvhdmi_8ch_7x }, 547 - { .id = 0x10de0005, .name = "MCP77/78 HDMI", 548 - .patch = patch_nvhdmi_8ch_7x }, 549 - { .id = 0x10de0006, .name = "MCP77/78 HDMI", 550 - .patch = patch_nvhdmi_8ch_7x }, 551 - { .id = 0x10de0007, .name = "MCP79/7A HDMI", 552 - .patch = patch_nvhdmi_8ch_7x }, 553 - { .id = 0x10de000a, .name = "GT220 HDMI", 554 - .patch = patch_nvhdmi_8ch_89 }, 555 - { .id = 0x10de000b, .name = "GT21x HDMI", 556 - .patch = patch_nvhdmi_8ch_89 }, 557 - { .id = 0x10de000c, .name = "MCP89 HDMI", 558 - .patch = patch_nvhdmi_8ch_89 }, 559 - { .id = 0x10de000d, .name = "GT240 HDMI", 560 - .patch = patch_nvhdmi_8ch_89 }, 561 - { .id = 0x10de0067, .name = "MCP67 HDMI", .patch = patch_nvhdmi_2ch }, 562 - { .id = 0x10de8001, .name = "MCP73 HDMI", .patch = patch_nvhdmi_2ch }, 543 + { .id = 0x10de0002, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, 544 + { .id = 0x10de0003, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, 545 + { .id = 0x10de0005, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, 546 + { .id = 0x10de0006, .name = "MCP77/78 HDMI", .patch = patch_nvhdmi_8ch_7x }, 547 + { .id = 0x10de0007, .name = "MCP79/7A HDMI", .patch = patch_nvhdmi_8ch_7x }, 548 + { .id = 0x10de000a, .name = "GPU 0a HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 549 + { .id = 0x10de000b, .name = "GPU 0b HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 550 + { .id = 0x10de000c, .name = "MCP89 HDMI", .patch = patch_nvhdmi_8ch_89 }, 551 + { .id = 0x10de000d, .name = "GPU 0d HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 552 + { .id = 0x10de0010, .name = "GPU 10 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 553 + { .id = 0x10de0011, .name = "GPU 11 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 554 + { .id = 0x10de0012, .name = "GPU 12 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 555 + { .id = 0x10de0013, .name = "GPU 13 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 556 + { .id = 0x10de0014, .name = "GPU 14 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 557 + { .id = 0x10de0018, .name = "GPU 18 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 558 + { .id = 0x10de0019, .name = "GPU 19 HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 559 + { .id = 0x10de001a, .name = "GPU 1a HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 560 + { .id = 0x10de001b, .name = "GPU 1b HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 561 + { .id = 0x10de001c, .name = "GPU 1c HDMI/DP", .patch = patch_nvhdmi_8ch_89 }, 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 569 {} /* terminator */ 564 570 }; 565 571 ··· 578 572 MODULE_ALIAS("snd-hda-codec-id:10de000b"); 579 573 MODULE_ALIAS("snd-hda-codec-id:10de000c"); 580 574 MODULE_ALIAS("snd-hda-codec-id:10de000d"); 575 + MODULE_ALIAS("snd-hda-codec-id:10de0010"); 576 + MODULE_ALIAS("snd-hda-codec-id:10de0011"); 577 + MODULE_ALIAS("snd-hda-codec-id:10de0012"); 578 + MODULE_ALIAS("snd-hda-codec-id:10de0013"); 579 + MODULE_ALIAS("snd-hda-codec-id:10de0014"); 580 + MODULE_ALIAS("snd-hda-codec-id:10de0018"); 581 + MODULE_ALIAS("snd-hda-codec-id:10de0019"); 582 + MODULE_ALIAS("snd-hda-codec-id:10de001a"); 583 + MODULE_ALIAS("snd-hda-codec-id:10de001b"); 584 + MODULE_ALIAS("snd-hda-codec-id:10de001c"); 585 + MODULE_ALIAS("snd-hda-codec-id:10de0040"); 586 + MODULE_ALIAS("snd-hda-codec-id:10de0041"); 587 + MODULE_ALIAS("snd-hda-codec-id:10de0042"); 588 + MODULE_ALIAS("snd-hda-codec-id:10de0043"); 589 + MODULE_ALIAS("snd-hda-codec-id:10de0044"); 581 590 MODULE_ALIAS("snd-hda-codec-id:10de0067"); 582 591 MODULE_ALIAS("snd-hda-codec-id:10de8001"); 583 592
+40 -1
sound/pci/hda/patch_realtek.c
··· 137 137 ALC269VB_DMIC, 138 138 ALC269_FUJITSU, 139 139 ALC269_LIFEBOOK, 140 + ALC271_ACER, 140 141 ALC269_AUTO, 141 142 ALC269_MODEL_LAST /* last tag */ 142 143 }; ··· 7042 7041 7043 7042 spec->stream_analog_playback = &alc260_pcm_analog_playback; 7044 7043 spec->stream_analog_capture = &alc260_pcm_analog_capture; 7044 + spec->stream_analog_alt_capture = &alc260_pcm_analog_capture; 7045 7045 7046 7046 spec->stream_digital_playback = &alc260_pcm_digital_playback; 7047 7047 spec->stream_digital_capture = &alc260_pcm_digital_capture; ··· 13477 13475 SND_PCI_QUIRK(0x14c0, 0x0025, "COMPAL IFL90/JFL-92", ALC268_TOSHIBA), 13478 13476 SND_PCI_QUIRK(0x152d, 0x0763, "Diverse (CPR2000)", ALC268_ACER), 13479 13477 SND_PCI_QUIRK(0x152d, 0x0771, "Quanta IL1", ALC267_QUANTA_IL1), 13480 - SND_PCI_QUIRK(0x1854, 0x1775, "LG R510", ALC268_DELL), 13481 13478 {} 13482 13479 }; 13483 13480 ··· 13867 13866 { } /* end */ 13868 13867 }; 13869 13868 13869 + static struct snd_kcontrol_new alc269_asus_mixer[] = { 13870 + HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), 13871 + HDA_CODEC_MUTE("Master Playback Switch", 0x0c, 0x0, HDA_INPUT), 13872 + { } /* end */ 13873 + }; 13874 + 13870 13875 /* capture mixer elements */ 13871 13876 static struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { 13872 13877 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), ··· 14091 14084 {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT}, 14092 14085 {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, 14093 14086 {} 14087 + }; 14088 + 14089 + static struct hda_verb alc271_acer_dmic_verbs[] = { 14090 + {0x20, AC_VERB_SET_COEF_INDEX, 0x0d}, 14091 + {0x20, AC_VERB_SET_PROC_COEF, 0x4000}, 14092 + {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 14093 + {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 14094 + {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 14095 + {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 14096 + {0x21, AC_VERB_SET_CONNECT_SEL, 0x00}, 14097 + {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, 14098 + {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT}, 14099 + {0x22, AC_VERB_SET_CONNECT_SEL, 6}, 14100 + { } 14094 14101 }; 14095 14102 14096 14103 /* toggle speaker-output according to the hp-jack state */ ··· 14486 14465 14487 14466 static struct snd_pci_quirk alc269_cfg_tbl[] = { 14488 14467 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_QUANTA_FL1), 14468 + SND_PCI_QUIRK(0x1025, 0x047c, "ACER ZGA", ALC271_ACER), 14489 14469 SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", 14490 14470 ALC269_AMIC), 14491 14471 SND_PCI_QUIRK(0x1043, 0x1013, "ASUS N61Da", ALC269VB_AMIC), ··· 14647 14625 .input_mux = &alc269_capture_source, 14648 14626 .unsol_event = alc269_lifebook_unsol_event, 14649 14627 .init_hook = alc269_lifebook_init_hook, 14628 + }, 14629 + [ALC271_ACER] = { 14630 + .mixers = { alc269_asus_mixer }, 14631 + .cap_mixer = alc269vb_laptop_digital_capture_mixer, 14632 + .init_verbs = { alc269_init_verbs, alc271_acer_dmic_verbs }, 14633 + .num_dacs = ARRAY_SIZE(alc269_dac_nids), 14634 + .dac_nids = alc269_dac_nids, 14635 + .adc_nids = alc262_dmic_adc_nids, 14636 + .num_adc_nids = ARRAY_SIZE(alc262_dmic_adc_nids), 14637 + .capsrc_nids = alc262_dmic_capsrc_nids, 14638 + .num_channel_mode = ARRAY_SIZE(alc269_modes), 14639 + .channel_mode = alc269_modes, 14640 + .input_mux = &alc269_capture_source, 14641 + .dig_out_nid = ALC880_DIGOUT_NID, 14642 + .unsol_event = alc_sku_unsol_event, 14643 + .setup = alc269vb_laptop_dmic_setup, 14644 + .init_hook = alc_inithook, 14650 14645 }, 14651 14646 }; 14652 14647
+13
sound/pci/hda/patch_sigmatel.c
··· 94 94 STAC_92HD83XXX_PWR_REF, 95 95 STAC_DELL_S14, 96 96 STAC_92HD83XXX_HP, 97 + STAC_HP_DV7_4000, 97 98 STAC_92HD83XXX_MODELS 98 99 }; 99 100 ··· 1633 1632 0x40f000f0, 0x40f000f0, 1634 1633 }; 1635 1634 1635 + static unsigned int hp_dv7_4000_pin_configs[10] = { 1636 + 0x03a12050, 0x0321201f, 0x40f000f0, 0x90170110, 1637 + 0x40f000f0, 0x40f000f0, 0x90170110, 0xd5a30140, 1638 + 0x40f000f0, 0x40f000f0, 1639 + }; 1640 + 1636 1641 static unsigned int *stac92hd83xxx_brd_tbl[STAC_92HD83XXX_MODELS] = { 1637 1642 [STAC_92HD83XXX_REF] = ref92hd83xxx_pin_configs, 1638 1643 [STAC_92HD83XXX_PWR_REF] = ref92hd83xxx_pin_configs, 1639 1644 [STAC_DELL_S14] = dell_s14_pin_configs, 1645 + [STAC_HP_DV7_4000] = hp_dv7_4000_pin_configs, 1640 1646 }; 1641 1647 1642 1648 static const char *stac92hd83xxx_models[STAC_92HD83XXX_MODELS] = { ··· 1652 1644 [STAC_92HD83XXX_PWR_REF] = "mic-ref", 1653 1645 [STAC_DELL_S14] = "dell-s14", 1654 1646 [STAC_92HD83XXX_HP] = "hp", 1647 + [STAC_HP_DV7_4000] = "hp-dv7-4000", 1655 1648 }; 1656 1649 1657 1650 static struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = { ··· 5349 5340 case 0x111d7667: 5350 5341 case 0x111d7668: 5351 5342 case 0x111d7669: 5343 + case 0x111d76d1: 5344 + case 0x111d76d9: 5352 5345 spec->num_pins = ARRAY_SIZE(stac92hd88xxx_pin_nids); 5353 5346 spec->pin_nids = stac92hd88xxx_pin_nids; 5354 5347 spec->mono_nid = 0; ··· 6285 6274 { .id = 0x111d76d4, .name = "92HD83C1C5", .patch = patch_stac92hd83xxx}, 6286 6275 { .id = 0x111d7605, .name = "92HD81B1X5", .patch = patch_stac92hd83xxx}, 6287 6276 { .id = 0x111d76d5, .name = "92HD81B1C5", .patch = patch_stac92hd83xxx}, 6277 + { .id = 0x111d76d1, .name = "92HD87B1/3", .patch = patch_stac92hd83xxx}, 6278 + { .id = 0x111d76d9, .name = "92HD87B2/4", .patch = patch_stac92hd83xxx}, 6288 6279 { .id = 0x111d7666, .name = "92HD88B3", .patch = patch_stac92hd83xxx}, 6289 6280 { .id = 0x111d7667, .name = "92HD88B1", .patch = patch_stac92hd83xxx}, 6290 6281 { .id = 0x111d7668, .name = "92HD88B2", .patch = patch_stac92hd83xxx},
+6 -1
sound/soc/blackfin/Kconfig
··· 105 105 Set the correct GPIO for RESET the sound chip. 106 106 107 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 109 depends on SND_BF5XX_AC97 110 110 select SND_BF5XX_SOC_AC97 111 111 select SND_SOC_AD1980 112 112 help 113 113 Say Y if you want to add support for SoC audio on BF5xx STAMP/EZKIT. 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. 114 119 115 120 config SND_BF5XX_SOC_SPORT 116 121 tristate
+9 -1
sound/soc/blackfin/bf5xx-ad1980.c
··· 26 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 37 #include <linux/module.h> 30 38 #include <linux/moduleparam.h> 31 39 #include <linux/device.h> ··· 117 109 118 110 /* Module information */ 119 111 MODULE_AUTHOR("Cliff Cai"); 120 - MODULE_DESCRIPTION("ALSA SoC AD1980/1 BF5xx board"); 112 + MODULE_DESCRIPTION("ALSA SoC AD1980/1 BF5xx board (Obsolete)"); 121 113 MODULE_LICENSE("GPL");
+9 -1
sound/soc/codecs/ad1980.c
··· 11 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 22 #include <linux/init.h> 15 23 #include <linux/slab.h> 16 24 #include <linux/module.h> ··· 306 298 }; 307 299 EXPORT_SYMBOL_GPL(soc_codec_dev_ad1980); 308 300 309 - MODULE_DESCRIPTION("ASoC ad1980 driver"); 301 + MODULE_DESCRIPTION("ASoC ad1980 driver (Obsolete)"); 310 302 MODULE_AUTHOR("Roy Huang, Cliff Cai"); 311 303 MODULE_LICENSE("GPL");
+6
sound/soc/codecs/ad1980.h
··· 1 1 /* 2 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 11 #ifndef _AD1980_H
+3 -3
sound/soc/codecs/wm8580.c
··· 269 269 SOC_DOUBLE("DAC3 Invert Switch", WM8580_DAC_CONTROL4, 4, 5, 1, 0), 270 270 271 271 SOC_SINGLE("DAC ZC Switch", WM8580_DAC_CONTROL5, 5, 1, 0), 272 - SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 0), 273 - SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 0), 274 - SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 0), 272 + SOC_SINGLE("DAC1 Switch", WM8580_DAC_CONTROL5, 0, 1, 1), 273 + SOC_SINGLE("DAC2 Switch", WM8580_DAC_CONTROL5, 1, 1, 1), 274 + SOC_SINGLE("DAC3 Switch", WM8580_DAC_CONTROL5, 2, 1, 1), 275 275 276 276 SOC_DOUBLE("ADC Mute Switch", WM8580_ADC_CONTROL1, 0, 1, 1, 0), 277 277 SOC_SINGLE("ADC High-Pass Filter Switch", WM8580_ADC_CONTROL1, 4, 1, 0),
+3 -1
sound/soc/imx/Kconfig
··· 28 28 29 29 config SND_SOC_EUKREA_TLV320 30 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 34 select SND_SOC_TLV320AIC23 33 35 help 34 36 Enable I2S based access to the TLV320AIC23B codec attached
+2 -2
sound/soc/soc-cache.c
··· 340 340 static unsigned int snd_soc_16_8_read(struct snd_soc_codec *codec, 341 341 unsigned int reg) 342 342 { 343 - u16 *cache = codec->reg_cache; 343 + u8 *cache = codec->reg_cache; 344 344 345 345 reg &= 0xff; 346 346 if (reg >= codec->reg_cache_size) ··· 351 351 static int snd_soc_16_8_write(struct snd_soc_codec *codec, unsigned int reg, 352 352 unsigned int value) 353 353 { 354 - u16 *cache = codec->reg_cache; 354 + u8 *cache = codec->reg_cache; 355 355 u8 data[3]; 356 356 int ret; 357 357