lkml.org 
[lkml]   [2016]   [Mar]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH v4 4/5] dell-wmi: properly process Dell Instant Launch hotkey
    On Wed, Mar 02, 2016 at 01:35:04PM +0100, Michał Kępień wrote:
    > > On Mon, Feb 29, 2016 at 09:56:03PM +0100, Pali Rohár wrote:
    > > > On Monday 29 February 2016 21:49:27 you wrote:
    > > > > > On Monday 29 February 2016 21:31:23 Michał Kępień wrote:

    I understand this better now, thank you for the additional explanation.

    > > > > > > > > diff --git a/drivers/platform/x86/dell-wmi.c
    > > > > > > > > b/drivers/platform/x86/dell-wmi.c index 65edd93..ffc957b5
    > > > > > > > > 100644 --- a/drivers/platform/x86/dell-wmi.c
    > > > > > > > > +++ b/drivers/platform/x86/dell-wmi.c
    > > > > > > > > @@ -111,7 +111,7 @@ static const struct key_entry
    > > > > > > > > dell_wmi_legacy_keymap[] __initconst = {
    > > > > > > > >
    > > > > > > > > { KE_IGNORE, 0xe020, { KEY_MUTE } },
    > > > > > > > >
    > > > > > > > > /* Shortcut and audio panel keys */
    > > > > > > > >
    > > > > > > > > - { KE_IGNORE, 0xe025, { KEY_RESERVED } },
    > > > > > > > > + { KE_KEY, 0xe025, { KEY_PROG4 } },
    > > > > > > > >

    Your description below helped explain why the KE_KEY change was necessary, the
    commit message didn't do that for me. Just explicitly stating "when there is no
    i8042 interrupt, the WMI even must generate a valid KE_KEY" or something along
    those lines would help.

    > > > > > > > > { KE_IGNORE, 0xe026, { KEY_RESERVED } },
    > > > > > > > >
    > > > > > > > > { KE_IGNORE, 0xe02e, { KEY_VOLUMEDOWN } },
    > > > > > > > >
    > > > > > > > > @@ -235,6 +235,9 @@ static void dell_wmi_process_key(int
    > > > > > > > > reported_key)
    > > > > > > > >
    > > > > > > > > acpi_video_handles_brightness_key_presses())
    > > > > > > > >
    > > > > > > > > return;
    > > > > > > > >
    > > > > > > > > + if (key->keycode == KEY_PROG4 &&
    > > > > > > > > !wmi_requires_smbios_request) + return;
    > > > > > > > > +
    > > > > > > >
    > > > > > > > Here I would rather test against reported_key, not keycode. If
    > > > > > > > somebody in future adds KEY_PROG4 for something else we will
    > > > > > > > have problem...

    And ultimately, that is under our control. So let's just not do that :-)

    A comment by the definition of KEY_PROG4 that notes it's meaning in this driver
    should prevent any future attempts at overloading it and breaking this.

    > > > > > >
    > > > > > > As 0xe025 is currently the only event we know about that should
    > > > > > > be ignored on some machines and processed on others, this makes
    > > > > > > sense,
    > > > > > >
    > > > > > > at least for now. If I change the first condition to:
    > > > > > > reported_key == 0xe025
    > > > > >
    > > > > > There will be need also change for 5/5 patch...
    > > > >
    > > > > Why? Are you aware of any model which sends a 0xe029 WMI event _and_
    > > > > generates an i8042 interrupt? If not, WMI event 0xe029 should always
    > > > > be turned into a key event, as per the keymap.
    > > >
    > > > No, but your current patch 4/5 and 5/5 do that (because it checks
    > > > KEY_PROG4). But if it is not needed, I'm happy because of one hook less.
    > >
    > > From my reading, patch 5/5 adds 0xe029 to the reported keys that need to be
    > > ignored, so the test would need to include both if it isn't using the common
    > > keycode KEY_PROG4. I believe that is what Pali is saying as well. Is this not
    > > the correct reading of 5/5?
    >
    > It's the other way round :) Perhaps explaining the issue once again
    > will help.

    Got it! Thanks! A couple of comments and I think this is a reasonable solution.


    >
    > Until this patch series, dell-wmi was only "aware" of laptops which
    > generate _both_ an i8042 interrupt and a WMI event when Dell Instant
    > Launch is pressed. Thus, as the i8042 interrupt already caused a key
    > event to be generated, there was no point in generating another one for
    > the WMI event, hence the KE_IGNORE entry for 0xe025 in the keymap.
    >
    > Enter Vostro V131, which does _not_ generate an i8042 interrupt when
    > Dell Instant Launch is pressed, yet still generates a WMI event. In
    > other words, there was no way of generating a key event for Dell Instant
    > Launch on that model without changing the relevant keymap entry into a
    > KE_KEY one. However, I still needed to ensure that for most machines
    > that WMI event would _not_ be turned into a key event. That's why patch
    > 4/5 changes the keymap entry to a KE_KEY one, while also adding a
    > conditional return to the key processing function, thus making sure that
    > the previous behavior (ignoring WMI event 0xe025) is preserved on most
    > machines.
    >
    > I used KEY_PROG4 in the conditional expression because a mapped keycode
    > is also used in a comparison just above the code inserted by patch 4/5.
    > For event 0xe029, however, the conditional expression added by patch 4/5
    > should always evaluate to false. Note that if we use KEY_PROG4 in the
    > comparison, the second condition will be false; if we use 0xe025 in the
    > comparison, the first condition will be false. The latter variant
    > (suggested by Pali) will work fine until we hear of a model which
    > generates _both_ WMI event 0xe029 and an i8042 interrupt upon pressing
    > some hotkey.
    >
    > I was hoping the commit message for patch 4/5 would be clear enough to
    > convey my intent, yet it seems I managed to confuse you. Maybe that's a
    > sign that the commit message and/or code should be rephrased, but I
    > can't be a judge on this one myself. Let me know what you think. Pali,
    > if you think this is good enough as it is, please add your Reviewed-by.
    > If you have doubts, I'm all ears.
    >
    > --
    > Best regards,
    > Michał Kępień
    >

    --
    Darren Hart
    Intel Open Source Technology Center

    \
     
     \ /
      Last update: 2016-03-03 19:01    [W:6.566 / U:0.236 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site