From: Lars-Peter Clausen <l...@metafoo.de>

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.

Signed-off-by: Lars-Peter Clausen <l...@metafoo.de>
Signed-off-by: Alexandru Ardelean <alexandru.ardel...@analog.com>
---
 drivers/input/keyboard/adp5589-keys.c | 33 +++++++++++++++++++--------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/drivers/input/keyboard/adp5589-keys.c 
b/drivers/input/keyboard/adp5589-keys.c
index 31145a85c819..8e559be24bda 100644
--- a/drivers/input/keyboard/adp5589-keys.c
+++ b/drivers/input/keyboard/adp5589-keys.c
@@ -368,6 +368,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);
@@ -497,7 +516,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;
 
@@ -618,7 +638,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;
@@ -823,7 +843,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;
@@ -947,7 +967,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;
 
@@ -957,11 +977,6 @@ static int adp5589_probe(struct i2c_client *client,
                return -EIO;
        }
 
-       if (!pdata) {
-               dev_err(&client->dev, "no platform data?\n");
-               return -EINVAL;
-       }
-
        kpad = devm_kzalloc(&client->dev, sizeof(*kpad), GFP_KERNEL);
        if (!kpad)
                return -ENOMEM;
-- 
2.17.1

Reply via email to