>>>>>> +static int jz4740_dma_alloc_chan_resources(struct dma_chan *c) >>>>>> +{ >>>>>> + struct jz4740_dmaengine_chan *chan = to_jz4740_dma_chan(c); >>>>>> + >>>>>> + chan->jz_chan = jz4740_dma_request(chan, NULL); >>>>>> + if (!chan->jz_chan) >>>>>> + return -EBUSY; >>>>>> + >>>>>> + jz4740_dma_set_complete_cb(chan->jz_chan, jz4740_dma_complete_cb); >>>>>> + >>>>>> + return 0; >>>>> Zero is not expected value, you need to return the descriptors allocated >>>>> sucessfully. >>>> >>>> Well, zero descriptors have been allocated. As far as I can see only a negative >>>> return value is treated as an error. Also the core doesn't seem to use the >>>> return value for anything else but checking if it is an error. >>> This is the API defination >>> * @device_alloc_chan_resources: allocate resources and return the >>> * number of allocated descriptors >>> >> >> But 0 is still the number of descriptors that have been pre-allocated. > and that should change, typically the driver will preallocate a pool of > descriptors. These are to be used later for .device_prep_xxx calls. > Since the size of the descriptor is not know in advance this is not possible. - Lars