All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan-Marek Glogowski <glogow@fbihome.de>
To: "Michał Kępień" <kernel@kempniu.pl>
Cc: Jonathan Woithe <jwoithe@just42.net>,
	platform-driver-x86@vger.kernel.org
Subject: Re: Brightness and "touchpad dis-/enable" keys not working for Fujitsu e7x6
Date: Fri, 24 Jun 2016 11:22:14 +0200	[thread overview]
Message-ID: <576CFBC6.2000309@fbihome.de> (raw)
In-Reply-To: <20160624071224.GA5289@eudyptula.hq.kempniu.pl>

Am 24.06.2016 um 09:12 schrieb Michał Kępień:
>> Hmm - so I got
>> [  561.809723] [ACPI Debug 64952760]  Integer 0x0000000000000000
>> for my Store (BSWF, Debug) call.
> 
> This is the core issue.
> 
>> Then I had a look at the \_SB.PCI0.GFX0.LCD.BLNF () function in my
>> ssdt7.dsl, and it sets "BSWF = Zero" as the 2nd last call. And it's the
>> same in the ssdt6.dsl of the Haswell hardware, except there the call to
>> BLNF is guarded by an "LGreaterEqual(OSYS, 0x07D6)" guard, so I guess
>> for newer operating systems, all the functionality is also disabled on
>> Haswell.
> 
> Sorry, you lost me.  What functionality do you think is disabled where,
> specifically?

Probably the day was too long.

I just saw, that the code path is the same for Haswell and Skylake, if
OSYS >= 0x07D6
I missed that on Haswell BSWF is not 0, when a key is pressed, wight?

