在 2018/7/13 16:46, Takashi Iwai 写道:
On Fri, 13 Jul 2018 10:06:02 +0200, Jim Qu wrote:
On modern laptop, there are more and more platforms have two GPUs, and each of them maybe have audio codec for HDMP/DP output. For some dGPU which is no output, audio codec usually is disabled.
In currect HDA audio driver, it will set all codec as VGA_SWITCHEROO_DIS, the audio which is binded to UMA will be suspended if user use debugfs to contorl power
In HDA driver side, it is difficult to know which GPU the audio has binded to. So set the bound gpu pci dev to vgaswitchroo, the correct audio id will be set in vgaswitchreoo enable function.
Signed-off-by: Jim Qu Jim.Qu@amd.com
The idea looks good to me. Just a nitpick:
@@ -1319,15 +1319,16 @@ static const struct vga_switcheroo_client_ops azx_vs_ops = { static int register_vga_switcheroo(struct azx *chip) { struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
struct pci_dev * p; int err;
if (!hda->use_vga_switcheroo) return 0;
- /* FIXME: currently only handling DIS controller
* is there any machine with two switchable HDMI audio controllers?
*/
- err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops,
VGA_SWITCHEROO_DIS);
- p = get_bound_vga(chip->pci);
- err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops, p);
- if (p)
pci_dev_put(p);
Passing a NULL vga_dev won't work, so the NULL check after calling vga_switcheroo_register_audio_client() is moot. If any, it should be checked before that.
The hda->use_vga_switcheroo is set to 1 in init_vga_switcheroo() if bound vga pci dev is not NULL. Since the hda->use_vga_switcheroo is checked at beginning of the function. so the p which pass into vga_switcheroo_register_audio_client() is constant valid value.
Thanks JimQu
thanks,
Takashi