å?¨ 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 at 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