diff options
Diffstat (limited to 'drivers/dma/of-dma.c')
| -rw-r--r-- | drivers/dma/of-dma.c | 15 | 
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/dma/of-dma.c b/drivers/dma/of-dma.c index 0b88dd3d05f..e8fe9dc455f 100644 --- a/drivers/dma/of-dma.c +++ b/drivers/dma/of-dma.c @@ -143,7 +143,7 @@ static int of_dma_match_channel(struct device_node *np, const char *name,   * @np:		device node to get DMA request from   * @name:	name of desired channel   * - * Returns pointer to appropriate dma channel on success or NULL on error. + * Returns pointer to appropriate DMA channel on success or an error pointer.   */  struct dma_chan *of_dma_request_slave_channel(struct device_node *np,  					      const char *name) @@ -152,17 +152,18 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,  	struct of_dma		*ofdma;  	struct dma_chan		*chan;  	int			count, i; +	int			ret_no_channel = -ENODEV;  	if (!np || !name) {  		pr_err("%s: not enough information provided\n", __func__); -		return NULL; +		return ERR_PTR(-ENODEV);  	}  	count = of_property_count_strings(np, "dma-names");  	if (count < 0) {  		pr_err("%s: dma-names property of node '%s' missing or empty\n",  			__func__, np->full_name); -		return NULL; +		return ERR_PTR(-ENODEV);  	}  	for (i = 0; i < count; i++) { @@ -172,10 +173,12 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,  		mutex_lock(&of_dma_lock);  		ofdma = of_dma_find_controller(&dma_spec); -		if (ofdma) +		if (ofdma) {  			chan = ofdma->of_dma_xlate(&dma_spec, ofdma); -		else +		} else { +			ret_no_channel = -EPROBE_DEFER;  			chan = NULL; +		}  		mutex_unlock(&of_dma_lock); @@ -185,7 +188,7 @@ struct dma_chan *of_dma_request_slave_channel(struct device_node *np,  			return chan;  	} -	return NULL; +	return ERR_PTR(ret_no_channel);  }  /**  | 
