Граф коммитов

14600 Коммитов

Автор SHA1 Сообщение Дата
Takashi Iwai f72706be35 ALSA: hda - Add suppress_auto_mute flag to hda_gen_spec
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>
2013-01-16 18:22:37 +01:00
Takashi Iwai 47b9ddb83b ALSA: hda - Record the current speaker / LO mute status in hda_gen_spec
... to be referred by the codec driver.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 18:19:50 +01:00
Takashi Iwai a5cc25091c ALSA: hda - Properly call automute/switch hooks at init
... and a little bit of code refactoring.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 18:08:55 +01:00
Takashi Iwai ae127005fc Merge branch 'test/hda-gen-parser' into test/hda-migrate
* test/hda-gen-parser:
  ALSA: hda - Make sure fill_all_dac_nids is called for digital only codecs
  ALSA: hda - force different capture controls if amp caps differ
  ALSA: hda - do not add non-existing Mic boost controls
  ALSA: hda - initialize channel counts correctly
  ALSA: hda - fix wrong adc_idx in generic parser
  ALSA: hda - Check array bounds in get_input_path
  ALSA: hda - Add prefer_hp_amp flag to hda_gen_spec
  ALSA: hda - fix OOPS in hda_mark_cmd_cache_dirty
  ALSA: hda - Check pincap while parsing the configuration
2013-01-16 16:25:24 +01:00
David Henningsson 6fc4cb97cb ALSA: hda - Make sure fill_all_dac_nids is called for digital only codecs
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>
2013-01-16 16:24:42 +01:00
David Henningsson 99a5592d6a ALSA: hda - force different capture controls if amp caps differ
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>
2013-01-16 16:24:00 +01:00
David Henningsson 02aba55053 ALSA: hda - do not add non-existing Mic boost controls
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>
2013-01-16 16:22:43 +01:00
Chris Rattray a80cc73428 ASoC: wm2200: correct mixer values and text
Signed-off-by: Chris Rattray <crattray@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: stable@vger.kernel.org
2013-01-16 20:47:26 +09:00
David Henningsson c0f3b21643 ALSA: hda - initialize channel counts correctly
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>
2013-01-16 11:57:00 +01:00
David Henningsson a053d1e3c4 ALSA: hda - fix wrong adc_idx in generic parser
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>
2013-01-16 11:56:50 +01:00
David Henningsson b56fa1ed09 ALSA: hda - Check array bounds in get_input_path
This gives us some additional safety.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 11:56:36 +01:00
Takashi Iwai ccd7bd3d07 ALSA: hda/ca0132 - Make some symbols static
sound/pci/hda/patch_ca0132.c:387:19: sparse: symbol 'ca0132_voicefx' was not declared. Should it be static?

Reported-by: Fengguang Wu <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 07:56:02 +01:00
Adrian Knoth 49ba4f94bd ALSA: hdsp - Remove obsolete settings functions
With HDSP_TOGGLE_SETTING in place, these functions are no longer
required. Removing them makes the code DRY and considerably shorter.

Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 07:49:17 +01:00
Adrian Knoth 4833c673de ALSA: hdsp - Use HDSP_TOGGLE_SETTING to alter settings
HDSP_TOGGLE_SETTING and its corresponding functions allow to change
settings in the control register. Instead of using the specialised
functions, use the generic code to make the code DRY.

Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 07:49:06 +01:00
Adrian Knoth 66d9244ec7 ALSA: hdsp - Implement generic function to toggle settings
The driver contains multiple similar functions that change only a single
bit in the control register, only the bit position varies.

This patch implements a generic function to toggle a certain bit
position that will be used to replace the old code.

Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 07:48:51 +01:00
Adrian Knoth 0c2bc7c7d8 ALSA: hdsp - Fix detection for RME RPM/Multiface/Digiface ioboxes
The current iobox detection code reportedly fails for various users, so
simply do what the Win32 driver does instead.

Patch originally by Karl Grill <kgrill@chello.at> and then modified to
comply with kernel coding guidelines + current HEAD.

Signed-off-by: Adrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-16 07:48:38 +01:00
Takashi Iwai ea46c3c87c ALSA: hda - Add prefer_hp_amp flag to hda_gen_spec
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>
2013-01-15 18:45:53 +01:00
Takashi Iwai dea500c7c6 ALSA: hda/ca0132 - Fix a wrong comma in snd_printdd() call
sound/pci/hda/patch_ca0132.c: In function ‘ca0132_effects_set’:
sound/pci/hda/patch_ca0132.c:3391:2: warning: too many arguments for
  format [-Wformat-extra-args]

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:49:56 +01:00
Takashi Iwai 7a527edee4 ALSA: hda/ca0132 - Declare firmware only when really built
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:49:45 +01:00
Takashi Iwai 8ae3124b8f ALSA: hda/ca0132 - Fix possible invalid DMA channel deallocation
... in the error path in dspxfr_image().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:49:38 +01:00
Takashi Iwai 549e8292a1 ALSA: hda/ca0132 - Fix possible NULL dereference
Spotted by smatch,
  sound/pci/hda/patch_ca0132.c:1950 dspxfr_image() error: potential
  null dereference 'dma_engine'.  (kzalloc returns null)
  sound/pci/hda/patch_ca0132.c:1950 dspxfr_image() error: we
  previously assumed 'dma_engine' could be null (see line 1857)

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:42:15 +01:00
Takashi Iwai 425a7880e8 ALSA: hda/ca0132 - Fix another smatch warning
sound/pci/hda/patch_ca0132.c:1781 dspxfr_one_seg() info: why not
propagate 'status' from dsp_dma_stop() instead of (-5)?

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:41:21 +01:00
Takashi Iwai b645d79619 ALSA: hda/ca0132 - Fix superfluous unsigned check
Fix a warning by smatch,
 sound/pci/hda/patch_ca0132.c:714 dspio_send() warn: always true
 condition '(res >= 0) => (0-u32max >= 0)'

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:39:29 +01:00
Takashi Iwai a0c041cb6f ALSA: hda/ca0132 - Use snd_hda_set_pin_ctl() helper again
The recent update of ca0132 driver replaced the pinctl setup to the
direct write via snd_hda_codec_write() again.  This should be covered
by snd_hda_set_pin_ctl() to be safer.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:13:31 +01:00
Takashi Iwai 15e4ba666c Revert "ALSA: hda - Add firmware caching to CA0132 codec"
This reverts commit c3b4eea262.

