Commit Graph

242 Commits

Author SHA1 Message Date
Takashi Iwai
b82855a0d7 ALSA: hda - Add sanity check for storing the user-defined pin configs
Check whether the given NID is a pin widget before storing the
user-defined pin configs.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-12-27 13:39:25 +01:00
Takashi Iwai
92ee6162c4 ALSA: hda - Add snd_hda_shutup_pins() helper function
Add a common helper function for clearing pin controls before suspend.
Use the pincfg array instead of looking through all widget tree.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-12-27 13:39:14 +01:00
Takashi Iwai
15e7f8b92a Merge branch 'fix/hda' into topic/hda 2009-12-25 14:17:48 +01:00
Takashi Iwai
f62faedbed ALSA: hda - Set mixer name after codec patch
Postpone the mixer name setup after the codec patch since the codec
patch may change the codec name string in itself.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-12-23 09:27:51 +01:00
Takashi Iwai
21949f00a0 ALSA: hda - Fix NID association for capture mixers
Fix the wrong implementation of NID <-> kctl mapping for capture mixers
introduced by the ocmmit 5b0cb1d850.
So far, the driver returns an error at probe.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-12-23 08:38:28 +01:00
Jaroslav Kysela
5e26dfd061 ALSA: hda - simplify usage of HDA_SUBDEV_AMP_FLAG
The HDA_SUBDEV_NID_FLAG is duplicate for amplifier control elements. Move
get_amp_nid_() call to the snd_hda_ctl_add() function.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-12-15 09:33:32 +01:00
Jaroslav Kysela
9e3fd8719f ALSA: hda - introduce HDA_SUBDEV_AMP_FLAG (ControlAmp in proc)
The purpose of this changeset is to show information about amplifier
setting in the codec proc file. Something like:

  Control: name="Front Playback Volume", index=0, device=0
    ControlAmp: chs=3, dir=Out, idx=0, ofs=0
  Control: name="Front Playback Switch", index=0, device=0
    ControlAmp: chs=3, dir=In, idx=2, ofs=0

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-12-15 09:33:17 +01:00
Jaroslav Kysela
5b0cb1d850 ALSA: hda - add more NID->Control mapping
This set of changes add missing NID values to some static control
elemenents. Also, it handles all "Capture Source" or "Input Source"
controls.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
2009-12-15 09:33:04 +01:00
Wu Fengguang
864f92be7e ALSA: hda - introduce snd_hda_jack_detect() and snd_hda_pin_sense()
This helps merge duplicate code.

v2: add snd_hda_jack_detect() and comments recommended by Takashi.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-18 07:40:57 +01:00
Takashi Iwai
67d634c07a ALSA: hda - Fix build errors with CONFIG_SND_HDA_INPUT_BEEP=n
Disable beep-related codes when CONFIG_SND_HDA_INPUT_BEEP isn't set.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-16 15:35:59 +01:00
Takashi Iwai
d5191e50b2 ALSA: hda - Update / add kerneldoc comments to exported functions
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-16 14:58:17 +01:00
Takashi Iwai
9c96fa599f ALSA: hda - Get rid of magic digits for subdev hack
Define a proper const for a magic 31bit flag for subdev / NID setup
with a brief comment.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-16 11:35:23 +01:00
Jaroslav Kysela
4d02d1b638 ALSA: hda - proc - add support for dynamic controls to mixer<->NID mapping
This patch adds support for dynamically created controls to proc codec file
(Control: lines).

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-16 11:35:19 +01:00
Jaroslav Kysela
3911a4c19e ALSA: hda - proc - introduce Control: lines to show mixer<->NID assignment
This is an initial patch to show universal control<->NID assigment in
proc codec file. The change helps to debug codec related problems.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-16 11:35:14 +01:00
Jaroslav Kysela
123c07aedd ALSA: hda_intel: Digital PC Beep - change behaviour for input layer
Original implementation was keeping registered input device for SND_BEEP
and SND_TONE events all time. This patch changes this behaviour:
If digital PC Beep is turned off using universal control switch,
the input device is unregistered.

Explanation: The kd_mksound() send SND_BEEP and SND_TONE only to last
registered device acceping those events. It means that the HDA Intel
audio driver blocks also the internal PC Speaker device (pcspkr.c
driver) even if the HDA Beep is muted. The user can easy disable
all beeps using 'setterm -blength 0' or 'xset b off' command.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-16 11:34:41 +01:00
Takashi Iwai
a2f6309e83 ALSA: hda - Add power on/off counter
Added the power on/off counter and expose via sysfs files.
The sysfs files, power_on_acct and power_off_acct, are created under
each codec hwdep sysfs directory (e.g. /sys/class/sound/hwC0D0).
The files show the msec length of the codec power-on and power-off,
respectively.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-11 09:37:08 +01:00
Takashi Iwai
8f217a226c ALSA: hda - Add missing export for snd_hda_bus_reboot_notify
... forgot to add for modules.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-10 18:26:12 +01:00
Jaroslav Kysela
e330323520 ALSA: hda - proc - show which I/O NID is associated to PCM device
Output something like:

