Hi Stephen, On Tue, Apr 12, 2022 at 08:33:33PM -0700, Stephen Boyd wrote: > If the device is a detachable, we may still probe this device because > there are some button switches, e.g. volume buttons and power buttons, > registered by this driver. Let's allow the device node to be missing row > and column device properties to indicate that the keyboard matrix > shouldn't be registered. This removes an input device on Trogdor devices > such as Wormdingler that don't have a matrix keyboard, but still have > power and volume buttons. That helps userspace understand there isn't > a keyboard present when the detachable keyboard is disconnected. > > Cc: Benson Leung <bleung@xxxxxxxxxxxx> > Cc: Guenter Roeck <groeck@xxxxxxxxxxxx> > Cc: Douglas Anderson <dianders@xxxxxxxxxxxx> > Cc: Hsin-Yi Wang <hsinyi@xxxxxxxxxxxx> > Signed-off-by: Stephen Boyd <swboyd@xxxxxxxxxxxx> > --- > > I tried to use mkbp info to query the number of rows and columns, but my > EC firmware doesn't have commit 8505881ed0b9 ("mkbp: Separate MKBP_INFO > host command from the keyboard driver") so it always returns 8 and 13 > for the rows and columns. Sigh. With updated firmware we could query it, > or we could rely on DT like we do already. > > Originally I was setting the properties to 0, but > matrix_keypad_parse_properties() spits out an error message in that case > and so it seems better to delete the properties and check for their > existence instead. Another alternative would be to change the compatible > to be "google,cros-ec-keyb-switches" or something that indicates there > are only switches and no matrix keyboard. > > drivers/input/keyboard/cros_ec_keyb.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/input/keyboard/cros_ec_keyb.c b/drivers/input/keyboard/cros_ec_keyb.c > index 6534dfca60b4..ac9a953bff02 100644 > --- a/drivers/input/keyboard/cros_ec_keyb.c > +++ b/drivers/input/keyboard/cros_ec_keyb.c > @@ -537,6 +537,15 @@ static int cros_ec_keyb_register_matrix(struct cros_ec_keyb *ckdev) > u32 key_pos; > unsigned int row, col, scancode, n_physmap; > > + /* > + * No rows and columns? There isn't a matrix but maybe there are > + * switches to register in cros_ec_keyb_register_bs() because this is a > + * detachable device. > + */ > + if (!device_property_read_bool(dev, "keypad,num-rows") && > + !device_property_read_bool(dev, "keypad,num-cols")) Why are we abusing device_property_read_bool() for properties that are not flags instead of using device_property_present()? > + return 0; > + > err = matrix_keypad_parse_properties(dev, &ckdev->rows, &ckdev->cols); > if (err) > return err; > -- > https://chromeos.dev > Thanks. -- Dmitry