From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lukas Wunner Subject: Re: [PATCH 1/2] vga_switcheroo: add power support for windows 10 machines. Date: Wed, 9 Mar 2016 15:33:36 +0100 Message-ID: <20160309143336.GA26158@wunner.de> References: <1457504045-12738-1-git-send-email-airlied@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1457504045-12738-1-git-send-email-airlied@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Dave Airlie Cc: linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-pm@vger.kernel.org List-Id: linux-acpi@vger.kernel.org SGkgRGF2ZSwKCk9uIFdlZCwgTWFyIDA5LCAyMDE2IGF0IDA0OjE0OjA0UE0gKzEwMDAsIERhdmUg QWlybGllIHdyb3RlOgo+IEZyb206IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4g Cj4gV2luZG93cyAxMCBzZWVtcyB0byBoYXZlIHN0YW5kYXJkaXNlZCBwb3dlciBjb250cm9sIGZv ciB0aGUKPiBvcHRpbXVzL3Bvd2VyeHByZXNzIGxhcHRvcHMgdXNpbmcgUFIzIHBvd2VyIHJlc291 cmNlIGhvb2tzLgoKV2hhdCBoYXBwZW5lZCB0byB0aGUgT3B0aW11cyBEU00sIGRvZXMgdGhpcyBz dGlsbCB3b3JrPyBJZiBub3QsCmVjaG9pbmcgT0ZGIHRvIHRoZSB2Z2Fzd2l0Y2hlcm9vIHN5c2Zz IGZpbGUgd29uJ3QgcG93ZXIgZG93biB0aGUKR1BVIG5vdywgcmlnaHQ/IChJZiBydW50aW1lIHBt IGlzIGRpc2FibGVkIGluIG5vdXZlYXUuKQoKPiBJJ20gbm90IHN1cmUgdGhpcyBpcyBkZWZpbml0 ZWx5IHRoZSBjb3JyZWN0IHBsYWNlIHRvIGJlCj4gZG9pbmcgdGhpcywgYnV0IGl0IHdvcmtzIGZv ciBtZSBoZXJlLgoKSG93IGFib3V0IGltcGxlbWVudGluZyBhbiBhZGRpdGlvbmFsIHZnYV9zd2l0 Y2hlcm9vIGhhbmRsZXIgc29tZXdoZXJlCmluIGRyaXZlcnMvYWNwaS8sIHdoaWNoIGxvb2tzIGZv ciB0aGUgUFIzIGhvb2tzIGFuZCByZWdpc3RlcnMgd2l0aAp2Z2Ffc3dpdGNoZXJvbyBpZiBmb3Vu ZC4gVGhlIC0+cG93ZXJfc3RhdGUgY2FsbGJhY2sgb2YgdGhhdCBoYW5kbGVyCndvdWxkIHRoZW4g aW52b2tlIGFjcGlfZGV2aWNlX3NldF9wb3dlcigpLgoKVGhlIEFDUEkgYnVzIGlzIHNjYW5uZWQg aW4gdGhlIHN1YnN5c19pbml0Y2FsbCBzZWN0aW9uLCBtdWNoIGVhcmxpZXIKdGhhbiBub3V2ZWF1 IGlzIGxvYWRlZCAoaW4gdGhlIGRldmljZV9pbml0Y2FsbCBzZWN0aW9uKS4gU28gdGhlIEFDUEkK dmdhX3N3aXRjaGVyb28gaGFuZGxlciBjb3VsZCByZWdpc3RlciBiZWZvcmUgdGhlIG5vdXZlYXUg RFNNIGhhbmRsZXIKYW5kIHRoZXJlZm9yZSB3b3VsZCBhbHdheXMgaGF2ZSBhIGhpZ2hlciBwcmVj ZWRlbmNlLgoKSW4gYW55IGNhc2UgdGhpcyBwYXRjaCBzaG91bGQgYmUgYW1lbmRlZCB3aXRoIGtl cm5lbGRvYyBmb3IKdmdhX3N3aXRjaGVyb29faW5pdF9wYXJlbnRfcHIzX29wcygpLCBJJ3ZlIHNw ZW50IGNvbnNpZGVyYWJsZSB0aW1lCmxhc3QgeWVhciB0byBkb2N1bWVudCBldmVyeXRoaW5nIGFu ZCBraW5kbHkgYXNrIHRoYXQgdGhpcyB3YXRlciBub3QKYmUgbXVkZGllZCBhZ2Fpbi4gOy0pCgpP bmUgc21hbGwgbml0LCB0aGUgaGVhZGVycyBhcmUgc29ydGVkIGFscGhhYmV0aWNhbGx5IHlldCBh Y3BpLmggaXMKYWRkZWQgYXQgdGhlIGVuZC4KClRoYW5rcywKCkx1a2FzCgo+IAo+IFRoZSBBQ1BJ IGRldmljZSBmb3IgdGhlIEdQVSBJIGhhdmUgaXMgXF9TQl8uUENJMC5QRUdfLlZJRF8KPiBidXQg dGhlIHBvd2VyIHJlc291cmNlIGhvb2tzIGFyZSBvbiBcX1NCXy5QQ0kwLlBFR18sIHNvCj4gdGhp cyBwYXRjaCBjcmVhdGVzIGEgbmV3IHBvd2VyIGRvbWFpbiB0byB0dXJuIHRoZSBHUFUKPiBkZXZp Y2UgcGFyZW50IG9mZiB1c2luZyBzdGFuZGFyZCBBQ1BJIGNhbGxzLgo+IAo+IFNpZ25lZC1vZmYt Ynk6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1 L3ZnYS92Z2Ffc3dpdGNoZXJvby5jIHwgNTQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrLQo+ICBpbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmggICB8ICAzICsrLQo+ ICAyIGZpbGVzIGNoYW5nZWQsIDU1IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jIGIvZHJpdmVycy9n cHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKPiBpbmRleCA2NjVhYjlmLi5iZTMyY2IyIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L3ZnYS92Z2Ffc3dpdGNoZXJvby5jCj4gKysrIGIvZHJpdmVycy9n cHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKPiBAQCAtNDIsNyArNDIsNyBAQAo+ICAjaW5jbHVkZSA8 bGludXgvdWFjY2Vzcy5oPgo+ICAjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+Cj4gICNpbmNsdWRl IDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgo+IC0KPiArI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4K PiAgLyoqCj4gICAqIERPQzogT3ZlcnZpZXcKPiAgICoKPiBAQCAtOTk3LDMgKzk5Nyw1NSBAQCB2 Z2Ffc3dpdGNoZXJvb19pbml0X2RvbWFpbl9wbV9vcHRpbXVzX2hkbWlfYXVkaW8oc3RydWN0IGRl dmljZSAqZGV2LAo+ICAJcmV0dXJuIC1FSU5WQUw7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTCh2Z2Ff c3dpdGNoZXJvb19pbml0X2RvbWFpbl9wbV9vcHRpbXVzX2hkbWlfYXVkaW8pOwo+ICsKPiArLyog V2l0aCBXaW5kb3dzIDEwIHRoZSBydW50aW1lIHN1c3BlbmQvcmVzdW1lIGNhbiB1c2UgcG93ZXIK PiArICAgcmVzb3VyY2VzIG9uIHRoZSBwYXJlbnQgZGV2aWNlICovCj4gK3N0YXRpYyBpbnQgdmdh X2FjcGlfc3dpdGNoZXJvb19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQo+ICt7 Cj4gKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKPiArCWludCByZXQ7 Cj4gKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmFkZXY7Cj4gKwo+ICsJcmV0ID0gZGV2LT5idXMtPnBt LT5ydW50aW1lX3N1c3BlbmQoZGV2KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiAr Cj4gKwlyZXQgPSBhY3BpX2J1c19nZXRfZGV2aWNlKEFDUElfSEFORExFKCZwZGV2LT5kZXYpLCAm YWRldik7Cj4gKwlpZiAoIXJldCkKPiArCQlhY3BpX2RldmljZV9zZXRfcG93ZXIoYWRldi0+cGFy ZW50LCBBQ1BJX1NUQVRFX0QzX0NPTEQpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgdmdhX2FjcGlfc3dpdGNoZXJvb19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpk ZXYpCj4gK3sKPiArCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwo+ICsJ c3RydWN0IGFjcGlfZGV2aWNlICphZGV2Owo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBhY3Bp X2J1c19nZXRfZGV2aWNlKEFDUElfSEFORExFKCZwZGV2LT5kZXYpLCAmYWRldik7Cj4gKwlpZiAo IXJldCkKPiArCQlhY3BpX2RldmljZV9zZXRfcG93ZXIoYWRldi0+cGFyZW50LCBBQ1BJX1NUQVRF X0QwKTsKPiArCXJldCA9IGRldi0+YnVzLT5wbS0+cnVudGltZV9yZXN1bWUoZGV2KTsKPiArCWlm IChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAraW50 IHZnYV9zd2l0Y2hlcm9vX2luaXRfcGFyZW50X3ByM19vcHMoc3RydWN0IGRldmljZSAqZGV2LAo+ ICsJCQkJICAgICAgIHN0cnVjdCBkZXZfcG1fZG9tYWluICpkb21haW4pCj4gKwo+ICt7Cj4gKwkv KiBjb3B5IG92ZXIgYWxsIHRoZSBidXMgdmVyc2lvbnMgKi8KPiArCWlmIChkZXYtPmJ1cyAmJiBk ZXYtPmJ1cy0+cG0pIHsKPiArCQlkb21haW4tPm9wcyA9ICpkZXYtPmJ1cy0+cG07Cj4gKwkJZG9t YWluLT5vcHMucnVudGltZV9zdXNwZW5kID0gdmdhX2FjcGlfc3dpdGNoZXJvb19ydW50aW1lX3N1 c3BlbmQ7Cj4gKwkJZG9tYWluLT5vcHMucnVudGltZV9yZXN1bWUgPSB2Z2FfYWNwaV9zd2l0Y2hl cm9vX3J1bnRpbWVfcmVzdW1lOwo+ICsKPiArCQlkZXZfcG1fZG9tYWluX3NldChkZXYsIGRvbWFp bik7Cj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwlkZXZfcG1fZG9tYWluX3NldChkZXYsIE5VTEwp Owo+ICsJcmV0dXJuIC1FSU5WQUw7Cj4gK30KPiArRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJv b19pbml0X3BhcmVudF9wcjNfb3BzKTsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92Z2Ff c3dpdGNoZXJvby5oIGIvaW5jbHVkZS9saW51eC92Z2Ffc3dpdGNoZXJvby5oCj4gaW5kZXggNjll MWQ0YTEuLjVjZTBjYmUgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9saW51eC92Z2Ffc3dpdGNoZXJv by5oCj4gKysrIGIvaW5jbHVkZS9saW51eC92Z2Ffc3dpdGNoZXJvby5oCj4gQEAgLTE0NCw2ICsx NDQsNyBAQCB2b2lkIHZnYV9zd2l0Y2hlcm9vX3NldF9keW5hbWljX3N3aXRjaChzdHJ1Y3QgcGNp X2RldiAqcGRldiwgZW51bSB2Z2Ffc3dpdGNoZXJvbwo+ICBpbnQgdmdhX3N3aXRjaGVyb29faW5p dF9kb21haW5fcG1fb3BzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wbV9kb21haW4g KmRvbWFpbik7Cj4gIHZvaWQgdmdhX3N3aXRjaGVyb29fZmluaV9kb21haW5fcG1fb3BzKHN0cnVj dCBkZXZpY2UgKmRldik7Cj4gIGludCB2Z2Ffc3dpdGNoZXJvb19pbml0X2RvbWFpbl9wbV9vcHRp bXVzX2hkbWlfYXVkaW8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BtX2RvbWFpbiAq ZG9tYWluKTsKPiAraW50IHZnYV9zd2l0Y2hlcm9vX2luaXRfcGFyZW50X3ByM19vcHMoc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BtX2RvbWFpbiAqZG9tYWluKTsKPiAgI2Vsc2UKPiAg Cj4gIHN0YXRpYyBpbmxpbmUgdm9pZCB2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChz dHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQo+IEBAIC0xNjMsNiArMTY0LDYgQEAgc3RhdGljIGlubGlu ZSB2b2lkIHZnYV9zd2l0Y2hlcm9vX3NldF9keW5hbWljX3N3aXRjaChzdHJ1Y3QgcGNpX2RldiAq cGRldiwgZW51bQo+ICBzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19pbml0X2RvbWFp bl9wbV9vcHMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BtX2RvbWFpbiAqZG9tYWlu KSB7IHJldHVybiAtRUlOVkFMOyB9Cj4gIHN0YXRpYyBpbmxpbmUgdm9pZCB2Z2Ffc3dpdGNoZXJv b19maW5pX2RvbWFpbl9wbV9vcHMoc3RydWN0IGRldmljZSAqZGV2KSB7fQo+ICBzdGF0aWMgaW5s aW5lIGludCB2Z2Ffc3dpdGNoZXJvb19pbml0X2RvbWFpbl9wbV9vcHRpbXVzX2hkbWlfYXVkaW8o c3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3BtX2RvbWFpbiAqZG9tYWluKSB7IHJldHVy biAtRUlOVkFMOyB9Cj4gLQo+ICtzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19pbml0 X3BhcmVudF9wcjNfb3BzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldl9wbV9kb21haW4g KmRvbWFpbikgeyByZXR1cm4gLUVJTlZBTDsgfQo+ICAjZW5kaWYKPiAgI2VuZGlmIC8qIF9MSU5V WF9WR0FfU1dJVENIRVJPT19IXyAqLwo+IC0tIAo+IDIuNS4wCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRl dmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932913AbcCIOcm (ORCPT ); Wed, 9 Mar 2016 09:32:42 -0500 Received: from mailout1.hostsharing.net ([83.223.95.204]:38302 "EHLO mailout1.hostsharing.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932879AbcCIOce (ORCPT ); Wed, 9 Mar 2016 09:32:34 -0500 Date: Wed, 9 Mar 2016 15:33:36 +0100 From: Lukas Wunner To: Dave Airlie Cc: dri-devel@lists.freedesktop.org, linux-pm@vger.kernel.org, linux-acpi@vger.kernel.org, linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 1/2] vga_switcheroo: add power support for windows 10 machines. Message-ID: <20160309143336.GA26158@wunner.de> References: <1457504045-12738-1-git-send-email-airlied@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1457504045-12738-1-git-send-email-airlied@gmail.com> User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Dave, On Wed, Mar 09, 2016 at 04:14:04PM +1000, Dave Airlie wrote: > From: Dave Airlie > > Windows 10 seems to have standardised power control for the > optimus/powerxpress laptops using PR3 power resource hooks. What happened to the Optimus DSM, does this still work? If not, echoing OFF to the vgaswitcheroo sysfs file won't power down the GPU now, right? (If runtime pm is disabled in nouveau.) > I'm not sure this is definitely the correct place to be > doing this, but it works for me here. How about implementing an additional vga_switcheroo handler somewhere in drivers/acpi/, which looks for the PR3 hooks and registers with vga_switcheroo if found. The ->power_state callback of that handler would then invoke acpi_device_set_power(). The ACPI bus is scanned in the subsys_initcall section, much earlier than nouveau is loaded (in the device_initcall section). So the ACPI vga_switcheroo handler could register before the nouveau DSM handler and therefore would always have a higher precedence. In any case this patch should be amended with kerneldoc for vga_switcheroo_init_parent_pr3_ops(), I've spent considerable time last year to document everything and kindly ask that this water not be muddied again. ;-) One small nit, the headers are sorted alphabetically yet acpi.h is added at the end. Thanks, Lukas > > The ACPI device for the GPU I have is \_SB_.PCI0.PEG_.VID_ > but the power resource hooks are on \_SB_.PCI0.PEG_, so > this patch creates a new power domain to turn the GPU > device parent off using standard ACPI calls. > > Signed-off-by: Dave Airlie > --- > drivers/gpu/vga/vga_switcheroo.c | 54 +++++++++++++++++++++++++++++++++++++++- > include/linux/vga_switcheroo.h | 3 ++- > 2 files changed, 55 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/vga/vga_switcheroo.c b/drivers/gpu/vga/vga_switcheroo.c > index 665ab9f..be32cb2 100644 > --- a/drivers/gpu/vga/vga_switcheroo.c > +++ b/drivers/gpu/vga/vga_switcheroo.c > @@ -42,7 +42,7 @@ > #include > #include > #include > - > +#include > /** > * DOC: Overview > * > @@ -997,3 +997,55 @@ vga_switcheroo_init_domain_pm_optimus_hdmi_audio(struct device *dev, > return -EINVAL; > } > EXPORT_SYMBOL(vga_switcheroo_init_domain_pm_optimus_hdmi_audio); > + > +/* With Windows 10 the runtime suspend/resume can use power > + resources on the parent device */ > +static int vga_acpi_switcheroo_runtime_suspend(struct device *dev) > +{ > + struct pci_dev *pdev = to_pci_dev(dev); > + int ret; > + struct acpi_device *adev; > + > + ret = dev->bus->pm->runtime_suspend(dev); > + if (ret) > + return ret; > + > + ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev); > + if (!ret) > + acpi_device_set_power(adev->parent, ACPI_STATE_D3_COLD); > + return 0; > +} > + > +static int vga_acpi_switcheroo_runtime_resume(struct device *dev) > +{ > + struct pci_dev *pdev = to_pci_dev(dev); > + struct acpi_device *adev; > + int ret; > + > + ret = acpi_bus_get_device(ACPI_HANDLE(&pdev->dev), &adev); > + if (!ret) > + acpi_device_set_power(adev->parent, ACPI_STATE_D0); > + ret = dev->bus->pm->runtime_resume(dev); > + if (ret) > + return ret; > + > + return 0; > +} > + > +int vga_switcheroo_init_parent_pr3_ops(struct device *dev, > + struct dev_pm_domain *domain) > + > +{ > + /* copy over all the bus versions */ > + if (dev->bus && dev->bus->pm) { > + domain->ops = *dev->bus->pm; > + domain->ops.runtime_suspend = vga_acpi_switcheroo_runtime_suspend; > + domain->ops.runtime_resume = vga_acpi_switcheroo_runtime_resume; > + > + dev_pm_domain_set(dev, domain); > + return 0; > + } > + dev_pm_domain_set(dev, NULL); > + return -EINVAL; > +} > +EXPORT_SYMBOL(vga_switcheroo_init_parent_pr3_ops); > diff --git a/include/linux/vga_switcheroo.h b/include/linux/vga_switcheroo.h > index 69e1d4a1..5ce0cbe 100644 > --- a/include/linux/vga_switcheroo.h > +++ b/include/linux/vga_switcheroo.h > @@ -144,6 +144,7 @@ void vga_switcheroo_set_dynamic_switch(struct pci_dev *pdev, enum vga_switcheroo > int vga_switcheroo_init_domain_pm_ops(struct device *dev, struct dev_pm_domain *domain); > void vga_switcheroo_fini_domain_pm_ops(struct device *dev); > int vga_switcheroo_init_domain_pm_optimus_hdmi_audio(struct device *dev, struct dev_pm_domain *domain); > +int vga_switcheroo_init_parent_pr3_ops(struct device *dev, struct dev_pm_domain *domain); > #else > > static inline void vga_switcheroo_unregister_client(struct pci_dev *dev) {} > @@ -163,6 +164,6 @@ static inline void vga_switcheroo_set_dynamic_switch(struct pci_dev *pdev, enum > static inline int vga_switcheroo_init_domain_pm_ops(struct device *dev, struct dev_pm_domain *domain) { return -EINVAL; } > static inline void vga_switcheroo_fini_domain_pm_ops(struct device *dev) {} > static inline int vga_switcheroo_init_domain_pm_optimus_hdmi_audio(struct device *dev, struct dev_pm_domain *domain) { return -EINVAL; } > - > +static inline int vga_switcheroo_init_parent_pr3_ops(struct device *dev, struct dev_pm_domain *domain) { return -EINVAL; } > #endif > #endif /* _LINUX_VGA_SWITCHEROO_H_ */ > -- > 2.5.0