It seems like there's a typo in the patch from an earlier version of the file(dev_err is supplied struct device rather than a struct device pointer). I will be resubmitting it, apologies for the same. > -----Original Message----- > From: Agarwal, Utsav > Sent: Friday, June 28, 2024 3:05 PM > To: Hennerich, Michael <Michael.Hennerich@xxxxxxxxxx>; > dmitry.torokhov@xxxxxxxxx; linux-input@xxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx > Cc: Artamonovs, Arturs <Arturs.Artamonovs@xxxxxxxxxx>; Bimpikas, > Vasileios <Vasileios.Bimpikas@xxxxxxxxxx>; Gaskell, Oliver > <Oliver.Gaskell@xxxxxxxxxx>; Nuno Sá <noname.nuno@xxxxxxxxx> > Subject: RE: [PATCH v3] adp5588-keys: Support for dedicated gpio operation > > From: Utsav Agarwal <utsav.agarwal@xxxxxxxxxx> > > Current state of the driver for the ADP5588/87 only allows partial > I/O to be used as GPIO. This support was previously present as a > separate gpio driver, which was dropped with the commit > 5ddc896088b0 ("gpio: gpio-adp5588: drop the driver") since the > functionality was deemed to have been merged with adp5588-keys. > > To restore this, keypad specific checks in the probe > function are relaxed if the following conditions are met: > 1) "gpio-only" property has been specified for the node > 2) No keypad rows/columns are specified > > The "gpio-only" property is introduced to simplify usage since it > serves as a clear indication of the user's intention as opposed to being > inferred from the number of rows and columns specified. This > adds simplicity for the accompanying dt binding update as well > as interpretation of the same. > > In such a scenario, additional checks are also introduced to make sure > that keypad and pure GPIO operation are mutually exclusive resulting > in an error if unintentional/incompatible changes are present. > > Signed-off-by: Utsav Agarwal <utsav.agarwal@xxxxxxxxxx> > --- > drivers/input/keyboard/adp5588-keys.c | 32 > +++++++++++++++++++++++++++ > 1 file changed, 32 insertions(+) > > diff --git a/drivers/input/keyboard/adp5588-keys.c > b/drivers/input/keyboard/adp5588-keys.c > index 1b0279393df4..c8c637046098 100644 > --- a/drivers/input/keyboard/adp5588-keys.c > +++ b/drivers/input/keyboard/adp5588-keys.c > @@ -188,6 +188,7 @@ struct adp5588_kpad { > u32 cols; > u32 unlock_keys[2]; > int nkeys_unlock; > + bool gpio_only; > unsigned short keycode[ADP5588_KEYMAPSIZE]; > unsigned char gpiomap[ADP5588_MAXGPIO]; > struct gpio_chip gc; > @@ -647,6 +648,32 @@ static int adp5588_fw_parse(struct adp5588_kpad > *kpad) > struct i2c_client *client = kpad->client; > int ret, i; > > + kpad->gpio_only = device_property_present(&client->dev, "gpio- > only"); > + /* > + * Check if the device is to be operated purely in GPIO mode. If so, > + * confirm that no keypad rows or columns have been specified, > since > + * all GPINS should be configured as GPIO. > + */ > + if (kpad->gpio_only) { > + ret = device_property_present(&client->dev, > + "keypad,num-rows"); > + if (ret) { > + dev_err(client->dev, > + "Specified num-rows with mode gpio- > only\n"); > + return -EINVAL; > + } > + > + ret = device_property_present(&client->dev, > + "keypad,num-columns"); > + if (ret) { > + dev_err(client->dev, > + "Specified num-columns with mode gpio- > only\n"); > + return -EINVAL; > + } > + > + return 0; > + } > + > ret = matrix_keypad_parse_properties(&client->dev, &kpad->rows, > &kpad->cols); > if (ret) > @@ -790,6 +817,11 @@ static int adp5588_probe(struct i2c_client *client) > if (error) > return error; > > + if (kpad->gpio_only) { > + dev_info(&client->dev, "Rev.%d, started as GPIO only\n", > revid); > + return 0; > + } > + > error = devm_request_threaded_irq(&client->dev, client->irq, > adp5588_hard_irq, > adp5588_thread_irq, > IRQF_TRIGGER_FALLING | > IRQF_ONESHOT, > -- > 2.34.1