dmaengine: Simplify dma_async_device_register()
There are a lot of duplicate codes for checking if the dma has some capability. Define a temporary macro that is used to check if the dma claims some capability and if the corresponding function is implemented. Signed-off-by: Yajun Deng <yajun.deng@linux.dev> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Link: https://lore.kernel.org/r/20230815072346.2798927-1-yajun.deng@linux.dev Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
33a0b73454
commit
81ebed8aa2
|
@ -1147,69 +1147,27 @@ int dma_async_device_register(struct dma_device *device)
|
|||
|
||||
device->owner = device->dev->driver->owner;
|
||||
|
||||
if (dma_has_cap(DMA_MEMCPY, device->cap_mask) && !device->device_prep_dma_memcpy) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_MEMCPY");
|
||||
return -EIO;
|
||||
}
|
||||
#define CHECK_CAP(_name, _type) \
|
||||
{ \
|
||||
if (dma_has_cap(_type, device->cap_mask) && !device->device_prep_##_name) { \
|
||||
dev_err(device->dev, \
|
||||
"Device claims capability %s, but op is not defined\n", \
|
||||
__stringify(_type)); \
|
||||
return -EIO; \
|
||||
} \
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_XOR, device->cap_mask) && !device->device_prep_dma_xor) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_XOR");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_XOR_VAL, device->cap_mask) && !device->device_prep_dma_xor_val) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_XOR_VAL");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_PQ, device->cap_mask) && !device->device_prep_dma_pq) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_PQ");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_PQ_VAL, device->cap_mask) && !device->device_prep_dma_pq_val) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_PQ_VAL");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_MEMSET, device->cap_mask) && !device->device_prep_dma_memset) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_MEMSET");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_INTERRUPT, device->cap_mask) && !device->device_prep_dma_interrupt) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_INTERRUPT");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_CYCLIC, device->cap_mask) && !device->device_prep_dma_cyclic) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_CYCLIC");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
if (dma_has_cap(DMA_INTERLEAVE, device->cap_mask) && !device->device_prep_interleaved_dma) {
|
||||
dev_err(device->dev,
|
||||
"Device claims capability %s, but op is not defined\n",
|
||||
"DMA_INTERLEAVE");
|
||||
return -EIO;
|
||||
}
|
||||
CHECK_CAP(dma_memcpy, DMA_MEMCPY);
|
||||
CHECK_CAP(dma_xor, DMA_XOR);
|
||||
CHECK_CAP(dma_xor_val, DMA_XOR_VAL);
|
||||
CHECK_CAP(dma_pq, DMA_PQ);
|
||||
CHECK_CAP(dma_pq_val, DMA_PQ_VAL);
|
||||
CHECK_CAP(dma_memset, DMA_MEMSET);
|
||||
CHECK_CAP(dma_interrupt, DMA_INTERRUPT);
|
||||
CHECK_CAP(dma_cyclic, DMA_CYCLIC);
|
||||
CHECK_CAP(interleaved_dma, DMA_INTERLEAVE);
|
||||
|
||||
#undef CHECK_CAP
|
||||
|
||||
if (!device->device_tx_status) {
|
||||
dev_err(device->dev, "Device tx_status is not defined\n");
|
||||
|
|
Loading…
Reference in New Issue