Node 0x02 [Audio Output] wcaps 0x11: Stereo
  Device: name="ALC888 Analog", type="Audio", device=0, substream=0
  Converter: stream=0, channel=0
  ...

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-10 16:06:57 +01:00
Takashi Iwai
fb8d1a344d ALSA: hda - Add reboot notifier to each codec
Add reboot notifier to each codec so that it can do some workarounds
needed for reboot.

So far, patch_sigmatel.c calls its shutup routine for avoiding noises
at reboot on some HP machines.

References: Novell bnc#544779
	http://bugzilla.novell.com/show_bug.cgi?id=544779

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-11-10 16:02:29 +01:00
Wu Fengguang
92608badc5 ALSA: hda - allow up to 4 HDMI devices
The new Intel HDMI codec supports 2 independant HDMI/DisplayPort pipes.
We'll be exporting them as 2 pcm devices. So bump up the allowed number
of HDMI devices.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-10-30 11:40:03 +01:00
Wu Fengguang
f5d6def5c6 ALSA: hda - vectorize get_empty_pcm_device()
This unifies the code and data structure,
and makes it easy to add more HDMI devices.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-10-30 11:38:26 +01:00
Takashi Iwai
d94ff6b7ca ALSA: hda - Fix obsolete CONFIG_SND_DEBUG_DETECT
Fix the old dead CONFIG_SND_DEBUG_DETECT to CONFIG_SND_DEBUG_VERBOSE.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-09-02 00:20:21 +02:00
Takashi Iwai
e44d4e4cee Merge branch 'fix/hda' into topic/hda 2009-08-03 08:37:17 +02:00
Wu Fengguang
deadff1665 ALSA: hda: track CIRB/CORB command/response states for each codec
Recently we hit a bug in our dev board, whose HDMI codec#3 may emit
redundant/spurious responses, which were then taken as responses to
command for another onboard Realtek codec#2, and mess up both codecs.

Extend the azx_rb.cmds and azx_rb.res to array and track each codec's
commands/responses separately. This helps keep good codec safe from
broken ones.

Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-08-03 08:26:13 +02:00
Takashi Iwai
03cb2dafcb Merge branch 'topic/hda-cirrus' into topic/hda 2009-07-30 18:09:04 +02:00
Takashi Iwai
1ba7a7c650 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 <tiwai@suse.de>
2009-07-27 12:56:26 +02:00
Takashi Iwai
a22d543a95 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 <tiwai@suse.de>
2009-07-27 12:54:26 +02:00
Jaroslav Kysela
16a433d8b3 ALSA: hda-intel: Cleanups for widget connection list handling
This patch adds a check to snd_hda_get_connections() routine for
presence of AC_WCAP_CONN_LIST. Also, make sure that negative error
codes from noted route are handled on all places as errors.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-22 16:30:03 +02:00
Takashi Iwai
05ff7e11b7 ALSA: hda - Reduce click noise at power-saving
Add some tricks to reduce the click noise at powering down to D3
in the power saving mode on STAC/IDT codecs.
The key seems to be to reset PINs before the power-down, and some
delay before entering D3.  The needed delay is significantly long,
but I don't know why.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-22 12:39:24 +02:00
Takashi Iwai
05e870d29a Merge branch 'fix/hda' into topic/hda 2009-07-19 13:52:31 +02:00
Jaroslav Kysela
2e9bf24706 ALSA: hda_codec: Check for invalid zero connections
To prevent "Too many connections" message and the error path for some HDMI
codecs (which makes onboard audio unusable), check for invalid zero
connections for CONNECT_LIST verb.

Signed-off-by: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-19 13:51:45 +02:00
Takashi Iwai
82e1b804b0 ALSA: hda - Fix the previous sanity check in make_codec_cmd()
The newly added sanity-check for a codec verb can be better written
with logical ORs.  Also, the parameter can be more than 8bit.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-17 12:47:34 +02:00
Wu Fengguang
6430aeeb30 ALSA: hda - add bounds checking for the codec command fields
A recent bug involves passing auto detected >0x7f NID to codec command,
creating an invalid codec addr field, and finally lead to cmd timeout
and fall back into single command mode. Jaroslav fixed that bug in
alc880_parse_auto_config().

It would be safer to further check the bounds of all cmd fields.

Cc: Jaroslav Kysela <perex@perex.cz>
Signed-off-by: Wu Fengguang <fengguang.wu@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-17 11:18:21 +02:00
Takashi Iwai
3c6aae4489 ALSA: hda - Check codec errors in snd_hda_get_connections()
The codec read errors in snd_hda_get_connections() are ignored so far,
and it causes a problem like the bug in the commit
    9d30937acc
    ALSA: hda_intel: more strict alc880_parse_auto_config dig_nid checking

