forked from mirrors/linux
		
	i2c: imx: improve the error handling in i2c_imx_dma_request()
Improve the error handling in i2c_imx_dma_request() and let it return an error indication that the caller then can handle accordingly. Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de> Acked-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de> Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
This commit is contained in:
		
							parent
							
								
									5b3a23a3cc
								
							
						
					
					
						commit
						e1ab9a468e
					
				
					 1 changed files with 10 additions and 6 deletions
				
			
		|  | @ -273,8 +273,8 @@ static inline unsigned char imx_i2c_read_reg(struct imx_i2c_struct *i2c_imx, | |||
| } | ||||
| 
 | ||||
| /* Functions for DMA support */ | ||||
| static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, | ||||
| 						dma_addr_t phy_addr) | ||||
| static int i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, | ||||
| 			       dma_addr_t phy_addr) | ||||
| { | ||||
| 	struct imx_i2c_dma *dma; | ||||
| 	struct dma_slave_config dma_sconfig; | ||||
|  | @ -283,7 +283,7 @@ static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, | |||
| 
 | ||||
| 	dma = devm_kzalloc(dev, sizeof(*dma), GFP_KERNEL); | ||||
| 	if (!dma) | ||||
| 		return; | ||||
| 		return -ENOMEM; | ||||
| 
 | ||||
| 	dma->chan_tx = dma_request_chan(dev, "tx"); | ||||
| 	if (IS_ERR(dma->chan_tx)) { | ||||
|  | @ -328,7 +328,7 @@ static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, | |||
| 	dev_info(dev, "using %s (tx) and %s (rx) for DMA transfers\n", | ||||
| 		dma_chan_name(dma->chan_tx), dma_chan_name(dma->chan_rx)); | ||||
| 
 | ||||
| 	return; | ||||
| 	return 0; | ||||
| 
 | ||||
| fail_rx: | ||||
| 	dma_release_channel(dma->chan_rx); | ||||
|  | @ -336,6 +336,8 @@ static void i2c_imx_dma_request(struct imx_i2c_struct *i2c_imx, | |||
| 	dma_release_channel(dma->chan_tx); | ||||
| fail_al: | ||||
| 	devm_kfree(dev, dma); | ||||
| 	/* return successfully if there is no dma support */ | ||||
| 	return ret == -ENODEV ? 0 : ret; | ||||
| } | ||||
| 
 | ||||
| static void i2c_imx_dma_callback(void *arg) | ||||
|  | @ -1163,11 +1165,13 @@ static int i2c_imx_probe(struct platform_device *pdev) | |||
| 	dev_dbg(&i2c_imx->adapter.dev, "device resources: %pR\n", res); | ||||
| 	dev_dbg(&i2c_imx->adapter.dev, "adapter name: \"%s\"\n", | ||||
| 		i2c_imx->adapter.name); | ||||
| 	dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); | ||||
| 
 | ||||
| 	/* Init DMA config if supported */ | ||||
| 	i2c_imx_dma_request(i2c_imx, phy_addr); | ||||
| 	ret = i2c_imx_dma_request(i2c_imx, phy_addr); | ||||
| 	if (ret < 0) | ||||
| 		goto clk_notifier_unregister; | ||||
| 
 | ||||
| 	dev_info(&i2c_imx->adapter.dev, "IMX I2C adapter registered\n"); | ||||
| 	return 0;   /* Return OK */ | ||||
| 
 | ||||
| clk_notifier_unregister: | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Oleksij Rempel
						Oleksij Rempel