diff options
Diffstat (limited to 'drivers/i2c')
| -rw-r--r-- | drivers/i2c/busses/i2c-designware-common.c | 3 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-designware-platdrv.c | 13 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-mt65xx.c | 9 | ||||
| -rw-r--r-- | drivers/i2c/busses/i2c-npcm7xx.c | 3 | 
4 files changed, 19 insertions, 9 deletions
diff --git a/drivers/i2c/busses/i2c-designware-common.c b/drivers/i2c/busses/i2c-designware-common.c index e7d316b1401a..c023b691441e 100644 --- a/drivers/i2c/busses/i2c-designware-common.c +++ b/drivers/i2c/busses/i2c-designware-common.c @@ -477,9 +477,6 @@ int i2c_dw_prepare_clk(struct dw_i2c_dev *dev, bool prepare)  {  	int ret; -	if (IS_ERR(dev->clk)) -		return PTR_ERR(dev->clk); -  	if (prepare) {  		/* Optional interface clock */  		ret = clk_prepare_enable(dev->pclk); diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c index 70ade5306e45..ba043b547393 100644 --- a/drivers/i2c/busses/i2c-designware-platdrv.c +++ b/drivers/i2c/busses/i2c-designware-platdrv.c @@ -320,8 +320,17 @@ static int dw_i2c_plat_probe(struct platform_device *pdev)  		goto exit_reset;  	} -	dev->clk = devm_clk_get(&pdev->dev, NULL); -	if (!i2c_dw_prepare_clk(dev, true)) { +	dev->clk = devm_clk_get_optional(&pdev->dev, NULL); +	if (IS_ERR(dev->clk)) { +		ret = PTR_ERR(dev->clk); +		goto exit_reset; +	} + +	ret = i2c_dw_prepare_clk(dev, true); +	if (ret) +		goto exit_reset; + +	if (dev->clk) {  		u64 clk_khz;  		dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c index bdecb78bfc26..8e6985354fd5 100644 --- a/drivers/i2c/busses/i2c-mt65xx.c +++ b/drivers/i2c/busses/i2c-mt65xx.c @@ -1420,17 +1420,22 @@ static int mtk_i2c_probe(struct platform_device *pdev)  	if (ret < 0) {  		dev_err(&pdev->dev,  			"Request I2C IRQ %d fail\n", irq); -		return ret; +		goto err_bulk_unprepare;  	}  	i2c_set_adapdata(&i2c->adap, i2c);  	ret = i2c_add_adapter(&i2c->adap);  	if (ret) -		return ret; +		goto err_bulk_unprepare;  	platform_set_drvdata(pdev, i2c);  	return 0; + +err_bulk_unprepare: +	clk_bulk_unprepare(I2C_MT65XX_CLK_MAX, i2c->clocks); + +	return ret;  }  static int mtk_i2c_remove(struct platform_device *pdev) diff --git a/drivers/i2c/busses/i2c-npcm7xx.c b/drivers/i2c/busses/i2c-npcm7xx.c index 5960ccde6574..aede9d551130 100644 --- a/drivers/i2c/busses/i2c-npcm7xx.c +++ b/drivers/i2c/busses/i2c-npcm7xx.c @@ -2372,8 +2372,7 @@ static struct platform_driver npcm_i2c_bus_driver = {  static int __init npcm_i2c_init(void)  {  	npcm_i2c_debugfs_dir = debugfs_create_dir("npcm_i2c", NULL); -	platform_driver_register(&npcm_i2c_bus_driver); -	return 0; +	return platform_driver_register(&npcm_i2c_bus_driver);  }  module_init(npcm_i2c_init);  | 