Since the recent firmware loader code supports caching at S3/S4 by
itself, we don't have to handle f/w caching in the driver.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:09:27 +01:00
Ian Minett 406261ce99 ALSA: hda/ca0132: Fix potential init errors and update module description
Handle a potential dma_engine alloc error and fix the possible use of an
uninitialized status variable in dspxfr_one_seg(). Also correct the initial
sampling rate for Mic 1.
Update the module description.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:01:16 +01:00
Ian Minett 441aa6a016 ALSA: hda/ca0132: Shuffle to group together related code
Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:01:01 +01:00
Ian Minett e90f29e442 ALSA: hda/ca0132: Code shuffle to group similar functions.
Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:00:45 +01:00
Ian Minett 44f0c9782c ALSA: hda/ca0132: Add tuning controls
This patch adds the controls used for tuning the DSP effects.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 17:00:31 +01:00
Ian Minett a73d511c48 ALSA: hda/ca0132: Add unsol handler for DSP and jack detection
This patch adds the unsolicited response handler for incoming DSP responses and
jack detection reporting, and routines for reading the incoming DSP response.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 16:59:56 +01:00
Ian Minett 825315bc5b ALSA: hda/ca0132: Add PCM enhancements
Remove the playback PCM open callback.
PCM stream setup and cleanup functions are added for use by PCM callbacks.
Delay stream cleanup if effects are on, to allow time for any effects tail to
finish.
Add the analog capture PCM callbacks.
Change the max channels of analog playback to 6.
Add two new PCMs: AMic2 and What-U-Hear.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 16:59:21 +01:00
Ian Minett a7e76271bd ALSA: hda/ca0132: Add DSP mixer controls and helpers
This patch adds the kcontrols for the DSP effects, playback and recording
source selection.
ca0132_is_vnode_effective() checks whether virtual node settings have
taken effect.
The control change helpers ca0132_pe_switch_set(), ca0132_voicefx_set()
and ca0132_cvoice_switch_set() are added to toggle playback / capture
DSP effects, ca0132_voicefx_info(), _get() and _put() are added for
input path DSP effect value access. The volume helpers are updated to
volume_info(), _get() and _set() to use the virtual nodes.
The redundant headphone and speaker switches and ct_extension function
are removed.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 16:58:12 +01:00
Ian Minett 5aaca44d8d ALSA: hda/ca0132: Init chip, DSP effects and mixer settings
This patch adds the framework to set effect parameters: ca0132_effects_set()
and ca0132_setup_defaults() are general functions for parameter setting and
initializing to default values. dspio_set_param() and dspio_set_uint_param()
are lower-level fns to simplify setting individual DSP parameters via an
SCP buffer transfer to the firmware.
The CA0132 chip parameter init code is added in ca0132_init_params().
In chipio_[write,read]_data(), the current chip address is auto-incremented
if no error has occurred.
ca0132_select_out() selects the current output. If autodetect is enabled,
use headphones (if jack detected) or speakers (if no jack).
ca0132_select_mic() selects the current mic in. If autodetect is enabled,
use exterior mic (if jack detected) or built-in mic (if no jack).
Init digital mic and switch between dmic and amic with ca0132_init_dmic(),
ca0132_set_dmic(). amic2 is initialized in ca0132_init_analog_mic2().
Finally, add verb tables for configuring DSP firmware.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 16:57:56 +01:00
Ian Minett ef6b2eada3 ALSA: hda/ca0132: Add new definitions and structs for DSP
This patch adds definitions and structs used for configuring DSP effects,
virtual nodes, effect tuning controls, and mixer control helpers.
The effect structs are also initialized.

Signed-off-by: Ian Minett <ian_minett@creativelabs.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 16:57:42 +01:00
David Henningsson f038fcaca8 ALSA: hda - fix OOPS in hda_mark_cmd_cache_dirty
Obvious copy-paste error.

Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 15:32:46 +01:00
Takashi Iwai 6f54c36132 ALSA: hda/hdmi - Work around "alsactl restore" errors
When "alsactl restore" is performed on HDMI codecs, it tries to
restore the channel map value since the channel map controls are
writable.  But hdmi_chmap_ctl_put() returns -EBADFD when no PCM stream
is assigned yet, and this results in an error message from alsactl.
Although the error is harmless, it's certainly ugly and can be
regarded as a regression.

