At Fri, 08 Jun 2012 17:45:17 +0200, Jörg-Volker Peetz wrote: > > Hello Takashi, > > Takashi Iwai wrote, on 06/08/12 15:03: > > At Fri, 08 Jun 2012 13:26:57 +0200, > > Jörg-Volker Peetz wrote: > >> > >> Takashi Iwai wrote, on 06/07/12 12:15: > >>> Hi, > >>> > >>> this is a series of patches to fix the regressions of HD-audio HDMI > >>> on D-GPUs in 3.5-rc1 due to the support of VGA-switcheroo audio clients. > >>> > >>> The first patch adds a new helper function to vga-switcheroo and the > >>> second just uses that instead of an open code. > >>> > >>> Dave, if the first patch is OK, I'm going to apply it though sound tree. > >>> Let me know if any problem is found. > >>> > >>> Joerg, could you check whether this doesn't break your setup, too? > >>> > >>> > >>> thanks, > >>> > >>> Takashi > >> > >> Hello Takashi, > >> > >> I applied both your patches on 3.5-rc1. With this kernel I made three tests. > >> 1) After booting I switched off the discrete GPU via vga_switcheroo. > >> Then ca. 210 times the message > >> > >> hda-intel: spurious response 0x0:0x0, last cmd=0x170503 > >> > >> appears on the console and in the logs. > >> Starting X and using the built-in USB web-cam work, as well as sound with > >> mplayer2 works. > >> > >> 2) After booting I switched to the discrete GPU via > >> > >> echo -n DDIS > /sys/kernel/debugfs/vgaswitcheroo/switch > >> > >> Then I started X via startx. The desktop screen appears but the system > >> freezes. No reaction on keyboard or touchpad input. The computer is not > >> reachable via ethernet wire. > > > > Hm, these issues aren't seen on 3.5-rc1 before my patches? > > If so, we need to fix now. > > > No, these issues aren't seen on 3.5-rc1 without your patches. I'm able to start > X with the discrete GPU in use, direct rendering and the built-in USB camera work. OK, it means that the switching from the audio-ON to audio-OFF doesn't work. Could you try the patch below in additon? > Probably unrelated: in both cases I'm unable to lower the screen brightness from > highest value. Without your patches it appears a warning: > > ACPI Warning: _BQC returned an invalid level (20120320/video-472) Hmm, I see no relation between this and the HDMI audio part. It's of course possible that some non-working state gives side-effects... thanks, Takashi --- diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c index eb4f64f..5b3c7d1 100644 --- a/drivers/gpu/vga/vga_switcheroo.c +++ b/drivers/gpu/vga/vga_switcheroo.c @@ -304,8 +304,6 @@ static int vga_switchto_stage1(struct vga_switcheroo_client *new_client) vga_switchon(new_client); vga_set_default_device(new_client->pdev); - set_audio_state(new_client->id, VGA_SWITCHEROO_ON); - return 0; } @@ -321,6 +319,8 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client) active->active = false; + set_audio_state(active->id, VGA_SWITCHEROO_OFF); + if (new_client->fb_info) { struct fb_event event; event.info = new_client->fb_info; @@ -334,11 +334,11 @@ static int vga_switchto_stage2(struct vga_switcheroo_client *new_client) if (new_client->ops->reprobe) new_client->ops->reprobe(new_client->pdev); - set_audio_state(active->id, VGA_SWITCHEROO_OFF); - if (active->pwr_state == VGA_SWITCHEROO_ON) vga_switchoff(active); + set_audio_state(new_client->id, VGA_SWITCHEROO_ON); + new_client->active = true; return 0; } @@ -384,8 +384,9 @@ vga_switcheroo_debugfs_write(struct file *filp, const char __user *ubuf, /* pwr off the device not in use */ if (strncmp(usercmd, "OFF", 3) == 0) { list_for_each_entry(client, &vgasr_priv.clients, list) { - if (client->active) + if (client->active || client_is_audio(client)) continue; + set_audio_state(client->id, VGA_SWITCHEROO_OFF); if (client->pwr_state == VGA_SWITCHEROO_ON) vga_switchoff(client); } @@ -394,10 +395,11 @@ vga_switcheroo_debugfs_write(struct file *filp, const char __user *ubuf, /* pwr on the device not in use */ if (strncmp(usercmd, "ON", 2) == 0) { list_for_each_entry(client, &vgasr_priv.clients, list) { - if (client->active) + if (client->active || client_is_audio(client)) continue; if (client->pwr_state == VGA_SWITCHEROO_OFF) vga_switchon(client); + set_audio_state(client->id, VGA_SWITCHEROO_ON); } goto out; } _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel