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:
ALSA: sound/pci/rme9652: prevent reading uninitialized stack memory
ALSA: hda - Fix auto-parse of SPDIF input of Realtek codecs
ASoC: Fix multi-componentism
ASoC: Fix soc-cache buffer overflow bug
ALSA: oxygen: fix analog capture on Claro halo cards
ALSA: hda - Add Dell Latitude E6400 model quirk
ASoC: fix clkdev API usage in sh/migor.c

+39 -10
+1
sound/pci/hda/patch_analog.c
··· 3641 3641 /* Lenovo Thinkpad T61/X61 */ 3642 3642 SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo Thinkpad", AD1984_THINKPAD), 3643 3643 SND_PCI_QUIRK(0x1028, 0x0214, "Dell T3400", AD1984_DELL_DESKTOP), 3644 + SND_PCI_QUIRK(0x1028, 0x0233, "Dell Latitude E6400", AD1984_DELL_DESKTOP), 3644 3645 {} 3645 3646 }; 3646 3647
+16 -6
sound/pci/hda/patch_realtek.c
··· 1594 1594 } 1595 1595 1596 1596 if (spec->autocfg.dig_in_pin) { 1597 - hda_nid_t dig_nid; 1598 - err = snd_hda_get_connections(codec, 1599 - spec->autocfg.dig_in_pin, 1600 - &dig_nid, 1); 1601 - if (err > 0) 1602 - spec->dig_in_nid = dig_nid; 1597 + dig_nid = codec->start_nid; 1598 + for (i = 0; i < codec->num_nodes; i++, dig_nid++) { 1599 + unsigned int wcaps = get_wcaps(codec, dig_nid); 1600 + if (get_wcaps_type(wcaps) != AC_WID_AUD_IN) 1601 + continue; 1602 + if (!(wcaps & AC_WCAP_DIGITAL)) 1603 + continue; 1604 + if (!(wcaps & AC_WCAP_CONN_LIST)) 1605 + continue; 1606 + err = get_connection_index(codec, dig_nid, 1607 + spec->autocfg.dig_in_pin); 1608 + if (err >= 0) { 1609 + spec->dig_in_nid = dig_nid; 1610 + break; 1611 + } 1612 + } 1603 1613 } 1604 1614 } 1605 1615
+4
sound/pci/oxygen/oxygen.c
··· 543 543 chip->model.suspend = claro_suspend; 544 544 chip->model.resume = claro_resume; 545 545 chip->model.set_adc_params = set_ak5385_params; 546 + chip->model.device_config = PLAYBACK_0_TO_I2S | 547 + PLAYBACK_1_TO_SPDIF | 548 + CAPTURE_0_FROM_I2S_2 | 549 + CAPTURE_1_FROM_SPDIF; 546 550 break; 547 551 } 548 552 if (id->driver_data == MODEL_MERIDIAN ||
+1
sound/pci/rme9652/hdsp.c
··· 4609 4609 if (err < 0) 4610 4610 return err; 4611 4611 4612 + memset(&info, 0, sizeof(info)); 4612 4613 spin_lock_irqsave(&hdsp->lock, flags); 4613 4614 info.pref_sync_ref = (unsigned char)hdsp_pref_sync_ref(hdsp); 4614 4615 info.wordclock_sync_check = (unsigned char)hdsp_wc_sync_check(hdsp);
+1
sound/pci/rme9652/hdspm.c
··· 4127 4127 4128 4128 case SNDRV_HDSPM_IOCTL_GET_CONFIG_INFO: 4129 4129 4130 + memset(&info, 0, sizeof(info)); 4130 4131 spin_lock_irq(&hdspm->lock); 4131 4132 info.pref_sync_ref = hdspm_pref_sync_ref(hdspm); 4132 4133 info.wordclock_sync_check = hdspm_wc_sync_check(hdspm);
+13 -2
sound/soc/sh/migor.c
··· 12 12 #include <linux/firmware.h> 13 13 #include <linux/module.h> 14 14 15 + #include <asm/clkdev.h> 15 16 #include <asm/clock.h> 16 17 17 18 #include <cpu/sh7722.h> ··· 41 40 }; 42 41 43 42 static struct clk siumckb_clk = { 44 - .name = "siumckb_clk", 45 - .id = -1, 46 43 .ops = &siumckb_clk_ops, 47 44 .rate = 0, /* initialised at run-time */ 48 45 }; 46 + 47 + static struct clk_lookup *siumckb_lookup; 49 48 50 49 static int migor_hw_params(struct snd_pcm_substream *substream, 51 50 struct snd_pcm_hw_params *params) ··· 181 180 if (ret < 0) 182 181 return ret; 183 182 183 + siumckb_lookup = clkdev_alloc(&siumckb_clk, "siumckb_clk", NULL); 184 + if (!siumckb_lookup) { 185 + ret = -ENOMEM; 186 + goto eclkdevalloc; 187 + } 188 + clkdev_add(siumckb_lookup); 189 + 184 190 /* Port number used on this machine: port B */ 185 191 migor_snd_device = platform_device_alloc("soc-audio", 1); 186 192 if (!migor_snd_device) { ··· 208 200 epdevadd: 209 201 platform_device_put(migor_snd_device); 210 202 epdevalloc: 203 + clkdev_drop(siumckb_lookup); 204 + eclkdevalloc: 211 205 clk_unregister(&siumckb_clk); 212 206 return ret; 213 207 } 214 208 215 209 static void __exit migor_exit(void) 216 210 { 211 + clkdev_drop(siumckb_lookup); 217 212 clk_unregister(&siumckb_clk); 218 213 platform_device_unregister(migor_snd_device); 219 214 }
+3 -2
sound/soc/soc-cache.c
··· 203 203 data[1] = (value >> 8) & 0xff; 204 204 data[2] = value & 0xff; 205 205 206 - if (!snd_soc_codec_volatile_register(codec, reg)) 207 - reg_cache[reg] = value; 206 + if (!snd_soc_codec_volatile_register(codec, reg) 207 + && reg < codec->reg_cache_size) 208 + reg_cache[reg] = value; 208 209 209 210 if (codec->cache_only) { 210 211 codec->cache_sync = 1;