[alsa-cvslog] alsa-kmirror: ALSA kernel mirror repository branch, master now at v1.0.20-579-gcf3414
Brought to you by:
perex
From: <nor...@al...> - 2009-07-30 08:52:48
|
Hello, This is an automated email from the git hooks/update script, it was generated because a ref change was pushed to the repository. Updating branch, master, via cf341443f2b63c93fe6741967d1004021492e78d (commit) via 46483dc4b2786276ef6ab42461d388d41ac45644 (commit) via 1577641435694a7dfbd9713a3fee2da33b0bcfc7 (commit) via d982fa48563cdd819d60ea78911c5f42780d6d69 (commit) via 9883a3cb4f1bced1e8a1ea5e440784f054d63aec (commit) via 1d6ab31f0a11b3deb0f91f61f607c92f40d2d8ee (commit) via 0c12cb0c83b1d009b9298137fa7eb7abb59fcfdd (commit) via dacafa6db78121625a61bb934dca57559467cd8d (commit) via 025b17b43aebf8b17957c6b589fc3836c4ab22db (commit) via dde04d6730b76bb258f5f76809a99b0a71715658 (commit) via f0c7ec316d477d155100020db6d6f8afecb68bc8 (commit) via 6b2cff1d0ac6b7d2bae2505a2f21bc55b19d21f8 (commit) via 48156f226685084dbc7c02199ba933765d1d8682 (commit) via 17d84bf4afdecb5ba92c18c48e7cc590b2bd7fa6 (commit) via 93d6113ce78e6212c620b6c73f3cb21e1f610091 (commit) via aa8adc0c74524836c706433a0ee825d6da0a03be (commit) via af8864b7c55e885333932b92b953a0306c712a2f (commit) via 9257c10a257c29ca609792733c5a7bd9cbb57296 (commit) via ed706d62ff6a3c6d02fdb1e2b2aa950ef992ab38 (commit) via a32f81428aaeab5a84fe8223b6a07ec2220c4c90 (commit) via b20a6f87f4e3b3c4d732bff98fa13bab5d9f7122 (commit) via 469a82978e09320d796ec0acc6de433af375829b (commit) via 745e89df38c53ded325ac0f6d3de04c7e2d15208 (commit) via 7f82ca91b1aaa5d8634faca813f93af8a5021789 (commit) via 015b2b7f8dbbeb8550b3500ca813eda3a3c5854f (commit) via f4502b7ed6f9e9db6b4b8f212e95762942e12709 (commit) via 4cbcc469d385903341a9cb66f77eb02ba3a5c9b5 (commit) via 02acb63b93f402c84923a97124b1e6b8ab8286e6 (commit) via 40a0ac6767132fc5d205253b5e0c984261610ba8 (commit) via 390b4352099289196d51f312d21cc98e7c3ee28f (commit) via 395e53870f032e3d9a3054da74435fba05a73be6 (commit) via 4cae30ff6be94379b8e1a22807ec12ca69398c26 (commit) via 4915bd46121556bc398556bd054effe191e7f588 (commit) via 7298bea9d0a6fc01359994fa4bfdeec68472b218 (commit) via d2bc77bb42d5b734ac09caba732ac9d1c568e7b6 (commit) via bf3a9355fd07e833614769d846682589e0586c80 (commit) via 1ca779154815df47b7709c5fc20b11e01df8ad3b (commit) via c3ad6dba329d3f0e5c8b37935926bfe63ca5b0ca (commit) from 6340bc32c29a4144031126414587cc774ea80900 (commit) - Log ----------------------------------------------------------------- commit cf341443f2b63c93fe6741967d1004021492e78d Author: Janusz Krzysztofik <jkr...@ti...> AuthorDate: Tue Jul 28 20:24:12 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:53 2009 +0200 ASoC: CX20442: fix issues pointed out by subsystem maintainer The patch fixes some checkpatch identified issues and adds a comment about line discipline interaction to my driver code, as requested by Mark on my inital submission (thank you Mark for applying my imperfect patch anyway). It also fixes MODULE_ALIAS mismatch as used in my machine driver. Signed-off-by: Janusz Krzysztofik <jkr...@ti...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 46483dc4b2786276ef6ab42461d388d41ac45644 Author: Takashi Iwai <ti...@su...> AuthorDate: Thu Jul 30 09:24:29 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:34:03 2009 +0200 ALSA: hda - Fix typos of Capture controls. The commit 6479c63188290beae83ade3243b9d6eb47d394b6 ALSA: hda - Create Capture controls dynamically introduced typos of "Capture". Fixed now. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 1577641435694a7dfbd9713a3fee2da33b0bcfc7 Author: Wu Fengguang <fen...@in...> AuthorDate: Thu Jul 30 09:19:14 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:34:01 2009 +0200 ALSA: hda: add HP automute support to Intel ALC889/ALC889A models It auto mutes all 8-channel outputs at rear panel when the front panel headphone is connected. Signed-off-by: Wu Fengguang <fen...@in...> Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit d982fa48563cdd819d60ea78911c5f42780d6d69 Author: Wu Fengguang <fen...@in...> AuthorDate: Thu Jul 30 14:36:35 2009 +0800 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:34:01 2009 +0200 ALSA: hda: add 2-channel mode to Intel ALC889/ALC889A models This 2-channel mode is useful in that it will broadcast a 2-channel audio stream to all front/side/... ports. Signed-off-by: Wu Fengguang <fen...@in...> Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 9883a3cb4f1bced1e8a1ea5e440784f054d63aec Author: Takashi Iwai <ti...@su...> AuthorDate: Wed Jul 29 18:41:29 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:34:00 2009 +0200 ALSA: hda - No analog mix input source as default for IDT92HD71bxx The analog mix is disabled now as default (unless "analog_mixer" hint is given), so it shoudn't appear in the digital input source as well. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 1d6ab31f0a11b3deb0f91f61f607c92f40d2d8ee Author: Takashi Iwai <ti...@su...> AuthorDate: Wed Jul 29 16:32:55 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:59 2009 +0200 ALSA: hda - Add missing DMUX initialization for auto-mic with STAC/IDT Added the missing initialization of DMUX connection (to analog input) for auto-mic mode with STAC/IDT codecs. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 0c12cb0c83b1d009b9298137fa7eb7abb59fcfdd Author: Takashi Iwai <ti...@su...> AuthorDate: Wed Jul 29 16:28:09 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:58 2009 +0200 ALSA: hda - Remove static connection in IDT 92HD71bxx We don't need any more static connection to the port F (which is often used for docking stations) since its connection is done dynamically via DAC assignment now. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit dacafa6db78121625a61bb934dca57559467cd8d Author: Roel Kluin <roe...@gm...> AuthorDate: Wed Jul 29 14:35:20 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:56 2009 +0200 ALSA: hda: fix out-of-bound hdmi_eld.sad[] write e->sad[] is declared with size ELD_MAX_SAD=16, but the guard allows range 0-31. Signed-off-by: Roel Kluin <roe...@gm...> Signed-off-by: Wu Fengguang <fen...@in...> Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 025b17b43aebf8b17957c6b589fc3836c4ab22db Author: Takashi Iwai <ti...@su...> AuthorDate: Wed Jul 29 14:32:56 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:56 2009 +0200 ALSA: hda - Support auto-mic switching with IDT/STAC codec Support the automatic mic-switching with some devices with IDT/STAC codecs. The condition is that the device has only two inputs, one for an external mic and one for an internal mic. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit dde04d6730b76bb258f5f76809a99b0a71715658 Author: Takashi Iwai <ti...@su...> AuthorDate: Wed Jul 29 14:23:09 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:55 2009 +0200 ALSA: hda - Avoid overwrite of jack events with STAC/IDT Since only one event can be associated to a (pin) widget, it's safer to avoid the multiple mapping. This patch fixes the behavior of the STAC/IDT codec driver. Now stac_get_event() doesn't take the type argument but simply returns the first hit element. Then enable_pin_detect() checks the validity of the type, and returns non-zero only if a valid entry. The caller can call stac_issue_unsol_event() after checking the return value. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit f0c7ec316d477d155100020db6d6f8afecb68bc8 Author: Barry Song <21...@gm...> AuthorDate: Thu Jul 23 02:10:34 2009 +0800 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:54 2009 +0200 ASoC: board driver to connect bf5xx with ad1938 Signed-off-by: Barry Song <21...@gm...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 6b2cff1d0ac6b7d2bae2505a2f21bc55b19d21f8 Author: Barry Song <21...@gm...> AuthorDate: Mon Jul 27 18:06:39 2009 +0800 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:53 2009 +0200 ASoC: blackfin I2S(TDM mode) CPU DAI driver The I2S DAI driver for blackfin SPORT, but works in TDM mode. I2S is not a special case of TDM with only left and right two slots for SPORT interface. I2S coordinates with TDM in SPORT, but not a part of TDM. TDM require different hardware configuration with I2S, not only different slot number. One is "Stereo Serial Operation" mode of SPORT, the other one is "Multichannel Operation" mode. They are incompatible at the same time. Hardware and DMA description and data transfer flow are much different for I2S and TDM. Merging them as a whole will be very ugly and difficult to maintain. So we don't define a new DAI type, but give two DAI instances for standard I2S and TDM, both in I2S-family DAI type. The TDM instance still uses the I2S-family DAI type. Signed-off-by: Barry Song <21...@gm...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 48156f226685084dbc7c02199ba933765d1d8682 Author: Takashi Iwai <ti...@su...> AuthorDate: Tue Jul 28 18:25:29 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:52 2009 +0200 ALSA: hda - Don't create analog mixer for IDT92HD71bxx The analog mixer unit on IDT 92HD71Bxx codecs is almost useless since we use only the direct connections from DAC to pin. Remove the controls to avoid unneeded confusion as default now. This can be still back via "analog_mixer = 1" hint. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 17d84bf4afdecb5ba92c18c48e7cc590b2bd7fa6 Author: Takashi Iwai <ti...@su...> AuthorDate: Tue Jul 28 18:20:25 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:51 2009 +0200 ALSA: hda - Create Capture controls dynamically Instead of static snd_kcontrol_new arrays, create "Capture Volume" and "Capture Switch" controls dynamically based on the mixer attr values (made via HDA_COMPOSE_AMP_VAL()). This reduces the code size and gives more flexibility to change the number of controls later. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 93d6113ce78e6212c620b6c73f3cb21e1f610091 Author: Takashi Iwai <ti...@su...> AuthorDate: Tue Jul 28 17:03:49 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:50 2009 +0200 ALSA: hda - Don't create unneeded digital input source for IDT 92HD71x The current driver creates always the digital input source mixer elements for IDT 92HD71x codecs no matter whether digital mics are present. This patch adds the proper check to avoid the creation of these controls if unnecessary. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit aa8adc0c74524836c706433a0ee825d6da0a03be Author: Takashi Iwai <ti...@su...> AuthorDate: Tue Jul 28 16:01:20 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:49 2009 +0200 ALSA: hda - Reword information messages for BIOS auto-probing mode The sentense "Unknown model for xxx, ..." makes people too nervous and drives them to a direction to a wrong "fix" by giving any mismatching model option. Let's rephrase the messages to be more nice and easy (at least that won't make people suspect conspiracies). Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit af8864b7c55e885333932b92b953a0306c712a2f Author: Takashi Iwai <ti...@su...> AuthorDate: Tue Jul 28 00:54:39 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:48 2009 +0200 ALSA: hda - Add quirk for Dell Studio 1555 Added a quirk entry for Dell Studio 1555. Reference: Novell bnc#525244 https://bugzilla.novell.com/show_bug.cgi?id=525244 Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 9257c10a257c29ca609792733c5a7bd9cbb57296 Author: Takashi Iwai <ti...@su...> AuthorDate: Mon Jul 27 12:56:26 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:48 2009 +0200 ALSA: hda - Add exception for volume-knob in snd_hda_get_connections() Volume-knob widgets may have connections even if they have no CONN_LIST cap bit. Allow the query exceptionally in snd_hda_get_connections(). Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit ed706d62ff6a3c6d02fdb1e2b2aa950ef992ab38 Author: Takashi Iwai <ti...@su...> AuthorDate: Mon Jul 27 12:54:26 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:47 2009 +0200 ALSA: hda - Introduce get_wcaps_type() macro Add a helper macro to retrieve the widget type from wiget cap bits. Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit a32f81428aaeab5a84fe8223b6a07ec2220c4c90 Author: Marek Vasut <mar...@gm...> AuthorDate: Thu Jul 23 22:16:56 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:46 2009 +0200 ASoC: Switch palm27x-asoc to jack detection api This patch removes the old method of jack detection from palm27x-asoc driver and adds jack detection api. It also removes some other (now) useless stuff from the driver and corrects pin configuration for the codec. Signed-off-by: Marek Vasut <mar...@gm...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit b20a6f87f4e3b3c4d732bff98fa13bab5d9f7122 Author: Janusz Krzysztofik <jkr...@ti...> AuthorDate: Fri Jul 24 02:48:57 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:45 2009 +0200 ASoC: Jack handling enhancements as suggested by subsystem maintainer The patch adds a few small enhancements to the ASoC jack handling, as suggested by Mark in his comments to my Amstrad Delta driver, and a few fixes for related bugs found while learning Mark's code and testing results. Enhancements: 1. Update status of an ASoC jack while associating it with new gpios. 2. Really update DAPM pins while associating them with an ASoC jack. 3. Export ASoC jack gpios over gpiolib sysfs for diagnostic purposes. Fixes: 1. Apply mask on jack status report before using it, just for case. 2. While updating jack associated DAPM pins, use full resulting jack status, not the status report passed as an argument. Created and tested on linux-2.6.31-rc3 Signed-off-by: Janusz Krzysztofik <jkr...@ti...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 469a82978e09320d796ec0acc6de433af375829b Author: Marek Vasut <mar...@gm...> AuthorDate: Wed Jul 22 13:01:03 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:44 2009 +0200 ALSA: Allow passing platform_data to devices attached to AC97 bus This patch allows passing platform_data to devices attached to AC97 bus (like touchscreens, battery measurement chips ...). Signed-off-by: Marek Vasut <mar...@gm...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 745e89df38c53ded325ac0f6d3de04c7e2d15208 Author: Takashi Iwai <ti...@su...> AuthorDate: Thu Jul 23 12:25:40 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:44 2009 +0200 ALSA: hda - Add description of new models for ALC889/889A Signed-off-by: Takashi Iwai <ti...@su...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 7f82ca91b1aaa5d8634faca813f93af8a5021789 Author: Joonyoung Shim <jy0...@sa...> AuthorDate: Thu Jul 23 17:33:17 2009 +0900 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:43 2009 +0200 ASoC: MAX9877: fix write operation for register The MAX9877 needs an address of start register when we write values to registers through i2c_master_send(), but the code for this was missed in max9877_write_regs(). If the value of control is 0 in the max9877_set_out_mode(), the value is not increased to 1, but actually the value to write to the register should be 1. And the register bits for out_mode and osc_mode should be cleared before writing. Signed-off-by: Joonyoung Shim <jy0...@sa...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 015b2b7f8dbbeb8550b3500ca813eda3a3c5854f Author: Janusz Krzysztofik <jkr...@ti...> AuthorDate: Wed Jul 22 05:22:28 2009 +0200 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:33:42 2009 +0200 ASoC: Add support for Conexant CX20442-11 voice modem codec This patch adds support for Conexant CX20442-11 voice modem codec, suitable for use by the ASoC board driver for Amstrad E3 (Delta) videophone. Related sound card driver will follow. This codec is an optional part of the Conexant SmartV three chip modem design. As such, documentation for its proprietary digital audio interface is not available. However, on Amstrad Delta board, thanks to Mark Underwood who created an initial, omap-alsa based sound driver a few years ago[1], the codec has been discovered to be accessible not only from the modem side, but also over the OMAP McBSP based CPU DAI. Thus, the driver can be used by any sound card that can access the codec DAI directly. The DAI configuration parameters (sample rate and format, number of channels) has been selected out empirically for best user experience. The codec analogue interface consists of two pairs of analogue I/O pins: speakerphone interface or telephone handset/headset interface. Furthermore, it seams to provide two operation modes for speakerphone I/O: standard and advanced, with automatic gain control and echo cancelation. Even if the codec control interface is unknown and not available, all those interfaces and modes can be selected over the modem chip using V.253 commands. The driver is able to issue necessary commands over a suitable hw_write function if provided by a sound card driver. Otherwise, the codec can be controlled over the modem from userspace while inactive. Even if nothig is known about the codec internal power management capabilities, DAPM widgets has been used to model the codec audio map. Automatically performed powering up/down of those virtual widgets results in corresponding V.253 commands being issued. Some driver features/oddities may be board specific, but I have no way to verify that with any board other than Amstrad Delta. [1] http://www.earth.li/pipermail/e3-hacking/2006-April/000481.html Created and tested against linux-2.6.31-rc3. Applies and works with linux-omap-2.6 commit 7c5cb7862d32cb344be7831d466535d5255e35ac as well. Signed-off-by: Janusz Krzysztofik <jkr...@ti...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit f4502b7ed6f9e9db6b4b8f212e95762942e12709 Author: Lopez Cruz, Misael <x00...@ti...> AuthorDate: Wed Jul 22 20:45:03 2009 -0500 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:24 2009 +0200 ASoC: OMAP: Staticise pcm creation function of omap-pcm Signed-off-by: Misael Lopez Cruz <x00...@ti...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 4cbcc469d385903341a9cb66f77eb02ba3a5c9b5 Author: Joonyoung Shim <jy0...@sa...> AuthorDate: Wed Jul 22 14:09:08 2009 +0900 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:23 2009 +0200 ASoC: MAX9877: separate callback functions The callback function to control register was used by whole controls in MAX9877 driver, but this causes using many if statement for double register control or invert. So, the callback function for double register control is separate differently, and the code for invert is added in the callback function. Signed-off-by: Joonyoung Shim <jy0...@sa...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 02acb63b93f402c84923a97124b1e6b8ab8286e6 Author: John Bonesio <bo...@se...> AuthorDate: Tue Jul 21 13:15:40 2009 -0700 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:22 2009 +0200 ASoC: MPC5200: Increase the delay time between resets Reset was failing with the original udelay(50) between the code in psc_ac97_cold_reset() and the call to psc_ac97_warm_reset(). Through testing it was found that a delay of 1ms was necessary for the cold_reset code to consistently complete successfully. Signed-off-by: John Bonesio <bo...@se...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 40a0ac6767132fc5d205253b5e0c984261610ba8 Author: Mark Brown <br...@op...> AuthorDate: Sat Jul 18 11:09:42 2009 +0100 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:21 2009 +0200 ASoC: Fix checkpatch issues in AD1938 Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 390b4352099289196d51f312d21cc98e7c3ee28f Author: Mark Brown <br...@op...> AuthorDate: Fri Jul 17 22:13:01 2009 +0100 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:20 2009 +0200 ASoC: Fix FLL reference clock division setup in WM8993 Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 395e53870f032e3d9a3054da74435fba05a73be6 Author: Mark Brown <br...@op...> AuthorDate: Fri Jul 17 21:53:49 2009 +0100 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:20 2009 +0200 ASoC: Bodge around GCC 4.4.0 flow analysis bug in GCC 4.4.0 GCC 4.4.0 doesn't appear to be able to spot that we don't apply any FLL configuration if the output frequency is zero. Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 4cae30ff6be94379b8e1a22807ec12ca69398c26 Author: Candelaria Villareal, Jorge <x01...@ti...> AuthorDate: Tue Jul 14 20:04:08 2009 -0500 Commit: Jaroslav Kysela <pe...@pe...> CommitDate: Thu Jul 30 10:16:19 2009 +0200 ASoC: SDP3430: Add support for EXTMUTE using TWL GPIO6 Board sdp3430 has hardware support for EXTMUTE using TWL4030 GPIO6 line, controlled by register INTBR_PMBR1. Machine driver takes care of enabling gpio line through i2c and codec driver manipulates the line during headset ramp up/down sequence. Signed-off-by: Jorge Eduardo Candelaria <x01...@ti...> Signed-off-by: Mark Brown <br...@op...> Signed-off-by: Jaroslav Kysela <pe...@pe...> commit 4915bd46121556bc398556bd054effe191e7f588 Author: Takashi Iwai <ti...@su...> AuthorDate: Fri Jul 24 16:51:47 2009 +0200 Commit: Takashi Iwai <ti...@su...> CommitDate: Fri Jul 24 16:54:31 2009 +0200 ALSA: hda - Fix mute control with some ALC262 models The master mute switch is wrongly implemented as checking the pointer instead of its value, thus it can be never muted. This patch fixes the issue. Reference: Novell bnc#404873 https://bugzilla.novell.com/show_bug.cgi?id=404873 Signed-off-by: Takashi Iwai <ti...@su...> Cc: <st...@ke...> commit 7298bea9d0a6fc01359994fa4bfdeec68472b218 Author: Daniel Mack <da...@ca...> AuthorDate: Wed Jul 22 14:13:35 2009 +0200 Commit: Takashi Iwai <ti...@su...> CommitDate: Thu Jul 23 16:31:58 2009 +0200 ALSA: snd_usb_caiaq: add support for Audio2DJ This adds support for Native Instrument's freshly announced Audio2DJ sound device hardware. Version number bumped to 1.3.19. Signed-off-by: Daniel Mack <da...@ca...> Signed-off-by: Takashi Iwai <ti...@su...> commit d2bc77bb42d5b734ac09caba732ac9d1c568e7b6 Author: Takashi Iwai <ti...@su...> AuthorDate: Thu Jul 23 16:21:08 2009 +0200 Commit: Takashi Iwai <ti...@su...> CommitDate: Thu Jul 23 16:21:08 2009 +0200 ALSA: pcm - Fix hwptr buffer-size overlap bug The fix 79452f0a28aa5a40522c487b42a5fc423647ad98 introduced another bug due to the missing offset for the overlapped hwptr. When the hwptr goes back to zero, the delta value has to be corrected with the buffer size. Otherwise this causes looping sounds. Signed-off-by: Takashi Iwai <ti...@su...> commit bf3a9355fd07e833614769d846682589e0586c80 Author: Takashi Iwai <ti...@su...> AuthorDate: Thu Jul 23 14:28:37 2009 +0200 Commit: Takashi Iwai <ti...@su...> CommitDate: Thu Jul 23 14:28:37 2009 +0200 ALSA: pcm - Fix warnings in debug loggings Add proper cast. Signed-off-by: Takashi Iwai <ti...@su...> commit 1ca779154815df47b7709c5fc20b11e01df8ad3b Author: Takashi Iwai <ti...@su...> AuthorDate: Thu Jul 23 11:04:13 2009 +0200 Commit: Takashi Iwai <ti...@su...> CommitDate: Thu Jul 23 11:09:03 2009 +0200 ALSA: pcm - Add logging of hwptr updates and interrupt updates Added the logging functionality to xrun_debug to record the hwptr updates via snd_pcm_update_hw_ptr() and snd_pcm_update_hwptr_interrupt(), corresponding to 16 and 8, respectively. For example, # echo 9 > /proc/asound/card0/pcm0p/xrun_debug will record the position and other parameters at each period interrupt together with the normal XRUN debugging. Signed-off-by: Takashi Iwai <ti...@su...> commit c3ad6dba329d3f0e5c8b37935926bfe63ca5b0ca Author: Chaithrika U S <cha...@ti...> AuthorDate: Wed Jul 22 07:45:04 2009 -0400 Commit: Mark Brown <br...@op...> CommitDate: Thu Jul 23 08:14:29 2009 +0100 ASoC: tlv320aic3x: Enable PLL when not bypassed PLL was not being enabled when it was not bypassed. This patch enables the PLL when it is used. Additionally, it disables the PLL when it is bypassed. Without this patch, the audio on TI DM646x EVM and DM355 EVM does not work properly. The bit clocks and the frame sync signals from the codec are not correct and hence the playback/record are faster than usual for most sample rates. The reason for this was that the PLL was not enabled when it was not bypassed. Tested on DM6467 EVM, playback tested on DM355 EVM. Signed-off-by: Chaithrika U S <cha...@ti...> Signed-off-by: Mark Brown <br...@op...> ----------------------------------------------------------------------- Diffstat: Documentation/HD-Audio-Models.txt | 2 + Documentation/HD-Audio.txt | 4 + Documentation/Procfile.txt | 5 + core/pcm_lib.c | 27 +- include/ac97_codec.h | 6 + include/soc-dai.h | 1 + pci/hda/hda_codec.c | 14 +- pci/hda/hda_eld.c | 4 +- pci/hda/hda_generic.c | 2 +- pci/hda/hda_local.h | 3 + pci/hda/hda_proc.c | 3 +- pci/hda/patch_analog.c | 3 +- pci/hda/patch_ca0110.c | 3 +- pci/hda/patch_cmedia.c | 3 +- pci/hda/patch_realtek.c | 175 ++++--- pci/hda/patch_sigmatel.c | 554 ++++++++++++++------- pci/hda/patch_via.c | 3 +- soc/blackfin/Kconfig | 23 +- soc/blackfin/Makefile | 6 + soc/blackfin/bf5xx-ad1938.c | 142 ++++++ soc/blackfin/{bf5xx-i2s-pcm.c => bf5xx-tdm-pcm.c} | 186 ++++--- soc/blackfin/bf5xx-tdm-pcm.h | 21 + soc/blackfin/bf5xx-tdm.c | 343 +++++++++++++ soc/blackfin/{bf5xx-i2s.h => bf5xx-tdm.h} | 6 +- soc/codecs/Kconfig | 3 + soc/codecs/Makefile | 2 + soc/codecs/ad1938.c | 156 +++--- soc/codecs/cx20442.c | 398 +++++++++++++++ soc/codecs/cx20442.h | 19 + soc/codecs/max9877.c | 110 +++-- soc/codecs/tlv320aic3x.c | 11 +- soc/codecs/wm8400.c | 9 +- soc/codecs/wm8993.c | 2 + soc/fsl/mpc5200_psc_ac97.c | 3 +- soc/omap/omap-pcm.c | 2 +- soc/omap/sdp3430.c | 9 + soc/pxa/palm27x.c | 204 +++----- soc/soc-core.c | 6 +- soc/soc-jack.c | 20 +- usb/Kconfig | 1 + usb/caiaq/audio.c | 1 + usb/caiaq/device.c | 8 +- usb/caiaq/device.h | 1 + 43 files changed, 1883 insertions(+), 621 deletions(-) Patch -------------- (max 1500 lines) diff --git a/Documentation/HD-Audio-Models.txt b/Documentation/HD-Audio-Models.txt index a1895d7..4c95a6c 100644 --- a/Documentation/HD-Audio-Models.txt +++ b/Documentation/HD-Audio-Models.txt @@ -155,6 +155,8 @@ ALC882/883/885/888/889 fujitsu-pi2515 Fujitsu AMILO Pi2515 fujitsu-xa3530 Fujitsu AMILO XA3530 3stack-6ch-intel Intel DG33* boards + intel-alc889a Intel IbexPeak with ALC889A + intel-x58 Intel DX58 with ALC889 asus-p5q ASUS P5Q-EM boards mb31 MacBook 3,1 sony-vaio-tt Sony VAIO TT diff --git a/Documentation/HD-Audio.txt b/Documentation/HD-Audio.txt index 0b5b480..7b8a5f9 100644 --- a/Documentation/HD-Audio.txt +++ b/Documentation/HD-Audio.txt @@ -139,6 +139,10 @@ The driver checks PCI SSID and looks through the static configuration table until any matching entry is found. If you have a new machine, you may see a message like below: ------------------------------------------------------------------------ + hda_codec: ALC880: BIOS auto-probing. +------------------------------------------------------------------------ +Meanwhile, in the earlier versions, you would see a message like: +------------------------------------------------------------------------ hda_codec: Unknown model for ALC880, trying auto-probe from BIOS... ------------------------------------------------------------------------ Even if you see such a message, DON'T PANIC. Take a deep breath and diff --git a/Documentation/Procfile.txt b/Documentation/Procfile.txt index 381908d..719a819 100644 --- a/Documentation/Procfile.txt +++ b/Documentation/Procfile.txt @@ -101,6 +101,8 @@ card*/pcm*/xrun_debug bit 0 = Enable XRUN/jiffies debug messages bit 1 = Show stack trace at XRUN / jiffies check bit 2 = Enable additional jiffies check + bit 3 = Log hwptr update at each period interrupt + bit 4 = Log hwptr update at each snd_pcm_update_hw_ptr() When the bit 0 is set, the driver will show the messages to kernel log when an xrun is detected. The debug message is @@ -117,6 +119,9 @@ card*/pcm*/xrun_debug buggy) hardware that doesn't give smooth pointer updates. This feature is enabled via the bit 2. + Bits 3 and 4 are for logging the hwptr records. Note that + these will give flood of kernel messages. + card*/pcm*/sub*/info The general information of this PCM sub-stream. diff --git a/core/pcm_lib.c b/core/pcm_lib.c index 3b673e2..72cfd47 100644 --- a/core/pcm_lib.c +++ b/core/pcm_lib.c @@ -233,6 +233,18 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream) xrun(substream); return -EPIPE; } + if (xrun_debug(substream, 8)) { + char name[16]; + pcm_debug_name(substream, name, sizeof(name)); + snd_printd("period_update: %s: pos=0x%x/0x%x/0x%x, " + "hwptr=0x%lx, hw_base=0x%lx, hw_intr=0x%lx\n", + name, (unsigned int)pos, + (unsigned int)runtime->period_size, + (unsigned int)runtime->buffer_size, + (unsigned long)old_hw_ptr, + (unsigned long)runtime->hw_ptr_base, + (unsigned long)runtime->hw_ptr_interrupt); + } hw_base = runtime->hw_ptr_base; new_hw_ptr = hw_base + pos; hw_ptr_interrupt = runtime->hw_ptr_interrupt + runtime->period_size; @@ -244,7 +256,7 @@ static int snd_pcm_update_hw_ptr_interrupt(struct snd_pcm_substream *substream) delta = new_hw_ptr - hw_ptr_interrupt; } if (delta < 0) { - if (runtime->periods == 1) + if (runtime->periods == 1 || new_hw_ptr < old_hw_ptr) delta += runtime->buffer_size; if (delta < 0) { hw_ptr_error(substream, @@ -353,6 +365,19 @@ int snd_pcm_update_hw_ptr(struct snd_pcm_substream *substream) xrun(substream); return -EPIPE; } + if (xrun_debug(substream, 16)) { + char name[16]; + pcm_debug_name(substream, name, sizeof(name)); + snd_printd("hw_update: %s: pos=0x%x/0x%x/0x%x, " + "hwptr=0x%lx, hw_base=0x%lx, hw_intr=0x%lx\n", + name, (unsigned int)pos, + (unsigned int)runtime->period_size, + (unsigned int)runtime->buffer_size, + (unsigned long)old_hw_ptr, + (unsigned long)runtime->hw_ptr_base, + (unsigned long)runtime->hw_ptr_interrupt); + } + hw_base = runtime->hw_ptr_base; new_hw_ptr = hw_base + pos; diff --git a/include/ac97_codec.h b/include/ac97_codec.h index 251fc1c..9b1c098 100644 --- a/include/ac97_codec.h +++ b/include/ac97_codec.h @@ -642,4 +642,10 @@ int snd_ac97_pcm_double_rate_rules(struct snd_pcm_runtime *runtime); /* ad hoc AC97 device driver access */ extern struct bus_type ac97_bus_type; +/* AC97 platform_data adding function */ +static inline void snd_ac97_dev_add_pdata(struct snd_ac97 *ac97, void *data) +{ + ac97->dev.platform_data = data; +} + #endif /* __SOUND_AC97_CODEC_H */ diff --git a/include/soc-dai.h b/include/soc-dai.h index 05991b0..25d62ac 100644 --- a/include/soc-dai.h +++ b/include/soc-dai.h @@ -179,6 +179,7 @@ struct snd_soc_dai { int ac97_control; struct device *dev; + void *ac97_pdata; /* platform_data for the ac97 codec */ /* DAI callbacks */ int (*probe)(struct platform_device *pdev, diff --git a/pci/hda/hda_codec.c b/pci/hda/hda_codec.c index aa55407..3a603cd 100644 --- a/pci/hda/hda_codec.c +++ b/pci/hda/hda_codec.c @@ -301,12 +301,15 @@ int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid, unsigned int parm; int i, conn_len, conns; unsigned int shift, num_elems, mask; + unsigned int wcaps; hda_nid_t prev_nid; if (snd_BUG_ON(!conn_list || max_conns <= 0)) return -EINVAL; - if ((get_wcaps(codec, nid) & AC_WCAP_CONN_LIST) == 0) { + wcaps = get_wcaps(codec, nid); + if (!(wcaps & AC_WCAP_CONN_LIST) && + get_wcaps_type(wcaps) != AC_WID_VOL_KNB) { snd_printk(KERN_WARNING "hda_codec: " "connection list not available for 0x%x\n", nid); return -EINVAL; @@ -748,8 +751,7 @@ static int read_pin_defaults(struct hda_codec *codec) for (i = 0; i < codec->num_nodes; i++, nid++) { struct hda_pincfg *pin; unsigned int wcaps = get_wcaps(codec, nid); - unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >> - AC_WCAP_TYPE_SHIFT; + unsigned int wid_type = get_wcaps_type(wcaps); if (wid_type != AC_WID_PIN) continue; pin = snd_array_new(&codec->init_pins); @@ -2386,8 +2388,7 @@ static void hda_set_power_state(struct hda_codec *codec, hda_nid_t fg, for (i = 0; i < codec->num_nodes; i++, nid++) { unsigned int wcaps = get_wcaps(codec, nid); if (wcaps & AC_WCAP_POWER) { - unsigned int wid_type = (wcaps & AC_WCAP_TYPE) >> - AC_WCAP_TYPE_SHIFT; + unsigned int wid_type = get_wcaps_type(wcaps); if (power_state == AC_PWRST_D3 && wid_type == AC_WID_PIN) { unsigned int pincap; @@ -3678,8 +3679,7 @@ int snd_hda_parse_pin_def_config(struct hda_codec *codec, end_nid = codec->start_nid + codec->num_nodes; for (nid = codec->start_nid; nid < end_nid; nid++) { unsigned int wid_caps = get_wcaps(codec, nid); - unsigned int wid_type = - (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + unsigned int wid_type = get_wcaps_type(wid_caps); unsigned int def_conf; short assoc, loc; diff --git a/pci/hda/hda_eld.c b/pci/hda/hda_eld.c index fcad5ec..9446a5a 100644 --- a/pci/hda/hda_eld.c +++ b/pci/hda/hda_eld.c @@ -508,7 +508,7 @@ static void hdmi_write_eld_info(struct snd_info_entry *entry, char name[64]; char *sname; long long val; - int n; + unsigned int n; while (!snd_info_get_line(buffer, line, sizeof(line))) { if (sscanf(line, "%s %llx", name, &val) != 2) @@ -539,7 +539,7 @@ static void hdmi_write_eld_info(struct snd_info_entry *entry, sname++; n = 10 * n + name[4] - '0'; } - if (n < 0 || n > 31) /* double the CEA limit */ + if (n >= ELD_MAX_SAD) continue; if (!strcmp(sname, "_coding_type")) e->sad[n].format = val; diff --git a/pci/hda/hda_generic.c b/pci/hda/hda_generic.c index bccb62a..b36f6c5 100644 --- a/pci/hda/hda_generic.c +++ b/pci/hda/hda_generic.c @@ -122,7 +122,7 @@ static int add_new_node(struct hda_codec *codec, struct hda_gspec *spec, hda_nid return -ENOMEM; node->nid = nid; node->wid_caps = get_wcaps(codec, nid); - node->type = (node->wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + node->type = get_wcaps_type(node->wid_caps); if (node->wid_caps & AC_WCAP_CONN_LIST) { nconns = snd_hda_get_connections(codec, nid, conn_list, HDA_MAX_CONNECTIONS); diff --git a/pci/hda/hda_local.h b/pci/hda/hda_local.h index 75aa378..fa57cb9 100644 --- a/pci/hda/hda_local.h +++ b/pci/hda/hda_local.h @@ -407,6 +407,9 @@ static inline u32 get_wcaps(struct hda_codec *codec, hda_nid_t nid) return codec->wcaps[nid - codec->start_nid]; } +/* get the widget type from widget capability bits */ +#define get_wcaps_type(wcaps) (((wcaps) & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT) + u32 query_amp_caps(struct hda_codec *codec, hda_nid_t nid, int direction); int snd_hda_override_amp_caps(struct hda_codec *codec, hda_nid_t nid, int dir, unsigned int caps); diff --git a/pci/hda/hda_proc.c b/pci/hda/hda_proc.c index 418c5d1..a721eb0 100644 --- a/pci/hda/hda_proc.c +++ b/pci/hda/hda_proc.c @@ -508,8 +508,7 @@ static void print_codec_info(struct snd_info_entry *entry, unsigned int wid_caps = snd_hda_param_read(codec, nid, AC_PAR_AUDIO_WIDGET_CAP); - unsigned int wid_type = - (wid_caps & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + unsigned int wid_type = get_wcaps_type(wid_caps); hda_nid_t conn[HDA_MAX_CONNECTIONS]; int conn_len = 0; diff --git a/pci/hda/patch_analog.c b/pci/hda/patch_analog.c index 3da85ca..ab3bcb7 100644 --- a/pci/hda/patch_analog.c +++ b/pci/hda/patch_analog.c @@ -2982,7 +2982,8 @@ static int patch_ad1988(struct hda_codec *codec) board_config = snd_hda_check_board_config(codec, AD1988_MODEL_LAST, ad1988_models, ad1988_cfg_tbl); if (board_config < 0) { - printk(KERN_INFO "hda_codec: Unknown model for AD1988, trying auto-probe from BIOS...\n"); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = AD1988_AUTO; } diff --git a/pci/hda/patch_ca0110.c b/pci/hda/patch_ca0110.c index 019ca7c..d08353d 100644 --- a/pci/hda/patch_ca0110.c +++ b/pci/hda/patch_ca0110.c @@ -459,8 +459,7 @@ static void parse_input(struct hda_codec *codec) nid = codec->start_nid; for (i = 0; i < codec->num_nodes; i++, nid++) { unsigned int wcaps = get_wcaps(codec, nid); - unsigned int type = (wcaps & AC_WCAP_TYPE) >> - AC_WCAP_TYPE_SHIFT; + unsigned int type = get_wcaps_type(wcaps); if (type != AC_WID_AUD_IN) continue; if (snd_hda_get_connections(codec, nid, &pin, 1) != 1) diff --git a/pci/hda/patch_cmedia.c b/pci/hda/patch_cmedia.c index c921264..780e1a7 100644 --- a/pci/hda/patch_cmedia.c +++ b/pci/hda/patch_cmedia.c @@ -635,7 +635,8 @@ static int patch_cmi9880(struct hda_codec *codec) cmi9880_models, cmi9880_cfg_tbl); if (spec->board_config < 0) { - snd_printdd(KERN_INFO "hda_codec: Unknown model for CMI9880\n"); + snd_printdd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); spec->board_config = CMI_AUTO; /* try everything */ } diff --git a/pci/hda/patch_realtek.c b/pci/hda/patch_realtek.c index b5b36b8..587d94f 100644 --- a/pci/hda/patch_realtek.c +++ b/pci/hda/patch_realtek.c @@ -415,7 +415,7 @@ static int alc_mux_enum_put(struct snd_kcontrol *kcontrol, mux_idx = adc_idx >= spec->num_mux_defs ? 0 : adc_idx; imux = &spec->input_mux[mux_idx]; - type = (get_wcaps(codec, nid) & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + type = get_wcaps_type(get_wcaps(codec, nid)); if (type == AC_WID_AUD_MIX) { /* Matrix-mixer style (e.g. ALC882) */ unsigned int *cur_val = &spec->cur_mux[adc_idx]; @@ -1436,6 +1436,25 @@ static void alc_automute_amp_unsol_event(struct hda_codec *codec, alc_automute_amp(codec); } +static void alc889_automute_init(struct hda_codec *codec) +{ + struct alc_spec *spec = codec->spec; + + spec->autocfg.hp_pins[0] = 0x15; + spec->autocfg.speaker_pins[0] = 0x14; + spec->autocfg.speaker_pins[1] = 0x16; + spec->autocfg.speaker_pins[2] = 0x17; + spec->autocfg.speaker_pins[3] = 0x19; + spec->autocfg.speaker_pins[4] = 0x1a; + alc_automute_amp(codec); +} + +static void alc889_intel_init_hook(struct hda_codec *codec) +{ + alc889_coef_init(codec); + alc889_automute_init(codec); +} + static void alc888_fujitsu_xa3530_init_hook(struct hda_codec *codec) { struct alc_spec *spec = codec->spec; @@ -4584,8 +4603,8 @@ static int patch_alc880(struct hda_codec *codec) alc880_models, alc880_cfg_tbl); if (board_config < 0) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC880_AUTO; } @@ -4623,7 +4642,7 @@ static int patch_alc880(struct hda_codec *codec) /* check whether NID 0x07 is valid */ unsigned int wcap = get_wcaps(codec, alc880_adc_nids[0]); /* get type */ - wcap = (wcap & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + wcap = get_wcaps_type(wcap); if (wcap != AC_WID_AUD_IN) { spec->adc_nids = alc880_adc_nids_alt; spec->num_adc_nids = ARRAY_SIZE(alc880_adc_nids_alt); @@ -6228,8 +6247,7 @@ static int patch_alc260(struct hda_codec *codec) alc260_models, alc260_cfg_tbl); if (board_config < 0) { - snd_printd(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", + snd_printd(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", codec->chip_name); board_config = ALC260_AUTO; } @@ -6266,7 +6284,7 @@ static int patch_alc260(struct hda_codec *codec) if (!spec->adc_nids && spec->input_mux) { /* check whether NID 0x04 is valid */ unsigned int wcap = get_wcaps(codec, 0x04); - wcap = (wcap & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + wcap = get_wcaps_type(wcap); /* get type */ if (wcap != AC_WID_AUD_IN || spec->input_mux->num_items == 1) { spec->adc_nids = alc260_adc_nids_alt; @@ -6682,18 +6700,27 @@ static struct hda_channel_mode alc883_3ST_6ch_intel_modes[3] = { }; /* + * 2ch mode + */ +static struct hda_verb alc889_ch2_intel_init[] = { + { 0x14, AC_VERB_SET_CONNECT_SEL, 0x00 }, + { 0x19, AC_VERB_SET_CONNECT_SEL, 0x00 }, + { 0x16, AC_VERB_SET_CONNECT_SEL, 0x00 }, + { 0x17, AC_VERB_SET_CONNECT_SEL, 0x00 }, + { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, + { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, + { } /* end */ +}; + +/* * 6ch mode */ static struct hda_verb alc889_ch6_intel_init[] = { - { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 }, + { 0x14, AC_VERB_SET_CONNECT_SEL, 0x00 }, + { 0x19, AC_VERB_SET_CONNECT_SEL, 0x01 }, + { 0x16, AC_VERB_SET_CONNECT_SEL, 0x02 }, + { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03 }, + { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN }, { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE }, { } /* end */ }; @@ -6702,21 +6729,18 @@ static struct hda_verb alc889_ch6_intel_init[] = { * 8ch mode */ static struct hda_verb alc889_ch8_intel_init[] = { - { 0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, - { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, + { 0x14, AC_VERB_SET_CONNECT_SEL, 0x00 }, + { 0x19, AC_VERB_SET_CONNECT_SEL, 0x01 }, + { 0x16, AC_VERB_SET_CONNECT_SEL, 0x02 }, + { 0x17, AC_VERB_SET_CONNECT_SEL, 0x03 }, + { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x03 }, { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT }, { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE }, - { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x03 }, { } /* end */ }; -static struct hda_channel_mode alc889_8ch_intel_modes[2] = { +static struct hda_channel_mode alc889_8ch_intel_modes[3] = { + { 2, alc889_ch2_intel_init }, { 6, alc889_ch6_intel_init }, { 8, alc889_ch8_intel_init }, }; @@ -6988,6 +7012,11 @@ static struct hda_verb alc889_eapd_verbs[] = { { } }; +static struct hda_verb alc_hp15_unsol_verbs[] = { + {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, + {} +}; static struct hda_verb alc885_init_verbs[] = { /* Front mixer: unmute input/output amp left and right (volume = 0) */ @@ -7013,7 +7042,7 @@ static struct hda_verb alc885_init_verbs[] = { {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, /* Front HP Pin: output 0 (0x0c) */ - {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, /* Front Pin: output 0 (0x0c) */ @@ -8855,7 +8884,8 @@ static struct alc_config_preset alc882_presets[] = { }, [ALC889A_INTEL] = { .mixers = { alc885_8ch_intel_mixer, alc883_chmode_mixer }, - .init_verbs = { alc885_init_verbs, alc885_init_input_verbs }, + .init_verbs = { alc885_init_verbs, alc885_init_input_verbs, + alc_hp15_unsol_verbs }, .num_dacs = ARRAY_SIZE(alc883_dac_nids), .dac_nids = alc883_dac_nids, .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), @@ -8867,12 +8897,14 @@ static struct alc_config_preset alc882_presets[] = { .channel_mode = alc889_8ch_intel_modes, .capsrc_nids = alc889_capsrc_nids, .input_mux = &alc889_capture_source, + .init_hook = alc889_automute_init, + .unsol_event = alc_automute_amp_unsol_event, .need_dac_fix = 1, }, [ALC889_INTEL] = { .mixers = { alc885_8ch_intel_mixer, alc883_chmode_mixer }, .init_verbs = { alc885_init_verbs, alc889_init_input_verbs, - alc889_eapd_verbs }, + alc889_eapd_verbs, alc_hp15_unsol_verbs}, .num_dacs = ARRAY_SIZE(alc883_dac_nids), .dac_nids = alc883_dac_nids, .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), @@ -8884,7 +8916,8 @@ static struct alc_config_preset alc882_presets[] = { .channel_mode = alc889_8ch_intel_modes, .capsrc_nids = alc889_capsrc_nids, .input_mux = &alc889_capture_source, - .init_hook = alc889_coef_init, + .init_hook = alc889_intel_init_hook, + .unsol_event = alc_automute_amp_unsol_event, .need_dac_fix = 1, }, [ALC883_6ST_DIG] = { @@ -9460,7 +9493,7 @@ static int alc882_parse_auto_config(struct hda_codec *codec) spec->init_verbs[0] = alc883_auto_init_verbs; /* if ADC 0x07 is available, initialize it, too */ wcap = get_wcaps(codec, 0x07); - wcap = (wcap & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + wcap = get_wcaps_type(wcap); if (wcap == AC_WID_AUD_IN) add_verb(spec, alc882_adc1_init_verbs); @@ -9526,8 +9559,7 @@ static int patch_alc882(struct hda_codec *codec) ALC882_MODEL_LAST, alc882_models, alc882_ssid_cfg_tbl); if (board_config < 0 || board_config >= ALC882_MODEL_LAST) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", codec->chip_name); board_config = ALC882_AUTO; } @@ -9577,7 +9609,7 @@ static int patch_alc882(struct hda_codec *codec) hda_nid_t nid = alc882_adc_nids[i]; unsigned int wcap = get_wcaps(codec, nid); /* get type */ - wcap = (wcap & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + wcap = get_wcaps_type(wcap); if (wcap != AC_WID_AUD_IN) continue; spec->private_adc_nids[spec->num_adc_nids] = nid; @@ -10117,12 +10149,6 @@ static struct hda_verb alc262_eapd_verbs[] = { { } }; -static struct hda_verb alc262_hippo_unsol_verbs[] = { - {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, - {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, - {} -}; - static struct hda_verb alc262_hippo1_unsol_verbs[] = { {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, 0xc0}, {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, @@ -10389,6 +10415,18 @@ static void alc262_lenovo_3000_unsol_event(struct hda_codec *codec, alc262_lenovo_3000_automute(codec, 1); } +static int amp_stereo_mute_update(struct hda_codec *codec, hda_nid_t nid, + int dir, int idx, long *valp) +{ + int i, change = 0; + + for (i = 0; i < 2; i++, valp++) + change |= snd_hda_codec_amp_update(codec, nid, i, dir, idx, + HDA_AMP_MUTE, + *valp ? 0 : HDA_AMP_MUTE); + return change; +} + /* bind hp and internal speaker mute (with plug check) */ static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) @@ -10397,13 +10435,8 @@ static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol, long *valp = ucontrol->value.integer.value; int change; - change = snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0, - HDA_AMP_MUTE, - valp ? 0 : HDA_AMP_MUTE); - change |= snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0, - HDA_AMP_MUTE, - valp ? 0 : HDA_AMP_MUTE); - + change = amp_stereo_mute_update(codec, 0x14, HDA_OUTPUT, 0, valp); + change |= amp_stereo_mute_update(codec, 0x1b, HDA_OUTPUT, 0, valp); if (change) alc262_fujitsu_automute(codec, 0); return change; @@ -10438,10 +10471,7 @@ static int alc262_lenovo_3000_master_sw_put(struct snd_kcontrol *kcontrol, long *valp = ucontrol->value.integer.value; int change; - change = snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0, - HDA_AMP_MUTE, - valp ? 0 : HDA_AMP_MUTE); - + change = amp_stereo_mute_update(codec, 0x1b, HDA_OUTPUT, 0, valp); if (change) alc262_lenovo_3000_automute(codec, 0); return change; @@ -11160,7 +11190,7 @@ static struct alc_config_preset alc262_presets[] = { }, [ALC262_HIPPO] = { .mixers = { alc262_hippo_mixer }, - .init_verbs = { alc262_init_verbs, alc262_hippo_unsol_verbs}, + .init_verbs = { alc262_init_verbs, alc_hp15_unsol_verbs}, .num_dacs = ARRAY_SIZE(alc262_dac_nids), .dac_nids = alc262_dac_nids, .hp_nid = 0x03, @@ -11280,7 +11310,8 @@ static struct alc_config_preset alc262_presets[] = { }, [ALC262_BENQ_T31] = { .mixers = { alc262_benq_t31_mixer }, - .init_verbs = { alc262_init_verbs, alc262_benq_t31_EAPD_verbs, alc262_hippo_unsol_verbs }, + .init_verbs = { alc262_init_verbs, alc262_benq_t31_EAPD_verbs, + alc_hp15_unsol_verbs }, .num_dacs = ARRAY_SIZE(alc262_dac_nids), .dac_nids = alc262_dac_nids, .hp_nid = 0x03, @@ -11402,8 +11433,8 @@ static int patch_alc262(struct hda_codec *codec) alc262_cfg_tbl); if (board_config < 0) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC262_AUTO; } @@ -11456,7 +11487,7 @@ static int patch_alc262(struct hda_codec *codec) unsigned int wcap = get_wcaps(codec, 0x07); /* get type */ - wcap = (wcap & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + wcap = get_wcaps_type(wcap); if (wcap != AC_WID_AUD_IN) { spec->adc_nids = alc262_adc_nids_alt; spec->num_adc_nids = @@ -11612,12 +11643,7 @@ static int alc268_acer_master_sw_put(struct snd_kcontrol *kcontrol, long *valp = ucontrol->value.integer.value; int change; - change = snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0, - HDA_AMP_MUTE, - valp[0] ? 0 : HDA_AMP_MUTE); - change |= snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0, - HDA_AMP_MUTE, - valp[1] ? 0 : HDA_AMP_MUTE); + change = amp_stereo_mute_update(codec, 0x14, HDA_OUTPUT, 0, valp); if (change) alc268_acer_automute(codec, 0); return change; @@ -12480,8 +12506,8 @@ static int patch_alc268(struct hda_codec *codec) alc268_cfg_tbl); if (board_config < 0 || board_config >= ALC268_MODEL_LAST) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC268_AUTO; } @@ -12537,7 +12563,7 @@ static int patch_alc268(struct hda_codec *codec) int i; /* get type */ - wcap = (wcap & AC_WCAP_TYPE) >> AC_WCAP_TYPE_SHIFT; + wcap = get_wcaps_type(wcap); if (wcap != AC_WID_AUD_IN || spec->input_mux->num_items == 1) { spec->adc_nids = alc268_adc_nids_alt; spec->num_adc_nids = ARRAY_SIZE(alc268_adc_nids_alt); @@ -13298,8 +13324,8 @@ static int patch_alc269(struct hda_codec *codec) alc269_cfg_tbl); if (board_config < 0) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC269_AUTO; } @@ -13992,8 +14018,7 @@ static hda_nid_t alc861_look_for_dac(struct hda_codec *codec, hda_nid_t pin) return 0; for (i = 0; i < num; i++) { unsigned int type; - type = (get_wcaps(codec, srcs[i]) & AC_WCAP_TYPE) - >> AC_WCAP_TYPE_SHIFT; + type = get_wcaps_type(get_wcaps(codec, srcs[i])); if (type != AC_WID_AUD_OUT) continue; for (j = 0; j < spec->multiout.num_dacs; j++) @@ -14450,8 +14475,8 @@ static int patch_alc861(struct hda_codec *codec) alc861_cfg_tbl); if (board_config < 0) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC861_AUTO; } @@ -15374,8 +15399,8 @@ static int patch_alc861vd(struct hda_codec *codec) alc861vd_cfg_tbl); if (board_config < 0 || board_config >= ALC861VD_MODEL_LAST) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC861VD_AUTO; } @@ -17298,8 +17323,8 @@ static int patch_alc662(struct hda_codec *codec) alc662_models, alc662_cfg_tbl); if (board_config < 0) { - printk(KERN_INFO "hda_codec: Unknown model for %s, " - "trying auto-probe from BIOS...\n", codec->chip_name); + printk(KERN_INFO "hda_codec: %s: BIOS auto-probing.\n", + codec->chip_name); board_config = ALC662_AUTO; } diff --git a/pci/hda/patch_sigmatel.c b/pci/hda/patch_sigmatel.c index 8c48f86..5dcabb1 100644 --- a/pci/hda/patch_sigmatel.c +++ b/pci/hda/patch_sigmatel.c @@ -40,6 +40,7 @@ enum { STAC_INSERT_EVENT, STAC_PWR_EVENT, STAC_HP_EVENT, + STAC_MIC_EVENT, }; enum { @@ -176,6 +177,12 @@ struct sigmatel_jack { struct snd_jack *jack; }; +struct sigmatel_mic_route { + hda_nid_t pin; + unsigned char mux_idx; + unsigned char dmux_idx; +}; + struct sigmatel_spec { struct snd_kcontrol_new *mixers[4]; unsigned int num_mixers; @@ -187,6 +194,7 @@ struct sigmatel_spec { unsigned int hp_detect: 1; unsigned int spdif_mute: 1; unsigned int check_volume_offset:1; + unsigned int auto_mic:1; /* gpio lines */ unsigned int eapd_mask; @@ -238,6 +246,14 @@ struct sigmatel_spec { unsigned int num_dmuxes; hda_nid_t *smux_nids; unsigned int num_smuxes; + + unsigned long *capvols; /* amp-volume attr: HDA_COMPOSE_AMP_VAL() */ + unsigned long *capsws; /* amp-mute attr: HDA_COMPOSE_AMP_VAL() */ + unsigned int num_caps; /* number of capture volume/switch elements */ + + struct sigmatel_mic_route ext_mic; + struct sigmatel_mic_route int_mic; + const char **spdif_labels; hda_nid_t dig_in_nid; @@ -334,6 +350,13 @@ static hda_nid_t stac92hd73xx_smux_nids[2] = { 0x22, 0x23, }; +#define STAC92HD73XX_NUM_CAPS 2 +static unsigned long stac92hd73xx_capvols[] = { + HDA_COMPOSE_AMP_VAL(0x20, 3, 0, HDA_OUTPUT), + HDA_COMPOSE_AMP_VAL(0x21, 3, 0, HDA_OUTPUT), +}; +#define stac92hd73xx_capsws stac92hd73xx_capvols + #define STAC92HD83XXX_NUM_DMICS 2 static hda_nid_t stac92hd83xxx_dmic_nids[STAC92HD83XXX_NUM_DMICS + 1] = { 0x11, 0x12, 0 @@ -365,6 +388,13 @@ static hda_nid_t stac92hd83xxx_amp_nids[1] = { 0xc, }; +#define STAC92HD83XXX_NUM_CAPS 2 +static unsigned long stac92hd83xxx_capvols[] = { + HDA_COMPOSE_AMP_VAL(0x17, 3, 0, HDA_... [truncated message content] |