>> But BLNF also sets "AHKF |= One", which triggers this code path
>> containing just a "Notify (\_SB.FEXT, 0x80)", but since it's actually
>> never called, I get no notifications - how did I ever get notifications?
>>
>> ...
>>
>> until I have pressed the "touchpad" button, which changes AHKF to 8 -
>> permanently - and now I get notifications from all buttons, since all
>> use _L11 :-(
> 
> Did you mean _L21?  I assume you were talking about Skylakes above, but
> _L11 is not used on these.

Yup.

> Also, what do you mean you "get notifications from all buttons"?  Please
> clarify.

All three key combinations are handled via _L21.
I originally thought that "Notify (\_SB.FEXT, 0x80)" was generated for
all of them, but I was wrong.

If I don't press the touchpad key, which sets AHKF to 0x8, AHKF stays at
0, and I don't get any notify call for the brightness keys. And since
AHKF is stuck to 0x8, until a driver calls the S000 function, it seemed
to me, that the brightness keys generate the notify events, which they
"logically" don't do.

>> So I actually never got any direct ACPI events from the brightness
>> control, but this was just toggled because of the "touchpad" key,
>> enabling the notifications…
>>
>> And then I "instrumented" all if's by dumping the value just before the
>> if => everything is always 0, except the permanent 8 in AHKF after
>> pressing the "touchpad" button.
> 
> What do you mean by "everything"?  Please be specific, reading ACPI code
> is already hard as it is.  I would guess you meant BSWF, RFHF, AHKF and
> IRBF, but guessing will not get us far.

My _L21:

DefinitionBlock ("", "DSDT", 2, "FUJ   ", "FJNB293 ", 0x010A0000)
{
    External (AHKF)
    External (BSWF)
    External (DSEN)
    External (DSWF)
    External (GINT)
    External (IRBC)
    External (IRBF)
    External (LCDA)
    External (RFHF)
    External (RFSW)
    External (\_SB.FEXT)
    External (\_SB.PCI0.GFX0.DD1F._DCS)
    External (WSEF)

    External (\FSMI, MethodObj)
    External (\_GPE.SWPC, MethodObj)
    External (\_SB.FEXT.SIRB, MethodObj)
    External (\_SB.PCI0.GFX0.DD1F.BLNF, MethodObj)

    Method (\_GPE._L21, 0, NotSerialized)  // _Lxx: Level-Triggered GPE
    {
        Store (0xDEADBEAF, Debug)
        Store (Zero, DSWF)
        If (LEqual (\_SB.PCI0.GFX0.DD1F._DCS, 0x1F))
        {
            Store (One, LCDA)
        }
        Else
        {
            Store (Zero, LCDA)
        }
        Store (LCDA, Debug)

        FSMI (0x89, Zero, Zero)

        Store (DSEN, Debug)
        Store (DSWF, Debug)

        If (LAnd (LEqual (And (DSEN, 0x03), Zero), DSWF))
        {
            Store (One, Debug)
            SWPC ()
        }

        Store (BSWF, Debug)
        If (BSWF)
        {
            \_SB.PCI0.GFX0.DD1F.BLNF ()
        }

        Store (RFHF, Debug)
        If (RFHF)
        {
            Store (One, WSEF)
            Notify (\_SB.FEXT, 0x80)
            Store (ShiftRight (RFHF, One), RFSW)
            Store (Zero, RFHF)
        }

        Store (AHKF, Debug)
        If (AHKF)
        {
            Notify (\_SB.FEXT, 0x80)
        }

        Store (IRBF, Debug)
        If (IRBF)
        {
            If (LEqual (IRBC, 0xFD00))
            {
                Store (One, GINT)
            }
            Else
            {
                \_SB.FEXT.SIRB (IRBC)
            }

            Notify (\_SB.FEXT, 0x80)
            Store (Zero, IRBF)
        }
    }
}

dmesg output

Press brightness
[ 4924.223692] [ACPI Debug 65675410]  Integer 0x00000000DEADBEAF
[ 4924.224258] [ACPI Debug 65675982]  Integer 0x0000000000000000
[ 4924.228018] [ACPI Debug 65679741]  Integer 0x0000000000000000
[ 4924.228065] [ACPI Debug 65679791]  Integer 0x0000000000000000
[ 4924.228175] [ACPI Debug 65679901]  Integer 0x0000000000000000
[ 4924.228250] [ACPI Debug 65679977]  Integer 0x0000000000000000
[ 4924.228325] [ACPI Debug 65680052]  Integer 0x0000000000000000
[ 4924.228400] [ACPI Debug 65680127]  Integer 0x0000000000000000
Press touchpad
[ 4942.346856] [ACPI Debug 16690175]  Integer 0x00000000DEADBEAF
[ 4942.347414] [ACPI Debug 16690739]  Integer 0x0000000000000000
[ 4942.351169] [ACPI Debug 16694492]  Integer 0x0000000000000000
[ 4942.351216] [ACPI Debug 16694542]  Integer 0x0000000000000000
[ 4942.351327] [ACPI Debug 16694653]  Integer 0x0000000000000000
[ 4942.351403] [ACPI Debug 16694730]  Integer 0x0000000000000000
[ 4942.351479] [ACPI Debug 16694806]  Integer 0x0000000000000008
[ 4942.351572] [ACPI Debug 16694898]  Integer 0x0000000000000000
Press brightness
[ 4943.381885] [ACPI Debug 17725230]  Integer 0x00000000DEADBEAF
[ 4943.382553] [ACPI Debug 17725902]  Integer 0x0000000000000000
[ 4943.386264] [ACPI Debug 17729614]  Integer 0x0000000000000000
[ 4943.386310] [ACPI Debug 17729662]  Integer 0x0000000000000000
[ 4943.386418] [ACPI Debug 17729771]  Integer 0x0000000000000000
[ 4943.386495] [ACPI Debug 17729848]  Integer 0x0000000000000000
[ 4943.386569] [ACPI Debug 17729922]  Integer 0x0000000000000008
[ 4943.386621] [ACPI Debug 17729975]  Integer 0x0000000000000000

>> So - just for the sake of it, I had a look for some AHKF code and the
>> button function S000 got new code to handle AHKF - both brightness (AKA
>> BSWF AKA AHKF & One) and the touchpad (AKA AHKF & 0x08)
> 
> I think you are missing the point.  The fact that BLNF always sets some
> bit in AHKF is meaningless, because even if you got notified about that
> in some manner, you still wouldn't know whether brightness is supposed
> to be increased or decreased.  The only way ACPI code makes that
> distinction is using BSWF, which is apparently broken.

Yup - I didn't actually look at the Haswell ACPI handling.

>> But this is just called, if you call the ACPI button function in the
>> device driver.
>>
>> Which leaves me with the problem, that BSWF is always 0.
> 
> This looks awfully like the issue I had with a Dell machine and a
> certain hotkey [1].  It later turned out that ACPI variables are set to
> different values after a certain "magical" SMBIOS call is made.
> Meanwhile the same hotkey worked just fine on other models without any
> prior initialization.  The case we are looking at here might be similar,
> i.e. something worked on Haswells without any initialization, but
> Skylakes require some special call before brightness-related key presses
> are properly reported.
> 
>>>>> To sum up, I see no immediate reason for brightness control not to work
>>>>> on Skylakes, so you will have to get your hands a bit dirty to get to
>>>>> the bottom of this (and it might still not yield a solution).
>>
>> That's enough for today.
>>
>> I'm quite sure Fujitsu changed the in-ACPI-HW-touchpad-disable-handling
>> to be done by the driver.
> 
> Sorry, the above sentence does not parse for me.

I wanted to express, that currently the only conclusion I took from all
the reading and testing of ACPI code snippets is, that Fujitsu moved the
former touchpad disable handling from "in hardware" to "to be handled by
the driver", as there is now code in the S000 function:

// Brightness
If (And (AHKF, One))
{
    Or (Local0, 0x02000000, Local0)
    XOr (AHKF, One, AHKF)
}

// Touchpad
If (And (AHKF, 0x08))
{
    Or (Local0, 0x04000000, Local0)
    XOr (AHKF, 0x08, AHKF)
}

So you still have to call another function from the driver to know, if
the brightness level went up or down, but a key indication is there.

And they added the 0x02000000 and 0x04000000 values to the bitmask they
generate when you call S000 with Arg0 = 0

>> I don't know, why / how the brightness keys are working in Windows.
> 
> Perhaps this is the time to explore the Windows path after all.  My
> guess would be brightness-related hotkeys do not work on a Windows
> instance with no Fujitsu-supplied software.
> 
> BTW, I did some more fiddling with _L11 on my Haswell and it seems its
> code run before the BSWF check is identical to that found in _L21 on
> Skylakes.  Moreover, BSWF equals 0 before the FSMI call.

So for you the FSMI call changes the BSWF value.

> Which means
> that BSWF is written to by the processor in response to an SMM call.
> Which in turn means we will not be able to debug why it writes 0 and not
> 1 or 2 without assistance from Fujitsu or a successful attempt to figure
> out how the Fujitsu-supplied Windows software works.

Hmm.

So I got a reply from my vendor CC some Fujitsu persons.

They claim the non-working brightness buttons is an error in an Intel
driver and they are going to contact the Linux/Ubuntu community.

I'll point them to this thread.

No news yet about the touchpad key.

Regards,

Jan-Marek

  reply	other threads:[~2016-06-24  9:22 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-14  8:48 Brightness and "touchpad dis-/enable" keys not working for Fujitsu e7x6 Jan-Marek Glogowski
2016-06-16 23:46 ` Jonathan Woithe
2016-06-17  9:20   ` Jan-Marek Glogowski
2016-06-21  8:12     ` Jonathan Woithe
2016-06-22  7:32       ` Michał Kępień
2016-06-22 10:18         ` Jan-Marek Glogowski
2016-06-22 10:53           ` Jonathan Woithe
2016-06-22 11:23             ` Jan-Marek Glogowski
2016-06-22 12:39               ` Michał Kępień
2016-06-22 13:22                 ` Jan-Marek Glogowski
2016-06-23 11:18                   ` Michał Kępień
2016-06-23 12:08                     ` Jan-Marek Glogowski
2016-06-23 12:35                       ` Michał Kępień
2016-06-23 13:17                         ` Jan-Marek Glogowski
2016-06-23 13:31                           ` Michał Kępień
2016-06-23 13:42                             ` Jan-Marek Glogowski
2016-06-23 17:23                         ` Jan-Marek Glogowski
2016-06-24  7:12                           ` Michał Kępień
2016-06-24  9:22                             ` Jan-Marek Glogowski [this message]
2016-06-24 10:20                               ` Michał Kępień
2016-06-24 11:39                                 ` Jan-Marek Glogowski
2016-06-24 15:43                                 ` Jan-Marek Glogowski
2016-06-24 20:17                                   ` Michał Kępień
2016-06-25  8:50                                     ` Jonathan Woithe
2016-06-25  9:15                                       ` Michał Kępień
2016-06-26  7:41                                         ` [PATCH] fujitsu-laptop: Support touchpad toggle hotkey on Skylake-based models Michał Kępień
2016-06-27  8:03                                           ` [PATCH] Register KEY_TOUCHPAD_TOGGLE with input device Jan-Marek Glogowski
2016-06-27 12:48                                           ` [PATCH] fujitsu-laptop: Support touchpad toggle hotkey on Skylake-based models Jonathan Woithe
2016-06-27 12:55                                             ` Michał Kępień
2016-06-27 13:19                                             ` [PATCH v2] " Michał Kępień
2016-06-28  1:06                                               ` Jonathan Woithe
2016-06-28  7:25                                                 ` [PATCH v3] " Michał Kępień
2016-06-28 11:19                                                   ` Jonathan Woithe
2016-06-28 17:50                                                     ` Darren Hart
2016-06-27  8:32                                         ` Brightness and "touchpad dis-/enable" keys not working for Fujitsu e7x6 Jan-Marek Glogowski
2016-06-27 11:16                                           ` Michał Kępień
2016-06-27 11:40                                             ` Jan-Marek Glogowski
2016-06-27 12:40                                               ` Jonathan Woithe
2016-06-29 13:59                                           ` Jani Nikula
2016-06-29 15:38                                             ` Jani Nikula
2016-06-22 10:46         ` Jonathan Woithe
2016-06-23 10:02   ` [PATCH 0/2] fujitsu-laptop: Debugging cleanup Michał Kępień
2016-06-23 10:02     ` [PATCH 1/2] fujitsu-laptop: Use module name in debug messages Michał Kępień
2016-06-23 10:02     ` [PATCH 2/2] fujitsu-laptop: Remove unused macros Michał Kępień
2016-06-23 10:35     ` [PATCH 0/2] fujitsu-laptop: Debugging cleanup Jonathan Woithe
2016-06-28 17:49       ` Darren Hart
2016-06-22  7:15 ` Brightness and "touchpad dis-/enable" keys not working for Fujitsu e7x6 Michał Kępień
2016-06-22 10:07   ` Jan-Marek Glogowski
2016-06-22 11:31     ` Michał Kępień

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=576CFBC6.2000309@fbihome.de \
    --to=glogow@fbihome.de \
    --cc=jwoithe@just42.net \
    --cc=kernel@kempniu.pl \
    --cc=platform-driver-x86@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.