|
@@ -540,6 +540,8 @@ EXPORT_SYMBOL_GPL(dma_get_slave_channel);
|
|
* @mask: capabilities that the channel must satisfy
|
|
* @mask: capabilities that the channel must satisfy
|
|
* @fn: optional callback to disposition available channels
|
|
* @fn: optional callback to disposition available channels
|
|
* @fn_param: opaque parameter to pass to dma_filter_fn
|
|
* @fn_param: opaque parameter to pass to dma_filter_fn
|
|
|
|
+ *
|
|
|
|
+ * Returns pointer to appropriate DMA channel on success or NULL.
|
|
*/
|
|
*/
|
|
struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
|
struct dma_chan *__dma_request_channel(const dma_cap_mask_t *mask,
|
|
dma_filter_fn fn, void *fn_param)
|
|
dma_filter_fn fn, void *fn_param)
|
|
@@ -591,18 +593,43 @@ EXPORT_SYMBOL_GPL(__dma_request_channel);
|
|
* dma_request_slave_channel - try to allocate an exclusive slave channel
|
|
* dma_request_slave_channel - try to allocate an exclusive slave channel
|
|
* @dev: pointer to client device structure
|
|
* @dev: pointer to client device structure
|
|
* @name: slave channel name
|
|
* @name: slave channel name
|
|
|
|
+ *
|
|
|
|
+ * Returns pointer to appropriate DMA channel on success or an error pointer.
|
|
*/
|
|
*/
|
|
-struct dma_chan *dma_request_slave_channel(struct device *dev, const char *name)
|
|
|
|
|
|
+struct dma_chan *dma_request_slave_channel_reason(struct device *dev,
|
|
|
|
+ const char *name)
|
|
{
|
|
{
|
|
|
|
+ struct dma_chan *chan;
|
|
|
|
+
|
|
/* If device-tree is present get slave info from here */
|
|
/* If device-tree is present get slave info from here */
|
|
if (dev->of_node)
|
|
if (dev->of_node)
|
|
return of_dma_request_slave_channel(dev->of_node, name);
|
|
return of_dma_request_slave_channel(dev->of_node, name);
|
|
|
|
|
|
/* If device was enumerated by ACPI get slave info from here */
|
|
/* If device was enumerated by ACPI get slave info from here */
|
|
- if (ACPI_HANDLE(dev))
|
|
|
|
- return acpi_dma_request_slave_chan_by_name(dev, name);
|
|
|
|
|
|
+ if (ACPI_HANDLE(dev)) {
|
|
|
|
+ chan = acpi_dma_request_slave_chan_by_name(dev, name);
|
|
|
|
+ if (chan)
|
|
|
|
+ return chan;
|
|
|
|
+ }
|
|
|
|
|
|
- return NULL;
|
|
|
|
|
|
+ return ERR_PTR(-ENODEV);
|
|
|
|
+}
|
|
|
|
+EXPORT_SYMBOL_GPL(dma_request_slave_channel_reason);
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * dma_request_slave_channel - try to allocate an exclusive slave channel
|
|
|
|
+ * @dev: pointer to client device structure
|
|
|
|
+ * @name: slave channel name
|
|
|
|
+ *
|
|
|
|
+ * Returns pointer to appropriate DMA channel on success or NULL.
|
|
|
|
+ */
|
|
|
|
+struct dma_chan *dma_request_slave_channel(struct device *dev,
|
|
|
|
+ const char *name)
|
|
|
|
+{
|
|
|
|
+ struct dma_chan *ch = dma_request_slave_channel_reason(dev, name);
|
|
|
|
+ if (IS_ERR(ch))
|
|
|
|
+ return NULL;
|
|
|
|
+ return ch;
|
|
}
|
|
}
|
|
EXPORT_SYMBOL_GPL(dma_request_slave_channel);
|
|
EXPORT_SYMBOL_GPL(dma_request_slave_channel);
|
|
|
|
|