Better to check errors in the function and returns a proper error code
rather than passing bogus NID values.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-10 12:56:41 +02:00
Takashi Iwai
1475ef0f03 Merge branch 'fix/hda' into topic/hda 2009-07-04 12:20:25 +02:00
Takashi Iwai
b0bb3aa623 ALSA: hda - Don't override maxbps for FLOAT sharing with linear formats
When FLOAT PCM format is available but together with other linear
PCM formats, don't override maxbps value.  For FLOAT format, it's always
32, thus it can be better checked in snd_hda_calc_stream_format().
Otherwise the maxbps 32 might be used wrongly even if the linear PCM
doesn't support it.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-03 23:25:37 +02:00
Takashi Iwai
022b466fc3 ALSA: hda - Avoid invalid formats and rates with shared SPDIF
Check whether formats and rates don't result in zero due to the
restriction of SPDIF sharing.  If any of them can be zero, disable
the SPDIF sharing mode instead.  Otherwise it will lead to a PCM
configuration error.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-03 23:03:30 +02:00
Takashi Iwai
e5f1424807 ALSA: hda - Add Cirrus Logic CS420x support
Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-01 18:11:44 +02:00
Takashi Iwai
b5025c50b5 ALSA: hda - Allow FLOAT PCM format
So far, the FLOAT PCM format is used only exclusivley set.  But
this can be a combination with other formats.

This patch changes the parser to allow the FLOAT format in addition
to other PCM formats.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-07-01 18:05:27 +02:00
Takashi Iwai
a1e21c9078 ALSA: hda - Don't call snd_hda_codec_configure in snd_hda_codec_new()
The codec setup call via snd_hda_codec_configure() isn't necessarily
called in snd_hda_codec_new().  For the later added feature, it's better
to change the code flow like:
 - create all codec instances
 - configure each codec

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-24 11:52:59 +02:00
Takashi Iwai
f75dcc87fe ALSA: hda - Fix memory leak at codec creation
The codec->modelname field is allocated twice in snd_hda_codec_new().

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-17 08:22:32 +02:00
Takashi Iwai
b20f3b8346 ALSA: hda - Limit codec-verb retry to limited hardwares
The reset of a BUS controller during operations is somehow risky and
shouldn't be done inevitably for devices that have apparently no such
codec-communication problems.

This patch adds the check of the hardware and limits the bus-reset
capability.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-02 01:21:30 +02:00
Takashi Iwai
8dd783304e ALSA: hda - Add codec bus reset and verb-retry at critical errors
Some machines machine cause a severe CORB/RIRB stall in certain
weird conditions, such as PA access at the start up together with
fglrx driver.  This seems unable to be recovered without the controller
reset.

This patch allows the bus controller reset at critical errors so
that the communication gets recovered again.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-06-02 01:21:23 +02:00
Takashi Iwai
aa2936f5fe ALSA: hda - Support sync after writing a verb
This patch adds a debug mode to make the codec communication
synchronous.  Define SND_HDA_SUPPORT_SYNC_WRITE in hda_codec.c,
and the call of snd_hda_codec_write*() will become synchronous,
i.e. wait for the reply from the codec at each time issuing a verb.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-05-26 17:23:46 +02:00
Takashi Iwai
812a2cca29 ALSA: hda - Split codec->name to vendor and chip name strings
Split the name string in hda_codec struct to vendor_name and chip_name
strings to be stored directly from the preset name.
Since mostly only the chip name is referred in many patch_*.c, this
results in the reduction of many codes in the end.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-05-16 10:00:49 +02:00
Takashi Iwai
a3b48c88f2 ALSA: hda - minor optimization in hda_set_power_state()
Check the target power-state before checking EAPD exception to reduce
unneeded verb executions.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-04-21 13:38:30 +02:00
Takashi Iwai
b97bedcded Merge branch 'topic/hda-cache' into topic/hda 2009-04-21 11:11:54 +02:00
Takashi Iwai
b613291fb2 ALSA: hda - Retry codec-verbs at errors
The current error-recovery scheme for the codec communication errors
doesn't work always well.  Especially falling back to the
single-command mode causes the fatal problem on many systems.

In this patch, the problematic verb is re-issued again after the error
(even with polling mode) instead of the single-cmd mode.  The
single-cmd mode will be used only when specified via the command
option explicitly, mainly just for testing.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-04-21 11:10:44 +02:00
Takashi Iwai
92c7c8a7d6 ALSA: hda - Cache PCM and STREAM parameters queries
Cache quries for PCM and STREAM parameters as well as ampcap and
pincap sharing the hash table.  This will reduce the superfluous
access of the same codec verbs.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
2009-04-21 11:10:39 +02:00
Takashi Iwai
858940773a Merge branch 'fix/hda' into topic/hda 2009-04-21 07:41:12 +02:00