On 2019-06-08 12:55, Wolfram Sang wrote:
While preparing a refactoring series, I noticed that some drivers use a
complicated way of determining the adapter of a client. The easy way is
to use the intended pointer: client->adapter
These drivers do:
to_i2c_adapter(client->dev.parent);
The I2C core populates the parent pointer as:
client->dev.parent = &client->adapter->dev;
Now take into consideration that
to_i2c_adapter(&adapter->dev);
is a complicated way of saying 'adapter', then we can even formally
prove that the complicated expression can be simplified by using
client->adapter.
The conversion was done using a coccinelle script with some manual
indentation fixes applied on top.
To avoid a brown paper bag mistake, I double checked this on a Renesas
Salvator-XS board (R-Car M3N) and verified both expression result in the
same pointer. Other than that, the series is only build tested.
Similar things go on in:
drivers/hwmon/lm90.c
drivers/leds/leds-is31fl319x.c
drivers/of/unittest.c
Those have this pattern:
struct device *dev = &client->dev;
struct i2c_adapter *adapter = to_i2c_adapter(dev->parent);
And drivers/rtc/rtc-fm3130.c has a couple of these:
tmp = i2c_transfer(to_i2c_adapter(fm3130->client->dev.parent),
...);
where fm3130->client is of type "struct i2c_client *"
Cheers,
Peter
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel