> Good to hear. > Dave, is it OK to apply the patch below through sound tree? ack below, > > > thanks, > > Takashi > > --- > From: Takashi Iwai <tiwai@xxxxxxx> > Subject: [PATCH] vga_switcheroo: Enable/disable audio clients at the right time > > The audio clients have to be disabled before disabling the VGA and > switching. Similarly, enabling the audio client should be done at > last. Otherwise the audio-side operation stalls, eventually leading > to Oops or lockups. > > Tested-by: Jörg-Volker Peetz <jvpeetz@xxxxxx> Acked-by: Dave Airlie <airlied@xxxxxxxxxx> > Signed-off-by: Takashi Iwai <tiwai@xxxxxxx> > --- > drivers/gpu/vga/vga_switcheroo.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c > index 38f9534..e24ad99 100644 > --- a/drivers/gpu/vga/vga_switcheroo.c > +++ b/drivers/gpu/vga/vga_switcheroo.c > @@ -291,8 +291,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; > } > > @@ -308,6 +306,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; > @@ -321,11 +321,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; > } > @@ -371,8 +371,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); > } > @@ -381,10 +382,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; > } > -- > 1.7.10.4 > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@xxxxxxxxxxxxxxxx > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel