From a521ff214196fcc09742dbe8c092a4edbd53230a Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 12 Nov 2024 17:53:38 +0000 Subject: [PATCH] Revert "i2c: core: Lock address during client device instantiation" This reverts commit e2852a02469f4928023c280141312589d64506d5 which is commit 8d3cefaf659265aa82b0373a563fdb9d16a2b947 upstream. It breaks the Android kernel abi and can be brought back in the future in an abi-safe way if it is really needed. Bug: 161946584 Change-Id: I79971fdc8bf43c4d141d5a9780d9c6795da484b9 Signed-off-by: Greg Kroah-Hartman --- drivers/i2c/i2c-core-base.c | 28 ---------------------------- include/linux/i2c.h | 3 --- 2 files changed, 31 deletions(-) diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c index f9bac3530b27..b21c96388f13 100644 --- a/drivers/i2c/i2c-core-base.c +++ b/drivers/i2c/i2c-core-base.c @@ -919,27 +919,6 @@ int i2c_dev_irq_from_resources(const struct resource *resources, return 0; } -/* - * Serialize device instantiation in case it can be instantiated explicitly - * and by auto-detection - */ -static int i2c_lock_addr(struct i2c_adapter *adap, unsigned short addr, - unsigned short flags) -{ - if (!(flags & I2C_CLIENT_TEN) && - test_and_set_bit(addr, adap->addrs_in_instantiation)) - return -EBUSY; - - return 0; -} - -static void i2c_unlock_addr(struct i2c_adapter *adap, unsigned short addr, - unsigned short flags) -{ - if (!(flags & I2C_CLIENT_TEN)) - clear_bit(addr, adap->addrs_in_instantiation); -} - /** * i2c_new_client_device - instantiate an i2c device * @adap: the adapter managing the device @@ -987,10 +966,6 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf goto out_err_silent; } - status = i2c_lock_addr(adap, client->addr, client->flags); - if (status) - goto out_err_silent; - /* Check for address business */ status = i2c_check_addr_busy(adap, i2c_encode_flags_to_addr(client)); if (status) @@ -1022,8 +997,6 @@ i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *inf dev_dbg(&adap->dev, "client [%s] registered with bus id %s\n", client->name, dev_name(&client->dev)); - i2c_unlock_addr(adap, client->addr, client->flags); - return client; out_remove_swnode: @@ -1035,7 +1008,6 @@ out_err: dev_err(&adap->dev, "Failed to register i2c client %s at 0x%02x (%d)\n", client->name, client->addr, status); - i2c_unlock_addr(adap, client->addr, client->flags); out_err_silent: if (need_put) put_device(&client->dev); diff --git a/include/linux/i2c.h b/include/linux/i2c.h index fa14aa8bb746..8a3d9d84a528 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h @@ -752,9 +752,6 @@ struct i2c_adapter { struct regulator *bus_regulator; struct dentry *debugfs; - - /* 7bit address space */ - DECLARE_BITMAP(addrs_in_instantiation, 1 << 7); }; #define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)