[alsa-devel] [PATCH 0/2] HD-audio HDMI regression fixes with VGA-switcheroo

Dave Airlie airlied at gmail.com
Sat Jun 9 00:57:20 PDT 2012


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

ack below,
>
>
> thanks,
>
> Takashi
>
> ---
> From: Takashi Iwai <tiwai at 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 <jvpeetz at web.de>

Acked-by: Dave Airlie <airlied at redhat.com>

> Signed-off-by: Takashi Iwai <tiwai at 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-devel at alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel


More information about the dri-devel mailing list