As a workaround, this patch changes the return code in such a case to
be zero for making others happy.  (A slight excuse is: when the chmap
is changed through the proper alsa-lib API, the PCM status is checked
there anyway, so we don't have to be too strict in the kernel side.)

Cc: <stable@vger.kernel.org> [v3.7+]
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 14:55:16 +01:00
Takashi Iwai 9b473e8516 ALSA: hda/sigmatel - Remove superfluous fields from sigmatel_spec
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 11:22:52 +01:00
Takashi Iwai 8c698fe210 ALSA: hda/sigmatel - Move w/a for HP Mini 110 LED to fixup table
Instead of checking the codec SSID in find_mute_led_cfg() for HP Mini
110, set the proper spec->default_polairty in the fixup table.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 11:22:36 +01:00
Takashi Iwai 89bb3e74b1 ALSA: hda/sigmatel - Remove PCI id check in find_mute_led_cfg()
The PCI vendor ID check in find_mute_led_cfg() is now superfluous
because the function is called in the fixup table entries of HP
machines.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 11:12:18 +01:00
Takashi Iwai 372f8c7502 ALSA: hda - Use standard fixup table for IDT92HD83xxx
Finally all codecs in patch_sigmatel.c have been converted to use the
standard fixup helpers.  This change also includes trivial cleanups
like the call of common setup for GPIO LED or the removal of unused
function.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 11:09:26 +01:00
Takashi Iwai 55e30141d8 ALSA: hda - Use standard fixup table for IDT92HD73xx
This one is rather a simple conversion.  The fixups for Dell machines
are implemented by fixup functions in the end.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 11:09:24 +01:00
Takashi Iwai 0f6fcb73c0 ALSA: hda - Use standard fixup table for IDT92HD71Bxx
This time, the only intrusive changes are for HP machines.
As the mute LED fixup and the bass speaker switch are required only
for HP machines, we can move these checks into the fixup entries; the
former is applied generically to all HP machines while the latter for
only certain models.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 11:09:16 +01:00
Takashi Iwai 52fd5cbc9b ALSA: hda - Check pincap while parsing the configuration
Sometimes (or rather often) BIOS sets the pin default configurations
obviously wrongly.  Looking through these failures, one common pattern
is to enable some dead pins that are usually marked as speaker pins.
In such a case, we can skip them if the pins don't have the output
capability.

In this patch, add a check for the valid pin cap bit for each parsed
pin, and filter out when it's invalid.

The fix was originally suggested by Raymond Yau.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 08:49:09 +01:00
Takashi Iwai 29ac83635f ALSA: hda - Use standard fixup table for STAC927x
This conversion is a bit tricky.  Since STAC927x may take two
different volume-knob initialization values depending on the model, a
new flag, spec->volknob_init, is introduced to indicate whether it's
the standard volume-knob initialization or not.

Also, Dell BIOS model is now directly mapped onto the fixup table
instead of parsing in the function.  This resulted in a new model ref,
STAC_927X_DELL_BIOS_SPDIF, which is a chained entry.

Also, for reducing the fixups, virtual entries like
STAC_927X_DELL_DMIC and STAC_D965_VERBS are introduced.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 08:21:50 +01:00
Takashi Iwai 0a4278464e ALSA: hda - Use standard fixup table for STAC922x
Rather straightforward conversion, except for ones for Intel Mac.
As Intel Mac have only unique codec SSIDs, we need to remap the fixup
again for the codec SSID and call the new fixup there.

Also, we can reduce model enums like STAC_MACMINI, which are model
aliases for backward compatibility, since they can be pointed directly
via hda_model_fixup table.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-15 08:20:06 +01:00
Takashi Iwai fe6322ca66 ALSA: hda - Use standard fixup table for STAC9205
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 18:14:58 +01:00
Takashi Iwai fc268c10ca ALSA: hda - Use standard fixup table for STAC9872
Now for STAC9872.  It has a small fixup table, fortunately.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 18:14:49 +01:00
Takashi Iwai d2077d40cb ALSA: hda - Use standard fixup table for STAC925x
Similar like the previous commit, convert patch_stac925x() to use the
standard fixup table.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 14:21:16 +01:00
Takashi Iwai d39a3ae821 ALSA: hda - Use standard fixup table for STAC9200
Convert patch_stac9200() to use the standard fixup table instead of
manual switch-case with board_config.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 14:21:10 +01:00
Takashi Iwai ac06e2298d Merge branch 'test/hda-gen-parser' into test/hda-migrate
* test/hda-gen-parser:
  ALSA: hda - Add capture_switch_hook to generic parser
2013-01-14 12:36:18 +01:00
Takashi Iwai ae177c3fd0 ALSA: hda - Add capture_switch_hook to generic parser
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>
2013-01-14 12:13:06 +01:00
Eldad Zack 39e95156b9 ALSA: usb-audio: selector map for M-Audio FT C400
Add names of the clock sources for the M-Audio Fast Track
C400.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 10:06:11 +01:00
Eldad Zack 83e3acd494 ALSA: usb-audio: M-Audio FT C400 skip packet quirk
Attain constant real-world latency by skipping 16 data packets.
The number of packets to be skipped was found by trial and error.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 10:06:03 +01:00
Eldad Zack 2aad272b3f ALSA: usb-audio: correct M-Audio C400 clock source quirk
Taking another look at the C400 descriptors, I see now that there is
a clock selector (0x80) for this device.
Right now, the clock source points to the internal clock (0x81), which
is also valid. When the external clock source (0x82) is selected in the
mixer, and the rates mismatch (if it's free-running it is fixed to
48KHz), xruns will occur.

Set the clock ID to the clock selector unit (0x81), which then
allows the validation code to function correctly.

Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 10:05:57 +01:00
David Henningsson b98ae2729d ALSA: usb - fix race in creation of M-Audio Fast track pro driver
A patch in the 3.2 kernel caused regression with hotplugging the
M-Audio Fast track pro, or sound after suspend. I don't have the
device so I haven't done a full analysis, but it seems userspace
(both udev and pulseaudio) got confused when a card was created,
immediately destroyed, and then created again.

However, at least one person in the bug report (martin djfun)
reports that this patch resolves the issue for him. It also leaves
a message in the log:
"snd-usb-audio: probe of 1-1.1:1.1 failed with error -5" which is
a bit misleading. It is better than non-working audio, but maybe
there's a more elegant solution?

BugLink: https://bugs.launchpad.net/bugs/1095315
Signed-off-by: David Henningsson <david.henningsson@canonical.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-14 10:03:03 +01:00
Takashi Iwai b3f6008f2d ALSA: hda - Use generic parser for VIA codec driver
Yet another step forward.  As all features for VIA codecs have been
implemented in the generic driver, we can move on to migrate the VIA
codec parser, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:45:02 +01:00
Takashi Iwai 78bb3cb0e2 ALSA: hda - Add generic parser support to Analog Device codec driver
This patch adds the support for the generic auto-parser to AD codec
driver.  For AD1988, the old code is replaced simply with the new
generic parser.  For other codecs, new model "auto" is added and
directed to use the generic parser.

No fixup codes have been implemented yet as of now.  Eventually we'd
replace each static quirk with the generic parser + fixup.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:45:00 +01:00
Takashi Iwai bf92d1d503 ALSA: hda - Rearrange for dropping static quirk codes in Coexant driver
Just shuffle the codes and add ifdefs for testing to drop the static
quirk codes from patch_conexant.c.

By commenting out ENABLE_CXT_STATIC_QUIRKS define at the beginning of
the file, you can disable the whole static codes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:58 +01:00
Takashi Iwai aed523f193 ALSA: hda - Use generic parser in Conexant codec driver
... and drop most of own parser code.

It doesn't replace any present static quirks, though.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:56 +01:00
Takashi Iwai 1077a02481 ALSA: hda - Use generic parser for Cirrus codec driver
This time, the target is Cirrus codec.  Its parser is a subset of
generic parser, so we can migrate fully with it now.

The only tricky part is the handling of SPDIF automute.
Cirrus driver sets the SPDIF out plug over the headphone.  As a
workaround, set spec->gen.master_mute for toggling the headphone (and
other) mute.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:55 +01:00
Takashi Iwai 8fadf1da3f ALSA: hda - Use generic parser for CA0110 codec
CA0110 codec is a fairly straightforward hardware implementation,
and we can use the generic parser almost as is.
Just set spec->multi_cap_vol flag to follow the current behavior.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:53 +01:00
Takashi Iwai b060fb0eef ALSA: hda - Use generic codec parser for C-Media codecs
Replace the old parser code for C-Media auto-parser with the latest
generic parser.  For compatibility reason, the static bindings are
still left, but they could be cleaned up in future.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:52 +01:00
Takashi Iwai 84721e81fa ALSA: hda - Remove superfluous kconfig depends
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:50 +01:00
Takashi Iwai 1c70a58341 ALSA: hda - Allow user to give hints for codec parser behavior
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>
2013-01-12 08:44:48 +01:00
Takashi Iwai bc759721fb ALSA: hda - Add snd_hda_get_int_hint() helper function
It'll be used in hda_generic.c, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:47 +01:00
Takashi Iwai 09b70e8509 ALSA: hda - Protect user-defined arrays via mutex
The pincfgs, init_verbs and hints set by sysfs or patch might be
changed dynamically on the fly, thus we need to protect it.
Add a simple protection via a mutex.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:45 +01:00
Takashi Iwai 08fb0d0ee1 ALSA: hda/realtek - Generic mute LED implementation for HP laptops
As David Henningsson recently suggested, some HP laptops use an unused
mic pin for controlling a mute LED, and this information is provided
via DMI string "HP_Mute_LED_X_Y" string.  This patch adds the generic
support for such cases, as we've already done in patch_sigmatel.c.
This is applied generically to all devices with ID 0x103c.

But as we don't know whether the device 103c:1586 really contains
HP_Mute_LED_X_Y DMI string, still keep the static setup for this
device using the mic2 pin 0x19.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:43 +01:00
Takashi Iwai 9bb1f06fe0 ALSA: hda/realtek - Fix the timing for some fixups
Some fixups such as setting the flags influencing on the parser
behavior should be applied before actually parsing the tree.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:42 +01:00
Takashi Iwai 39aedee7a1 ALSA: hda/realtek - Add a fixup for FSC S7020 laptop
Try to recover from the regression: set the HP amp for the speaker and
add the hp jack mode enum as default.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:40 +01:00
Takashi Iwai 978e77e78c ALSA: hda - Add output jack mode enum controls
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>
2013-01-12 08:44:38 +01:00
Takashi Iwai a365fed980 ALSA: hda - Update automute / automic upon jack retasking
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>
2013-01-12 08:44:37 +01:00
Takashi Iwai fd1082159d ALSA: hda - Add a new fixup type to override pinctl values
Add a new fixup type, HDA_FIXUP_PINCTLS, for overriding the pinctl
values of the given pins.  It takes the same array of struct pintbl
like HDA_FIXUP_PINS, but each entry contains the pinctl value instead
of the pin default config value.

This patch also replaces the corresponding codes in patch_realtek.c.
Without this change, the direct call of verbs may be overridden again
by the later call of pinctl restoration by the driver.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:35 +01:00
Takashi Iwai d3f02d60ee ALSA: hda/realtek - Read the cached pinctl value in fixups
... instead of reading the value from the codec at each time.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:33 +01:00
Takashi Iwai 1727a771b4 ALSA: hda/realtek - Drop aliases for old fixups
Now the whole codebase has been changed from the earlier kernels, it
makes little sense to keep these aliases.  Simply replace with the
official names.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:32 +01:00
Takashi Iwai 0b4df931ce ALSA: hda - Avoid auto-mute or auto-mic of retasked jacks
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>
2013-01-12 08:44:30 +01:00
Takashi Iwai 2c12c30d3f ALSA: hda - Manage current pinctl values in generic parser
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>
2013-01-12 08:44:28 +01:00
Takashi Iwai 62f3a2f718 ALSA: hda - More strict correction of invalid pinctl bits
Check more strictly about the validity of pinctl values in
snd_hda_set_pin_ctl() and correct the wrong bits automatically.
Also provide the helper function to correct pinctl bits to codec
drivers.

This automatically fixes the invalid pinctl writes that are found in
a few Realtek fixups for NID 0x0f amp like ASUS A6Rp.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:27 +01:00
Takashi Iwai d7fdc00ae5 ALSA: hda - Add helper functions to cache the current pinctl target
We already have the list of whole pin widgets and there is an unused
space in the list; let's use it for caching the current pinctl value.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:25 +01:00
Takashi Iwai 980428cecc ALSA: hda - Clear the dropped paths properly
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>
2013-01-12 08:44:23 +01:00
Takashi Iwai f3fc0b0b1f ALSA: hda - Allow aamix as a capture source
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>
2013-01-12 08:44:21 +01:00
Takashi Iwai 3a65bcdc57 ALSA: hda - Fix inconsistent input_paths after ADC reduction
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>
2013-01-12 08:44:20 +01:00
Takashi Iwai 54d778b31c ALSA: hda - Return "Headphone Mic" from hda_get_autocfg_input_label()
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>
2013-01-12 08:44:18 +01:00
Takashi Iwai ca29683bd6 ALSA: hda - Exclude aamix from capture paths
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>
2013-01-12 08:44:16 +01:00
Takashi Iwai d12daf6f41 ALSA: hda - Add a flag to suppress mic auto-switch
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>
2013-01-12 08:44:15 +01:00
Takashi Iwai fb690cf582 ALSA: hda - Handle BOTH jack port as a fixed output
When the default config value shows the connection AC_JACK_PORT_BOTH,
it's better to handle it as a speaker pin.  This makes the behavior
consistent in snd_hda_get_pin_label() and snd_hda_parse_pin_defcfg().

There are only few old machines showing this attribute, and all of
them are actually fixed speaker pins, as far as I know.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:13 +01:00
Takashi Iwai 3ca529d339 ALSA: hda - Re-define snd_hda_parse_nid_path()
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>
2013-01-12 08:44:11 +01:00
Takashi Iwai c697b71685 ALSA: hda - Manage input paths via path indices
... like we did for output and loopback paths.
It makes the code slightly easier.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:09 +01:00
Takashi Iwai a07a949be6 ALSA: hda - Fix multi-io channel mode management
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>
2013-01-12 08:44:08 +01:00
Takashi Iwai affdb62b81 ALSA: hda - Don't set up active streams twice
We don't have to set up a stream that has been already set up
previously.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:06 +01:00
Takashi Iwai 50b1548775 ALSA: hda - Remove unused dac reference in create_multi_out_ctls()
Remove useless code.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:44:04 +01:00
Takashi Iwai 0e614dd058 ALSA: hda - Use direct path reference in assign_out_path_ctls()
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>
2013-01-12 08:44:03 +01:00
Takashi Iwai cd5be3f9de ALSA: hda - Clear path indices properly at each re-evaluation
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>
2013-01-12 08:44:01 +01:00
Takashi Iwai 5187ac168d ALSA: hda - Add brief comments to exported snd_hda_gen_*_() functions
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:59 +01:00
Takashi Iwai dd5e720304 ALSA: hda - Remove dead HDA_CTL_BIND_VOL and HDA_CTL_BIND_SW codes
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:57 +01:00
Takashi Iwai fce52a3bb1 ALSA: hda - Add snd_hda_gen_free() and snd_hda_gen_check_power_status()
Just to remove duplicated codes.
Also fixed EXPORT_SYMBOL() in hda_generic.c.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:56 +01:00
Takashi Iwai 76a19c69d9 ALSA: hda - Allow jack detection when polling is enabled
Let is_jack_detectable() return true when the jack polling is enabled
for the codec.  VT1708 uses the polling explicitly so we need to allow
it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:54 +01:00
Takashi Iwai e6b85f3c9d ALSA: hda - Add pcm_playback_hook to hda_gen_spec
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>
2013-01-12 08:43:52 +01:00
Takashi Iwai c2c803830a ALSA: hda - Drop bind-volume workaround
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>
2013-01-12 08:43:51 +01:00
Takashi Iwai d4156930b2 ALSA: hda - Drop unneeded pin argument from set_output_and_unmute()
Just a minor refactoring.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:49 +01:00
Takashi Iwai ee79c69ac7 ALSA: hda - Add missing slave names for Speaker Surround, etc
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:47 +01:00
Takashi Iwai 7385df6134 ALSA: hda - Prefer binding the primary CLFE output
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>
2013-01-12 08:43:45 +01:00
Takashi Iwai 5abd4888f6 ALSA: hda - Fix truncated control names
... 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>
2013-01-12 08:43:44 +01:00
Takashi Iwai c30aa7b242 ALSA: hda - Add Loopback Mixing control
For codecs that have individual routes going through a loopback mixer
(like VIA codecs), we need to provide an explicit switch to choose
whether the output goes through mixer or directly from DAC.

This patch adds the check for such paths and creates "Loopback Mixing"
enum control when available.

It won't influence on codecs like Realtek or others where the loopback
mixer is connected independently from the primary output routes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:42 +01:00
Takashi Iwai 117688a9c1 ALSA: hda - Correct aamix output paths
The output paths including aamix should be parsed only for the first
output.  The surround paths including aamix must be wrong, since it
would mix all streams, i.e. all channels would be mixed into a single
and multiplexed again.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:40 +01:00
Takashi Iwai 2430d7b78b ALSA: hda - Initialize digital-input path properly
Call the path activation for the digital input pin properly, not only
setting the pin control.  Also add spec->digin_path for keeping the
path index.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:38 +01:00
Takashi Iwai 196c176680 ALSA: hda - Manage using output/loopback path indices
Instead of search for the path with the certain route at each time,
keep the path index for each output and loopback, and just use it when
referred.

In this implementation, the path index number begins with one, not
zero (although I've been writing in C over decades).  It's just to
make the check for uninitialized values easier.

So far, the input paths aren't handled with indices yet, but still
picked up via snd_hda_get_nid_path() at each time.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:37 +01:00
Takashi Iwai 05453b7e97 ALSA: hda - Fix multi-io pin assignment in create_multi_out_ctls()
The multi-io pins are calculated with a blind assumption of
cfg->line_outs = 1.  This isn't always true.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:35 +01:00
Takashi Iwai e22aab7dcf ALSA: hda - Simplify the multi-io assignment with multi speakers
When speakers are chosen as the the primary output during evaluation,
we did some tricks to assign the possible multi-io jacks with a
certain offset value to multi_out dacs.  This was a workaround for the
case with multiple speakers like Acer Aspire.  But this is quite ugly
at the same time and the resultant code is hard to understand.  More
badly, it works wrongly for 2.1 speakers like Apple iMac91.

In this patch, instead of fiddling with the offset to multi_out dacs,
simply add a certain badness number if headphone(s) + multi-ios are
possible.  This simplify the code a bit, and it's more robust.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:33 +01:00
Takashi Iwai f5172a7ed9 ALSA: hda - Check the existing path in snd_hda_add_new_path()
If the requested path has been already added, return the existing path
instance instead of adding a duplicated instance.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:31 +01:00
Takashi Iwai 1e0b528696 ALSA: hda - Avoid duplicated path creations
When the paths are created in map_singles(), we don't have to
re-create new paths in try_assign_dacs().  Just evaluate the badness
and skip to the next item.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:30 +01:00
Takashi Iwai e1284af730 ALSA: hda - Initialize output paths with current active states
Set path->active flag at the path creation time and let the paths
initialized according to the current path->active state in
set_output_and_unmute().  This allows to modify the active flag of
some output paths dynamically, e.g. switching the front output route
with or without aamix like patch_via.c.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:28 +01:00
Takashi Iwai 985803ca91 ALSA: hda - Don't skip amp init for activated paths
activate_amp() in the generic parser checks whether the given NID is
included in any active paths and skips it if found.  This was a
workaround for avoiding disabling the widgets in the active paths when
one path is disabled, thus it shouldn't be applied to the case for
path activation.  Due to this wrong check, some analog loopback paths
haven't been initialized correctly.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:26 +01:00
Takashi Iwai 2e03e9528d ALSA: hda - Add hooks for HP/line/mic auto switching
... as a preliminary work for migrating patch_sigmatel.c.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:24 +01:00
Takashi Iwai ee8e765b0b ALSA: hda - Revive snd_hda_get_conn_list()
Manage the connection list cache using linked lists instead of
snd_array, and revive snd_hda_get_conn_list() again, so that we don't
have to keep the expanded values locally.
This will reduce the stack usage by recursive call of
snd_hda_get_conn_index() or parse_nid_path() of the generic parser.

The list management doesn't include any mutex protection, thus the
caller needs to take care of race appropriately.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:23 +01:00
Takashi Iwai 9cc159c664 ALSA: hda - Add codec->inv_jack_detect flag
Yet another broken hardware workaround: there are hardware indicating
the inverted jack detection bit result.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:21 +01:00
Takashi Iwai ecac3ed174 ALSA: hda - Add inv_eapd flag to struct hda_codec
Add the new flag, codec->inv_eapd, indicating that the EAPD
implementation is inverted.

There are always broken hardware in the world.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:43:19 +01:00
Takashi Iwai 38cf6f1a41 ALSA: hda - Implement independent HP control
Similar like the implementation in patch_analog.c and patch_via.c,
the generic parser can provide the independent HP PCM stream now.
It's enabled when spec->indep_hp is set by the caller while parsing.

Currently no dynamic PCM switching as in patch_via.c is implemented
yet.  The control returns -EBUSY when the value is changed during PCM
operations.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:42:56 +01:00
Takashi Iwai b3a8c74522 ALSA: hda - Allow aamix in the primary output path
Allow the path including the loopback mixer widget in the primary
output channel as an alternative in the generic codec parser.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:30 +01:00
Takashi Iwai 4ac0eefa76 ALSA: hda - Define HDA_PARSE_* for snd_hda_parse_nid_path() argument
... instead of numbers.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:28 +01:00
Takashi Iwai 708122e836 ALSA: hda - Fix typos in debug_show_configs()
It never showed the 4th line out and headphone pins since quite ago.
Oh well.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:27 +01:00
Takashi Iwai 0c8c0f56e6 ALSA: hda - Add more debug prints about new paths
Add a better debug print code to show the new assigned paths in
generic parser.  It appears only with CONFIG_SND_DEBUG_VERBOSE=y.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:25 +01:00
Takashi Iwai 545502de54 ALSA: hda - Drop spec->channel_mode field from hda_gen_spec
It's never used in the generic parser.  It was there from the old
Realtek code, which has been dropped quite ago, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:24 +01:00
Takashi Iwai f873e536b6 ALSA: hda - Fix PCM name string for generic parser
When a PCM name string is generated from the chip name, it might
become strange like "CX20549 (Venice) Analog".  In this patch, the
parser tries to drop the invalid words like "(Venice)" in the PCM name
string.  Also, when the name string is given beforehand by the caller,
respect it and use it as is.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:22 +01:00
Takashi Iwai 7594aa3396 ALSA: hda - Use cached version for changing pins in hda_generic.c
There is no reason to avoid snd_hda_set_pin_ctl_cache() there.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:20 +01:00
Takashi Iwai d5a9f1bb38 ALSA: hda - Dynamically turn on/off EAPD in generic codec driver
When spec->own_eapd_ctl isn't set, try to turn on/off EAPD on demand
for each pin.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:19 +01:00
Takashi Iwai 64049c81df ALSA: hda - Fix initialization of primary outputs in hda_generic.c
There were some old codes that look not stable enough, which was
derived from the old Realtek code.  The initialization for primary
output in init_multi_out() needs to consider the case of shared DAC.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:17 +01:00
Takashi Iwai db23fd193d ALSA: hda - Refactor init_extra_out() in hda_generic.c
Just a small clean up by splitting a function.
No functional changes at all.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:16 +01:00
Takashi Iwai 973e4972f9 ALSA: hda - Clear unsol enable bits on unused pins in generic parser
For preliminary works to migrate the generic parser for Conexant
codecs: the same function is ported to hda_generic.c.
But now it looks through the jack detect table so that it can cover
better.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:14 +01:00
Takashi Iwai fd25a97a97 ALSA: hda - Add spec->vmaster_mute_enum flag to generic parser
Add a flag to indicate whether the vmaster mute hook enum is exposed
or not.  Conexant codecs may want not to expose the control depending
on the model.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:12 +01:00
Takashi Iwai 406b285da3 ALSA: hda - Begin HDA_GEN_* event tag from 1
... to distinguish from the invalid event type.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:11 +01:00
Takashi Iwai d94ddd85b1 ALSA: hda - Increase the max depth of widget connections
Old codecs like AD1986A tend to have long paths as they were just made
to be the way like AC97.  The current max depth 5 can be too short for
such devices.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:09 +01:00
Takashi Iwai 2ce4886abc ALSA: hda - Avoid access of amp cache element outside mutex
The access to a cache array element could be invalid outside the
mutex, so copy locally for the later references.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:07 +01:00
Takashi Iwai 8565f052c5 ALSA: hda - Fix wrong dirty check in snd_hda_codec_resume_amp()
The dirty entry has to be checked at the beginning in the loop, not in
the inner loop for channels.  This caused a regression that the right
channel isn't properly written.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:06 +01:00
Takashi Iwai 3bbcd274c2 ALSA: hda - Do sequential writes in snd_hda_gen_init()
This would reduce the number of actually executed verbs.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:04 +01:00
Takashi Iwai 47d46abba2 ALSA: hda - Add / fix comments about capture vol/sw controls in hda_generic.c
A bit of details won't hurt.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:02 +01:00
Takashi Iwai 84e3908dc8 ALSA: hda - Add missing amp cache flush for bound capture vol/sw ctls
The bound capture volume and switch controls use the cached amp
updates, but it's missing the flushing at the end.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:34:01 +01:00
Takashi Iwai 0c3d47b007 ALSA: hda - Add snd_hda_codec_flush_*_cache() aliases
It makes easier to understand although these are identical with
snd_hda_codec_resume_*() functions.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:33:59 +01:00
Takashi Iwai c4f3ebed3c ALSA: hda - Flush dirty amp caches before writing inv_dmic fix
The inverted dmic fix overwrites the right channel amp value, but it
would work only when the amp values have been already actually
written.  Put snd_hda_codec_resume_amp() before the amp write for
flushing caches.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:33:57 +01:00
Takashi Iwai 3bcce5c0d9 ALSA: hda - Check CORB overflow
Add an overflow check of CORB in HD-audio controller and codec drivers
so that flood of sequential writes would work properly.
In the controller side, add a check of CORB read-pointer to make
returning -EAGAIN when it's full.  Meanwhile in the codec side, when
-EAGAIN error is received, it retries the write after flushing the
pending verbs (calling get_response() essentially does it).

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:33:56 +01:00
Takashi Iwai aa88a3553e ALSA: hda - Clear cached_write flag in snd_hda_codec_resume_*()
These functions are supposed to be called at finishing the cached
sequential writes, so clear the flag properly for lazy developers who
often forget details.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:33:54 +01:00
Takashi Iwai de1e37b7d0 ALSA: hda - Clear dirty flag upon cache write
When verbs or amps are actually written to the hardware, we can clear
dirty flag so that the later snd_hda_codec_resume_*() calls can skip
these verbs / amps.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:33:43 +01:00
Takashi Iwai 5fdaecdb0d ALSA: hda - Allow one chance for zero NID in connection list
The commit [2e9bf24: ALSA: hda_codec: Check for invalid zero
connections] trims the whole connection list when an invalid value is
reported by the hardware.  But some codecs (at least AD1986A) may give
a zero NID in the middle of the connection list, so dropping the whole
list isn't good for such cases.

In this patch, as a workaround, allow a single zero NID in the read
connection list.  If it hits zero twice, it's handled as an error, so
that we can avoid "too many connections" errors.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:31:06 +01:00
Takashi Iwai 624d914d09 ALSA: hda - Use "Capture Source" for single sources
In general we prefer "Capture Source" to "Input Source".
The latter was chosen in many places just because "Capture Source"
label doesn't work well with the current alsa-lib mixer abstraction
when multiple instances are present.  But when we know that there is a
single input-source element, we can safely choose "Capture Source"
label.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:31:04 +01:00
Takashi Iwai 08c189f2c5 ALSA: hda - Use generic parser codes for Realtek driver
The next migration step is to use the common code in generic driver
for Realtek driver.  This is no drastic change and there should be no
real functional changes, as the generic parser code comes from Realtek
driver originally.

As Realtek driver requires the generic parser code, it needs a
reverse-selection of CONFIG_SND_HDA_GENERIC kconfig.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:31:03 +01:00
Takashi Iwai 5d550e15be ALSA: hda - Export standard jack event handlers for generic parser
These handlers are supposed to be called externally from the codec
drivers once when they need to handle own jack events.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:31:01 +01:00
Takashi Iwai 36502d0200 ALSA: hda - Fix NULL dereference in snd_hda_gen_build_controls()
When no controls are assigned in the parser (e.g. no analog path),
spec->kctls.list is still NULL.  We need to check it before passing to
snd_hda_add_new_ctls().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:30:59 +01:00
Takashi Iwai 9eb413e5e4 ALSA: hda - Move the call of snd_hda_parse_pin_defcfg() from snd_hda_gen_parse_auto_config()
In some cases, we want to manipulate the auto_pin_cfg table before
passing to snd_hda_gen_parse_auto_config() (e.g. Realtek SSID check
code fiddles with the headphone pin).   Also passing ignore_pins just
for snd_hda_parse_pin_defcfg() isn't good.

In this patch, snd_hda_gen_parse_auto_config() is changed to receive
the auto_pin_cfg table to be parsed.  The passed auto_pin_cfg table
must have been initialized (typically by calling
snd_hda_gen_parse_auto_config()) beforehand by the caller.

Also together with this change, spec->parse_flags is also removed.
Since this was referred only at the place calling
snd_hda_parse_pin_defcfg(), no longer needed to be kept in spec.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:30:58 +01:00
Takashi Iwai 12c93df60c ALSA: hda - Export snd_hda_gen_add_kctl()
It may be used in other codec drivers, so let it free.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:30:56 +01:00
Takashi Iwai 731dc3019c ALSA: hda - Add EAPD control to generic parser
Enable EAPD in output path initializations automatically unless the
new flag spec->own_eapd_ctl is set.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:30:55 +01:00
Takashi Iwai 352f7f914e ALSA: hda - Merge Realtek parser code to generic parser
Finally the whole generic parser code in Realtek driver is moved into
hda_generic.c so that it can be used for generic codec driver.
The old dumb generic driver is replaced.  Yay.

The future plan is to adapt this generic parser for other codecs,
i.e. the codec driver calls the exported functions in generic driver
but adds some codec-specific fixes and setups.

As of this commit, the complete driver code is still duplicated in
Realtek codec driver.  The big code reduction will come from now on.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2013-01-12 08:30:53 +01:00