Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 375b9424 authored by Bartosz Golaszewski's avatar Bartosz Golaszewski
Browse files

gpio: max732x: use i2c_new_dummy_device()



We now have a resource managed version of i2c_new_dummy_device() that
also returns an actual error code instead of a NULL-pointer. Use it
in the max732x GPIO driver and simplify code in the process.

Signed-off-by: default avatarBartosz Golaszewski <bgolaszewski@baylibre.com>
parent 8764c4ca
Loading
Loading
Loading
Loading
+14 −23
Original line number Diff line number Diff line
@@ -652,12 +652,12 @@ static int max732x_probe(struct i2c_client *client,
	case 0x60:
		chip->client_group_a = client;
		if (nr_port > 8) {
			c = i2c_new_dummy(client->adapter, addr_b);
			if (!c) {
			c = devm_i2c_new_dummy_device(&client->dev,
						      client->adapter, addr_b);
			if (IS_ERR(c)) {
				dev_err(&client->dev,
					"Failed to allocate I2C device\n");
				ret = -ENODEV;
				goto out_failed;
				return PTR_ERR(c);
			}
			chip->client_group_b = chip->client_dummy = c;
		}
@@ -665,12 +665,12 @@ static int max732x_probe(struct i2c_client *client,
	case 0x50:
		chip->client_group_b = client;
		if (nr_port > 8) {
			c = i2c_new_dummy(client->adapter, addr_a);
			if (!c) {
			c = devm_i2c_new_dummy_device(&client->dev,
						      client->adapter, addr_a);
			if (IS_ERR(c)) {
				dev_err(&client->dev,
					"Failed to allocate I2C device\n");
				ret = -ENODEV;
				goto out_failed;
				return PTR_ERR(c);
			}
			chip->client_group_a = chip->client_dummy = c;
		}
@@ -678,36 +678,34 @@ static int max732x_probe(struct i2c_client *client,
	default:
		dev_err(&client->dev, "invalid I2C address specified %02x\n",
				client->addr);
		ret = -EINVAL;
		goto out_failed;
		return -EINVAL;
	}

	if (nr_port > 8 && !chip->client_dummy) {
		dev_err(&client->dev,
			"Failed to allocate second group I2C device\n");
		ret = -ENODEV;
		goto out_failed;
		return -ENODEV;
	}

	mutex_init(&chip->lock);

	ret = max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]);
	if (ret)
		goto out_failed;
		return ret;
	if (nr_port > 8) {
		ret = max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]);
		if (ret)
			goto out_failed;
			return ret;
	}

	ret = gpiochip_add_data(&chip->gpio_chip, chip);
	if (ret)
		goto out_failed;
		return ret;

	ret = max732x_irq_setup(chip, id);
	if (ret) {
		gpiochip_remove(&chip->gpio_chip);
		goto out_failed;
		return ret;
	}

	if (pdata && pdata->setup) {
@@ -719,10 +717,6 @@ static int max732x_probe(struct i2c_client *client,

	i2c_set_clientdata(client, chip);
	return 0;

out_failed:
	i2c_unregister_device(chip->client_dummy);
	return ret;
}

static int max732x_remove(struct i2c_client *client)
@@ -744,9 +738,6 @@ static int max732x_remove(struct i2c_client *client)

	gpiochip_remove(&chip->gpio_chip);

	/* unregister any dummy i2c_client */
	i2c_unregister_device(chip->client_dummy);

	return 0;
}