Bug#1006251: USB Lenovo ThinkPad Compact Keyboard has fn_lock inverted

2022-11-12 Thread Jamie Lentin

On 2022-11-11 17:06, Josh Triplett wrote:

I have an external ThinkPad USB keyboard:

$ lsusb | grep -i keyboard
Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with
TrackPoint

The Linux kernel exposes a fn_lock attribute in sysfs for this 
keyboard:


$ cat
sys/devices/pci:00/:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock
1

However, this attribute appears inverted for this particular keyboard:
it seems to be 1 when FnLock is *disabled* and 0 when FnLock is
*enabled*. In order to enable FnLock, I have to write 0 to this file.


Under Windows the default actions of the Function keys are the media 
keys, i.e. pressing F1 is Mute. Fn-"Mute" is F1, or enabling Fn-Lock & 
"Mute". That's why when /fn_lock is 1, the Mute key is F1.


With keyboards built into Thinkpads there's a BIOS setting to invert the 
behaviour of Fn-Lock (and thus have Fn keys by default), as well as 
swapping Fn<->Ctrl, but there's no equivalent option for the external 
keyboards.


What's the wrong way around here is hid-lenovo assumes that you want 
Fn-Lock on when connecting to the keyboard, not off. My assumption at 
the time was that whilst it's different to how the keyboard behaves 
under Windows, it'd be a more useful default.


(Also, separately from that, it would be nice if the kernel could 
handle
fn_lock toggling *internally*, rather than expecting userspace to do 
it.

As far as I can tell, it does handle similar things for some keyboards,
but not this one.)


Agreed. This was something I looked into when I was adding support for 
the keyboards. For yours it's a pretty trivial addition, but for the USB 
variant you can't send the command in the middle of the USB interrupt 
receiving the keypress, solving this seemed to require quite a lot of 
boilerplate for what would have been pretty trivial in userland.


Of course, It's very easily possible that I missed something, or there's 
a helper to do this sort of thing that now exists.


Cheers,



Bug#1006251: USB Lenovo ThinkPad Compact Keyboard has fn_lock inverted

2022-11-11 Thread Salvatore Bonaccorso
Control: forwarded -1 
https://lore.kernel.org/linux-input/Y26BMXn15Kbt6a2u@localhost/
Control: tags -1 - moreinfo

Hi Josh.

On Fri, Nov 11, 2022 at 09:07:41AM -0800, Josh Triplett wrote:
> On Fri, Feb 25, 2022 at 02:43:59PM +0100, Salvatore Bonaccorso wrote:
> > Control: tags -1 + moreinfo
> > 
> > Hi Josh,
> > 
> > On Mon, Feb 21, 2022 at 04:31:39PM -0800, Josh Triplett wrote:
> > > Package: src:linux
> > > Version: 5.16.7-2
> > > Severity: normal
> > > X-Debbugs-Cc: j...@joshtriplett.org
> > > 
> > > I have an external ThinkPad USB keyboard:
> > > 
> > > $ lsusb | grep -i keyboard
> > > Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with 
> > > TrackPoint
> > > 
> > > The Linux kernel exposes a fn_lock attribute in sysfs for this keyboard:
> > > 
> > > $ cat 
> > > /sys/devices/pci:00/:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock
> > > 1
> > > 
> > > However, this attribute appears inverted for this particular keyboard:
> > > it seems to be 1 when FnLock is *disabled* and 0 when FnLock is
> > > *enabled*.
> > 
> > If you can reproduce this with either 5.16.10-1 (or later today
> > 5.16.11-1) or the current version in experimental (5.17~rc4-1~exp1)
> > would it be possible you report it upstream and keep us updated on the
> > progress?
> 
> Reproduced with 6.0.6-2, and reported upstream (CCed to this bug).

Thank you for re-testing and reporting it upstream.

Regards,
Salvatore



Bug#1006251: USB Lenovo ThinkPad Compact Keyboard has fn_lock inverted

2022-11-11 Thread Josh Triplett
I have an external ThinkPad USB keyboard:

