Re: [PATCH 0/1] input: keyboard: add qci keyboard driver
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2010-09-01 06:34:39
Also in:
linux-arm-msm, lkml
On Tue, Aug 31, 2010 at 04:54:47PM -0400, Neil Leeder wrote:
On 8/30/2010 5:55 PM, Dmitry Torokhov wrote:quoted
And still you are using only one GPIO in your driver? While WPCE775x does seem to have matrix keypad support I think that you are using one of the 3 PS/2 ports, like your touchpad does.Hi Dmitry, I can assure you that the keyboard is on the 8*18 GPIO matrix on the Nuvoton EC (only 8*16 being used in the current design). There certainly are 3 PS/2 ports on the EC, but in the board designs I have only one of those is used as a PS/2 port, and that is for the touchpad. The other two ports are muxed with GPIOs and the pins are being used as GPIOs for other functions, not PS/2 ports. The firmware on the EC converts keypresses on the GPIO matrix to scancodes and sends them over I2C. The single GPIO used by the keyboard driver is an interrupt.quoted
The device is initialized with 0xf4; the device is supposed to respond with 0xfa; I wonder what scancodes the device reports... It smells strongly of PS/2. Also, it is not controller that supports PS/2 commands but rather the device itself so I am still hopeful that we could make use of the standard drivers.We can speculate on the reasons that the firmware on the EC uses 0xF4 & 0xFA for init and ack - my guess would be for a minimal amount of commonality with the PS/2 protocol - but it doesn't emulate the rest of the PS/2 protocol for the GPIO matrix device. I tried with atkbd. It issues reset, getid, setleds - all of which fail with no response from the EC. It only responds to F4.
OK, I give up on pursuit of serio solution. Again ;)
The scancodes reported are whatever the firmware provides. A previous version of firmware had some non-standard values and the driver had to use a look-up table to convert them to something useful. With the change to the current keyboard layout Quanta changed the scancodes reported to match the KEY_* values in input.h, which is why there is no table in the current driver.
I believe we still should support changing keymap via EVIOCSKEYCODE so we need to have the keymap even though the initial seed is 1:1 with scancodes. -- Dmitry