summaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_generic.c
Commit message (Collapse)AuthorAgeFilesLines
...
* ALSA: hda - make sure there are enough input labels and pathsDavid Henningsson2013-01-181-1/+1
| | | | | | | | I found a codec configuration which had six inputs, so the max of five was not appropriate. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add boost to line inputs, tooTakashi Iwai2013-01-181-1/+1
| | | | | | | | Although I commented that boost volumes would be added only for line-in and mic pins in the source code, the actual code excludes but for mic-in. Fix it to accept the line-ins, too. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Consolidate cap_sync_hook and capture_switch_hookTakashi Iwai2013-01-181-25/+9
| | | | | | | | | | | | | | | Two hooks in hda_gen_spec, cap_sync_hook and capture_switch_hook, play very similar roles. The only differences are that the former is called more often (e.g. at init or switching capsrc) while the latter can take an on/off argument. As a more generic implementation, consolidate these two hooks, and pass snd_ctl_elem_value pointer as the second argument. If the secondary argument is non-NULL, it can take the on/off value, so the caller handles it like the former capture_switch_hook. If it's NULL, it's called in the init or capsrc switch case. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Fix missing call of capture_switch_hookTakashi Iwai2013-01-181-15/+46
| | | | | | | | When a standard capture switch without multiple binding is used, the call for capture_switch_hook isn't called properly. Replace the put ops to add the hook call in that case. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Look for boost controls more deeplyTakashi Iwai2013-01-181-24/+77
| | | | | | | | | | | | In the current generic parser code, we look for the (mic) boost controls only on input pins. But many codecs assign the boost volume to a widget connected to each input pin instead of the input amp of the pin itself. In this patch, the parser tries to look through more widgets connected to the pin and find a boost amp. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Fix invalid mute in path activationTakashi Iwai2013-01-181-18/+42
| | | | | | | | | | | | When an amp in the activation path is associated with mixer controls, activate_amp() tries to skip the initialization. It's good, but only if the mixer really initializes both mute and volume. Otherwise, either the mute of the volume is left uninitialized. This patch adds this missing check and properly initialize the partially controlled amps in an activation path. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Unify input label creations in generic parserTakashi Iwai2013-01-181-37/+54
| | | | | | | | | There are a few places creating the labels and indices of kctls for each input pin in the current generic parser code. This is redundant and makes harder to maintain. Let's create the labels and indices at once and keep them in hda_gen_spec. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Keep autocfg.input idx value in imux tableTakashi Iwai2013-01-181-6/+14
| | | | | | | | | | | | | Since the imux table entries can be a subset of autocfg.input table, the indices of these aren't always same. For passing the proper index value of autocfg.input at creating input ctl labels (via snd_hda_autocfg_input_label()), keep the corresponding autocfg.input idx value in the index field of each imux item, which isn't used in the generic driver. Also, this makes easier to check the invalid imux pin for stereo mix. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Improve naming rule for primary outputTakashi Iwai2013-01-171-17/+42
| | | | | | | | | | | | | When the volume or mute control of the primary output is shared with other (headphone or speaker) outputs, we shouldn't name it as a specific output type but rather name it with the channel name or a generic name like "PCM". Also, this check should be performed individually for the volume and the mute controls because some codecs may have shared volumes but separate mute controls. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add PCM capture hook to hda_gen_specTakashi Iwai2013-01-171-0/+63
| | | | | | | Not only PCM playback, a hook for PCM capture would be required for power controls in codec drivers. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Record all detected ADCs in hda_gen_specTakashi Iwai2013-01-171-0/+5
| | | | | | | | | | Since the generic parser reduces the ADC list, copy the list of the all detected ADCs and keep it. This list can be later referred by the codec driver for finer power controls. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Move vmaster TLV parsing to snd_hda_gen_parse_auto_config()Takashi Iwai2013-01-171-4/+4
| | | | | | | | | Add vmaster_tlv[] to hda_gen_spec and store the suggested TLV data in snd_hda_gen_parse_auto_config(). This allows the codec driver to correct the TLV data (e.g. mute capability) before actually creating vmaster instance. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add input jack mode enum controls to generic parserTakashi Iwai2013-01-171-0/+140
| | | | | | | | | | | | | | Just like the jack mode enum ctls for output jacks, add the support for similar enum ctls for input pins to control the bias Vref. The new controls will be added when spec->add_in_jack_modes is set either by the codec driver or by a hint string. Note that ground and 100% vrefs are excluded from the list for simplicity, currently. We may add a new flag to allow them, too. But I guess it's easier to put a value override in the pinfix in such a case. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add suppress_auto_mute flag to hda_gen_specTakashi Iwai2013-01-161-0/+6
| | | | | | | | A new flag to skip the auto-mute handling in the generic parser, just like suppress_auto_mic flag. It has to be set before calling snd_hda_gen_parse_auto_config(). Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Record the current speaker / LO mute status in hda_gen_specTakashi Iwai2013-01-161-0/+2
| | | | | | ... to be referred by the codec driver. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Properly call automute/switch hooks at initTakashi Iwai2013-01-161-6/+23
| | | | | | ... and a little bit of code refactoring. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Make sure fill_all_dac_nids is called for digital only codecsDavid Henningsson2013-01-161-2/+2
| | | | | | | Otherwise no PCM will be built for codecs without analog I/O. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - force different capture controls if amp caps differDavid Henningsson2013-01-161-3/+21
| | | | | | | | | Otherwise setting the capture volume for amps will be weird and inconsistent (it will try to set values outside the range of the second amp based on capabilities of the first amp). Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - do not add non-existing Mic boost controlsDavid Henningsson2013-01-161-0/+3
| | | | | | | | If the input node does not have any volume capable input amp, don't add such a control. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - initialize channel counts correctlyDavid Henningsson2013-01-161-1/+1
| | | | | | | | Even a single DAC can output two channels, so the channel count is twice the number of DACs. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - fix wrong adc_idx in generic parserDavid Henningsson2013-01-161-3/+3
| | | | | | | | We use knew->index for adc_idx when we create "Capture Volume" and "Capture Switch", so use the same to retrieve adc_idx. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Check array bounds in get_input_pathDavid Henningsson2013-01-161-0/+8
| | | | | | | This gives us some additional safety. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add prefer_hp_amp flag to hda_gen_specTakashi Iwai2013-01-151-4/+10
| | | | | | | | Add a new flag to indicate whether HP amp is turned on as default for speaker or line-outs, and enable this for ALC260 codec, as many machines with this codec require the HP amp even for speakers. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add capture_switch_hook to generic parserTakashi Iwai2013-01-141-1/+15
| | | | | | | Add a hook for the capture mixer switch. This will be used by IDT codecs for controlling the mic-mute LED. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Allow user to give hints for codec parser behaviorTakashi Iwai2013-01-121-0/+70
| | | | | | | Through the hints via sysfs or patch, user can set specific behavior flags for the generic parser now. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add output jack mode enum controlsTakashi Iwai2013-01-121-0/+110
| | | | | | | | Add the enum controls for changing the headphone amp bits of output jacks, such as "Headphone Jack Mode". This feature isn't enabled as default, so far, unless spec->add_out_jack_modes flag is set. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Update automute / automic upon jack retaskingTakashi Iwai2013-01-121-0/+6
| | | | | | | | When a multi-io jack is switched to another direction, call the automute and autoswitch update functions, as this jack won't be used as the headphone or the mic jack that may turn off others. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Avoid auto-mute or auto-mic of retasked jacksTakashi Iwai2013-01-121-1/+8
| | | | | | | | | When a jack is retasked as a different direction (e.g. a mic jack is used as a CLFE output), such a jack shouldn't be counted as the target for the automatic jack switching. Skip the automute or the autoswitch when the current pinctl direction is different from what we suppose. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Manage current pinctl values in generic parserTakashi Iwai2013-01-121-52/+85
| | | | | | | | | | | | | | | Use the new pin target accessors for managing the current pinctl values in the generic parser. The pinctl values of all active pins are once determined at the initialization phase, and stored via snd_hda_codec_set_pin_target(). This will be referred again in the codec init or resume phase to set the actual pinctl. This value is kept while the auto-mute. When a line-out or a speaker pin is muted by auto-mute, the driver simply disables the pin, but it doesn't touch the cached pinctl target value. Upon unmute, this value is used to restore the original pinctl in return. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Clear the dropped paths properlyTakashi Iwai2013-01-121-1/+15
| | | | | | | | | | When a DAC is reassigned from surrounds to front or ADCs are reduced due to incomplete imux, we clear the path indices but the path instances remain as is. Since the paths might be still referred through the whole path list parsing (e.g. is_active_nid()), we should clear these path instances as well. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Allow aamix as a capture sourceTakashi Iwai2013-01-121-25/+44
| | | | | | | | | Since some codecs can choose the aamix as a capture source, we should support it as well. When spec->add_stereo_mix_input flag is set, the parser checks the availability of aamix as the input source, and adds the paths automatically when possible. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Fix inconsistent input_paths after ADC reductionTakashi Iwai2013-01-121-12/+22
| | | | | | | | | | | | In the current parser code, the input_paths[] may become inconsistent when some of detected ADCs are dropped due to incomplete inputs, since the driver rearranges only adc_nids[] but doesn't touch input_paths[]. This patch fixes the issue, and also it optimizes the reachability checks by simply referring to the parsed input_paths[] instead of calling is_reachable() again for each connection. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Return "Headphone Mic" from hda_get_autocfg_input_label()Takashi Iwai2013-01-121-4/+0
| | | | | | | | Instead of handling special cases in the caller side, give a proper name string "Headphone Mic" from hda_get_autocfg_input_label() when the headhpone jack pin is specified as an input. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Exclude aamix from capture pathsTakashi Iwai2013-01-121-6/+2
| | | | | | | The capture paths shouldn't contain the analog loopback mixer. Pass a proper argument to exclude the aamix NID. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add a flag to suppress mic auto-switchTakashi Iwai2013-01-121-0/+3
| | | | | | | Add a new flag spec->suppress_mic_auto_switch for codecs that don't support unsol events properly like VT1708. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Re-define snd_hda_parse_nid_path()Takashi Iwai2013-01-121-47/+55
| | | | | | | | | | | | This commit modifies the definition of snd_hda_parse_nid_path() slightly, now with_aa_mix argument is changed to anchor_nid, so that it can handle any NID generically as an anchor point to include or exclude. The with_aa_mix field in struct nid_path is removed again by this change. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Manage input paths via path indicesTakashi Iwai2013-01-121-26/+18
| | | | | | | ... like we did for output and loopback paths. It makes the code slightly easier. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Fix multi-io channel mode managementTakashi Iwai2013-01-121-30/+62
| | | | | | | | | | | The multi-io channels can vary not only from 1 to 6 but also may vary from 6 to 8 or such. At the same time, there are more speaker pins available than the primary output pins. So, we need three variables to check: the minimum channel counts for primary outputs, the current channel counts for primary outputs, and the minimum channel counts for all outputs. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Remove unused dac reference in create_multi_out_ctls()Takashi Iwai2013-01-121-4/+0
| | | | | | Remove useless code. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Use direct path reference in assign_out_path_ctls()Takashi Iwai2013-01-121-12/+16
| | | | | | | | Instead of looking through paths with the dac -> pin connection at each time, just pass the already parsed path index to assign_out_path_ctls(). This simplifies the code a bit. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Clear path indices properly at each re-evaluationTakashi Iwai2013-01-121-0/+10
| | | | | | | | The path indices must be reset at each evaluation of DAC assignment. Otherwise the badness value will be wrongly calculated and mixers may be inconsistently assigned. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add brief comments to exported snd_hda_gen_*_() functionsTakashi Iwai2013-01-121-1/+12
| | | | Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Remove dead HDA_CTL_BIND_VOL and HDA_CTL_BIND_SW codesTakashi Iwai2013-01-121-4/+0
| | | | Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add snd_hda_gen_free() and snd_hda_gen_check_power_status()Takashi Iwai2013-01-121-15/+18
| | | | | | | Just to remove duplicated codes. Also fixed EXPORT_SYMBOL() in hda_generic.c. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add pcm_playback_hook to hda_gen_specTakashi Iwai2013-01-121-5/+60
| | | | | | | | The new hook which is called at each PCM playback ops. It can be used to control the codec-specific power-saving feature in each codec driver. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Drop bind-volume workaroundTakashi Iwai2013-01-121-97/+17
| | | | | | | | | | | | | | | | | | | | | | | | The bind-volume workaround was introduced for simplifying the mixer abstraction in the case where one or more pins of multiple outputs lack of individual volume controls. This was essentially the case like Acer Aspire 5935, which has 5.1 speakers and 5.1 (multi-io) jacks although there are 5 DACs, so some of them must share a DAC. However, the recent code rewrite changed the DAC assignment policy to share with the same channel instead of binding to the front, thus binding the volumes for all channels makes little sense now, rather it's confusing. So in this patch, the ugly workaround is finally dropped and simply create the volume control corresponding to the parsed path position. For dual headphones or 2.1 speakers with a shared volume control, it's anyway bound to the same DAC if needed, so this change shouldn't bring any practical difference. And, as a good bonus, we can cut off the whole code handling the bind volume elements. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Drop unneeded pin argument from set_output_and_unmute()Takashi Iwai2013-01-121-28/+13
| | | | | | Just a minor refactoring. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Add missing slave names for Speaker Surround, etcTakashi Iwai2013-01-121-0/+3
| | | | Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Prefer binding the primary CLFE outputTakashi Iwai2013-01-121-6/+27
| | | | | | | | | | | When 5.1 or more multiple speakers with found but not enough DACs are available, it's better to bind such pins to the DACs of the primary outputs with the same channels rather than binding to the first DAC (i.e. the front channel). For the cases with two speaker pins, it's rather regarded as front + bass combination, thus it's more practical to still bind to the front, though. Signed-off-by: Takashi Iwai <tiwai@suse.de>
* ALSA: hda - Fix truncated control namesTakashi Iwai2013-01-121-2/+2
| | | | | | | | ... like "Speaker Surround Playback Switch". This fix had been already applied to patch_conexant.c but was forgotten in other places, then migrated to hda_generic.c. Signed-off-by: Takashi Iwai <tiwai@suse.de>