Alsa-devel
Threads by month
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
June 2014
- 130 participants
- 253 discussions
04 Jan '15
From: Sergiu Giurgiu <sgiurgiu11(a)gmail.com>
This patch adds support for ASUS - Xonar DSX sound cards. Tested on openSUSE 12.2 with kernel:
Linux 3.4.6-2.10-desktop #1 SMP PREEMPT Thu Jul 26 09:36:26 UTC 2012 (641c197) x86_64 x86_64 x86_64 GNU/Linux
Works:
- play sounds
- adjust volume on master channel.
- mute .
Since Xonar DS uses the same chip, everything that works for DS should work for DSX as well.
Thank you,
Sergiu Giurgiu.
Signed-off-by: Sergiu Giurgiu <sgiurgiu11(a)gmail.com>
diff --git a/mirror/sound/pci/oxygen/virtuoso.c b/mirror/sound/pci/oxygen/virtuoso.c
index 3d71423..8104eab 100644
--- a/mirror/sound/pci/oxygen/virtuoso.c
+++ b/mirror/sound/pci/oxygen/virtuoso.c
@@ -52,6 +52,7 @@ static DEFINE_PCI_DEVICE_TABLE(xonar_ids) = {
{ OXYGEN_PCI_SUBID(0x1043, 0x835d) },
{ OXYGEN_PCI_SUBID(0x1043, 0x835e) },
{ OXYGEN_PCI_SUBID(0x1043, 0x838e) },
+ { OXYGEN_PCI_SUBID(0x1043, 0x8522) },
{ OXYGEN_PCI_SUBID_BROKEN_EEPROM },
{ }
};
diff --git a/mirror/sound/pci/oxygen/xonar_wm87x6.c b/mirror/sound/pci/oxygen/xonar_wm87x6.c
index 63cff90..b555b62 100644
--- a/mirror/sound/pci/oxygen/xonar_wm87x6.c
+++ b/mirror/sound/pci/oxygen/xonar_wm87x6.c
@@ -1255,7 +1255,6 @@ static void dump_wm87x6_registers(struct oxygen *chip,
}
static const struct oxygen_model model_xonar_ds = {
- .shortname = "Xonar DS",
.longname = "Asus Virtuoso 66",
.chip = "AV200",
.init = xonar_ds_init,
@@ -1327,6 +1326,11 @@ int __devinit get_xonar_wm87x6_model(struct oxygen *chip,
switch (id->subdevice) {
case 0x838e:
chip->model = model_xonar_ds;
+ chip->model.shortname = "Xonar DS";
+ break;
+ case 0x8522:
+ chip->model = model_xonar_ds;
+ chip->model.shortname = "Xonar DSX";
break;
case 0x835e:
chip->model = model_xonar_hdav_slim;
--
1.7.10.4
4
5
[alsa-devel] [RFC][PATCH 00/15 v4] OXFW driver, a succesor to firewire-speakers
by Takashi Sakamoto 26 Oct '14
by Takashi Sakamoto 26 Oct '14
26 Oct '14
This patchset updates a part of my previous series:
[alsa-devel] [RFC v3] [PATCH 00/52] Enhancement for support of firewire devices
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-January/071820.ht…
This patchset is based on this series. (This series is under reviewing.)
[alsa-devel] [PATCH 00/49 v4] Enhancement for support of Firewire devices
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-April/075841.html
If you try this patchset, please apply the series in advance and apply this patchset.
Or just use backport codes in my github repository:
https://github.com/takaswie/snd-firewire-improve
Or if you use Ubuntu 14.04, DKMS package is available from David's PPA.
(Special thanks to David Henningsson.)
https://launchpad.net/~diwic/+archive/snd-firewire-improve
If you have Griffin FireWave, I would strongly request to test. Please see 'An issue for FireWave' in this message.
== Background
Currently, in ALSA, 'firewire-speakers' driver supports OXFW970/971 chipset which Oxford Semiconductor produced. But this driver has some restrictions:
- Don't support MIDI substreams
- Don't support substreams for PCM/MIDI capturing
There are several devices which are based on OXFW970/971. Especially, devices which Behringer and Mackie produced support playback/capture PCM samples/MIDI messages. So firewire-speakers needs re-work to support these devices.
This patchset renames 'firewire-speakers' to 'oxfw'. Maintainers already agreed to rename firewire-speakers to suitable name, in my first RFC in Jan 2014.
== Supported devices
Currently these devices are supported:
* Griffin Firewave
* LaCie Firewire Speakers
* Behringer F-Control Audio 202
* Mackie(Loud) Onyx-i series (former models)
* Mackie(Loud) Onyx Satellite
* Mackie(Loud) Tapco Link.Firewire
These devices can be supported but its IDs are unknown:
* Mackie(Loud), d.2 pro
* Mackie(Loud), d.4 pro
* Mackie(Loud), U.420
* Mackie(Loud), U.420d
When you have unknown devices, please inform me output of this command:
$ hexdump -C /sys/bus/firewire/devices/fwX/config_rom
(X is node id for your device. Tipically '1'.)
I tested this driver with Behringer F-Control Audio 202.
== Features
- Capturing/Playbacking PCM samples/MIDI messages at supported sampling rates via ALSA PCM/MIDI interfaces
- Retrieving firewire node information via ALSA hwdep interface
- Locking/Unlocking kernel streaming via ALSA hwdep interface
- Receiving notification at starting/stopping kernel streaming via ALSA hwdep interface
== Solutions for reported regressions
Two regressions were reported for my previous series:
1.Some names in card structure is trimmed.
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-February/073128.h…
2.The number of PCM channels are not detected correctly.
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-February/073145.h…
The cause of issue 1 is that the device has too long names in its config rom. To solve this issue, for the driver, this patchset uses the same way which firewire-speakers uses, propper alias in device-specific structure.
The cause of issue 2 is that the device has several format entries for the same sampling rate:
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-February/073561.h…
To solve this issue, this patchset includes improved mechanism to detect stream formation.
Additionally, this patchset adds new device entry for Mackie(Loud) Tapco Link.Firewire, refering to FFADO bug ticket 236:
http://subversion.ffado.org/ticket/236
== An issue for FireWave
I have an issue for Griffin Firewave.
This device can handle AV/C Stream Format Information command and driver can get to know stream formations via the command. With Stefan's help, responses from FireWave against this command are clear.
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-February/073561.h…
According to these responses, supported formations are:
Input Stream to device:
Rate PCM MIDI
32000 6 0
44100 6 0
48000 6 0
96000 6 0
32000 2 0
44100 2 0
48000 2 0
0 0 0
0 0 0
0 0 0
(I also expect to get this output from /proc/asound/FireWave/firewire/formation. I note it's order is not important.)
But current 'firewire-speakers' has PCM constraints below:
- 6ch at 32/44.1/48/96 kHz
- 2ch at 48/96 kHz
http://mailman.alsa-project.org/pipermail/alsa-devel/2014-February/073562.h…
So this OXFW driver may lost a support for 2ch/96.0kHz for FireWave and gain 2ch/32.0kHz and 2ch/44.1kHz.
I don't know exactly the reason of these gaps. So I strongly hope testers to check these two items:
- FireWave really can handle 2ch/96kHz with firewire-speakers driver.
- FireWave really can handle 2ch/32.0kHz and 2ch/44.1kHz with oxfw driver.
I think a test with aplay is easy to execute:
$ aplay -D hw:FireWave -f S32_LE -c 2 -r 96000 /dev/urandom
$ aplay -D hw:FireWave -f S32_LE -c 2 -r 48000 /dev/urandom
$ aplay -D hw:FireWave -f S32_LE -c 2 -r 44100 /dev/urandom
$ aplay -D hw:FireWave -f S32_LE -c 2 -r 32000 /dev/urandom
If 2ch/96kHz is apparently available, I'll change codes as a quirk.
FYI, when I tested unavailable number of PCM channels with a hack, FCA202 playback PCM substreams but becomes freezed after stopping streaming.
$ cat /var/log/syslog
...
kernel: [10098.670390] snd_oxfw fw1.0: transaction failed: timeout
...
I believe the other OXFW970/971 based devices have a similar behaviour.
================
Takashi Sakamoto (15):
speakers: Rename to oxfw and rename some members
oxfw: Move to its own directory
oxfw: Split stream functionality to a new file and add a header file
oxfw: Split PCM functionality to a new file
oxfw: Split control functionality to a new file
oxfw: Change the way to name card
oxfw: Change the way to make PCM rules/constraints
oxfw: Add proc interface for debugging purpose
oxfw: Change the way to start stream
oxfw: Add support for AV/C stream format command to get supported
stream formation
oxfw: Add a quirk for Griffin FireWave
oxfw: Add support for Behringer/Mackie devices
oxfw: Add support AMDTP in-stream and PCM capture
oxfw: Add support for capture/playback MIDI messages
oxfw: Add hwdep interface
include/uapi/sound/asound.h | 3 +-
include/uapi/sound/firewire.h | 3 +-
sound/firewire/Kconfig | 18 +-
sound/firewire/Makefile | 3 +-
sound/firewire/oxfw/Makefile | 3 +
sound/firewire/oxfw/oxfw.c | 284 +++++++++++++
sound/firewire/oxfw/oxfw.h | 141 +++++++
sound/firewire/oxfw/oxfw_command.c | 113 ++++++
sound/firewire/oxfw/oxfw_control.c | 283 +++++++++++++
sound/firewire/oxfw/oxfw_hwdep.c | 190 +++++++++
sound/firewire/oxfw/oxfw_midi.c | 168 ++++++++
sound/firewire/oxfw/oxfw_pcm.c | 367 +++++++++++++++++
sound/firewire/oxfw/oxfw_proc.c | 83 ++++
sound/firewire/oxfw/oxfw_stream.c | 658 ++++++++++++++++++++++++++++++
sound/firewire/speakers.c | 792 -------------------------------------
15 files changed, 2308 insertions(+), 801 deletions(-)
create mode 100644 sound/firewire/oxfw/Makefile
create mode 100644 sound/firewire/oxfw/oxfw.c
create mode 100644 sound/firewire/oxfw/oxfw.h
create mode 100644 sound/firewire/oxfw/oxfw_command.c
create mode 100644 sound/firewire/oxfw/oxfw_control.c
create mode 100644 sound/firewire/oxfw/oxfw_hwdep.c
create mode 100644 sound/firewire/oxfw/oxfw_midi.c
create mode 100644 sound/firewire/oxfw/oxfw_pcm.c
create mode 100644 sound/firewire/oxfw/oxfw_proc.c
create mode 100644 sound/firewire/oxfw/oxfw_stream.c
delete mode 100644 sound/firewire/speakers.c
--
1.8.3.2
3
34
08 Oct '14
Hi *,
using a Lenovo L440 Laptop on a Lenovo Pro Dock the combined line-in/out
jack at the docking station can not be used for output (input untested).
Output on the internal combined line-in/out jack works, as well as output
on the internal speakers.
Its intel-hda with Realtek ALC292. For more details see alsa-info.sh
output below.
Loading the driver with model=lenovo-dock does not help.
I guess quirks for the pins leading to the external dock jack are
missing.
Please let me know if you need any further information.
Any help highly appreciated. :)
cheers
sascha
Output of alsa-info follows:
---------------------------------------------------------------------->8-
upload=true&script=true&cardinfo=
!!################################
!!ALSA Information Script v 0.4.63
!!################################
!!Script ran on: Fri Jun 6 10:54:38 UTC 2014
!!Linux Distribution
!!------------------
Arch Linux \r (\l) NAME="Arch Linux" ID=arch PRETTY_NAME="Arch Linux" HOME_URL="https://www.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://bugs.archlinux.org/"
!!DMI Information
!!---------------
Manufacturer: LENOVO
Product Name: 20ATCTO1WW
Product Version: ThinkPad L440
Firmware Version: J4ET62WW(1.62)
!!Kernel Information
!!------------------
Kernel release: 3.14.5-1-ARCH
Operating System: GNU/Linux
Architecture: x86_64
Processor: unknown
SMP Enabled: Yes
!!ALSA Version
!!------------
Driver version: k3.14.5-1-ARCH
Library version: 1.0.27.2
Utilities version: 1.0.27.2
!!Loaded ALSA modules
!!-------------------
snd_hda_intel
snd_hda_intel
snd_usb_audio
thinkpad_acpi
!!Sound Servers on this system
!!----------------------------
Jack:
Installed - Yes (/usr/bin/jackd)
Running - No
!!Soundcards recognised by ALSA
!!-----------------------------
0 [HDMI ]: HDA-Intel - HDA Intel HDMI
HDA Intel HDMI at 0xf2530000 irq 48
1 [PCH ]: HDA-Intel - HDA Intel PCH
HDA Intel PCH at 0xf2534000 irq 45
2 [Q9000 ]: USB-Audio - QuickCam Pro 9000
Logitech, Inc. QuickCam Pro 9000 at usb-0000:00:14.0-9.1, high speed
29 [ThinkPadEC ]: ThinkPad EC - ThinkPad Console Audio Control
ThinkPad Console Audio Control at EC reg 0x30, fw unknown
!!PCI Soundcards installed in the system
!!--------------------------------------
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 05)
!!Advanced information - PCI Vendor/Device/Subsystem ID's
!!-------------------------------------------------------
00:03.0 0403: 8086:0c0c (rev 06)
Subsystem: 17aa:501e
--
00:1b.0 0403: 8086:8c20 (rev 05)
Subsystem: 17aa:501e
!!Modprobe options (Sound related)
!!--------------------------------
snd_hda_intel: model=lenovo-dock
!!Loaded sound module options
!!---------------------------
!!Module: snd_hda_intel
align_buffer_size : -1
bdl_pos_adj : 32,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
beep_mode : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable_msi : -1
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
jackpoll_ms : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
model : lenovo-dock,(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
patch : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
position_fix : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
power_save : 0
power_save_controller : Y
probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
single_cmd : N
snoop : Y
!!Module: snd_hda_intel
align_buffer_size : -1
bdl_pos_adj : 32,1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
beep_mode : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable_msi : -1
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
jackpoll_ms : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
model : lenovo-dock,(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
patch : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
position_fix : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
power_save : 0
power_save_controller : Y
probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
single_cmd : N
snoop : Y
!!Module: snd_usb_audio
autoclock : Y
device_setup : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
ignore_ctl_error : N
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
pid : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
vid : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
!!Module: thinkpad_acpi
brightness_enable : 2
brightness_mode : 4
enable : Y
experimental : 0
fan_control : N
force_load : N
id : ThinkPadEC
index : -536870912
volume_capabilities : 0
volume_control : N
volume_mode : 3
!!HDA-Intel Codec information
!!---------------------------
--startcollapse--
Codec: Intel Haswell HDMI
Address: 0
AFG Function Id: 0x1 (unsol 0)
Vendor Id: 0x80862807
Subsystem Id: 0x80860101
Revision Id: 0x100000
No Modem Function Group found
Default PCM:
rates [0x0]:
bits [0x0]:
formats [0x0]:
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D3 CLKSTOP EPSS
Power: setting=D0, actual=D0, Clock-stop-OK
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x02 [Audio Output] wcaps 0x6611: 8-Channels Digital
Converter: stream=0, channel=0
Digital: Enabled KAE
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0x1e]: 16 20 24 32
formats [0x5]: PCM AC3
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x6611: 8-Channels Digital
Converter: stream=0, channel=0
Digital: Enabled KAE
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0x1e]: 16 20 24 32
formats [0x5]: PCM AC3
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Node 0x04 [Audio Output] wcaps 0x6611: 8-Channels Digital
Converter: stream=0, channel=0
Digital: Enabled KAE
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0x1e]: 16 20 24 32
formats [0x5]: PCM AC3
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Node 0x05 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
Control: name="HDMI/DP,pcm=3 Jack", index=0, device=0
Control: name="IEC958 Playback Con Mask", index=0, device=0
Control: name="IEC958 Playback Pro Mask", index=0, device=0
Control: name="IEC958 Playback Default", index=0, device=0
Control: name="IEC958 Playback Switch", index=0, device=0
Control: name="ELD", index=0, device=3
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0b000094: OUT Detect HBR HDMI DP
Pin Default 0x18560010: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=01, enabled=1
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Devices: 0
Connection: 0
In-driver Connection: 3
0x02 0x03 0x04
Node 0x06 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
Control: name="HDMI/DP,pcm=7 Jack", index=0, device=0
Control: name="IEC958 Playback Con Mask", index=1, device=0
Control: name="IEC958 Playback Pro Mask", index=1, device=0
Control: name="IEC958 Playback Default", index=1, device=0
Control: name="IEC958 Playback Switch", index=1, device=0
Control: name="ELD", index=0, device=7
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0b000094: OUT Detect HBR HDMI DP
Pin Default 0x18560020: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0x2, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=02, enabled=1
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Devices: 0
Connection: 0
In-driver Connection: 3
0x02 0x03 0x04
Node 0x07 [Pin Complex] wcaps 0x40778d: 8-Channels Digital Amp-Out CP
Control: name="HDMI/DP,pcm=8 Jack", index=0, device=0
Control: name="IEC958 Playback Con Mask", index=2, device=0
Control: name="IEC958 Playback Pro Mask", index=2, device=0
Control: name="IEC958 Playback Default", index=2, device=0
Control: name="IEC958 Playback Switch", index=2, device=0
Control: name="ELD", index=0, device=8
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0b000094: OUT Detect HBR HDMI DP
Pin Default 0x18560030: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0x3, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=03, enabled=1
Power states: D0 D3 EPSS
Power: setting=D0, actual=D0
Devices: 0
Connection: 0
In-driver Connection: 3
0x02 0x03 0x04
Node 0x08 [Vendor Defined Widget] wcaps 0xf00000: Mono
Codec: Realtek ALC292
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x10ec0292
Subsystem Id: 0x17aa501e
Revision Id: 0x100001
No Modem Function Group found
Default PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D1 D2 D3 CLKSTOP EPSS
Power: setting=D0, actual=D0
GPIO: io=5, o=0, i=0, unsolicited=1, wake=0
IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[2]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[3]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[4]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Headphone Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Device: name="ALC292 Analog", type="Audio", device=0
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x3d 0x3d]
Converter: stream=8, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Speaker Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x3d 0x3d]
Converter: stream=8, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x04 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x05 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x06 [Audio Output] wcaps 0x611: Stereo Digital
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x07 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x97 0x97]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x23
Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Control: name="Capture Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Capture Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Device: name="ALC292 Analog", type="Audio", device=0
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x27 0x27]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x22
Node 0x0a [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0b [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Control: name="Mic Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=2, ofs=0
Control: name="Mic Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=2, ofs=0
Control: name="Beep Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=4, ofs=0
Control: name="Beep Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=4, ofs=0
Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 5
0x18 0x19 0x1a 0x1b 0x1d
Node 0x0c [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x00 0x00]
Connection: 2
0x02 0x0b
Node 0x0d [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x00 0x00]
Connection: 2
0x03 0x0b
Node 0x0e [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0f [Audio Mixer] wcaps 0x20010a: Mono Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x80] [0x00]
Connection: 2
0x02 0x03
Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
Control: name="Internal Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Internal Mic Phantom Jack", index=0, device=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x2f, mute=0
Amp-In vals: [0x02 0x02]
Pincap 0x00000020: IN
Pin Default 0x90a60130: [Fixed] Mic at Int N/A
Conn = Digital, Color = Unknown
DefAssociation = 0x3, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x13 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x2f, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00000020: IN
Pin Default 0x40000000: [N/A] Line Out at Ext N/A
Conn = Unknown, Color = Unknown
DefAssociation = 0x0, Sequence = 0x0
Pin-ctls: 0x00:
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Speaker Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Control: name="Speaker Phantom Jack", index=0, device=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x00010010: OUT EAPD
EAPD 0x2: EAPD
Pin Default 0x90170110: [Fixed] Speaker at Int N/A
Conn = Analog, Color = Unknown
DefAssociation = 0x1, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c 0x0d*
Node 0x15 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Headphone Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Control: name="Headphone Jack", index=0, device=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0001001c: OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x0321101f: [Jack] HP Out at Ext Left
Conn = 1/8, Color = Black
DefAssociation = 0x1, Sequence = 0xf
Pin-ctls: 0xc0: OUT HP
Unsolicited: tag=01, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c* 0x0d
Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0001001c: OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c* 0x0d
Node 0x17 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x18 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x00003734: IN OUT Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c* 0x0d
Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x2f, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00000024: IN Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1a [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Control: name="Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Mic Jack", index=0, device=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00003724: IN Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x03a11020: [Jack] Mic at Ext Left
Conn = 1/8, Color = Black
DefAssociation = 0x2, Sequence = 0x0
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=02, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x00003734: IN OUT Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x0c* 0x0d
Node 0x1c [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x1d [Pin Complex] wcaps 0x400400: Mono
Pincap 0x00000020: IN
Pin Default 0x40738105: [N/A] Modem Hand at Ext N/A
Conn = ATAPI, Color = Purple
DefAssociation = 0x0, Sequence = 0x5
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1e [Pin Complex] wcaps 0x400781: Stereo Digital
Pincap 0x00000014: OUT Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x06
Node 0x1f [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
Processing caps: benign=0, ncoeff=124
Node 0x21 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x22 [Audio Selector] wcaps 0x300101: Stereo
Connection: 8
0x18 0x19 0x1a 0x1b 0x1d 0x0b 0x12* 0x13
Node 0x23 [Audio Selector] wcaps 0x300101: Stereo
Connection: 6
0x18* 0x19 0x1a 0x1b 0x1d 0x0b
Node 0x24 [Vendor Defined Widget] wcaps 0xf00000: Mono
--endcollapse--
!!USB Mixer information
!!---------------------
--startcollapse--
USB Mixer: usb_id=0x046d0990, ctrlif=2, ctlerr=0
Card: Logitech, Inc. QuickCam Pro 9000 at usb-0000:00:14.0-9.1, high speed
Unit: 5
Control: name="Mic Capture Volume", index=0
Info: id=5, control=2, cmask=0x0, channels=1, type="S16"
Volume: min=4608, max=7680, dBmin=1800, dBmax=3000
Unit: 5
Control: name="Mic Capture Switch", index=0
Info: id=5, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
--endcollapse--
!!ALSA Device nodes
!!-----------------
crw-rw----+ 1 root audio 116, 11 Jun 5 09:35 /dev/snd/controlC0
crw-rw----+ 1 root audio 116, 6 Jun 5 09:35 /dev/snd/controlC1
crw-rw----+ 1 root audio 116, 13 Jun 6 12:38 /dev/snd/controlC2
crw-rw----+ 1 root audio 116, 2 Jun 5 09:35 /dev/snd/controlC29
crw-rw----+ 1 root audio 116, 10 Jun 5 09:35 /dev/snd/hwC0D0
crw-rw----+ 1 root audio 116, 5 Jun 5 09:35 /dev/snd/hwC1D0
crw-rw----+ 1 root audio 116, 9 Jun 5 09:35 /dev/snd/pcmC0D3p
crw-rw----+ 1 root audio 116, 8 Jun 5 09:35 /dev/snd/pcmC0D7p
crw-rw----+ 1 root audio 116, 7 Jun 5 09:35 /dev/snd/pcmC0D8p
crw-rw----+ 1 root audio 116, 4 Jun 6 11:41 /dev/snd/pcmC1D0c
crw-rw----+ 1 root audio 116, 3 Jun 6 12:38 /dev/snd/pcmC1D0p
crw-rw----+ 1 root audio 116, 12 Jun 6 12:38 /dev/snd/pcmC2D0c
crw-rw----+ 1 root audio 116, 1 Jun 5 17:36 /dev/snd/seq
crw-rw----+ 1 root audio 116, 33 Jun 5 09:35 /dev/snd/timer
/dev/snd/by-id:
total 0
drwxr-xr-x 2 root root 60 Jun 6 12:38 .
drwxr-xr-x 4 root root 360 Jun 6 12:38 ..
lrwxrwxrwx 1 root root 12 Jun 6 12:38 usb-046d_0990_2648235F-02 -> ../controlC2
/dev/snd/by-path:
total 0
drwxr-xr-x 2 root root 120 Jun 6 12:38 .
drwxr-xr-x 4 root root 360 Jun 6 12:38 ..
lrwxrwxrwx 1 root root 12 Jun 5 09:35 pci-0000:00:03.0 -> ../controlC0
lrwxrwxrwx 1 root root 12 Jun 6 12:38 pci-0000:00:14.0-usb-0:9.1:1.2 -> ../controlC2
lrwxrwxrwx 1 root root 12 Jun 5 09:35 pci-0000:00:1b.0 -> ../controlC1
lrwxrwxrwx 1 root root 13 Jun 5 09:35 platform-thinkpad_acpi -> ../controlC29
!!ALSA configuration files
!!------------------------
!!System wide config file (/etc/asound.conf)
pcm.!default {
type plug
slave.pcm {
type asym
playback.pcm "mixout"
capture.pcm "mixin"
}
}
pcm.mixout {
type dmix
ipc_key 1024
slave {
pcm "hw:1,0"
}
bindings {
0 0
1 1
}
}
pcm.mixin {
type dsnoop
ipc_key 1234
slave {
pcm "hw:1,0"
}
}
ctl.!default {
type hw
card PCH
}
!!Aplay/Arecord output
!!--------------------
APLAY
**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: ALC292 Analog [ALC292 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
ARECORD
**** List of CAPTURE Hardware Devices ****
card 1: PCH [HDA Intel PCH], device 0: ALC292 Analog [ALC292 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Q9000 [QuickCam Pro 9000], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
!!Amixer output
!!-------------
!!-------Mixer controls for card 0 [HDMI]
Card hw:0 'HDMI'/'HDA Intel HDMI at 0xf2530000 irq 48'
Mixer name : 'Intel Haswell HDMI'
Components : 'HDA:80862807,80860101,00100000'
Controls : 21
Simple ctrls : 3
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',1
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',2
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
!!-------Mixer controls for card 1 [PCH]
Card hw:1 'PCH'/'HDA Intel PCH at 0xf2534000 irq 45'
Mixer name : 'Realtek ALC292'
Components : 'HDA:10ec0292,17aa501e,00100001'
Controls : 21
Simple ctrls : 9
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 87
Mono: Playback 61 [70%] [-19.50dB] [on]
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 87
Mono:
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Speaker',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 87
Mono:
Front Left: Playback 87 [100%] [0.00dB] [on]
Front Right: Playback 87 [100%] [0.00dB] [on]
Simple mixer control 'Mic',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
Simple mixer control 'Beep',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch
Capture channels: Front Left - Front Right
Limits: Capture 0 - 63
Front Left: Capture 39 [62%] [12.00dB] [on]
Front Right: Capture 39 [62%] [12.00dB] [on]
Simple mixer control 'Auto-Mute Mode',0
Capabilities: enum
Items: 'Disabled' 'Enabled'
Item0: 'Enabled'
Simple mixer control 'Internal Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 2 [67%] [24.00dB]
Front Right: 2 [67%] [24.00dB]
!!-------Mixer controls for card 2 [Q9000]
Card hw:2 'Q9000'/'Logitech, Inc. QuickCam Pro 9000 at usb-0000:00:14.0-9.1, high speed'
Mixer name : 'USB Mixer'
Components : 'USB046d:0990'
Controls : 3
Simple ctrls : 1
Simple mixer control 'Mic',0
Capabilities: cvolume cvolume-joined cswitch cswitch-joined
Capture channels: Mono
Limits: Capture 0 - 3072
Mono: Capture 1536 [50%] [24.00dB] [on]
!!-------Mixer controls for card 29 [ThinkPadEC]
Card hw:29 'ThinkPadEC'/'ThinkPad Console Audio Control at EC reg 0x30, fw unknown'
Mixer name : 'ThinkPad EC (unknown)'
Components : ''
Controls : 1
Simple ctrls : 1
Simple mixer control 'Console',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
!!Alsactl output
!!--------------
--startcollapse--
state.HDMI {
control.1 {
iface CARD
name 'HDMI/DP,pcm=3 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.2 {
iface MIXER
name 'IEC958 Playback Con Mask'
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.3 {
iface MIXER
name 'IEC958 Playback Pro Mask'
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.4 {
iface MIXER
name 'IEC958 Playback Default'
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.5 {
iface MIXER
name 'IEC958 Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.6 {
iface PCM
device 3
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.7 {
iface CARD
name 'HDMI/DP,pcm=7 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.8 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 1
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.9 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 1
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.10 {
iface MIXER
name 'IEC958 Playback Default'
index 1
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.11 {
iface MIXER
name 'IEC958 Playback Switch'
index 1
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.12 {
iface PCM
device 7
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.13 {
iface CARD
name 'HDMI/DP,pcm=8 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.14 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 2
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.15 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 2
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.16 {
iface MIXER
name 'IEC958 Playback Default'
index 2
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.17 {
iface MIXER
name 'IEC958 Playback Switch'
index 2
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.18 {
iface PCM
device 8
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.19 {
iface PCM
device 3
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
control.20 {
iface PCM
device 7
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
control.21 {
iface PCM
device 8
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write'
type INTEGER
count 8
range '0 - 36'
}
}
}
state.PCH {
control.1 {
iface MIXER
name 'Headphone Playback Volume'
value.0 87
value.1 87
comment {
access 'read write'
type INTEGER
count 2
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
control.2 {
iface MIXER
name 'Headphone Playback Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.3 {
iface MIXER
name 'Speaker Playback Volume'
value.0 87
value.1 87
comment {
access 'read write'
type INTEGER
count 2
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
control.4 {
iface MIXER
name 'Speaker Playback Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.5 {
iface MIXER
name 'Mic Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.6 {
iface MIXER
name 'Mic Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.7 {
iface MIXER
name 'Auto-Mute Mode'
value Enabled
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Disabled
item.1 Enabled
}
}
control.8 {
iface MIXER
name 'Capture Volume'
value.0 39
value.1 39
comment {
access 'read write'
type INTEGER
count 2
range '0 - 63'
dbmin -1725
dbmax 3000
dbvalue.0 1200
dbvalue.1 1200
}
}
control.9 {
iface MIXER
name 'Capture Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.10 {
iface MIXER
name 'Mic Boost Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 3'
dbmin 0
dbmax 3000
dbvalue.0 0
dbvalue.1 0
}
}
control.11 {
iface MIXER
name 'Internal Mic Boost Volume'
value.0 2
value.1 2
comment {
access 'read write'
type INTEGER
count 2
range '0 - 3'
dbmin 0
dbmax 3600
dbvalue.0 2400
dbvalue.1 2400
}
}
control.12 {
iface MIXER
name 'Master Playback Volume'
value 61
comment {
access 'read write'
type INTEGER
count 1
range '0 - 87'
dbmin -6525
dbmax 0
dbvalue.0 -1950
}
}
control.13 {
iface MIXER
name 'Master Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.14 {
iface CARD
name 'Mic Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.15 {
iface CARD
name 'Internal Mic Phantom Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.16 {
iface CARD
name 'Headphone Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.17 {
iface CARD
name 'Speaker Phantom Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.18 {
iface MIXER
name 'Beep Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.19 {
iface MIXER
name 'Beep Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.20 {
iface PCM
name 'Playback Channel Map'
value.0 3
value.1 4
comment {
access read
type INTEGER
count 2
range '0 - 36'
}
}
control.21 {
iface PCM
name 'Capture Channel Map'
value.0 0
value.1 0
comment {
access read
type INTEGER
count 2
range '0 - 36'
}
}
}
state.Q9000 {
control.1 {
iface PCM
name 'Capture Channel Map'
value 0
comment {
access read
type INTEGER
count 1
range '0 - 36'
}
}
control.2 {
iface MIXER
name 'Mic Capture Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.3 {
iface MIXER
name 'Mic Capture Volume'
value 1536
comment {
access 'read write'
type INTEGER
count 1
range '0 - 3072'
dbmin 1800
dbmax 3000
dbvalue.0 2400
}
}
}
state.ThinkPadEC {
control.1 {
iface MIXER
name 'Console Playback Switch'
value true
comment {
access read
type BOOLEAN
count 1
}
}
}
--endcollapse--
!!All Loaded Modules
!!------------------
Module
rtsx_pci_sdmmc
mmc_core
ctr
ccm
uvcvideo
videobuf2_vmalloc
videobuf2_memops
videobuf2_core
videodev
media
snd_usb_audio
snd_usbmidi_lib
snd_rawmidi
snd_seq_dummy
snd_hrtimer
snd_seq
snd_seq_device
usb_storage
nls_iso8859_1
nls_cp437
vfat
fat
btusb
bluetooth
6lowpan_iphc
snd_hda_codec_hdmi
joydev
iTCO_wdt
mousedev
iTCO_vendor_support
i915
arc4
iwlmvm
coretemp
x86_pkg_temp_thermal
intel_powerclamp
drm_kms_helper
mac80211
kvm_intel
drm
iwlwifi
cfg80211
snd_hda_codec_realtek
snd_hda_codec_generic
snd_hda_intel
kvm
microcode
evdev
thinkpad_acpi
mac_hid
nvram
led_class
intel_gtt
hwmon
serio_raw
i2c_i801
i2c_algo_bit
i2c_core
psmouse
pcspkr
rtsx_pci_ms
memstick
tpm_tis
tpm
snd_hda_codec
mei_me
mei
thermal
rfkill
e1000e
shpchp
wmi
snd_hwdep
snd_pcm
snd_timer
snd
battery
button
soundcore
video
ptp
lpc_ich
ac
pps_core
processor
vboxnetflt
vboxnetadp
pci_stub
vboxpci
vboxdrv
ext4
crc16
mbcache
jbd2
hid_generic
usbhid
hid
dm_crypt
dm_mod
sr_mod
sd_mod
crc_t10dif
cdrom
crct10dif_pclmul
crct10dif_common
crc32_pclmul
crc32c_intel
ghash_clmulni_intel
atkbd
libps2
ahci
aesni_intel
libahci
aes_x86_64
lrw
gf128mul
glue_helper
ablk_helper
cryptd
libata
ehci_pci
ehci_hcd
xhci_hcd
scsi_mod
rtsx_pci
usbcore
usb_common
i8042
serio
!!Sysfs Files
!!-----------
/sys/class/sound/hwC0D0/init_pin_configs:
0x05 0x18560010
0x06 0x18560010
0x07 0x18560010
/sys/class/sound/hwC0D0/driver_pin_configs:
/sys/class/sound/hwC0D0/user_pin_configs:
/sys/class/sound/hwC0D0/init_verbs:
/sys/class/sound/hwC0D0/hints:
/sys/class/sound/hwC1D0/init_pin_configs:
0x12 0x90a60130
0x13 0x40000000
0x14 0x90170110
0x15 0x0321101f
0x16 0x411111f0
0x18 0x411111f0
0x19 0x411111f0
0x1a 0x03a11020
0x1b 0x411111f0
0x1d 0x40738105
0x1e 0x411111f0
/sys/class/sound/hwC1D0/driver_pin_configs:
/sys/class/sound/hwC1D0/user_pin_configs:
/sys/class/sound/hwC1D0/init_verbs:
/sys/class/sound/hwC1D0/hints:
!!ALSA/HDA dmesg
!!--------------
[ 24.883012] input: ThinkPad Extra Buttons as /devices/platform/thinkpad_acpi/input/input10
[ 24.920888] snd_hda_intel 0000:00:1b.0: irq 45 for MSI/MSI-X
[ 24.945919] input: HDA Digital PCBeep as /devices/pci0000:00/0000:00:1b.0/input/input11
[ 24.952007] input: HDA Intel PCH Headphone as /devices/pci0000:00/0000:00:1b.0/sound/card1/input13
[ 24.952314] input: HDA Intel PCH Mic as /devices/pci0000:00/0000:00:1b.0/sound/card1/input12
[ 24.953189] cfg80211: Calling CRDA to update world regulatory domain
--
[ 27.821545] [drm] Initialized i915 1.6.0 20080730 for 0000:00:02.0 on minor 0
[ 27.822590] snd_hda_intel 0000:00:03.0: irq 48 for MSI/MSI-X
[ 27.870131] mousedev: PS/2 mouse device common for all mice
--
[ 27.999737] Adding 8388604k swap on /dev/mapper/vg0-swap. Priority:-1 extents:1 across:8388604k FS
[ 28.066542] input: HDA Intel HDMI HDMI/DP,pcm=8 as /devices/pci0000:00/0000:00:03.0/sound/card0/input18
[ 28.066845] input: HDA Intel HDMI HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:03.0/sound/card0/input17
[ 28.067107] input: HDA Intel HDMI HDMI/DP,pcm=3 as /devices/pci0000:00/0000:00:03.0/sound/card0/input16
[ 28.360819] [drm] Enabling RC6 states: RC6 on, RC6p off, RC6pp off
--
[ 43.023277] sd 5:0:0:1: [sdc] Attached SCSI removable disk
[ 3583.280102] hda-intel: IRQ timing workaround is activated for card #1. Suggest a bigger bdl_pos_adj.
[ 3641.367542] warning: `VirtualBox' uses 32-bit capabilities (legacy support in use)
--
[32892.031210] usb_audio: [5] FU [Mic Capture Volume] ch = 1, val = 4608/7680/1
[32892.031612] usbcore: registered new interface driver snd-usb-audio
[32892.042989] uvcvideo: Found UVC 1.00 device <unnamed> (046d:0990)
--
[33399.436941] usb usb2: root hub lost power or was reset
[33399.437037] snd_hda_intel 0000:00:03.0: irq 41 for MSI/MSI-X
[33399.437179] xhci_hcd 0000:00:14.0: irq 43 for MSI/MSI-X
--
[33399.437386] e1000e 0000:00:19.0: irq 45 for MSI/MSI-X
[33399.439612] snd_hda_intel 0000:00:1b.0: irq 48 for MSI/MSI-X
[33399.439616] usb usb4: root hub lost power or was reset
--
[33399.833408] eDP powered off while attempting aux channel communication.
[33399.833512] Modules linked in: uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_core videodev media snd_usb_audio snd_usbmidi_lib snd_rawmidi snd_seq_dummy snd_hrtimer snd_seq snd_seq_device usb_storage nls_iso8859_1 nls_cp437 vfat fat btusb bluetooth 6lowpan_iphc snd_hda_codec_hdmi joydev iTCO_wdt mousedev iTCO_vendor_support i915 arc4 iwlmvm coretemp x86_pkg_temp_thermal intel_powerclamp drm_kms_helper mac80211 kvm_intel drm iwlwifi cfg80211 snd_hda_codec_realtek snd_hda_codec_generic snd_hda_intel kvm microcode evdev thinkpad_acpi mac_hid nvram led_class intel_gtt hwmon serio_raw i2c_i801 i2c_algo_bit i2c_core psmouse pcspkr rtsx_pci_ms memstick tpm_tis tpm snd_hda_codec mei_me mei thermal rfkill e1000e shpchp wmi snd_hwdep snd_pcm snd_timer snd battery button soundcore video ptp lpc_ich
[33399.833609] ac pps_core processor vboxnetflt(O) vboxnetadp(O) pci_stub vboxpci(O) vboxdrv(O) ext4 crc16 mbcache jbd2 hid_generic usbhid hid dm_crypt dm_mod sr_mod sd_mod crc_t10dif cdrom crct10dif_pclmul crct10dif_common rtsx_pci_sdmmc crc32_pclmul crc32c_intel ghash_clmulni_intel mmc_core atkbd libps2 ahci aesni_intel libahci aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd libata ehci_pci ehci_hcd xhci_hcd scsi_mod rtsx_pci usbcore usb_common i8042 serio
--
[33399.834171] eDP powered off while attempting aux channel communication.
[33399.834261] Modules linked in: uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_core videodev media snd_usb_audio snd_usbmidi_lib snd_rawmidi snd_seq_dummy snd_hrtimer snd_seq snd_seq_device usb_storage nls_iso8859_1 nls_cp437 vfat fat btusb bluetooth 6lowpan_iphc snd_hda_codec_hdmi joydev iTCO_wdt mousedev iTCO_vendor_support i915 arc4 iwlmvm coretemp x86_pkg_temp_thermal intel_powerclamp drm_kms_helper mac80211 kvm_intel drm iwlwifi cfg80211 snd_hda_codec_realtek snd_hda_codec_generic snd_hda_intel kvm microcode evdev thinkpad_acpi mac_hid nvram led_class intel_gtt hwmon serio_raw i2c_i801 i2c_algo_bit i2c_core psmouse pcspkr rtsx_pci_ms memstick tpm_tis tpm snd_hda_codec mei_me mei thermal rfkill e1000e shpchp wmi snd_hwdep snd_pcm snd_timer snd battery button soundcore video ptp lpc_ich
[33399.834316] ac pps_core processor vboxnetflt(O) vboxnetadp(O) pci_stub vboxpci(O) vboxdrv(O) ext4 crc16 mbcache jbd2 hid_generic usbhid hid dm_crypt dm_mod sr_mod sd_mod crc_t10dif cdrom crct10dif_pclmul crct10dif_common rtsx_pci_sdmmc crc32_pclmul crc32c_intel ghash_clmulni_intel mmc_core atkbd libps2 ahci aesni_intel libahci aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd libata ehci_pci ehci_hcd xhci_hcd scsi_mod rtsx_pci usbcore usb_common i8042 serio
--
[33689.287384] PM: early resume of devices complete after 0.090 msecs
[33689.287501] snd_hda_intel 0000:00:03.0: irq 41 for MSI/MSI-X
[33689.287620] mei_me 0000:00:16.0: irq 44 for MSI/MSI-X
--
[33689.287661] e1000e 0000:00:19.0: irq 45 for MSI/MSI-X
[33689.288519] snd_hda_intel 0000:00:1b.0: irq 48 for MSI/MSI-X
[33689.607497] ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 300)
--
[39741.199147] PM: early restore of devices complete after 0.277 msecs
[39741.331890] snd_hda_intel 0000:00:03.0: irq 41 for MSI/MSI-X
[39741.334458] usb usb1: root hub lost power or was reset
--
[39741.335190] usb usb3: root hub lost power or was reset
[39741.335279] snd_hda_intel 0000:00:1b.0: irq 48 for MSI/MSI-X
[39741.335338] usb usb4: root hub lost power or was reset
--
[45131.719540] usb usb2: root hub lost power or was reset
[45131.719647] snd_hda_intel 0000:00:03.0: irq 41 for MSI/MSI-X
[45131.719774] xhci_hcd 0000:00:14.0: irq 43 for MSI/MSI-X
--
[45131.720005] usb usb4: root hub lost power or was reset
[45131.720403] snd_hda_intel 0000:00:1b.0: irq 45 for MSI/MSI-X
[45131.723605] e1000e 0000:00:19.0: irq 48 for MSI/MSI-X
---------------------------------------------------------------------->8-
--
Sascha Wilde OpenPGP key: 4BB86568
http://www.intevation.de/~wilde/ http://www.intevation.de/
Intevation GmbH, Neuer Graben 17, 49074 Osnabrück; AG Osnabrück, HR B 18998
Geschäftsführer: Frank Koormann, Bernhard Reiter, Dr. Jan-Oliver Wagner
2
2
Hi,
did anyone think of a meeting in this year? AFAIK, a couple of good
candidates to tie with are:
- LinuxCon + KS will be at Chicago, USA (in August 18-22)
- Plumbers will be at Duesseldorf, Germany (in October 15-17)
Any other opportunities? I'm not sure whether I'll be in the former
(due to private reason), but very likely I'll attend the latter.
And, if we hold a meeting, in which format? I find the previous
year's meeting was nice; i.e. a kind of mini-summit that doesn't
conflict with other meetings is my preference. But I'm open for other
options.
thanks,
Takashi
14
75
02 Sep '14
On at91sam9rl, at91sam9g10, at91sam9g20, at91sam9g45 and newer
SoCs, the SSC peripheral supports frame sync length extension
feature. When SSC works as master, it can generate frame sync
lenght larger than 16 bits. After enable this feature, it can
playback 24/32 bits audio clips.
Changes in v2:
- Using compatible string to distinguish whether SSC supports
frame sync length extension to replace check IP version.
- Add related modification for dts file.
Bo Shen (4):
ASoC: atmel-ssc: distinguish whether SSC supports fslen ext
ASoC: atmel_ssc_dai: enable fslen extension feature
dts: atmel: at91sam9rl: switch ssc compatible string
dts: atmel: at91sam9g20: switch ssc compatible string
arch/arm/boot/dts/at91sam9g20.dtsi | 4 ++++
arch/arm/boot/dts/at91sam9rl.dtsi | 4 ++--
drivers/misc/atmel-ssc.c | 13 +++++++++++++
include/linux/atmel-ssc.h | 13 +++++++++++++
sound/soc/atmel/atmel_ssc_dai.c | 34 ++++++++++++++++++----------------
5 files changed, 50 insertions(+), 18 deletions(-)
--
1.8.5.2
3
9
hello,
i just bought an "icon utrack pro" usb audio interface
<http://www.icon-global.com/ShowPro.aspx?ID=24>.
as expected, this interface is not supported under linux: it is not usb
audio class compliant, even the midi port is not class compliant...
first, i would like to know if anybody ever managed to use this
interface under linux: is there an existing driver ? a hack or patch
that would allow the kernel to recognize this interface ? a specific
module dedicated to this kind of interface ? i can't find any reference
to this interface anywhere on the net...
anyway, while searching, i found that its firewire counterpart, the
"firexon", has an experimental support on ffado. it seems that the
firewire interface uses the bridgeco BeBoB chipset. given that some
versions of BeBoB supports both firewire and usb, i suppose (but i may
be wrong) that the "utrack pro" is also based on BeBoB. is there any
other BeBoB based usb interface supported under linux ?
finally, i would proudly help the development of a specific driver for
this interface: if anyone wants me to test some piece of code, or wants
some information on this interface, don't hesitate to contact me. i am
also a software developper, so i could help writing a module, but i
first need to learn more about the alsa code base (actually, i don't
know where to start...).
thanks a lot, and have a nice day !
--
rien
3
3
[alsa-devel] usb-usx2y: playback fails with Tascam US122 on kernel 3.14
by Dr Nicholas J Bailey 21 Aug '14
by Dr Nicholas J Bailey 21 Aug '14
21 Aug '14
I am having trouble with the US122 in playback and duplex mode. In capture
mode, it is working.
This problem occurs on (at least)
Linux arial 3.14-1-686-pae #1 SMP Debian 3.14.7-1 (2014-06-16) i686 GNU/Linux
I note that my computer uses the much-maligned Intel Corporation 5 Series/3400
chipset (rev 05), but I have a UK£12 5.1 out/2.0 in audio adaptor which works
in either capture or playback (although not in duplex). Also, booting an old
kernel:
Linux arial 3.2.0-4-686-pae #1 SMP Debian 3.2.57-3+deb7u2 i686 GNU/Linux
or
Linux arial 3.10.11 #1 SMP Wed Oct 2 19:26:59 BST 2013 i686 GNU/Linux
both seem to support full duplex operation. This is therefore a regression
between 3.10.11 and 3.14-1 (at least, something on my system has regressed and
I am suspecting the usx2y module).
dmesg tells me:
[ 2873.134973] usb 2-1.6: new full-speed USB device number 9 using ehci-pci
[ 2873.228117] usb 2-1.6: New USB device found, idVendor=1604, idProduct=8006
[ 2873.228122] usb 2-1.6: New USB device strings: Mfr=0, Product=0,
SerialNumber=0
[ 2873.447646] usb 2-1.6: USB disconnect, device number 9
[ 2875.183348] usb 2-1.6: new full-speed USB device number 10 using ehci-pci
[ 2875.277235] usb 2-1.6: New USB device found, idVendor=1604, idProduct=8007
[ 2875.277240] usb 2-1.6: New USB device strings: Mfr=0, Product=0,
SerialNumber=0
[ 2877.844821] cannot submit datapipe for urb 0, err = -28
... this message repeated many times ...
[ 2877.912388] cannot submit datapipe for urb 0, err = -28
[ 3528.609688] active frame status -18. Most probably some hardware problem.
I used to use these interfaces with jack in duplex mode, but this is no longer
possible.
Running up audacity for a test, capture from the US122 works fine, but once the
US122 is selected for playback, audacity pops up an "Error opening sound
device". Further attempts to record (even capture-only) result in corrupted,
high-amplitude noise.
Nick/.
Other info which might help (a bit noisy, because I'm not sure exactly what's
wrong) follows.
Using aplay with --dump-hw-parameters:
Under kernel 3.14-1:
HW Params of device "hw:USX2Y":
--------------------
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S16_LE S24_3LE
SUBFORMAT: STD
SAMPLE_BITS: [16 24]
FRAME_BITS: [32 48]
CHANNELS: 2
RATE: [44100 48000]
PERIOD_TIME: [1000 185760)
PERIOD_SIZE: [45 8192]
PERIOD_BYTES: [180 49152]
PERIODS: [2 365)
BUFFER_TIME: [1875 371520)
BUFFER_SIZE: [90 16384]
BUFFER_BYTES: [360 65536]
TICK_TIME: ALL
--------------------
aplay: set_params:1297: Unable to install hw params:
ACCESS: RW_INTERLEAVED
FORMAT: S16_LE
SUBFORMAT: STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 44100
PERIOD_TIME: (92879 92880)
PERIOD_SIZE: 4096
PERIOD_BYTES: 16384
PERIODS: 4
BUFFER_TIME: (371519 371520)
BUFFER_SIZE: 16384
BUFFER_BYTES: 65536
TICK_TIME: 0
Using kernel 3.10.11:
HW Params of device "hw:USX2Y":
--------------------
ACCESS: MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT: S16_LE S24_3LE
SUBFORMAT: STD
SAMPLE_BITS: [16 24]
FRAME_BITS: [32 48]
CHANNELS: 2
RATE: [44100 48000]
PERIOD_TIME: [1000 185760)
PERIOD_SIZE: [45 8192]
PERIOD_BYTES: [180 49152]
PERIODS: [2 365)
BUFFER_TIME: [1875 371520)
BUFFER_SIZE: [90 16384]
BUFFER_BYTES: [360 65536]
TICK_TIME: ALL
--------------------
(plays OK)
Error log when running jackd from qjackctl on the 3.14 kernel:
15:22:31.126 Patchbay deactivated.
15:22:31.165 Statistics reset.
15:22:31.295 ALSA connection change.
15:22:33.840 D-BUS: Service is available (org.jackaudio.service aka jackdbus).
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
15:22:43.516 D-BUS: JACK server could not be started. Sorry
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
Thu Jun 26 15:22:43 2014: Starting jack server...
Thu Jun 26 15:22:43 2014: JACK server starting in non-realtime mode
Thu Jun 26 15:22:43 2014: self-connect-mode is "Don't restrict self connect
requests"
Thu Jun 26 15:22:43 2014: Acquired audio card Audio1
Thu Jun 26 15:22:43 2014: creating alsa driver ... hw:USX2Y|hw:USX2Y|1024|3|
48000|0|0|nomon|swmeter|-|16bit
Thu Jun 26 15:22:43 2014: configuring for 48000Hz, period = 1024 frames (21.3
ms), buffer = 3 periods
Thu Jun 26 15:22:43 2014: ALSA: final selected sample format for capture: 16bit
little-endian
Thu Jun 26 15:22:43 2014: ALSA: use 3 periods for capture
Thu Jun 26 15:22:43 2014: ALSA: final selected sample format for playback:
16bit little-endian
Thu Jun 26 15:22:43 2014: ALSA: use 3 periods for playback
Thu Jun 26 15:22:43 2014: ERROR: ALSA: cannot set hardware parameters for
playback
Thu Jun 26 15:22:43 2014: ERROR: ALSA: cannot configure playback channel
Thu Jun 26 15:22:43 2014: ERROR: Cannot initialize driver
Thu Jun 26 15:22:43 2014: ERROR: JackServer::Open failed with -1
Thu Jun 26 15:22:43 2014: ERROR: Failed to open server
Thu Jun 26 15:22:44 2014: Saving settings to "/home/nick/.config/jack/conf.xml"
...
15:23:00.574 Could not connect to JACK server as client. - Overall operation
failed. - Unable to connect to server. Please check the messages window for
more info.
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
nick@arial:~$ cat .jackdrc
/usr/bin/jackd -r -m -dalsa -dhw:USX2Y -r48000 -p1024 -n3 -S
nick@arial:~$ cat .config/jack/conf.xml
<?xml version="1.0"?>
<!--
JACK settings, as persisted by D-Bus object.
You probably don't want to edit this because
it will be overwritten next time jackdbus saves.
-->
<!-- Thu Jun 26 15:22:44 2014 -->
<jack>
<engine>
<option name="driver">alsa</option>
<option name="realtime">false</option>
<option name="verbose">false</option>
<option name="client-timeout">500</option>
</engine>
<drivers>
<driver name="net">
</driver>
<driver name="alsarawmidi">
</driver>
<driver name="loopback">
</driver>
<driver name="firewire">
<option name="period">512</option>
<option name="nperiods">3</option>
<option name="rate">48000</option>
<option name="duplex">true</option>
</driver>
<driver name="netone">
</driver>
<driver name="alsa">
<option name="device">hw:USX2Y</option>
<option name="capture">hw:USX2Y</option>
<option name="playback">hw:USX2Y</option>
<option name="rate">48000</option>
<option name="period">1024</option>
<option name="nperiods">3</option>
<option name="hwmon">false</option>
<option name="hwmeter">false</option>
<option name="duplex">true</option>
<option name="softmode">false</option>
<option name="monitor">false</option>
<option name="dither">n</option>
<option name="shorts">true</option>
</driver>
<driver name="dummy">
</driver>
</drivers>
<internals>
<internal name="audioadapter">
</internal>
<internal name="profiler">
</internal>
<internal name="netadapter">
</internal>
<internal name="netmanager">
</internal>
</internals>
</jack>
3
8
[alsa-devel] [PATCH 1/2] usbtv: split core and video implementation
by Federico Simoncelli 19 Aug '14
by Federico Simoncelli 19 Aug '14
19 Aug '14
From: Federico Simoncelli <fsimonce(a)redhat.com>
Signed-off-by: Federico Simoncelli <fsimonce(a)redhat.com>
Reviewed-by: Lubomir Rintel <lkundrak(a)v3.sk>
---
drivers/media/usb/usbtv/Makefile | 3 +
drivers/media/usb/usbtv/usbtv-core.c | 136 +++++++++++++++++
drivers/media/usb/usbtv/{usbtv.c => usbtv-video.c} | 163 ++-------------------
drivers/media/usb/usbtv/usbtv.h | 98 +++++++++++++
4 files changed, 246 insertions(+), 154 deletions(-)
create mode 100644 drivers/media/usb/usbtv/usbtv-core.c
rename drivers/media/usb/usbtv/{usbtv.c => usbtv-video.c} (82%)
create mode 100644 drivers/media/usb/usbtv/usbtv.h
diff --git a/drivers/media/usb/usbtv/Makefile b/drivers/media/usb/usbtv/Makefile
index 28b872f..775316a 100644
--- a/drivers/media/usb/usbtv/Makefile
+++ b/drivers/media/usb/usbtv/Makefile
@@ -1 +1,4 @@
+usbtv-y := usbtv-core.o \
+ usbtv-video.o
+
obj-$(CONFIG_VIDEO_USBTV) += usbtv.o
diff --git a/drivers/media/usb/usbtv/usbtv-core.c b/drivers/media/usb/usbtv/usbtv-core.c
new file mode 100644
index 0000000..e89e48b
--- /dev/null
+++ b/drivers/media/usb/usbtv/usbtv-core.c
@@ -0,0 +1,136 @@
+/*
+ * Fushicai USBTV007 Video Grabber Driver
+ *
+ * Product web site:
+ * http://www.fushicai.com/products_detail/&productId=d05449ee-b690-42f9-a661-…
+ *
+ * Following LWN articles were very useful in construction of this driver:
+ * Video4Linux2 API series: http://lwn.net/Articles/203924/
+ * videobuf2 API explanation: http://lwn.net/Articles/447435/
+ * Thanks go to Jonathan Corbet for providing this quality documentation.
+ * He is awesome.
+ *
+ * Copyright (c) 2013 Lubomir Rintel
+ * All rights reserved.
+ * No physical hardware was harmed running Windows during the
+ * reverse-engineering activity
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL").
+ */
+
+#include <linux/module.h>
+
+#include "usbtv.h"
+
+int usbtv_set_regs(struct usbtv *usbtv, const u16 regs[][2], int size)
+{
+ int ret;
+ int pipe = usb_rcvctrlpipe(usbtv->udev, 0);
+ int i;
+
+ for (i = 0; i < size; i++) {
+ u16 index = regs[i][0];
+ u16 value = regs[i][1];
+
+ ret = usb_control_msg(usbtv->udev, pipe, USBTV_REQUEST_REG,
+ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+ value, index, NULL, 0, 0);
+ if (ret < 0)
+ return ret;
+ }
+
+ return 0;
+}
+
+static int usbtv_probe(struct usb_interface *intf,
+ const struct usb_device_id *id)
+{
+ int ret;
+ int size;
+ struct device *dev = &intf->dev;
+ struct usbtv *usbtv;
+
+ /* Checks that the device is what we think it is. */
+ if (intf->num_altsetting != 2)
+ return -ENODEV;
+ if (intf->altsetting[1].desc.bNumEndpoints != 4)
+ return -ENODEV;
+
+ /* Packet size is split into 11 bits of base size and count of
+ * extra multiplies of it.*/
+ size = usb_endpoint_maxp(&intf->altsetting[1].endpoint[0].desc);
+ size = (size & 0x07ff) * (((size & 0x1800) >> 11) + 1);
+
+ /* Device structure */
+ usbtv = kzalloc(sizeof(struct usbtv), GFP_KERNEL);
+ if (usbtv == NULL)
+ return -ENOMEM;
+ usbtv->dev = dev;
+ usbtv->udev = usb_get_dev(interface_to_usbdev(intf));
+
+ usbtv->iso_size = size;
+
+ usb_set_intfdata(intf, usbtv);
+
+ ret = usbtv_video_init(usbtv);
+ if (ret < 0)
+ goto usbtv_video_fail;
+
+ /* for simplicity we exploit the v4l2_device reference counting */
+ v4l2_device_get(&usbtv->v4l2_dev);
+
+ dev_info(dev, "Fushicai USBTV007 Video Grabber\n");
+ return 0;
+
+usbtv_video_fail:
+ kfree(usbtv);
+
+ return ret;
+}
+
+static void usbtv_disconnect(struct usb_interface *intf)
+{
+ struct usbtv *usbtv = usb_get_intfdata(intf);
+ usb_set_intfdata(intf, NULL);
+
+ if (!usbtv)
+ return;
+
+ usbtv_video_free(usbtv);
+
+ usb_put_dev(usbtv->udev);
+ usbtv->udev = NULL;
+
+ /* the usbtv structure will be deallocated when v4l2 will be
+ done using it */
+ v4l2_device_put(&usbtv->v4l2_dev);
+}
+
+struct usb_device_id usbtv_id_table[] = {
+ { USB_DEVICE(0x1b71, 0x3002) },
+ {}
+};
+MODULE_DEVICE_TABLE(usb, usbtv_id_table);
+
+MODULE_AUTHOR("Lubomir Rintel");
+MODULE_DESCRIPTION("Fushicai USBTV007 Video Grabber Driver");
+MODULE_LICENSE("Dual BSD/GPL");
+
+struct usb_driver usbtv_usb_driver = {
+ .name = "usbtv",
+ .id_table = usbtv_id_table,
+ .probe = usbtv_probe,
+ .disconnect = usbtv_disconnect,
+};
+
+module_usb_driver(usbtv_usb_driver);
diff --git a/drivers/media/usb/usbtv/usbtv.c b/drivers/media/usb/usbtv/usbtv-video.c
similarity index 82%
rename from drivers/media/usb/usbtv/usbtv.c
rename to drivers/media/usb/usbtv/usbtv-video.c
index 6222a4a..496bc2e 100644
--- a/drivers/media/usb/usbtv/usbtv.c
+++ b/drivers/media/usb/usbtv/usbtv-video.c
@@ -28,45 +28,10 @@
* GNU General Public License ("GPL").
*/
-#include <linux/init.h>
-#include <linux/list.h>
-#include <linux/module.h>
-#include <linux/slab.h>
-#include <linux/usb.h>
-#include <linux/videodev2.h>
-
-#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/videobuf2-core.h>
-#include <media/videobuf2-vmalloc.h>
-
-/* Hardware. */
-#define USBTV_VIDEO_ENDP 0x81
-#define USBTV_BASE 0xc000
-#define USBTV_REQUEST_REG 12
-
-/* Number of concurrent isochronous urbs submitted.
- * Higher numbers was seen to overly saturate the USB bus. */
-#define USBTV_ISOC_TRANSFERS 16
-#define USBTV_ISOC_PACKETS 8
-
-#define USBTV_CHUNK_SIZE 256
-#define USBTV_CHUNK 240
-
-/* Chunk header. */
-#define USBTV_MAGIC_OK(chunk) ((be32_to_cpu(chunk[0]) & 0xff000000) \
- == 0x88000000)
-#define USBTV_FRAME_ID(chunk) ((be32_to_cpu(chunk[0]) & 0x00ff0000) >> 16)
-#define USBTV_ODD(chunk) ((be32_to_cpu(chunk[0]) & 0x0000f000) >> 15)
-#define USBTV_CHUNK_NO(chunk) (be32_to_cpu(chunk[0]) & 0x00000fff)
-
-#define USBTV_TV_STD (V4L2_STD_525_60 | V4L2_STD_PAL)
-
-/* parameters for supported TV norms */
-struct usbtv_norm_params {
- v4l2_std_id norm;
- int cap_width, cap_height;
-};
+
+#include "usbtv.h"
static struct usbtv_norm_params norm_params[] = {
{
@@ -81,43 +46,6 @@ static struct usbtv_norm_params norm_params[] = {
}
};
-/* A single videobuf2 frame buffer. */
-struct usbtv_buf {
- struct vb2_buffer vb;
- struct list_head list;
-};
-
-/* Per-device structure. */
-struct usbtv {
- struct device *dev;
- struct usb_device *udev;
- struct v4l2_device v4l2_dev;
- struct video_device vdev;
- struct vb2_queue vb2q;
- struct mutex v4l2_lock;
- struct mutex vb2q_lock;
-
- /* List of videobuf2 buffers protected by a lock. */
- spinlock_t buflock;
- struct list_head bufs;
-
- /* Number of currently processed frame, useful find
- * out when a new one begins. */
- u32 frame_id;
- int chunks_done;
-
- enum {
- USBTV_COMPOSITE_INPUT,
- USBTV_SVIDEO_INPUT,
- } input;
- v4l2_std_id norm;
- int width, height;
- int n_chunks;
- int iso_size;
- unsigned int sequence;
- struct urb *isoc_urbs[USBTV_ISOC_TRANSFERS];
-};
-
static int usbtv_configure_for_norm(struct usbtv *usbtv, v4l2_std_id norm)
{
int i, ret = 0;
@@ -142,26 +70,6 @@ static int usbtv_configure_for_norm(struct usbtv *usbtv, v4l2_std_id norm)
return ret;
}
-static int usbtv_set_regs(struct usbtv *usbtv, const u16 regs[][2], int size)
-{
- int ret;
- int pipe = usb_rcvctrlpipe(usbtv->udev, 0);
- int i;
-
- for (i = 0; i < size; i++) {
- u16 index = regs[i][0];
- u16 value = regs[i][1];
-
- ret = usb_control_msg(usbtv->udev, pipe, USBTV_REQUEST_REG,
- USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
- value, index, NULL, 0, 0);
- if (ret < 0)
- return ret;
- }
-
- return 0;
-}
-
static int usbtv_select_input(struct usbtv *usbtv, int input)
{
int ret;
@@ -560,12 +468,6 @@ start_fail:
return ret;
}
-struct usb_device_id usbtv_id_table[] = {
- { USB_DEVICE(0x1b71, 0x3002) },
- {}
-};
-MODULE_DEVICE_TABLE(usb, usbtv_id_table);
-
static int usbtv_querycap(struct file *file, void *priv,
struct v4l2_capability *cap)
{
@@ -759,33 +661,9 @@ static void usbtv_release(struct v4l2_device *v4l2_dev)
kfree(usbtv);
}
-static int usbtv_probe(struct usb_interface *intf,
- const struct usb_device_id *id)
+int usbtv_video_init(struct usbtv *usbtv)
{
int ret;
- int size;
- struct device *dev = &intf->dev;
- struct usbtv *usbtv;
-
- /* Checks that the device is what we think it is. */
- if (intf->num_altsetting != 2)
- return -ENODEV;
- if (intf->altsetting[1].desc.bNumEndpoints != 4)
- return -ENODEV;
-
- /* Packet size is split into 11 bits of base size and count of
- * extra multiplies of it.*/
- size = usb_endpoint_maxp(&intf->altsetting[1].endpoint[0].desc);
- size = (size & 0x07ff) * (((size & 0x1800) >> 11) + 1);
-
- /* Device structure */
- usbtv = kzalloc(sizeof(struct usbtv), GFP_KERNEL);
- if (usbtv == NULL)
- return -ENOMEM;
- usbtv->dev = dev;
- usbtv->udev = usb_get_dev(interface_to_usbdev(intf));
-
- usbtv->iso_size = size;
(void)usbtv_configure_for_norm(usbtv, V4L2_STD_525_60);
@@ -805,20 +683,18 @@ static int usbtv_probe(struct usb_interface *intf,
usbtv->vb2q.lock = &usbtv->vb2q_lock;
ret = vb2_queue_init(&usbtv->vb2q);
if (ret < 0) {
- dev_warn(dev, "Could not initialize videobuf2 queue\n");
- goto usbtv_fail;
+ dev_warn(usbtv->dev, "Could not initialize videobuf2 queue\n");
+ return ret;
}
/* v4l2 structure */
usbtv->v4l2_dev.release = usbtv_release;
- ret = v4l2_device_register(dev, &usbtv->v4l2_dev);
+ ret = v4l2_device_register(usbtv->dev, &usbtv->v4l2_dev);
if (ret < 0) {
- dev_warn(dev, "Could not register v4l2 device\n");
+ dev_warn(usbtv->dev, "Could not register v4l2 device\n");
goto v4l2_fail;
}
- usb_set_intfdata(intf, usbtv);
-
/* Video structure */
strlcpy(usbtv->vdev.name, "usbtv", sizeof(usbtv->vdev.name));
usbtv->vdev.v4l2_dev = &usbtv->v4l2_dev;
@@ -832,52 +708,31 @@ static int usbtv_probe(struct usb_interface *intf,
video_set_drvdata(&usbtv->vdev, usbtv);
ret = video_register_device(&usbtv->vdev, VFL_TYPE_GRABBER, -1);
if (ret < 0) {
- dev_warn(dev, "Could not register video device\n");
+ dev_warn(usbtv->dev, "Could not register video device\n");
goto vdev_fail;
}
- dev_info(dev, "Fushicai USBTV007 Video Grabber\n");
return 0;
vdev_fail:
v4l2_device_unregister(&usbtv->v4l2_dev);
v4l2_fail:
vb2_queue_release(&usbtv->vb2q);
-usbtv_fail:
- kfree(usbtv);
return ret;
}
-static void usbtv_disconnect(struct usb_interface *intf)
+void usbtv_video_free(struct usbtv *usbtv)
{
- struct usbtv *usbtv = usb_get_intfdata(intf);
-
mutex_lock(&usbtv->vb2q_lock);
mutex_lock(&usbtv->v4l2_lock);
usbtv_stop(usbtv);
- usb_set_intfdata(intf, NULL);
video_unregister_device(&usbtv->vdev);
v4l2_device_disconnect(&usbtv->v4l2_dev);
- usb_put_dev(usbtv->udev);
- usbtv->udev = NULL;
mutex_unlock(&usbtv->v4l2_lock);
mutex_unlock(&usbtv->vb2q_lock);
v4l2_device_put(&usbtv->v4l2_dev);
}
-
-MODULE_AUTHOR("Lubomir Rintel");
-MODULE_DESCRIPTION("Fushicai USBTV007 Video Grabber Driver");
-MODULE_LICENSE("Dual BSD/GPL");
-
-struct usb_driver usbtv_usb_driver = {
- .name = "usbtv",
- .id_table = usbtv_id_table,
- .probe = usbtv_probe,
- .disconnect = usbtv_disconnect,
-};
-
-module_usb_driver(usbtv_usb_driver);
diff --git a/drivers/media/usb/usbtv/usbtv.h b/drivers/media/usb/usbtv/usbtv.h
new file mode 100644
index 0000000..536343d
--- /dev/null
+++ b/drivers/media/usb/usbtv/usbtv.h
@@ -0,0 +1,98 @@
+/*
+ * Fushicai USBTV007 Video Grabber Driver
+ *
+ * Copyright (c) 2013 Lubomir Rintel
+ * All rights reserved.
+ * No physical hardware was harmed running Windows during the
+ * reverse-engineering activity
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions, and the following disclaimer,
+ * without modification.
+ * 2. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * Alternatively, this software may be distributed under the terms of the
+ * GNU General Public License ("GPL").
+ */
+
+#include <linux/slab.h>
+#include <linux/usb.h>
+
+#include <media/v4l2-device.h>
+#include <media/videobuf2-vmalloc.h>
+
+/* Hardware. */
+#define USBTV_VIDEO_ENDP 0x81
+#define USBTV_BASE 0xc000
+#define USBTV_REQUEST_REG 12
+
+/* Number of concurrent isochronous urbs submitted.
+ * Higher numbers was seen to overly saturate the USB bus. */
+#define USBTV_ISOC_TRANSFERS 16
+#define USBTV_ISOC_PACKETS 8
+
+#define USBTV_CHUNK_SIZE 256
+#define USBTV_CHUNK 240
+
+/* Chunk header. */
+#define USBTV_MAGIC_OK(chunk) ((be32_to_cpu(chunk[0]) & 0xff000000) \
+ == 0x88000000)
+#define USBTV_FRAME_ID(chunk) ((be32_to_cpu(chunk[0]) & 0x00ff0000) >> 16)
+#define USBTV_ODD(chunk) ((be32_to_cpu(chunk[0]) & 0x0000f000) >> 15)
+#define USBTV_CHUNK_NO(chunk) (be32_to_cpu(chunk[0]) & 0x00000fff)
+
+#define USBTV_TV_STD (V4L2_STD_525_60 | V4L2_STD_PAL)
+
+/* parameters for supported TV norms */
+struct usbtv_norm_params {
+ v4l2_std_id norm;
+ int cap_width, cap_height;
+};
+
+/* A single videobuf2 frame buffer. */
+struct usbtv_buf {
+ struct vb2_buffer vb;
+ struct list_head list;
+};
+
+/* Per-device structure. */
+struct usbtv {
+ struct device *dev;
+ struct usb_device *udev;
+
+ /* video */
+ struct v4l2_device v4l2_dev;
+ struct video_device vdev;
+ struct vb2_queue vb2q;
+ struct mutex v4l2_lock;
+ struct mutex vb2q_lock;
+
+ /* List of videobuf2 buffers protected by a lock. */
+ spinlock_t buflock;
+ struct list_head bufs;
+
+ /* Number of currently processed frame, useful find
+ * out when a new one begins. */
+ u32 frame_id;
+ int chunks_done;
+
+ enum {
+ USBTV_COMPOSITE_INPUT,
+ USBTV_SVIDEO_INPUT,
+ } input;
+ v4l2_std_id norm;
+ int width, height;
+ int n_chunks;
+ int iso_size;
+ unsigned int sequence;
+ struct urb *isoc_urbs[USBTV_ISOC_TRANSFERS];
+};
+
+int usbtv_set_regs(struct usbtv *usbtv, const u16 regs[][2], int size);
+
+int usbtv_video_init(struct usbtv *usbtv);
+void usbtv_video_free(struct usbtv *usbtv);
--
1.8.4.2
4
5
[alsa-devel] [PATCH/RFC] ASoC: Drop const from struct snd_soc_dai_link *of_node members
by Sylwester Nawrocki 16 Aug '14
by Sylwester Nawrocki 16 Aug '14
16 Aug '14
Dropping the const qualifiers prevents "passing argument 1 of ‘of_node_put’
discards ‘const’ qualifier from pointer target type" type warnings when
compiling the code dropping reference to cpu_of_node, codec_of_node or
platform_of_node with with an of_node_put() function call.
This lets us to avoid casting to struct device_node * or caching variables
internally in drivers just to be able to properly drop a reference to the
OF node on clean up paths.
Signed-off-by: Sylwester Nawrocki <s.nawrocki(a)samsung.com>
---
include/sound/soc.h | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index ed9e2d7..a8d4b79 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -881,7 +881,7 @@ struct snd_soc_dai_link {
* only for codec to codec links, or systems using device tree.
*/
const char *cpu_name;
- const struct device_node *cpu_of_node;
+ struct device_node *cpu_of_node;
/*
* You MAY specify the DAI name of the CPU DAI. If this information is
* omitted, the CPU-side DAI is matched using .cpu_name/.cpu_of_node
@@ -893,7 +893,7 @@ struct snd_soc_dai_link {
* DT/OF node, but not both.
*/
const char *codec_name;
- const struct device_node *codec_of_node;
+ struct device_node *codec_of_node;
/* You MUST specify the DAI name within the codec */
const char *codec_dai_name;
/*
@@ -902,7 +902,7 @@ struct snd_soc_dai_link {
* do not need a platform.
*/
const char *platform_name;
- const struct device_node *platform_of_node;
+ struct device_node *platform_of_node;
int be_id; /* optional ID for machine driver BE identification */
const struct snd_soc_pcm_stream *params;
--
1.7.9.5
2
1
[alsa-devel] [PATCH 1/2 v2] ASoC: Add HA (HEAD acoustics) DSP codec driver template
by Stefan Roese 16 Aug '14
by Stefan Roese 16 Aug '14
16 Aug '14
This codec driver template represents an I2C controlled multichannel audio
codec that has many typical ASoC codec driver features like volume controls,
mixer stages, mux selection, output power control, in-codec audio routings,
codec bias management and DAI link configuration.
This driver is based on an early version provided by Jarkko Nikula.
Signed-off-by: Jarkko Nikula <jarkko.nikula(a)bitmer.com>
Signed-off-by: Stefan Roese <sr(a)denx.de>
Cc: Thorsten Eisbein <thorsten.eisbein(a)head-acoustics.de>
Cc: Lars-Peter Clausen <lars(a)metafoo.de>
Cc: Mark Brown <broonie(a)kernel.org>
---
v2:
- Added/changed copyright line
- Changed authorship (as suggested by Jarkko the original author)
- Added Thorsten as maintainer
- Remove ha_dsp_hw_params() and ha_dsp_set_dai_fmt() as its not used
(only needed for CODEC as clock master which is currently not suported).
- Removed some unneeded include files
- "const char *const foo" used instead of "const char *foo"
- SOC_MIXER_ARRAY() helper macro used
- Removed ha_dsp_set_bias_level() and use default implementation
- Use codec->dev instead of codec->dev->parent in dev_get_regmap()
- Added CODEC reset to probe
- Remove "ret" in ha_dsp_i2c_probe()
sound/soc/codecs/Kconfig | 4 +
sound/soc/codecs/Makefile | 2 +
sound/soc/codecs/ha-dsp.c | 333 ++++++++++++++++++++++++++++++++++++++++++++++
sound/soc/codecs/ha-dsp.h | 50 +++++++
4 files changed, 389 insertions(+)
create mode 100644 sound/soc/codecs/ha-dsp.c
create mode 100644 sound/soc/codecs/ha-dsp.h
diff --git a/sound/soc/codecs/Kconfig b/sound/soc/codecs/Kconfig
index f0e8401..f357988 100644
--- a/sound/soc/codecs/Kconfig
+++ b/sound/soc/codecs/Kconfig
@@ -51,6 +51,7 @@ config SND_SOC_ALL_CODECS
select SND_SOC_DA732X if I2C
select SND_SOC_DA9055 if I2C
select SND_SOC_BT_SCO
+ select SND_SOC_HA_DSP if I2C
select SND_SOC_ISABELLE if I2C
select SND_SOC_JZ4740_CODEC
select SND_SOC_LM4857 if I2C
@@ -343,6 +344,9 @@ config SND_SOC_BT_SCO
config SND_SOC_DMIC
tristate
+config SND_SOC_HA_DSP
+ tristate
+
config SND_SOC_HDMI_CODEC
tristate "HDMI stub CODEC"
diff --git a/sound/soc/codecs/Makefile b/sound/soc/codecs/Makefile
index 3c4d275..f296bec 100644
--- a/sound/soc/codecs/Makefile
+++ b/sound/soc/codecs/Makefile
@@ -39,6 +39,7 @@ snd-soc-da732x-objs := da732x.o
snd-soc-da9055-objs := da9055.o
snd-soc-bt-sco-objs := bt-sco.o
snd-soc-dmic-objs := dmic.o
+snd-soc-ha-dsp-objs := ha-dsp.o
snd-soc-isabelle-objs := isabelle.o
snd-soc-jz4740-codec-objs := jz4740.o
snd-soc-l3-objs := l3.o
@@ -190,6 +191,7 @@ obj-$(CONFIG_SND_SOC_DA732X) += snd-soc-da732x.o
obj-$(CONFIG_SND_SOC_DA9055) += snd-soc-da9055.o
obj-$(CONFIG_SND_SOC_BT_SCO) += snd-soc-bt-sco.o
obj-$(CONFIG_SND_SOC_DMIC) += snd-soc-dmic.o
+obj-$(CONFIG_SND_SOC_HA_DSP) += snd-soc-ha-dsp.o
obj-$(CONFIG_SND_SOC_ISABELLE) += snd-soc-isabelle.o
obj-$(CONFIG_SND_SOC_JZ4740_CODEC) += snd-soc-jz4740-codec.o
obj-$(CONFIG_SND_SOC_L3) += snd-soc-l3.o
diff --git a/sound/soc/codecs/ha-dsp.c b/sound/soc/codecs/ha-dsp.c
new file mode 100644
index 0000000..5a3c7ef
--- /dev/null
+++ b/sound/soc/codecs/ha-dsp.c
@@ -0,0 +1,333 @@
+/*
+ * ha-dsp.c -- HA DSP ALSA SoC Audio driver
+ *
+ * Copyright 2011-2014 HEAD acoustics GmbH
+ *
+ * Authors:
+ * Jarkko Nikula <jarkko.nikula(a)bitmer.com>
+ * Stefan Roese <sr(a)denx.de>
+ * Thorsten Eisbein <thorsten.eisbein(a)head-acoustics.de>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ *
+ * Maintainer: Thorsten Eisbein <thorsten.eisbein(a)head-acoustics.de>
+ */
+
+#include <linux/module.h>
+#include <linux/i2c.h>
+#include <linux/regmap.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+
+#include "ha-dsp.h"
+
+/* Reset default register values for soc-cache */
+static const struct reg_default ha_dsp_reg_defaults[] = {
+ { 0x00, 0x00 },
+ { 0x01, 0x55 },
+ { 0x02, 0x55 },
+ { 0x03, 0x00 },
+ { 0x04, 0x00 },
+ { 0x05, 0x00 },
+ { 0x06, 0x00 },
+ { 0x07, 0x00 },
+ { 0x08, 0x02 },
+ { 0x09, 0x02 },
+ { 0x0a, 0x02 },
+ { 0x0b, 0x02 },
+ { 0x0c, 0x02 },
+ { 0x0d, 0x02 },
+ { 0x0e, 0x02 },
+ { 0x0f, 0x02 },
+};
+
+/* DSP mode selection */
+static const char *const ha_dsp_mode_texts[] = {"Mode 1", "Mode 2"};
+static SOC_ENUM_SINGLE_DECL(ha_dsp_mode_enum, HA_DSP_CTRL, 0,
+ ha_dsp_mode_texts);
+
+/* Monitor output mux selection */
+static const char *const ha_dsp_monitor_texts[] = {"Off", "ADC", "DAC"};
+static SOC_ENUM_SINGLE_DECL(ha_dsp_monitor_enum, HA_DSP_CTRL, 1,
+ ha_dsp_monitor_texts);
+
+static const struct snd_kcontrol_new ha_dsp_monitor_control =
+ SOC_DAPM_ENUM("Route", ha_dsp_monitor_enum);
+
+/* Output mixers */
+static const struct snd_kcontrol_new ha_dsp_out1_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT1_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT1_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out2_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT2_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT2_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out3_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT3_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT3_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out4_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT4_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT4_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out5_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT5_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT5_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out6_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT6_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT6_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out7_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT7_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT1_CTRL, 2, 1, 0),
+};
+static const struct snd_kcontrol_new ha_dsp_out8_mixer_controls[] = {
+ SOC_DAPM_SINGLE("DAC Switch", HA_DSP_OUT8_CTRL, 1, 1, 0),
+ SOC_DAPM_SINGLE("IN Bypass Switch", HA_DSP_OUT8_CTRL, 2, 1, 0),
+};
+
+static const struct snd_kcontrol_new ha_dsp_snd_controls[] = {
+ SOC_SINGLE("ADC Capture Volume",
+ HA_DSP_ADC_VOL, 0, 0x7f, 0),
+ SOC_SINGLE("ADC Capture Switch",
+ HA_DSP_ADC_VOL, 7, 0x01, 1),
+
+ SOC_SINGLE("PCM Playback Volume",
+ HA_DSP_DAC_VOL, 0, 0x7f, 0),
+ SOC_SINGLE("PCM Playback Switch",
+ HA_DSP_DAC_VOL, 7, 0x01, 1),
+
+ SOC_ENUM("DSP Mode", ha_dsp_mode_enum),
+};
+
+static const struct snd_soc_dapm_widget ha_dsp_widgets[] = {
+ SND_SOC_DAPM_ADC("ADC", "Capture", SND_SOC_NOPM, 0, 0),
+ SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0),
+
+ SOC_MIXER_ARRAY("OUT1 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out1_mixer_controls),
+ SOC_MIXER_ARRAY("OUT2 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out2_mixer_controls),
+ SOC_MIXER_ARRAY("OUT3 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out3_mixer_controls),
+ SOC_MIXER_ARRAY("OUT4 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out4_mixer_controls),
+ SOC_MIXER_ARRAY("OUT5 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out5_mixer_controls),
+ SOC_MIXER_ARRAY("OUT6 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out6_mixer_controls),
+ SOC_MIXER_ARRAY("OUT7 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out7_mixer_controls),
+ SOC_MIXER_ARRAY("OUT8 Mixer", SND_SOC_NOPM, 0, 0,
+ ha_dsp_out8_mixer_controls),
+
+ SND_SOC_DAPM_PGA("OUT1 PGA", HA_DSP_OUT1_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT2 PGA", HA_DSP_OUT2_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT3 PGA", HA_DSP_OUT3_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT4 PGA", HA_DSP_OUT4_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT5 PGA", HA_DSP_OUT5_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT6 PGA", HA_DSP_OUT6_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT7 PGA", HA_DSP_OUT7_CTRL, 0, 0, NULL, 0),
+ SND_SOC_DAPM_PGA("OUT8 PGA", HA_DSP_OUT8_CTRL, 0, 0, NULL, 0),
+
+ SND_SOC_DAPM_MUX("Monitor Out Mux", SND_SOC_NOPM, 0, 0,
+ &ha_dsp_monitor_control),
+
+ /* Input pins */
+ SND_SOC_DAPM_INPUT("IN1"),
+ SND_SOC_DAPM_INPUT("IN2"),
+ SND_SOC_DAPM_INPUT("IN3"),
+ SND_SOC_DAPM_INPUT("IN4"),
+ SND_SOC_DAPM_INPUT("IN5"),
+ SND_SOC_DAPM_INPUT("IN6"),
+ SND_SOC_DAPM_INPUT("IN7"),
+ SND_SOC_DAPM_INPUT("IN8"),
+
+ /* Output pins */
+ SND_SOC_DAPM_OUTPUT("OUT1"),
+ SND_SOC_DAPM_OUTPUT("OUT2"),
+ SND_SOC_DAPM_OUTPUT("OUT3"),
+ SND_SOC_DAPM_OUTPUT("OUT4"),
+ SND_SOC_DAPM_OUTPUT("OUT5"),
+ SND_SOC_DAPM_OUTPUT("OUT6"),
+ SND_SOC_DAPM_OUTPUT("OUT7"),
+ SND_SOC_DAPM_OUTPUT("OUT8"),
+ SND_SOC_DAPM_OUTPUT("MONITOR"),
+};
+
+static const struct snd_soc_dapm_route ha_dsp_routes[] = {
+ /* Inputs to ADC */
+ {"ADC", NULL, "IN1"},
+ {"ADC", NULL, "IN2"},
+ {"ADC", NULL, "IN3"},
+ {"ADC", NULL, "IN4"},
+ {"ADC", NULL, "IN5"},
+ {"ADC", NULL, "IN6"},
+ {"ADC", NULL, "IN7"},
+ {"ADC", NULL, "IN8"},
+
+ /* DAC and input bypass paths to outputs */
+ {"OUT1 Mixer", "DAC Switch", "DAC"},
+ {"OUT1 Mixer", "IN Bypass Switch", "IN1"},
+ {"OUT1 PGA", NULL, "OUT1 Mixer"},
+ {"OUT1", NULL, "OUT1 PGA"},
+
+ {"OUT2 Mixer", "DAC Switch", "DAC"},
+ {"OUT2 Mixer", "IN Bypass Switch", "IN2"},
+ {"OUT2 PGA", NULL, "OUT2 Mixer"},
+ {"OUT2", NULL, "OUT2 PGA"},
+
+ {"OUT3 Mixer", "DAC Switch", "DAC"},
+ {"OUT3 Mixer", "IN Bypass Switch", "IN3"},
+ {"OUT3 PGA", NULL, "OUT3 Mixer"},
+ {"OUT3", NULL, "OUT3 PGA"},
+
+ {"OUT4 Mixer", "DAC Switch", "DAC"},
+ {"OUT4 Mixer", "IN Bypass Switch", "IN4"},
+ {"OUT4 PGA", NULL, "OUT4 Mixer"},
+ {"OUT4", NULL, "OUT4 PGA"},
+
+ {"OUT5 Mixer", "DAC Switch", "DAC"},
+ {"OUT5 Mixer", "IN Bypass Switch", "IN5"},
+ {"OUT5 PGA", NULL, "OUT5 Mixer"},
+ {"OUT5", NULL, "OUT5 PGA"},
+
+ {"OUT6 Mixer", "DAC Switch", "DAC"},
+ {"OUT6 Mixer", "IN Bypass Switch", "IN6"},
+ {"OUT6 PGA", NULL, "OUT6 Mixer"},
+ {"OUT6", NULL, "OUT6 PGA"},
+
+ {"OUT7 Mixer", "DAC Switch", "DAC"},
+ {"OUT7 Mixer", "IN Bypass Switch", "IN7"},
+ {"OUT7 PGA", NULL, "OUT7 Mixer"},
+ {"OUT7", NULL, "OUT7 PGA"},
+
+ {"OUT8 Mixer", "DAC Switch", "DAC"},
+ {"OUT8 Mixer", "IN Bypass Switch", "IN8"},
+ {"OUT8 PGA", NULL, "OUT8 Mixer"},
+ {"OUT8", NULL, "OUT8 PGA"},
+
+ /* Monitor output */
+ {"Monitor Out Mux", "ADC", "ADC"},
+ {"Monitor Out Mux", "DAC", "DAC"},
+ {"MONITOR", NULL, "Monitor Out Mux"},
+};
+
+static struct snd_soc_dai_driver ha_dsp_dai = {
+ .name = "ha-dsp-hifi",
+ .playback = {
+ .stream_name = "Playback",
+ .channels_min = 2,
+ .channels_max = 16,
+ .rates = SNDRV_PCM_RATE_8000_96000,
+ /* We use only 32 Bits for Audio */
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ },
+ .capture = {
+ .stream_name = "Capture",
+ .channels_min = 2,
+ .channels_max = 16,
+ .rates = SNDRV_PCM_RATE_8000_96000,
+ /* We use only 32 Bits for Audio */
+ .formats = SNDRV_PCM_FMTBIT_S32_LE,
+ },
+};
+
+static int ha_dsp_probe(struct snd_soc_codec *codec)
+{
+ int ret;
+
+ codec->control_data = dev_get_regmap(codec->dev, NULL);
+ ret = snd_soc_codec_set_cache_io(codec, codec->control_data);
+ if (ret != 0) {
+ dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
+ return ret;
+ }
+
+ snd_soc_write(codec, HA_DSP_CTRL, HA_DSP_SW_RESET);
+
+ return 0;
+}
+
+static int ha_dsp_remove(struct snd_soc_codec *codec)
+{
+ snd_soc_write(codec, HA_DSP_CTRL, HA_DSP_SW_RESET);
+
+ return 0;
+}
+
+static struct snd_soc_codec_driver soc_codec_dev_ha_dsp = {
+ .probe = ha_dsp_probe,
+ .remove = ha_dsp_remove,
+
+ .controls = ha_dsp_snd_controls,
+ .num_controls = ARRAY_SIZE(ha_dsp_snd_controls),
+ .dapm_widgets = ha_dsp_widgets,
+ .num_dapm_widgets = ARRAY_SIZE(ha_dsp_widgets),
+ .dapm_routes = ha_dsp_routes,
+ .num_dapm_routes = ARRAY_SIZE(ha_dsp_routes),
+};
+
+static const struct regmap_config ha_dsp_regmap = {
+ .reg_bits = 8,
+ .val_bits = 8,
+
+ .max_register = 0x0f,
+ .reg_defaults = ha_dsp_reg_defaults,
+ .num_reg_defaults = ARRAY_SIZE(ha_dsp_reg_defaults),
+ .cache_type = REGCACHE_RBTREE,
+};
+
+static int ha_dsp_i2c_probe(struct i2c_client *client,
+ const struct i2c_device_id *id)
+{
+ struct regmap *regmap;
+
+ regmap = devm_regmap_init_i2c(client, &ha_dsp_regmap);
+ if (IS_ERR(regmap)) {
+ dev_err(&client->dev, "Failed to create regmap: %ld\n",
+ PTR_ERR(regmap));
+ return PTR_ERR(regmap);
+ }
+
+ return snd_soc_register_codec(&client->dev, &soc_codec_dev_ha_dsp,
+ &ha_dsp_dai, 1);
+}
+
+static int ha_dsp_i2c_remove(struct i2c_client *client)
+{
+ snd_soc_unregister_codec(&client->dev);
+
+ return 0;
+}
+
+/*
+ * This name/ID is neded to match the DT node for the codec
+ */
+static const struct i2c_device_id ha_dsp_i2c_id[] = {
+ { "ha-dsp-audio", 0 },
+ { }
+};
+MODULE_DEVICE_TABLE(i2c, ha_dsp_i2c_id);
+
+static struct i2c_driver ha_dsp_i2c_driver = {
+ .driver = {
+ .name = "ha-dsp-codec",
+ .owner = THIS_MODULE,
+ },
+ .probe = ha_dsp_i2c_probe,
+ .remove = ha_dsp_i2c_remove,
+ .id_table = ha_dsp_i2c_id,
+};
+
+module_i2c_driver(ha_dsp_i2c_driver);
+
+MODULE_DESCRIPTION("ASoC HA DSP driver");
+MODULE_AUTHOR("Jarkko Nikula <jarkko.nikula(a)bitmer.com>");
+MODULE_LICENSE("GPL");
diff --git a/sound/soc/codecs/ha-dsp.h b/sound/soc/codecs/ha-dsp.h
new file mode 100644
index 0000000..6622f8a
--- /dev/null
+++ b/sound/soc/codecs/ha-dsp.h
@@ -0,0 +1,50 @@
+/*
+ * ha-dsp.h -- HA DSP ALSA SoC Audio driver
+ *
+ * Copyright 2011-2014 HEAD acoustics GmbH
+ *
+ * Author: Jarkko Nikula <jhnikula(a)gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation.
+ */
+
+#ifndef __HA_DSP_H__
+#define __HA_DSP_H__
+
+/* Registers */
+
+/*
+ * Bit 2-1: Monitor output selection: Off, ADC, DAC
+ * Bit 0: DSP Mode
+ */
+#define HA_DSP_CTRL 0x00
+
+/*
+ * Bit 7: Mute
+ * Bit 6-0: Volume
+ */
+#define HA_DSP_DAC_VOL 0x01
+#define HA_DSP_ADC_VOL 0x02
+
+/*
+ * Bit 2: INx Bypass to OUTx Switch
+ * Bit 1: DAC to OUTx switch
+ * Bit 0: Output power
+ */
+#define HA_DSP_OUT1_CTRL 0x08
+#define HA_DSP_OUT2_CTRL 0x09
+#define HA_DSP_OUT3_CTRL 0x0a
+#define HA_DSP_OUT4_CTRL 0x0b
+#define HA_DSP_OUT5_CTRL 0x0c
+#define HA_DSP_OUT6_CTRL 0x0d
+#define HA_DSP_OUT7_CTRL 0x0e
+#define HA_DSP_OUT8_CTRL 0x0f
+
+/* Register bits and values */
+
+/* HA_DSP_CTRL */
+#define HA_DSP_SW_RESET 0xff
+
+#endif
--
1.9.2
2
3