[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