Commit 099cc90a authored by Kai-Heng Feng's avatar Kai-Heng Feng Committed by Jonathan Cameron
Browse files

iio: light: cm32181: Unregister second I2C client if present



If a second dummy client that talks to the actual I2C address was
created in probe(), there should be a proper cleanup on driver and
device removal to avoid leakage.

So unregister the dummy client via another callback.

Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Suggested-by: default avatarHans de Goede <hdegoede@redhat.com>
Fixes: c1e62062 ("iio: light: cm32181: Handle CM3218 ACPI devices with 2 I2C resources")
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2152281


Signed-off-by: default avatarKai-Heng Feng <kai.heng.feng@canonical.com>
Link: https://lore.kernel.org/r/20230223020059.2013993-1-kai.heng.feng@canonical.com


Cc: <Stable@vger.kernel.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 03fada47
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -429,6 +429,14 @@ static const struct iio_info cm32181_info = {
	.attrs			= &cm32181_attribute_group,
};

static void cm32181_unregister_dummy_client(void *data)
{
	struct i2c_client *client = data;

	/* Unregister the dummy client */
	i2c_unregister_device(client);
}

static int cm32181_probe(struct i2c_client *client)
{
	struct device *dev = &client->dev;
@@ -460,6 +468,10 @@ static int cm32181_probe(struct i2c_client *client)
		client = i2c_acpi_new_device(dev, 1, &board_info);
		if (IS_ERR(client))
			return PTR_ERR(client);

		ret = devm_add_action_or_reset(dev, cm32181_unregister_dummy_client, client);
		if (ret)
			return ret;
	}

	cm32181 = iio_priv(indio_dev);