Merge remote-tracking branch 'remotes/tegra/android-tegra-2.6.36-honeycomb-mr1' into...
[firefly-linux-kernel-4.4.55.git] / drivers / gpio / pcf857x.c
index 29f19ce3e80f192b071277a69bf1da9b67b8627f..879b473aab5afc8d63a23b13073f32d6e1a2966c 100644 (file)
@@ -190,7 +190,6 @@ static int pcf857x_probe(struct i2c_client *client,
        pdata = client->dev.platform_data;
        if (!pdata) {
                dev_dbg(&client->dev, "no platform data\n");
-               return -EINVAL;
        }
 
        /* Allocate, initialize, and register this gpio_chip. */
@@ -200,7 +199,7 @@ static int pcf857x_probe(struct i2c_client *client,
 
        mutex_init(&gpio->lock);
 
-       gpio->chip.base = pdata->gpio_base;
+       gpio->chip.base = pdata ? pdata->gpio_base : -1;
        gpio->chip.can_sleep = 1;
        gpio->chip.dev = &client->dev;
        gpio->chip.owner = THIS_MODULE;
@@ -278,7 +277,7 @@ static int pcf857x_probe(struct i2c_client *client,
         * to zero, our software copy of the "latch" then matches the chip's
         * all-ones reset state.  Otherwise it flags pins to be driven low.
         */
-       gpio->out = ~pdata->n_latch;
+       gpio->out = pdata ? ~pdata->n_latch : ~0;
 
        status = gpiochip_add(&gpio->chip);
        if (status < 0)
@@ -299,7 +298,7 @@ static int pcf857x_probe(struct i2c_client *client,
        /* Let platform code set up the GPIOs and their users.
         * Now is the first time anyone could use them.
         */
-       if (pdata->setup) {
+       if (pdata && pdata->setup) {
                status = pdata->setup(client,
                                gpio->chip.base, gpio->chip.ngpio,
                                pdata->context);
@@ -322,7 +321,7 @@ static int pcf857x_remove(struct i2c_client *client)
        struct pcf857x                  *gpio = i2c_get_clientdata(client);
        int                             status = 0;
 
-       if (pdata->teardown) {
+       if (pdata && pdata->teardown) {
                status = pdata->teardown(client,
                                gpio->chip.base, gpio->chip.ngpio,
                                pdata->context);