i2c: replace i2c_new_secondary_device with an ERR_PTR variant
In the general move to have i2c_new_*_device functions which return ERR_PTR instead of NULL, this patch converts i2c_new_secondary_device(). There are only few users, so this patch converts the I2C core and all users in one go. The function gets renamed to i2c_new_ancillary_device() so out-of-tree users will get a build failure to understand they need to adapt their error checking code. Signed-off-by: Wolfram Sang <wsa+renesas@sang-engineering.com> Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com> # adv748x Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> # adv7511 + adv7604 Reviewed-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> # adv7604 Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
此提交包含在:
@@ -183,14 +183,14 @@ static int adv748x_initialise_clients(struct adv748x_state *state)
|
||||
int ret;
|
||||
|
||||
for (i = ADV748X_PAGE_DPLL; i < ADV748X_PAGE_MAX; ++i) {
|
||||
state->i2c_clients[i] = i2c_new_secondary_device(
|
||||
state->i2c_clients[i] = i2c_new_ancillary_device(
|
||||
state->client,
|
||||
adv748x_default_addresses[i].name,
|
||||
adv748x_default_addresses[i].default_addr);
|
||||
|
||||
if (state->i2c_clients[i] == NULL) {
|
||||
if (IS_ERR(state->i2c_clients[i])) {
|
||||
adv_err(state, "failed to create i2c client %u\n", i);
|
||||
return -ENOMEM;
|
||||
return PTR_ERR(state->i2c_clients[i]);
|
||||
}
|
||||
|
||||
ret = adv748x_configure_regmap(state, i);
|
||||
|
@@ -2862,10 +2862,8 @@ static void adv76xx_unregister_clients(struct adv76xx_state *state)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 1; i < ARRAY_SIZE(state->i2c_clients); ++i) {
|
||||
if (state->i2c_clients[i])
|
||||
i2c_unregister_device(state->i2c_clients[i]);
|
||||
}
|
||||
for (i = 1; i < ARRAY_SIZE(state->i2c_clients); ++i)
|
||||
i2c_unregister_device(state->i2c_clients[i]);
|
||||
}
|
||||
|
||||
static struct i2c_client *adv76xx_dummy_client(struct v4l2_subdev *sd,
|
||||
@@ -2878,14 +2876,14 @@ static struct i2c_client *adv76xx_dummy_client(struct v4l2_subdev *sd,
|
||||
struct i2c_client *new_client;
|
||||
|
||||
if (pdata && pdata->i2c_addresses[page])
|
||||
new_client = i2c_new_dummy(client->adapter,
|
||||
new_client = i2c_new_dummy_device(client->adapter,
|
||||
pdata->i2c_addresses[page]);
|
||||
else
|
||||
new_client = i2c_new_secondary_device(client,
|
||||
new_client = i2c_new_ancillary_device(client,
|
||||
adv76xx_default_addresses[page].name,
|
||||
adv76xx_default_addresses[page].default_addr);
|
||||
|
||||
if (new_client)
|
||||
if (!IS_ERR(new_client))
|
||||
io_write(sd, io_reg, new_client->addr << 1);
|
||||
|
||||
return new_client;
|
||||
@@ -3516,15 +3514,19 @@ static int adv76xx_probe(struct i2c_client *client,
|
||||
}
|
||||
|
||||
for (i = 1; i < ADV76XX_PAGE_MAX; ++i) {
|
||||
struct i2c_client *dummy_client;
|
||||
|
||||
if (!(BIT(i) & state->info->page_mask))
|
||||
continue;
|
||||
|
||||
state->i2c_clients[i] = adv76xx_dummy_client(sd, i);
|
||||
if (!state->i2c_clients[i]) {
|
||||
err = -EINVAL;
|
||||
dummy_client = adv76xx_dummy_client(sd, i);
|
||||
if (IS_ERR(dummy_client)) {
|
||||
err = PTR_ERR(dummy_client);
|
||||
v4l2_err(sd, "failed to create i2c client %u\n", i);
|
||||
goto err_i2c;
|
||||
}
|
||||
|
||||
state->i2c_clients[i] = dummy_client;
|
||||
}
|
||||
|
||||
INIT_DELAYED_WORK(&state->delayed_work_enable_hotplug,
|
||||
|
新增問題並參考
封鎖使用者