diff options
Diffstat (limited to 'drivers/i2c/i2c-mux.c')
-rw-r--r-- | drivers/i2c/i2c-mux.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/drivers/i2c/i2c-mux.c b/drivers/i2c/i2c-mux.c index 26f7237558ba..9669ca4937b8 100644 --- a/drivers/i2c/i2c-mux.c +++ b/drivers/i2c/i2c-mux.c | |||
@@ -395,18 +395,20 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, | |||
395 | if (force_nr) { | 395 | if (force_nr) { |
396 | priv->adap.nr = force_nr; | 396 | priv->adap.nr = force_nr; |
397 | ret = i2c_add_numbered_adapter(&priv->adap); | 397 | ret = i2c_add_numbered_adapter(&priv->adap); |
398 | dev_err(&parent->dev, | 398 | if (ret < 0) { |
399 | "failed to add mux-adapter %u as bus %u (error=%d)\n", | 399 | dev_err(&parent->dev, |
400 | chan_id, force_nr, ret); | 400 | "failed to add mux-adapter %u as bus %u (error=%d)\n", |
401 | chan_id, force_nr, ret); | ||
402 | goto err_free_priv; | ||
403 | } | ||
401 | } else { | 404 | } else { |
402 | ret = i2c_add_adapter(&priv->adap); | 405 | ret = i2c_add_adapter(&priv->adap); |
403 | dev_err(&parent->dev, | 406 | if (ret < 0) { |
404 | "failed to add mux-adapter %u (error=%d)\n", | 407 | dev_err(&parent->dev, |
405 | chan_id, ret); | 408 | "failed to add mux-adapter %u (error=%d)\n", |
406 | } | 409 | chan_id, ret); |
407 | if (ret < 0) { | 410 | goto err_free_priv; |
408 | kfree(priv); | 411 | } |
409 | return ret; | ||
410 | } | 412 | } |
411 | 413 | ||
412 | WARN(sysfs_create_link(&priv->adap.dev.kobj, &muxc->dev->kobj, | 414 | WARN(sysfs_create_link(&priv->adap.dev.kobj, &muxc->dev->kobj, |
@@ -422,6 +424,10 @@ int i2c_mux_add_adapter(struct i2c_mux_core *muxc, | |||
422 | 424 | ||
423 | muxc->adapter[muxc->num_adapters++] = &priv->adap; | 425 | muxc->adapter[muxc->num_adapters++] = &priv->adap; |
424 | return 0; | 426 | return 0; |
427 | |||
428 | err_free_priv: | ||
429 | kfree(priv); | ||
430 | return ret; | ||
425 | } | 431 | } |
426 | EXPORT_SYMBOL_GPL(i2c_mux_add_adapter); | 432 | EXPORT_SYMBOL_GPL(i2c_mux_add_adapter); |
427 | 433 | ||