> Good to hear.
> Dave, is it OK to apply the patch below through sound tree?

ack below,
>
>
> thanks,
>
> Takashi
>
> ---
> From: Takashi Iwai <ti...@suse.de>
> 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 <jvpe...@web.de>

Acked-by: Dave Airlie <airl...@redhat.com>

> Signed-off-by: Takashi Iwai <ti...@suse.de>
> ---
>  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-de...@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to