From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode Date: Thu, 27 Oct 2016 10:52:12 -0400 Message-ID: <1477579932.3666.4.camel@redhat.com> References: <1477433543-14915-1-git-send-email-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1477433543-14915-1-git-send-email-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: ibm-acpi-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org To: ibm-acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org Cc: Darren Hart , Henrique de Moraes Holschuh , linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, platform-driver-x86-u79uwXL29TY76Z2rM5mHXA@public.gmane.org List-Id: platform-driver-x86.vger.kernel.org YXMgd2VsbCwgY2FuIHNvbWVvbmUgY29uZmlybSB0aGlzIHBhdGNoIG1hZGUgaXQgdG8gdGhlIGli bS1hY3BpLWRldmVsCmxpc3Q/IFdoZW4gSSBvcmlnaW5hbGx5IHNlbnQgdGhpcyBJIHJlYWxpemVk IEkgd2Fzbid0IHN1YnNjcmliZWQgdG8gdGhlCmxpc3QsIHNvIEknbSBndWVzc2luZyBJIG1pZ2h0 IG5lZWQgdG8gcmVzZW5kLgoKT24gVHVlLCAyMDE2LTEwLTI1IGF0IDE4OjEyIC0wNDAwLCBMeXVk ZSB3cm90ZToKPiBGb3Igd2hhdGV2ZXIgcmVhc29uLCB0aGUgWDEgWW9nYSBkb2Vzbid0IHN1cHBv cnQgdGhlIG5vcm1hbCBtZXRob2Qgb2YKPiBxdWVyeWluZyBmb3IgdGFibGV0IG1vZGUuIEluc3Rl YWQgb2YgcHJvdmlkaW5nIHRoZSBNSEtHIG1ldGhvZCB1bmRlcgo+IHRoZQo+IGhvdGtleSBoYW5k bGUsIHdlJ3JlIGluc3RlYWQgZ2l2ZW4gdGhlIENNTUQgbWV0aG9kIHVuZGVyIHRoZSBFQwo+IGhh bmRsZS4KPiBWYWx1ZXMgb24gdGhpcyBoYW5kbGUgYXJlIGVpdGhlciAweDEsIGxhcHRvcCBtb2Rl LCBvciAweDYsIHRhYmxldAo+IG1vZGUuCj4gCj4gU2lnbmVkLW9mZi1ieTogTHl1ZGUgPGx5dWRl QHJlZGhhdC5jb20+Cj4gLS0tCj4gU28gSE9QRUZVTExZIEkgYWN0dWFsbHkgZGlkIHRoaXMgcmln aHQuIFRoZXJlIHdhcyBzb21lIGRpc2N1c3Npb24KPiBoZXJlCj4gcHJldmlvdXNseSBhYm91dCBz dXBwb3J0aW5nIHRoaXMsIGFuZCBpdCB3YXMgcHJldmlvdXNseSBtZW50aW9uZWQKPiB0aGF0IHRo ZSBJT1NUCj4gbWV0aG9kIHdhcyByZXNwb25zaWJsZSBmb3IgaG9sZGluZyB0aGUgY3VycmVudCB0 YWJsZXQgc3RhdHVzLgo+IEhvd2V2ZXIsIGl0Cj4gcmVhbGx5IGRvZXNuJ3Qgc2VlbSBsaWtlIHRo aXMgaXMgdGhlIGNhc2U6Cj4gCj4gwqDCoMKgwqBNZXRob2QgKF9RMkUsIDAsIE5vdFNlcmlhbGl6 ZWQpwqDCoC8vIF9ReHg6IEVDIFF1ZXJ5Cj4gwqDCoMKgwqB7Cj4gCUxvY2FsMCA9IFxfU0IuUENJ MC5MUEMuRUMuQ01NRAo+IAlJZiAoKExvY2FsMCAhPSAweDAwKSAmJiAoTG9jYWwwIDw9IDB4MDYp KQo+IAl7Cj4gCcKgwqDCoMKgSWYgKExvY2FsMCAhPSBcUE1NRCkKPiAJwqDCoMKgwqB7Cj4gCQlc UE1NRCA9IExvY2FsMAo+IAkJXF9TQi5QQ0kwLkxQQy5FQy5IS0VZLk1IS1EgKDB4NjBDMCkKPiAJ wqDCoMKgwqB9Cj4gCX0KPiAKPiAJSWYgKChMb2NhbDAgPT0gMHgwMCkgfHwgKExvY2FsMCA+PSAw eDA3KSkKPiAJewo+IAnCoMKgwqDCoExvY2FsMSA9IDB4MDEKPiAJfQo+IAlFbHNlSWYgKChMb2Nh bDAgPT0gMHgwMikgfHwgKExvY2FsMCA9PSAweDAzKSkKPiAJewo+IAnCoMKgwqDCoExvY2FsMSA9 IDB4MDIKPiAJfQo+IAlFbHNlCj4gCXsKPiAJwqDCoMKgwqBMb2NhbDEgPSAweDAzCj4gCX0KPiAK PiAJSWYgKExvY2FsMSAhPSBcTFZNRCkKPiAJewo+IAnCoMKgwqDCoFxMVk1EID0gTG9jYWwxCj4g CcKgwqDCoMKgU2xlZXAgKDB4MEEpCj4gCcKgwqDCoMKgXF9TQi5QQ0kwLkxQQy5FQy5IS0VZLk1I S1EgKDB4NjBGMCkKPiAJfQo+IMKgwqDCoMKgfQo+IAo+IElPU1Qgc2VlbXMgdG8gYmUgcHJlc2Vu dCBpbiB0aGUgZGVjb21waWxlZCBEU0RUIGZyb20gbXkgWW9nYSwgaG93ZXZlcgo+IGl0J3MKPiBx dWl0ZSBmYXIgZnJvbSB0aGUgc3BvdCB0aGF0IGFjdHVhbGx5IHNlbmRzIHRoZSAweDYwQzAgaG90 a2V5IGV2ZW50Lgo+IExldCBtZQo+IGtub3cgaWYgeW91IGd1eXMgd2FudCB0byB2ZXJpZnkgdGhp cyBhZ2FpbnN0IHRoZSBmdWxsIGRlY29tcGlsZWQgRFNEVAo+IGZvciB0aGlzCj4gbWFjaGluZS4K PiAKPiDCoGRyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyB8IDM2Cj4gKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tCj4gwqAxIGZpbGUgY2hhbmdlZCwgMzMgaW5z ZXJ0aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0 Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCj4gYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3Bh ZF9hY3BpLmMKPiBpbmRleCBiNjVjZTc1Li44MDgyZGM5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv cGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwo+ICsrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2 L3RoaW5rcGFkX2FjcGkuYwo+IEBAIC0xOTAsNiArMTkwLDkgQEAgZW51bSB0cGFjcGlfaGtleV9l dmVudF90IHsKPiDCoAlUUF9IS0VZX0VWX0xJRF9PUEVOCQk9IDB4NTAwMiwgLyogbGFwdG9wIGxp ZAo+IG9wZW5lZCAqLwo+IMKgCVRQX0hLRVlfRVZfVEFCTEVUX1RBQkxFVAk9IDB4NTAwOSwgLyog dGFibGV0IHN3aXZlbAo+IHVwICovCj4gwqAJVFBfSEtFWV9FVl9UQUJMRVRfTk9URUJPT0sJPSAw eDUwMGEsIC8qIHRhYmxldCBzd2l2ZWwKPiBkb3duICovCj4gKwlUUF9IS0VZX0VWX1RBQkxFVF9D SEFOR0VECT0gMHg2MGMwLCAvKiBYMSBZb2dhCj4gKDIwMTYpOgo+ICsJCQkJCQnCoMKgwqAqIGVu dGVyL2xlYXZlCj4gdGFibGV0IG1vZGUKPiArCQkJCQkJwqDCoMKgKi8KPiDCoAlUUF9IS0VZX0VW X1BFTl9JTlNFUlRFRAkJPSAweDUwMGIsIC8qIHRhYmxldAo+IHBlbiBpbnNlcnRlZCAqLwo+IMKg CVRQX0hLRVlfRVZfUEVOX1JFTU9WRUQJCT0gMHg1MDBjLCAvKiB0YWJsZXQKPiBwZW4gcmVtb3Zl ZCAqLwo+IMKgCVRQX0hLRVlfRVZfQlJHSFRfQ0hBTkdFRAk9IDB4NTAxMCwgLyogYmFja2xpZ2h0 Cj4gY29udHJvbCBldmVudCAqLwo+IEBAIC0zMDMsNiArMzA2LDcgQEAgc3RhdGljIHN0cnVjdCB7 Cj4gwqAJdTMyIGhvdGtleV9tYXNrOjE7Cj4gwqAJdTMyIGhvdGtleV93bHN3OjE7Cj4gwqAJdTMy IGhvdGtleV90YWJsZXQ6MTsKPiArCXUzMiBob3RrZXlfdGFibGV0X2NtbWQ6MTsKPiDCoAl1MzIg a2JkbGlnaHQ6MTsKPiDCoAl1MzIgbGlnaHQ6MTsKPiDCoAl1MzIgbGlnaHRfc3RhdHVzOjE7Cj4g QEAgLTIwNTksNiArMjA2Myw4IEBAIHN0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwKGNvbnN0 IGJvb2wKPiBtYXlfd2Fybik7Cj4gwqAKPiDCoC8qIEhLRVkuTUhLRygpIHJldHVybiBiaXRzICov Cj4gwqAjZGVmaW5lIFRQX0hPVEtFWV9UQUJMRVRfTUFTSyAoMSA8PCAzKQo+ICsvKiBUaGlua1Bh ZCBYMSBZb2dhICgyMDE2KSAqLwo+ICsjZGVmaW5lIFRQX0VDX0NNTURfVEFCTEVUX01PREUgMHg2 Cj4gwqAKPiDCoHN0YXRpYyBpbnQgaG90a2V5X2dldF93bHN3KHZvaWQpCj4gwqB7Cj4gQEAgLTIw ODMsMTAgKzIwODksMTggQEAgc3RhdGljIGludCBob3RrZXlfZ2V0X3RhYmxldF9tb2RlKGludAo+ ICpzdGF0dXMpCj4gwqB7Cj4gwqAJaW50IHM7Cj4gwqAKPiAtCWlmICghYWNwaV9ldmFsZihoa2V5 X2hhbmRsZSwgJnMsICJNSEtHIiwgImQiKSkKPiAtCQlyZXR1cm4gLUVJTzsKPiArCWlmICh0cF9m ZWF0dXJlcy5ob3RrZXlfdGFibGV0X2NtbWQpIHsKPiArCQlpZiAoIWFjcGlfZXZhbGYoZWNfaGFu ZGxlLCAmcywgIkNNTUQiLCAiZCIpKQo+ICsJCQlyZXR1cm4gLUVJTzsKPiArCj4gKwkJKnN0YXR1 cyA9IChzID09IFRQX0VDX0NNTURfVEFCTEVUX01PREUpOwo+ICsJfSBlbHNlIHsKPiArCQlpZiAo IWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsICZzLCAiTUhLRyIsICJkIikpCj4gKwkJCXJldHVybiAt RUlPOwo+ICsKPiArCQkqc3RhdHVzID0gKChzICYgVFBfSE9US0VZX1RBQkxFVF9NQVNLKSAhPSAw KTsKPiArCX0KPiDCoAo+IC0JKnN0YXR1cyA9ICgocyAmIFRQX0hPVEtFWV9UQUJMRVRfTUFTSykg IT0gMCk7Cj4gwqAJcmV0dXJuIDA7Cj4gwqB9Cj4gwqAKPiBAQCAtMzQ3NSw2ICszNDg5LDE4IEBA IHN0YXRpYyBpbnQgX19pbml0IGhvdGtleV9pbml0KHN0cnVjdAo+IGlibV9pbml0X3N0cnVjdCAq aWlibSkKPiDCoAkJCQkmZGV2X2F0dHJfaG90a2V5X3RhYmxldF9tb2RlLmF0dHIpOwo+IMKgCX0K PiDCoAo+ICsJLyogRm9yIFgxIFlvZ2EgKDIwMTYpICovCj4gKwlpZiAoIXJlcyAmJiBhY3BpX2V2 YWxmKGVjX2hhbmRsZSwgJnN0YXR1cywgIkNNTUQiLCAicWQiKSkgewo+ICsJCXRwX2ZlYXR1cmVz LmhvdGtleV90YWJsZXQgPSAxOwo+ICsJCXRwX2ZlYXR1cmVzLmhvdGtleV90YWJsZXRfY21tZCA9 IDE7Cj4gKwkJdGFibGV0c3dfc3RhdGUgPSAoc3RhdHVzID09IFRQX0VDX0NNTURfVEFCTEVUX01P REUpOwo+ICsKPiArCQlwcl9pbmZvKCJQb3NzaWJsZSB0YWJsZXQgbW9kZSBzd2l0Y2ggZm91bmQ7 IFRoaW5rUGFkCj4gaW4gJXMgbW9kZVxuIiwKPiArCQkJKHRhYmxldHN3X3N0YXRlKSA/ICJ0YWJs ZXQiIDogImxhcHRvcCIpOwo+ICsJCXJlcyA9IGFkZF90b19hdHRyX3NldChob3RrZXlfZGV2X2F0 dHJpYnV0ZXMsCj4gKwkJCQnCoMKgwqDCoMKgwqAmZGV2X2F0dHJfaG90a2V5X3RhYmxldF9tb2Rl LmEKPiB0dHIpOwo+ICsJfQo+ICsKPiDCoAlpZiAoIXJlcykKPiDCoAkJcmVzID0gcmVnaXN0ZXJf YXR0cl9zZXRfd2l0aF9zeXNmcygKPiDCoAkJCQlob3RrZXlfZGV2X2F0dHJpYnV0ZXMsCj4gQEAg LTM4OTksNiArMzkyNSwxMCBAQCBzdGF0aWMgYm9vbCBob3RrZXlfbm90aWZ5XzZ4eHgoY29uc3Qg dTMyIGhrZXksCj4gwqAJCSppZ25vcmVfYWNwaV9ldiA9IHRydWU7Cj4gwqAJCXJldHVybiB0cnVl Owo+IMKgCj4gKwljYXNlIFRQX0hLRVlfRVZfVEFCTEVUX0NIQU5HRUQ6Cj4gKwkJdHBhY3BpX2lu cHV0X3NlbmRfdGFibGV0c3coKTsKPiArCQlicmVhazsKPiArCj4gwqAJZGVmYXVsdDoKPiDCoAkJ cHJfd2FybigidW5rbm93biBwb3NzaWJsZSB0aGVybWFsIGFsYXJtIG9yIGtleWJvYXJkCj4gZXZl bnQgcmVjZWl2ZWRcbiIpOwo+IMKgCQlrbm93biA9IGZhbHNlOwoKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tClRoZSBDb21tYW5kIExpbmU6IFJlaW52ZW50ZWQgZm9yIE1vZGVybiBEZXZlbG9wZXJzCkRp ZCB0aGUgcmVzdXJnZW5jZSBvZiBDTEkgdG9vbGluZyBjYXRjaCB5b3UgYnkgc3VycHJpc2U/ClJl Y29ubmVjdCB3aXRoIHRoZSBjb21tYW5kIGxpbmUgYW5kIGJlY29tZSBtb3JlIHByb2R1Y3RpdmUu IApMZWFybiB0aGUgbmV3IC5ORVQgYW5kIEFTUC5ORVQgQ0xJLiBHZXQgeW91ciBmcmVlIGNvcHkh Cmh0dHA6Ly9zZG0ubGluay90ZWxlcmlrCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmlibS1hY3BpLWRldmVsIG1haWxpbmcgbGlzdAppYm0tYWNwaS1kZXZl bEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKaHR0cHM6Ly9saXN0cy5zb3VyY2Vmb3JnZS5uZXQvbGlz dHMvbGlzdGluZm8vaWJtLWFjcGktZGV2ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1034131AbcJ0Owt (ORCPT ); Thu, 27 Oct 2016 10:52:49 -0400 Received: from mx1.redhat.com ([209.132.183.28]:60380 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756168AbcJ0OwN (ORCPT ); Thu, 27 Oct 2016 10:52:13 -0400 Message-ID: <1477579932.3666.4.camel@redhat.com> Subject: Re: [PATCH] thinkpad_acpi: Add support for X1 Yoga (2016) Tablet Mode From: Lyude Paul To: ibm-acpi-devel@lists.sourceforge.net Cc: Henrique de Moraes Holschuh , Darren Hart , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Date: Thu, 27 Oct 2016 10:52:12 -0400 In-Reply-To: <1477433543-14915-1-git-send-email-lyude@redhat.com> References: <1477433543-14915-1-git-send-email-lyude@redhat.com> Organization: Red Hat Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 27 Oct 2016 14:52:13 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org as well, can someone confirm this patch made it to the ibm-acpi-devel list? When I originally sent this I realized I wasn't subscribed to the list, so I'm guessing I might need to resend. On Tue, 2016-10-25 at 18:12 -0400, Lyude wrote: > For whatever reason, the X1 Yoga doesn't support the normal method of > querying for tablet mode. Instead of providing the MHKG method under > the > hotkey handle, we're instead given the CMMD method under the EC > handle. > Values on this handle are either 0x1, laptop mode, or 0x6, tablet > mode. > > Signed-off-by: Lyude > --- > So HOPEFULLY I actually did this right. There was some discussion > here > previously about supporting this, and it was previously mentioned > that the IOST > method was responsible for holding the current tablet status. > However, it > really doesn't seem like this is the case: > >     Method (_Q2E, 0, NotSerialized)  // _Qxx: EC Query >     { > Local0 = \_SB.PCI0.LPC.EC.CMMD > If ((Local0 != 0x00) && (Local0 <= 0x06)) > { >     If (Local0 != \PMMD) >     { > \PMMD = Local0 > \_SB.PCI0.LPC.EC.HKEY.MHKQ (0x60C0) >     } > } > > If ((Local0 == 0x00) || (Local0 >= 0x07)) > { >     Local1 = 0x01 > } > ElseIf ((Local0 == 0x02) || (Local0 == 0x03)) > { >     Local1 = 0x02 > } > Else > { >     Local1 = 0x03 > } > > If (Local1 != \LVMD) > { >     \LVMD = Local1 >     Sleep (0x0A) >     \_SB.PCI0.LPC.EC.HKEY.MHKQ (0x60F0) > } >     } > > IOST seems to be present in the decompiled DSDT from my Yoga, however > it's > quite far from the spot that actually sends the 0x60C0 hotkey event. > Let me > know if you guys want to verify this against the full decompiled DSDT > for this > machine. > >  drivers/platform/x86/thinkpad_acpi.c | 36 > +++++++++++++++++++++++++++++++++--- >  1 file changed, 33 insertions(+), 3 deletions(-) > > diff --git a/drivers/platform/x86/thinkpad_acpi.c > b/drivers/platform/x86/thinkpad_acpi.c > index b65ce75..8082dc9 100644 > --- a/drivers/platform/x86/thinkpad_acpi.c > +++ b/drivers/platform/x86/thinkpad_acpi.c > @@ -190,6 +190,9 @@ enum tpacpi_hkey_event_t { >   TP_HKEY_EV_LID_OPEN = 0x5002, /* laptop lid > opened */ >   TP_HKEY_EV_TABLET_TABLET = 0x5009, /* tablet swivel > up */ >   TP_HKEY_EV_TABLET_NOTEBOOK = 0x500a, /* tablet swivel > down */ > + TP_HKEY_EV_TABLET_CHANGED = 0x60c0, /* X1 Yoga > (2016): > +    * enter/leave > tablet mode > +    */ >   TP_HKEY_EV_PEN_INSERTED = 0x500b, /* tablet > pen inserted */ >   TP_HKEY_EV_PEN_REMOVED = 0x500c, /* tablet > pen removed */ >   TP_HKEY_EV_BRGHT_CHANGED = 0x5010, /* backlight > control event */ > @@ -303,6 +306,7 @@ static struct { >   u32 hotkey_mask:1; >   u32 hotkey_wlsw:1; >   u32 hotkey_tablet:1; > + u32 hotkey_tablet_cmmd:1; >   u32 kbdlight:1; >   u32 light:1; >   u32 light_status:1; > @@ -2059,6 +2063,8 @@ static void hotkey_poll_setup(const bool > may_warn); >   >  /* HKEY.MHKG() return bits */ >  #define TP_HOTKEY_TABLET_MASK (1 << 3) > +/* ThinkPad X1 Yoga (2016) */ > +#define TP_EC_CMMD_TABLET_MODE 0x6 >   >  static int hotkey_get_wlsw(void) >  { > @@ -2083,10 +2089,18 @@ static int hotkey_get_tablet_mode(int > *status) >  { >   int s; >   > - if (!acpi_evalf(hkey_handle, &s, "MHKG", "d")) > - return -EIO; > + if (tp_features.hotkey_tablet_cmmd) { > + if (!acpi_evalf(ec_handle, &s, "CMMD", "d")) > + return -EIO; > + > + *status = (s == TP_EC_CMMD_TABLET_MODE); > + } else { > + if (!acpi_evalf(hkey_handle, &s, "MHKG", "d")) > + return -EIO; > + > + *status = ((s & TP_HOTKEY_TABLET_MASK) != 0); > + } >   > - *status = ((s & TP_HOTKEY_TABLET_MASK) != 0); >   return 0; >  } >   > @@ -3475,6 +3489,18 @@ static int __init hotkey_init(struct > ibm_init_struct *iibm) >   &dev_attr_hotkey_tablet_mode.attr); >   } >   > + /* For X1 Yoga (2016) */ > + if (!res && acpi_evalf(ec_handle, &status, "CMMD", "qd")) { > + tp_features.hotkey_tablet = 1; > + tp_features.hotkey_tablet_cmmd = 1; > + tabletsw_state = (status == TP_EC_CMMD_TABLET_MODE); > + > + pr_info("Possible tablet mode switch found; ThinkPad > in %s mode\n", > + (tabletsw_state) ? "tablet" : "laptop"); > + res = add_to_attr_set(hotkey_dev_attributes, > +       &dev_attr_hotkey_tablet_mode.a > ttr); > + } > + >   if (!res) >   res = register_attr_set_with_sysfs( >   hotkey_dev_attributes, > @@ -3899,6 +3925,10 @@ static bool hotkey_notify_6xxx(const u32 hkey, >   *ignore_acpi_ev = true; >   return true; >   > + case TP_HKEY_EV_TABLET_CHANGED: > + tpacpi_input_send_tabletsw(); > + break; > + >   default: >   pr_warn("unknown possible thermal alarm or keyboard > event received\n"); >   known = false;