$ lsusb | grep -i keyboard
Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with 
TrackPoint

The Linux kernel exposes a fn_lock attribute in sysfs for this keyboard:

$ cat
sys/devices/pci:00/:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock
1

However, this attribute appears inverted for this particular keyboard:
it seems to be 1 when FnLock is *disabled* and 0 when FnLock is
*enabled*. In order to enable FnLock, I have to write 0 to this file.

(Also, separately from that, it would be nice if the kernel could handle
fn_lock toggling *internally*, rather than expecting userspace to do it.
As far as I can tell, it does handle similar things for some keyboards,
but not this one.)



Bug#1006251: USB Lenovo ThinkPad Compact Keyboard has fn_lock inverted

2022-11-11 Thread Josh Triplett
On Fri, Feb 25, 2022 at 02:43:59PM +0100, Salvatore Bonaccorso wrote:
> Control: tags -1 + moreinfo
> 
> Hi Josh,
> 
> On Mon, Feb 21, 2022 at 04:31:39PM -0800, Josh Triplett wrote:
> > Package: src:linux
> > Version: 5.16.7-2
> > Severity: normal
> > X-Debbugs-Cc: j...@joshtriplett.org
> > 
> > I have an external ThinkPad USB keyboard:
> > 
> > $ lsusb | grep -i keyboard
> > Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with 
> > TrackPoint
> > 
> > The Linux kernel exposes a fn_lock attribute in sysfs for this keyboard:
> > 
> > $ cat 
> > /sys/devices/pci:00/:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock
> > 1
> > 
> > However, this attribute appears inverted for this particular keyboard:
> > it seems to be 1 when FnLock is *disabled* and 0 when FnLock is
> > *enabled*.
> 
> If you can reproduce this with either 5.16.10-1 (or later today
> 5.16.11-1) or the current version in experimental (5.17~rc4-1~exp1)
> would it be possible you report it upstream and keep us updated on the
> progress?

Reproduced with 6.0.6-2, and reported upstream (CCed to this bug).



Bug#1006251: USB Lenovo ThinkPad Compact Keyboard has fn_lock inverted

2022-02-25 Thread Salvatore Bonaccorso
Control: tags -1 + moreinfo

Hi Josh,

On Mon, Feb 21, 2022 at 04:31:39PM -0800, Josh Triplett wrote:
> Package: src:linux
> Version: 5.16.7-2
> Severity: normal
> X-Debbugs-Cc: j...@joshtriplett.org
> 
> I have an external ThinkPad USB keyboard:
> 
> $ lsusb | grep -i keyboard
> Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with 
> TrackPoint
> 
> The Linux kernel exposes a fn_lock attribute in sysfs for this keyboard:
> 
> $ cat 
> /sys/devices/pci:00/:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock
> 1
> 
> However, this attribute appears inverted for this particular keyboard:
> it seems to be 1 when FnLock is *disabled* and 0 when FnLock is
> *enabled*.

If you can reproduce this with either 5.16.10-1 (or later today
5.16.11-1) or the current version in experimental (5.17~rc4-1~exp1)
would it be possible you report it upstream and keep us updated on the
progress?

Regards,
Salvatore



Bug#1006251: USB Lenovo ThinkPad Compact Keyboard has fn_lock inverted

2022-02-21 Thread Josh Triplett
Package: src:linux
Version: 5.16.7-2
Severity: normal
X-Debbugs-Cc: j...@joshtriplett.org

I have an external ThinkPad USB keyboard:

$ lsusb | grep -i keyboard
Bus 003 Device 022: ID 17ef:6047 Lenovo ThinkPad Compact Keyboard with 
TrackPoint

The Linux kernel exposes a fn_lock attribute in sysfs for this keyboard:

$ cat 
/sys/devices/pci:00/:00:14.0/usb3/3-5/3-5.4/3-5.4.3/3-5.4.3:1.1/0003:17EF:6047.000F/fn_lock
1

However, this attribute appears inverted for this particular keyboard:
it seems to be 1 when FnLock is *disabled* and 0 when FnLock is
*enabled*.