[alsa-devel] idt blue jack patch
Wu Fengguang
fengguang.wu at intel.com
Mon Feb 23 10:53:51 CET 2009
On Mon, Feb 23, 2009 at 10:54:36AM +0200, Takashi Iwai wrote:
> At Sat, 21 Feb 2009 17:28:21 +0100,
> I wrote:
> > > > Regarding the default pin configurations.
> > > > I made a series of patches to add the interface to change the default
> > > > pincfg values dynamically via hwdep sysfs. The patches are found in
> > > > test/hda-pincfg branch of sound git tree
> > > > git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git
> > > >
> > > > and included in the very latest alsa-driver-unstable snapshot
> > > > ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/snapshot/alsa-driver-unstable-snapshot.tar.gz
> > > >
> > > > Basically, you can get / set the default pincfg values on the fly, and
> > > > trigger the codec reconfiguration after that.
> > > >
> > > > The init_pin_configs file shows the initial default pincfgs set by BIOS.
> > > >
> > > > # cat /sys/class/sound/hwC0D0/init_pin_configs
> > > > 0x14 0x9993013f
> > > > 0x15 0x01014c10
> > > > 0x16 0x99030120
> > > > 0x18 0x01a19c30
> > > > 0x19 0x02a11c31
> > > > 0x1a 0x01813c32
> > > > 0x1b 0x02211c1f
> > > > 0x1c 0x99330133
> > > > 0x1d 0x411111f0
> > > > 0x1e 0x411111f0
> > > > 0x1f 0x411111f0
> > > >
> > > > Then, you can override the default value by writing to
> > > > override_pin_configs sysfs file.
> > > >
> > > > # cat /sys/class/sound/hwC0D0/override_pin_configs
> > > > # echo 0x1d 0x02a11c30 > /sys/class/sound/hwC0D0/override_pin_configs
> > > > # cat /sys/class/sound/hwC0D0/override_pin_configs
> > > > 0x1d 0x02a11c30
> > > >
> > > > Note that this value won't appear in init_pin_configs.
> > > >
> > > > Also, there is another file, cur_pin_configs. This contains the
> > > > pincfgs that are set by the driver explicitly. For example,
> > > > the static pincfg table in patch_sigmatel.c appears here.
> > > >
> > > > Then you can trigger the codec reconfiguration by
> > > >
> > > > # echo 1 > /sys/class/sound/hwC0D0/reconfig
> > > >
> > > > This will re-setup the driver based on the given pin configs.
> > >
> > > Cool! This interface will greatly ease the developer-user interactions.
> > >
> > > Without knowing this feature, I had to write a patch for Paulo,
> > > and compile/verify it before sending it to him. Paulo also have to
> > > pull the kernel source, apply the patch, compile and run it...
> > >
> > > Now you turned that tedious process into two simple echo commands :-)
> > >
> > > > Unfortunately, in the current scenario, it can't override the static
> > > > pincfg table in the driver like in patch_sigmatel.c. It's just for
> > > > fixing and BIOS setup.
> > >
> > > Unfortunately patch_sigmatel has a long list of static pincfgs, i.e.:
> > >
> > > static unsigned int ref927x_pin_configs[14] = {
> > > 0x02214020, 0x02a19080, 0x0181304e, 0x01014010,
> > > 0x01a19040, 0x01011012, 0x01016011, 0x0101201f,
> > > 0x183301f0, 0x18a001f0, 0x18a001f0, 0x01442070,
> > > 0x01c42190, 0x40000100,
> > > };
> > >
> > > This effectively prohibits itself from being dynamically reconfigured
> > > via the override_pin_configs interface...
> >
> > Right. Considering the implementation again, I think it must be
> > relatively easy to fix that. Just changing the order of the evaluation
> > of pincfg, and add the check not to overwrite the value.
> >
> > I'll work on it in the next week.
>
> Fixed now on sound-unstable tree, together with renaming of override_pin
> and cur_pin to user_pin and driver_pin.
>
> It'd be appreciated if someone can test it with a device with
> Sigmatel/IDT (as I have no such hardware)...
Hi Takashi,
Here are the good behaviors:
- the driver_pin_configs matches the numbers defined in source code
- the init_pin_configs/user_pin_configs will be exactly restored between module reloading
- setting user_pin_configs and doing reconfig did changed the 0x0c pin from output to input.
However,
- after reconfig, Surround, Center and LFE channels are muted and have to be
turned on again in alsamixer.
- if reconfig while playing audio, it will trigger a panic:
[ 355.810682] ALSA sound/pci/hda/hda_hwdep.c:167: hda-codec: reconfiguring
[ 355.817969] ALSA sound/core/timer.c:809: timer ffff88003a8038b8 is busy?
[ 355.825058] ALSA sound/core/device.c:102: device free ffff88003a620160 (from stac92xx_free+0x62/0xa0 [snd_hda_codec_idt]), not found
[ 355.833556] general protection fault: 0000 [#1] SMP
[ 355.833559] last sysfs file: /sys/devices/pci0000:00/0000:00:1b.0/sound/card0/hwC0D2/reconfig
[ 355.833561] CPU 3
[ 355.833563] Modules linked in: snd_hda_codec_intelhdmi snd_hda_codec_idt snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq snd_timer snd_seq_device snd soundcore snd_page_alloc [last unloaded: snd_hda_codec]
[ 355.833572] Pid: 0, comm: swapper Not tainted 2.6.29-rc3 #5
[ 355.833574] RIP: 0010:[<ffffffffa0052588>] [<ffffffffa0052588>] snd_pcm_period_elapsed+0x38/0x410 [snd_pcm]
[ 355.833584] RSP: 0018:ffff88003b4cfe80 EFLAGS: 00010002
[ 355.833586] RAX: 0000000000000003 RBX: ffff88003a591458 RCX: ffffffff81a90210
[ 355.833588] RDX: 0000000000009d9c RSI: ffff8800041699a0 RDI: ffff8800396af098
[ 355.833589] RBP: ffff88003b4cfec0 R08: 0000000000000001 R09: 0000000000000001
[ 355.833591] R10: 0000000000000000 R11: 0000000000000001 R12: 00000000000001a0
[ 355.833592] R13: ffff8800396af098 R14: 6b6b6b6b6b6b6b6b R15: 0000000080000010
[ 355.833594] FS: 0000000000000000(0000) GS:ffff88003bbfe210(0000) knlGS:0000000000000000
[ 355.833596] CS: 0010 DS: 0018 ES: 0018 CR0: 000000008005003b
[ 355.833598] CR2: 00007fb7ea522558 CR3: 0000000039856000 CR4: 00000000000406e0
[ 355.833600] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 355.833601] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 355.833603] Process swapper (pid: 0, threadinfo ffff88003b4c8000, task ffff88003b4c4440)
[ 355.833604] Stack:
[ 355.833605] ffff88003b4cfea0 ffffffff811a38af ffff88003a5f92b8 ffff88003a591458
[ 355.833609] 00000000000001a0 0000000000000004 ffff88003a5f92b8 0000000080000010
[ 355.833612] ffff88003b4cff10 ffffffffa00ba63e ffff88003b4c4440 ffff88003a5f9300
[ 355.833615] Call Trace:
[ 355.833617] <IRQ> <0> [<ffffffff811a38af>] ? _raw_spin_unlock+0x7f/0xb0
[ 355.833623] [<ffffffffa00ba63e>] azx_interrupt+0x18e/0x1a0 [snd_hda_intel]
[ 355.833629] [<ffffffff8108ead5>] handle_IRQ_event+0x35/0x80
[ 355.833633] [<ffffffff810905b2>] handle_fasteoi_irq+0x82/0x100
[ 355.833636] [<ffffffff8100f175>] do_IRQ+0xb5/0x1b0
[ 355.833639] [<ffffffff8100d193>] ret_from_intr+0x0/0x2e
[ 355.833642] <EOI> <0>Code: 89 5d d8 4c 89 65 e0 4c 89 75 f0 4c 89 7d f8 49 89 fd 48 85 ff 0f 84 c8 02 00 00 4c 8b b7 a8 00 00 00 4d 85 f6 0f 84 b8 02 00 00 <49> 8b 86 a8 02 00 00 48 85 c0 74 02 ff d0 48 c7 c7 80 c9 05 a0
[ 355.833665] RIP [<ffffffffa0052588>] snd_pcm_period_elapsed+0x38/0x410 [snd_pcm]
[ 355.833672] RSP <ffff88003b4cfe80>
[ 355.833676] ---[ end trace 5c74b30f4153ef47 ]---
[ 355.833677] Kernel panic - not syncing: Fatal exception in interrupt
[ 355.833681] ------------[ cut here ]------------
[ 355.833682] WARNING: at kernel/smp.c:299 smp_call_function_many+0x219/0x280()
[ 355.833684] Hardware name:
[ 355.833685] Modules linked in: snd_hda_codec_intelhdmi snd_hda_codec_idt snd_hda_intel snd_hda_codec snd_hwdep snd_pcm snd_seq snd_timer snd_seq_device snd soundcore snd_page_alloc [last unloaded: snd_hda_codec]
[ 355.833693] Pid: 0, comm: swapper Tainted: G D 2.6.29-rc3 #5
[ 355.833694] Call Trace:
[ 355.833695] <IRQ> [<ffffffff81044b10>] warn_slowpath+0xd0/0x130
[ 355.833702] [<ffffffff8106ce0d>] ? trace_hardirqs_off+0xd/0x10
[ 355.833706] [<ffffffff814437cf>] ? _spin_lock_irqsave+0x2f/0x90
[ 355.833708] [<ffffffff81443488>] ? _spin_unlock_irqrestore+0x68/0x70
[ 355.833711] [<ffffffff8106cd59>] ? trace_hardirqs_off_caller+0x29/0xd0
[ 355.833714] [<ffffffff811a38af>] ? _raw_spin_unlock+0x7f/0xb0
[ 355.833716] [<ffffffff814434b6>] ? _spin_unlock+0x26/0x30
[ 355.833719] [<ffffffff8106ce0d>] ? trace_hardirqs_off+0xd/0x10
[ 355.833722] [<ffffffff81440c50>] ? __mutex_unlock_slowpath+0x130/0x1a0
[ 355.833725] [<ffffffff8106ce0d>] ? trace_hardirqs_off+0xd/0x10
[ 355.833727] [<ffffffff81440c50>] ? __mutex_unlock_slowpath+0x130/0x1a0
[ 355.833729] [<ffffffff81440cc9>] ? mutex_unlock+0x9/0x10
[ 355.833732] [<ffffffff8107f934>] ? crash_kexec+0x74/0x100
[ 355.833735] [<ffffffff81443488>] ? _spin_unlock_irqrestore+0x68/0x70
[ 355.833738] [<ffffffff81078ad9>] smp_call_function_many+0x219/0x280
[ 355.833741] [<ffffffff81013f10>] ? stop_this_cpu+0x0/0x40
[ 355.833743] [<ffffffff81443488>] ? _spin_unlock_irqrestore+0x68/0x70
[ 355.833746] [<ffffffff81078b60>] smp_call_function+0x20/0x30
[ 355.833749] [<ffffffff8101f5e0>] native_smp_send_stop+0x30/0x90
[ 355.833753] [<ffffffff8143f50a>] panic+0xaf/0x16f
[ 355.833755] [<ffffffff81443488>] ? _spin_unlock_irqrestore+0x68/0x70
[ 355.833758] [<ffffffff8106ce0d>] ? trace_hardirqs_off+0xd/0x10
[ 355.833760] [<ffffffff81443488>] ? _spin_unlock_irqrestore+0x68/0x70
[ 355.833763] [<ffffffff81061147>] ? down_trylock+0x37/0x50
[ 355.833765] [<ffffffff810456d1>] ? console_unblank+0x21/0x90
[ 355.833768] [<ffffffff81444dcc>] oops_end+0xec/0x100
[ 355.833771] [<ffffffff810103f6>] die+0x56/0x90
[ 355.833773] [<ffffffff81444928>] do_general_protection+0x158/0x180
[ 355.833775] [<ffffffff81443ea5>] general_protection+0x25/0x30
[ 355.833782] [<ffffffffa0052588>] ? snd_pcm_period_elapsed+0x38/0x410 [snd_pcm]
[ 355.833785] [<ffffffff811a38af>] ? _raw_spin_unlock+0x7f/0xb0
[ 355.833789] [<ffffffffa00ba63e>] azx_interrupt+0x18e/0x1a0 [snd_hda_intel]
[ 355.833792] [<ffffffff8108ead5>] handle_IRQ_event+0x35/0x80
[ 355.833795] [<ffffffff810905b2>] handle_fasteoi_irq+0x82/0x100
[ 355.833798] [<ffffffff8100f175>] do_IRQ+0xb5/0x1b0
[ 355.833800] [<ffffffff8100d193>] ret_from_intr+0x0/0x2e
[ 355.833801] <EOI> <4>---[ end trace 5c74b30f4153ef48 ]---
[ 355.833807] Rebooting in 10 seconds..
Thanks,
Fengguang
---
wfg at hp ~% cat /sys/class/sound/hwC0D2/init_pin_configs
0x0a 0x0221401f
0x0b 0x02a19020
0x0c 0x01113014
0x0d 0x01114010
0x0e 0x01a19030
0x0f 0x01111012
0x10 0x01116011
0x11 0x40f000f0
0x12 0x40f000f0
0x13 0x40f000f0
0x14 0x40f000f0
0x22 0x40f000f0
0x23 0x01451140
0x24 0x40f000f0
wfg at hp ~% cat /sys/class/sound/hwC0D2/driver_pin_configs
wfg at hp ~% cat /sys/class/sound/hwC0D2/user_pin_configs
wfg at hp ~% head /proc/asound/card0/codec\#2
Codec: IDT 92HD73E1X5
Address: 2
Vendor Id: 0x111d7676
Subsystem Id: 0x80865002
Revision Id: 0x100202
No Modem Function Group found
Default PCM:
rates [0x5e0]: 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
root at hp /home/wfg# modprobe snd-hda-intel model=ref
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/init_pin_configs [ 1 ] :-(
0x0a 0x0221401f
0x0b 0x02a19020
0x0c 0x01113014
0x0d 0x01114010
0x0e 0x01a19030
0x0f 0x01111012
0x10 0x01116011
0x11 0x40f000f0
0x12 0x40f000f0
0x13 0x40f000f0
0x14 0x40f000f0
0x22 0x40f000f0
0x23 0x01451140
0x24 0x40f000f0
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/driver_pin_configs
0x0a 0x02214030
0x0b 0x02a19040
0x0c 0x01a19020
0x0d 0x02214030
0x0e 0x0181302e
0x0f 0x01014010
0x10 0x01014020
0x11 0x01014030
0x12 0x02319040
0x13 0x90a000f0
0x14 0x90a000f0
0x22 0x01452050
0x23 0x01452050
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/user_pin_configs
root at hp /home/wfg# echo 0x0a 0x02214030 > /sys/class/sound/hwC0D2/user_pin_configs
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/user_pin_configs
0x0a 0x02214030
root at hp /home/wfg# echo 1 > /sys/class/sound/hwC0D2/reconfig
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/user_pin_configs
0x0a 0x02214030
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/driver_pin_configs
0x0a 0x02214030
0x0b 0x02a19040
0x0c 0x01a19020
0x0d 0x02214030
0x0e 0x0181302e
0x0f 0x01014010
0x10 0x01014020
0x11 0x01014030
0x12 0x02319040
0x13 0x90a000f0
0x14 0x90a000f0
0x22 0x01452050
0x23 0x01452050
root at hp /home/wfg# cat /sys/class/sound/hwC0D2/init_pin_configs
0x0a 0x0221401f
0x0b 0x02a19020
0x0c 0x01113014
0x0d 0x01114010
0x0e 0x01a19030
0x0f 0x01111012
0x10 0x01116011
0x11 0x40f000f0
0x12 0x40f000f0
0x13 0x40f000f0
0x14 0x40f000f0
0x22 0x40f000f0
0x23 0x01451140
0x24 0x40f000f0
root at hp /home/wfg# rmmod snd_hda_intel snd_hda_codec_intelhdmi snd_hda_codec_idt snd_hda_codec
root at hp /home/wfg# modprobe snd-hda-intel
root at hp /home/wfg# echo 0x0c 0x01813021 > /sys/class/sound/hwC0D2/user_pin_configs
root at hp /home/wfg# echo 1 > /sys/class/sound/hwC0D2/reconfig
root at hp /home/wfg# alsamixer
More information about the Alsa-devel
mailing list