Re: [PATCH v4 1/4] Input: adp5589: Add default platform data

From: Ardelean, Alexandru
Date: Wed Apr 01 2020 - 10:05:35 EST


On Thu, 2020-03-05 at 15:14 +0200, Alexandru Ardelean wrote:
> From: Lars-Peter Clausen <lars@xxxxxxxxxx>
>
> If no platform data is supplied use a dummy platform data that configures
> the device in GPIO only mode. This change adds a adp5589_kpad_pdata_get()
> helper that returns the default platform-data. This can be later extended
> to load configuration from device-trees or ACPI.

ping

>
> Signed-off-by: Lars-Peter Clausen <lars@xxxxxxxxxx>
> Signed-off-by: Alexandru Ardelean <alexandru.ardelean@xxxxxxxxxx>
> ---
>
> Changelog v3 -> v4:
> * Fixed smatch warnings about potential leak being created; resulted in 2
> more patches:
> - Input: adp5589: unify ret & error variables
> - Input: adp5589: fix possible memleak of 'kpad'
>
> Changelog v2 -> v3:
> * fix `-Wpointer-to-int-cast` warnings for patch `input: adp5589: Add basic
> devicetree support` ; warnings shows up on 64 bit ARCHs
>
> Changelog v1 -> v2:
> * adjusted patch `input: adp5589: Add default platform data` by
> introducting a `adp5589_kpad_pdata_get()` helper, which returns the
> platform-data; the previos patch was based on an older version of the
> kernel from the ADI kernel-tree; the driver was sync-ed with the upstream
> version
>
> drivers/input/keyboard/adp5589-keys.c | 36 +++++++++++++++++++--------
> 1 file changed, 26 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/input/keyboard/adp5589-keys.c
> b/drivers/input/keyboard/adp5589-keys.c
> index e7d58e7f0257..c6a801bcdf90 100644
> --- a/drivers/input/keyboard/adp5589-keys.c
> +++ b/drivers/input/keyboard/adp5589-keys.c
> @@ -369,6 +369,25 @@ static const struct adp_constants const_adp5585 = {
> .reg = adp5585_reg,
> };
>
> +static const struct adp5589_gpio_platform_data adp5589_default_gpio_pdata = {
> + .gpio_start = -1,
> +};
> +
> +static const struct adp5589_kpad_platform_data adp5589_default_pdata = {
> + .gpio_data = &adp5589_default_gpio_pdata,
> +};
> +
> +static const struct adp5589_kpad_platform_data *adp5589_kpad_pdata_get(
> + struct device *dev)
> +{
> + const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
> +
> + if (!pdata)
> + pdata = &adp5589_default_pdata;
> +
> + return pdata;
> +}
> +
> static int adp5589_read(struct i2c_client *client, u8 reg)
> {
> int ret = i2c_smbus_read_byte_data(client, reg);
> @@ -498,7 +517,8 @@ static int adp5589_build_gpiomap(struct adp5589_kpad
> *kpad,
> static int adp5589_gpio_add(struct adp5589_kpad *kpad)
> {
> struct device *dev = &kpad->client->dev;
> - const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
> + const struct adp5589_kpad_platform_data *pdata =
> + adp5589_kpad_pdata_get(dev);
> const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
> int i, error;
>
> @@ -553,7 +573,8 @@ static int adp5589_gpio_add(struct adp5589_kpad *kpad)
> static void adp5589_gpio_remove(struct adp5589_kpad *kpad)
> {
> struct device *dev = &kpad->client->dev;
> - const struct adp5589_kpad_platform_data *pdata = dev_get_platdata(dev);
> + const struct adp5589_kpad_platform_data *pdata =
> + adp5589_kpad_pdata_get(dev);
> const struct adp5589_gpio_platform_data *gpio_data = pdata->gpio_data;
> int error;
>
> @@ -656,7 +677,7 @@ static int adp5589_setup(struct adp5589_kpad *kpad)
> {
> struct i2c_client *client = kpad->client;
> const struct adp5589_kpad_platform_data *pdata =
> - dev_get_platdata(&client->dev);
> + adp5589_kpad_pdata_get(&client->dev);
> u8 (*reg) (u8) = kpad->var->reg;
> unsigned char evt_mode1 = 0, evt_mode2 = 0, evt_mode3 = 0;
> unsigned char pull_mask = 0;
> @@ -861,7 +882,7 @@ static int adp5589_keypad_add(struct adp5589_kpad *kpad,
> unsigned int revid)
> {
> struct i2c_client *client = kpad->client;
> const struct adp5589_kpad_platform_data *pdata =
> - dev_get_platdata(&client->dev);
> + adp5589_kpad_pdata_get(&client->dev);
> struct input_dev *input;
> unsigned int i;
> int error;
> @@ -992,7 +1013,7 @@ static int adp5589_probe(struct i2c_client *client,
> {
> struct adp5589_kpad *kpad;
> const struct adp5589_kpad_platform_data *pdata =
> - dev_get_platdata(&client->dev);
> + adp5589_kpad_pdata_get(&client->dev);
> unsigned int revid;
> int error, ret;
>
> @@ -1002,11 +1023,6 @@ static int adp5589_probe(struct i2c_client *client,
> return -EIO;
> }
>
> - if (!pdata) {
> - dev_err(&client->dev, "no platform data?\n");
> - return -EINVAL;
> - }
> -
> kpad = kzalloc(sizeof(*kpad), GFP_KERNEL);
> if (!kpad)
> return -ENOMEM;