- 06 Jun, 2011 3 commits
-
-
Stephen Warren authored
The general concept of this change is to create a PCM device for each pin widget instead of each converter widget. Whenever a PCM is opened, a converter is dynamically selected to drive that pin based on those available for muxing into the pin. The one thing this model doesn't support is a single PCM/converter sending audio to multiple pin widgets at once. Note that this means that a struct hda_pcm_stream's nid variable is set to 0 except between a stream's open and cleanup calls. The dynamic de-assignment of converters to PCMs occurs within cleanup, not close, in order for it to co-incide with when controller stream IDs are cleaned up from converters. While the PCM for a pin is not open, the pin is disabled (its widget control's PIN_OUT bit is cleared) so that if the currently routed converter is used to drive a different PCM/pin, that audio does not leak out over a disabled pin. We use the recently added SPDIF virtualization feature in order to create SPDIF controls for each pin widget instead of each converter widget, so that state is specific to a PCM. In order to support this, a number of more mechanical changes are made: * s/nid/pin_nid/ or s/nid/cvt_nid/ in many places in order to make it clear exactly what the code is dealing with. * We now have per_pin and per_cvt arrays in hdmi_spec to store relevant data. In particular, we store a converter's capabilities in the per_cvt entry, rather than relying on a combination of codec_pcm_pars and the struct hda_pcm_stream. * ELD-related workarounds were removed from hdmi_channel_allocation into hdmi_instrinsic in order to simplifiy infoframe calculations and remove HW dependencies. * Various functions only apply to a single pin, since there is now only 1 pin per PCM. For example, hdmi_setup_infoframe, hdmi_setup_stream. * hdmi_add_pin and hdmi_add_cvt are more oriented at pure codec parsing and data retrieval, rather than determining which pins/converters are to be used for creating PCMs. This is quite a large change; it may be appropriate to simply read the result of the patch rather than the diffs. Some small parts of the change might be separable into different patches, but I think the bulk of the change will probably always be one large patch. Hopefully the change isn't too opaque! This has been tested on: * NVIDIA GeForce 400 series discrete graphics card. This model has the classical 1:1:1 codec:converter:pcm widget model. Tested stereo PCM audio to a PC monitor that supports audio. * NVIDIA GeForce 520 discrete graphics card. This model is the new 1 codec n converters m pins m>n model. Tested stereo PCM audio to a PC monitor that supports audio. * NVIDIA GeForce 400 series laptop graphics chip. This model has the classical 1:1:1 codec:converter:pcm widget model. Tested stereo PCM, multi-channel PCM, and AC3 pass-through to an AV receiver. * Intel Ibex Peak laptop. This model is the new 1 codec n converters m pins m>n model. Tested stereo PCM, multi-channel PCM, and AC3 pass- through to an AV receiver. Note that I'm not familiar at all with AC3 pass-through. Hence, I may not have covered all possible mechanisms that are applicable here. I do know that my receiver definitely received AC3, not decoded PCM. I tested with mplayer's "-afm hwac3" and/or "-af lavcac3enc" options, and alsa a WAV file that I believe has AC3 content rather than PCM. I also tested: * Play a stream * Mute while playing * Stop stream * Play some other streams to re-assign the converter to a different pin, PCM, set of SPDIF controls, ... hence hopefully triggering cleanup for the original PCM. * Unmute original stream while not playing * Play a stream on the original pin/PCM. This was to test SPDIF control virtualization. Signed-off-by:
Stephen Warren <swarren@nvidia.com> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Stephen Warren authored
The SPDIF output controls apply to converter widgets. A future change will create a PCM device per pin widget, and hence a set of SPDIF output controls per pin widget, for certain HDMI codecs. To support this, we need the ability to virtualize the SPDIF output controls. Specifically: * Controls can be "unassigned" from real hardware when a converter is not used for the PCM the control was created for. * Control puts only write to hardware when they are assigned. * Controls can be "assigned" to real hardware when a converter is picked to support output for a particular PCM. * When a converter is assigned, the hardware is updated to the cached configuration. Signed-off-by:
Stephen Warren <swarren@nvidia.com> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Stephen Warren authored
Currently, the data that backs the kcontrols created by snd_hda_create_spdif_out_ctls is stored directly in struct hda_codec. When multiple sets of these controls are stored, they will all manipulate the same data, causing confusion. Instead, store an array of this data, one copy per converter, to isolate the controls. This patch would cause a behavioural change in the case where snd_hda_create_spdif_out_ctls was called multiple times for a single codec. As best I can tell, this is never the case for any codec. This will be relevant at least for some HDMI audio codecs, such as the NVIDIA GeForce 520 and Intel Ibex Peak. A future change will modify the driver's handling of those codecs to create multiple PCMs per codec. Note that this issue isn't affected by whether one creates a PCM-per-converter or PCM-per-pin; there are multiple of both within a single codec in both of those codecs. Note that those codecs don't currently create multiple PCMs for the codec due to the default HW mux state of all pins being to point at the same converter, hence there is only a single converter routed to any pin, and hence only a single PCM. Signed-off-by:
Stephen Warren <swarren@nvidia.com> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 26 May, 2011 1 commit
-
-
Takashi Iwai authored
Fixed the wrong usage of snd_printdd() for debug prints of input entries. It should be snd_printd() like others. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 19 May, 2011 1 commit
-
-
David Henningsson authored
Just as for headphones and microphone jacks, this patch adds reporting of HDMI jack status through the input layer. Signed-off-by:
David Henningsson <david.henningsson@canonical.com> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 02 May, 2011 2 commits
-
-
Takashi Iwai authored
Also fixed the assignment of multiout.dac_nids to satisfy const. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 29 Apr, 2011 1 commit
-
-
Takashi Iwai authored
Helpful for debugging. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 20 Apr, 2011 1 commit
-
-
Mike Waychison authored
When SND_HDA_NEEDS_RESUME is not defined, the compiler identifies that the following symbols are static but not used: restore_shutup_pins hda_cleanup_all_streams Fix warnings by adding SND_HDA_NEEDS_RESUME guards. Signed-off-by:
Mike Waychison <mikew@google.com> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 15 Apr, 2011 1 commit
-
-
Andrew Morton authored
sound/pci/hda/hda_codec.c: In function 'snd_hda_get_connections': sound/pci/hda/hda_codec.c:332: warning: unused variable 'j' Signed-off-by:
Andrew Morton <akpm@linux-foundation.org> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 07 Apr, 2011 1 commit
-
-
Takashi Iwai authored
The connection lists are static and we can reuse the previous results instead of querying via verb at each time. This will reduce the I/O in the runtime especially for some codec auto-parsers. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 31 Mar, 2011 1 commit
-
-
Lucas De Marchi authored
Fixes generated by 'codespell' and manually reviewed. Signed-off-by:
Lucas De Marchi <lucas.demarchi@profusion.mobi>
-
- 03 Mar, 2011 1 commit
-
-
Takashi Iwai authored
Since multiple codec drivers already use the input-jack stuff, let's make common helper functions to reduce the duplicated codes. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 17 Jan, 2011 1 commit
-
-
Takashi Iwai authored
Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 10 Jan, 2011 1 commit
-
-
Takashi Iwai authored
When multiple headphone pins are defined without line-out pins, the driver takes them as primary outputs. But it forgot to set line_out_type to HP by assuming there is some rest of HP pins. This results in some mis-handling of these pins for Realtek codec parser. It takes as if these are pure line-out jacks. Signed-off-by:
Takashi Iwai <tiwai@suse.de> Cc: <stable@kernel.org>
-
- 23 Dec, 2010 1 commit
-
-
Takashi Iwai authored
When a mixer control element was already created with the given name, try to find another index for avoiding conflicts, instead of breaking with an error. This makes the driver more robust. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 25 Oct, 2010 1 commit
-
-
Takashi Iwai authored
The sticky PCM stream assignment introduced in 2.6.36 kernel seems causing problems on AD codecs. At some time later, the streaming no longer works by unknown reason. A simple workaround is to disable sticky-assignment for these codecs. Tested-by:
Vasily Khoruzhick <anarsoul@gmail.com> Cc: <stable@kernel.org> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 22 Oct, 2010 1 commit
-
-
Takashi Iwai authored
Creative IBG controllers require the playback stream-tags to be started from 1, instead of capture+1. Otherwise the stream stalls. Reported-by:
Wai Yew CHAY <wychay@ctl.creative.com> Cc: <stable@kernel.org> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 17 Oct, 2010 2 commits
-
-
Takashi Iwai authored
Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Clemens Ladisch authored
The HDA specification does not allow for a codec to mute itself just because the volume is reduced, so _of course_ somebody had to go and do it. This wouldn'\''t hurt too much when the volume is adjusted by hand, but programs like PA that try to set the volume automatically could inadvertently mute the output. To work around this, change the TLV dB information for the Master volume on all Sigmatel HDA codecs to indicate the the minimal volume setting actually mutes. Reported-by:
Colin Guthrie <gmane@colin.guthr.ie> Reported-by:
"Alexander E. Patrakov" <patrakov@gmail.com> Tested-by:
Colin Guthrie <cguthrie@mandriva.org> Signed-off-by:
Clemens Ladisch <clemens@ladisch.de> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 21 Sep, 2010 1 commit
-
-
Takashi Iwai authored
Replace the explicit ifdef check and call of check_power_status ops with a new helper function, hda_call_check_power_status(). Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 17 Sep, 2010 2 commits
-
-
Takashi Iwai authored
Make the helper function to give the input-pin attribute for jack connectivity and location. This simplifies checks of input-pin jacks a bit in some places. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
Now Windows claims that the BIOS sets pins for internal mics to be BOTH connection instead of FIXED. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 09 Sep, 2010 6 commits
-
-
Takashi Iwai authored
Sort inputs[] array in autocfg so that the codec parsers can filter out easily per input pin types. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
When the mic pins are assigned to the same location, we can omit the redundant location prefix like "Front" or "Rear". Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
This patch improves the input-source label strings to be generated from the pin information instead of fixed strings per AUTO_PIN_* type. This gives more suitable labels, especially for mic and line-in pins. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
We can assign multiple pins to a single role now, let's reduce the redundant FRONT_MIC and FRONT_LINE. Also, autocfg->input_pins[] is no longer used, so this is removed as well. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
Keep char array in the input_mux item itself instead of pointing to an external string. This is a preliminary work for improving the input-mux name based on the pin role. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 08 Sep, 2010 2 commits
-
-
Takashi Iwai authored
In snd_hda_parse_def_config(), some unused values may remain in hp_pins[] array during the headphone-reassignment workaround. This patch clears the unused array members. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
snd_hda_parse_pin_def_config() has some workaround for re-assigning some pins declared as headphones to line-outs. This didn't work properly for some cases because it used memmove() stupidly wrongly. Reference: Novell bnc#637263 https://bugzilla.novell.com/show_bug.cgi?id=637263 Cc: <stable@kernel.org> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 30 Aug, 2010 2 commits
-
-
Takashi Iwai authored
Added snd_hda_get_input_pin_label() helper function to return the string that can be used for control or capture-source ids. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Takashi Iwai authored
Added the new fields to contain all input-pins to struct auto_pin_cfg. Unlike the existing input_pins[], this array contains all input pins even if the multiple pins are assigned for a single role (i.e. two front mics). The former input_pins[] still remains for a while, but will be removed in near future. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 20 Aug, 2010 1 commit
-
-
Takashi Iwai authored
The new sticky PCM parameter introduced the delayed clean-ups of stream- and channel-id tags. In the current implementation, this check (adding dirty flag) and actual clean-ups are done only for the codec chip. However, with HD-audio architecture, multiple codecs can be on a single bus, and the controller assign stream- and channel-ids in the bus-wide. In this patch, the stream-id and channel-id are checked over all codecs connected to the corresponding bus. Together with it, the mutex is moved to struct hda_bus, as this becomes also bus-wide. Reported-and-tested-by:
Stephen Warren <swarren@nvidia.com> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 13 Aug, 2010 1 commit
-
-
Takashi Iwai authored
The commit eb541337 ALSA: hda - Make converter setups sticky changes the semantics of snd_hda_codec_cleanup_stream() not to clean up the stream at that moment but delay the action. This broke the codes expecting that the clean-up is done immediately, such as dynamic ADC changes in some codec drivers. This patch fixes the issue by introducing a lower helper, __snd_hda_codec_cleanup_stream(), to allow the immediate clean up. The original snd_hda_codec_cleanup_stream() is kept as is now. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 06 Aug, 2010 1 commit
-
-
Takashi Iwai authored
So far, we reset the converter setups like the stream-tag, the channel-id and format-id in prepare callbacks, and clear them in cleanup callbacks. This often causes a silence of the digital receiver for a couple of seconds. This patch tries to delay the converter setup changes as much as possible. The converter setups are cached and aren't reset as long as the same values are used. At suspend/resume, they are cleared to be recovered properly, too. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 03 Aug, 2010 2 commits
-
-
Takashi Iwai authored
Define constants for the HD-audio stream format bits, and replace the magic numbers in codes. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
Anssi Hannula authored
Set bit 15 (Stream Type) of HDA Stream Format to 1 (Non-PCM) when IEC958 channel status bit 1 (AES0 & 0x02) is set to 1 (non-audio). This is a prequisite for HDMI HBR passthrough. Signed-off-by:
Anssi Hannula <anssi.hannula@iki.fi> Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 30 Jul, 2010 1 commit
-
-
Takashi Iwai authored
Add a prefix and more information for error messages regarding the connection-list in hda_codec.c. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-
- 26 Jul, 2010 1 commit
-
-
Takashi Iwai authored
The commit afbd9b84 ALSA: hda - Limit the amp value to write introduced a regression for codec setups with amp offsets like IDT/STAC codecs. The limit value should be a raw value without offset calculation. Signed-off-by:
Takashi Iwai <tiwai@suse.de>
-