|
From: Jerome F. <jf...@gm...> - 2008-06-08 06:51:02
|
>> >>> >> > The way you're doing it:
>> >>> >> >
>> >>> >> >> static struct hidinput_key_translation apple_fn_keys[] = {
>> >>> >> >> { KEY_BACKSPACE, KEY_DELETE },
>> >>> >> >> { KEY_F1, KEY_BRIGHTNESSDOWN, APPLE_FLAG_FKEY },
>> >>> >> >> { KEY_F2, KEY_BRIGHTNESSUP, APPLE_FLAG_FKEY },
>> >>> >> >> { KEY_F3, KEY_FN_F5, APPLE_FLAG_FKEY }, /*
>> >>> >> >> Exposé */
>> >>> >> >> { KEY_F4, KEY_FN_F4, APPLE_FLAG_FKEY }, /*
>> >>> >> >> Dashboard */
>> >>> >> >> + { KEY_F5, KEY_KBDILLUMDOWN, APPLE_FLAG_FKEY },
>> >>> >> >> + { KEY_F6, KEY_KBDILLUMUP, APPLE_FLAG_FKEY },
>> >>> >> >> { KEY_F7, KEY_PREVIOUSSONG, APPLE_FLAG_FKEY },
>> >>> >> >> { KEY_F8, KEY_PLAYPAUSE, APPLE_FLAG_FKEY },
>> >>> >> >> { KEY_F9, KEY_NEXTSONG, APPLE_FLAG_FKEY },
>> >>> >> >
>> >>> >> > breaks keyboards without these special keys, e.g. external USB
>> >>> >> > keyboards. Also, I think some MacBook Pros have/had a different layout
>> >>> >> > of the special keys, though you may already account for that.
>> >>> >> >
>> >>> >> I had a quick look and on Google images, and the only similar layout
>> >>> >> but different for these 2 keys that I can find is the one of the alu
>> >>> >> wireless keyboard of Apple:
>> >>> >> http://www.thomann.de/fr/prod_bdb_AR_119224.html?image=0&sid=c0c7390b59f0507d18fadbba8776c7b8
>> >>> >
>> >>> > Same for the USB aluminum keyboard.
>> >>> >
>> >>> >> But these two keys seem to be mapped to nothing in fact. So, imho,
>> >>> >> mapping these two keys to keyboard brightness control, even if it's
>> >>> >> not applicable to these keyboard, still makes sense to me : It keeps
>> >>> >> the layout consistent (having to press Fn to get the Fx keys except
>> >>> >> for F5 and F6 is weird), and should no other side effect on these
>> >>> >> keyboards.
>> >>> >
>> >>> > I disagree; as there's no special function engraved on these keys, they
>> >>> > should always generate F5/6.
>> >>> >
>> >>> So, we should prevent macbook users from using their keyboard
>> >>> backlights to allow people using other apple keyboards to use F5/F6
>> >>> with or without the Fn key ?
>> >>
>> >> Of course not (where did you get that idea?). They should just use a
>> >> different table.
>> >>
>> > Ok, but then, how do you suggest to make the difference between the
>> > keyboards needing the macbook table and the others ? The easiest
>> > solution would be to define another quirk. But as I said, the integer
>> > used to store the list of quirks to use is almost full (see
>> > include/linux/hid.h) which makes it, imo, a not-lasting-enough
>> > solution (If we go this way, I have the feeling we will have to find
>> > another way at the next kernel release). The other solution would be
>> > to hardcore some products id drivers/hid/hid-input.c using a macro,
>> > which is, still imo, kind of dirty (I did it in my patch because it's
>> > already done currently in the code of the mainstream kernel).
>> > So, what do you think we should do precisely ?
>> >
>> Hmm .... actually, I just thought of something pretty stupid/simple:
>> add another field to the structure
>> drivers/hid/usbhid/hid-quirks.c:hid_blacklist. As a temporary
>> solution, it should be fine. Does anyone know any possible side effect
>> of adding a field to this structure ?
>
> Not me (ask the hid developers maybe? :), but yeah, basically the
> quicker'n'dirtier way is to extend the existing device ID test for
> selecting the table, and the cleaner way would be to add a field to some
> quirk struct where the table pointer can be stored.
>
Here is a "quirk & dirty" patch for the kernel 2.6.25.4. For the keys
F5/F6, it should only affect Apple Wellspring 2 keyboards (the one I
have) : I've simply used another bit in the integer storing what
quirks to use (2 bits left ...). |