• S
    dma: add channel request API that supports deferred probe · 0ad7c000
    Stephen Warren 提交于
    dma_request_slave_channel() simply returns NULL whenever DMA channel
    lookup fails. Lookup could fail for two distinct reasons:
    
    a) No DMA specification exists for the channel name.
       This includes situations where no DMA specifications exist at all, or
       other general lookup problems.
    
    b) A DMA specification does exist, yet the driver for that channel is not
       yet registered.
    
    Case (b) should trigger deferred probe in client drivers. However, since
    they have no way to differentiate the two situations, it cannot.
    
    Implement new function dma_request_slave_channel_reason(), which performs
    identically to dma_request_slave_channel(), except that it returns an
    error-pointer rather than NULL, which allows callers to detect when
    deferred probe should occur.
    
    Eventually, all drivers should be converted to this new API, the old API
    removed, and the new API renamed to the more desirable name. This patch
    doesn't convert the existing API and all drivers in one go, since some
    drivers call dma_request_slave_channel() then dma_request_channel() if
    that fails. That would require either modifying dma_request_channel() in
    the same way, or adding extra error-handling code to all affected
    drivers, and there are close to 100 drivers using the other API, rather
    than just the 15-20 or so that use dma_request_slave_channel(), which
    might be tenable in a single patch.
    
    acpi_dma_request_slave_chan_by_name() doesn't currently implement
    deferred probe. It should, but this will be addressed later.
    Acked-by: NDan Williams <dan.j.williams@intel.com>
    Signed-off-by: NStephen Warren <swarren@nvidia.com>
    Signed-off-by: NVinod Koul <vinod.koul@intel.com>
    0ad7c000
dmaengine.c 32.2 KB