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,  	if (force_nr) {  		priv->adap.nr = force_nr;  		ret = i2c_add_numbered_adapter(&priv->adap); -		dev_err(&parent->dev, -			"failed to add mux-adapter %u as bus %u (error=%d)\n", -			chan_id, force_nr, ret); +		if (ret < 0) { +			dev_err(&parent->dev, +				"failed to add mux-adapter %u as bus %u (error=%d)\n", +				chan_id, force_nr, ret); +			goto err_free_priv; +		}  	} else {  		ret = i2c_add_adapter(&priv->adap); -		dev_err(&parent->dev, -			"failed to add mux-adapter %u (error=%d)\n", -			chan_id, ret); -	} -	if (ret < 0) { -		kfree(priv); -		return ret; +		if (ret < 0) { +			dev_err(&parent->dev, +				"failed to add mux-adapter %u (error=%d)\n", +				chan_id, ret); +			goto err_free_priv; +		}  	}  	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,  	muxc->adapter[muxc->num_adapters++] = &priv->adap;  	return 0; + +err_free_priv: +	kfree(priv); +	return ret;  }  EXPORT_SYMBOL_GPL(i2c_mux_add_adapter);  | 
