[alsa-devel] Problem with AC97 and WM9714 on S3C6410
Hi.
I'm working with mini6410 devkit/demoboard. Itry to move forward from old kernel to last samsung kernel from git. I run into interesting problem with ALSA and WM9714 codec. On kernel boot I see some activity on AC97 bus, but then BCLK and SYNC stops. As i figure out clock stops after write to WM9714 register 0x00. As I understand it's a reset comand. But it brokes all communication. No blayback or control regiter read/write posible after. And there is no reset or warm_reset commands after it. If i filter out all writes to register 0x00 in samsung AC97 driver, everything seems to work corect. But it's a dirty fix. I use dump_stack() to collect some aditional info. That what i got: Try to reset codec! (write at 0x00) [<c0014978>] (unwind_backtrace+0x0/0xf4) from [<c035caf0>] (ac97_write+0x4c/0x64) [<c035caf0>] (ac97_write+0x4c/0x64) from [<c034d00c>] (snd_soc_write+0xc/0x10) [<c034d00c>] (snd_soc_write+0xc/0x10) from [<c035355c>] (soc_widget_update_bits_locked+0x114/0x190) [<c035355c>] (soc_widget_update_bits_locked+0x114/0x190) from [<c0353830>] (dapm_seq_run_coalesced+0x114/0x16c) [<c0353830>] (dapm_seq_run_coalesced+0x114/0x16c) from [<c0353b88>] (dapm_seq_run+0x300/0x4a0) [<c0353b88>] (dapm_seq_run+0x300/0x4a0) from [<c0354be0>] (dapm_power_widgets+0x404/0x600) [<c0354be0>] (dapm_power_widgets+0x404/0x600) from [<c03577ec>] (snd_soc_dapm_new_widgets+0x2ac/0x6ac) [<c03577ec>] (snd_soc_dapm_new_widgets+0x2ac/0x6ac) from [<c034f940>] (soc_post_component_init+0x44/0x27c) [<c034f940>] (soc_post_component_init+0x44/0x27c) from [<c03513f4>] (snd_soc_register_card+0xc44/0x1a00) [<c03513f4>] (snd_soc_register_card+0xc44/0x1a00) from [<c03521e8>] (soc_probe+0x38/0x64) [<c03521e8>] (soc_probe+0x38/0x64) from [<c025f9d8>] (platform_drv_probe+0x18/0x1c) [<c025f9d8>] (platform_drv_probe+0x18/0x1c) from [<c025e518>] (driver_probe_device+0x78/0x1fc) [<c025e518>] (driver_probe_device+0x78/0x1fc) from [<c025cd9c>] (bus_for_each_drv+0x60/0x8c) [<c025cd9c>] (bus_for_each_drv+0x60/0x8c) from [<c025e810>] (device_attach+0x80/0x98) [<c025e810>] (device_attach+0x80/0x98) from [<c025d8bc>] (bus_probe_device+0x84/0xac) [<c025d8bc>] (bus_probe_device+0x84/0xac) from [<c025c6ec>] (device_add+0x5b0/0x67c) [<c025c6ec>] (device_add+0x5b0/0x67c) from [<c025ffa8>] (platform_device_add+0xf4/0x20c) [<c025ffa8>] (platform_device_add+0xf4/0x20c) from [<c060b3a4>] (mini6410_init+0x60/0xa0) [<c060b3a4>] (mini6410_init+0x60/0xa0) from [<c00085d0>] (do_one_initcall+0x34/0x178) [<c00085d0>] (do_one_initcall+0x34/0x178) from [<c05f3310>] (kernel_init+0xe0/0x1ac) [<c05f3310>] (kernel_init+0xe0/0x1ac) from [<c000f848>] (kernel_thread_exit+0x0/0x8)
I'm begginer in kernel programing and have no enouth experience to figure what's happening. Can any one help with this problem?
Thank you.
participants (1)
-
Andrey Gusakov