From: vinod.koul@intel.com (Vinod Koul)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support
Date: Mon, 20 Jan 2014 15:05:41 +0530 [thread overview]
Message-ID: <20140120093541.GX26823@intel.com> (raw)
In-Reply-To: <43d79ce905e24e9bb58ef49ac19db7d7@BL2PR03MB467.namprd03.prod.outlook.com>
On Mon, Jan 20, 2014 at 09:06:43AM +0000, Jingchang Lu wrote:
>
>
> > -----Original Message-----
> > From: Vinod Koul [mailto:vinod.koul at intel.com]
> > Sent: Monday, January 20, 2014 3:40 PM
> > To: Lu Jingchang-B35083
> > Cc: dan.j.williams at intel.com; arnd at arndb.de; shawn.guo at linaro.org;
> > pawel.moll at arm.com; mark.rutland at arm.com; swarren at wwwdotorg.org; linux-
> > kernel at vger.kernel.org; linux-arm-kernel at lists.infradead.org;
> > devicetree at vger.kernel.org; Wang Huan-B18965
> > Subject: Re: [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support
> >
> > On Fri, Jan 17, 2014 at 02:04:44PM +0800, Jingchang Lu wrote:
> > > Add Freescale enhanced direct memory(eDMA) controller support.
> > > This module can be found on Vybrid and LS-1 SoCs.
> > >
> > > Signed-off-by: Alison Wang <b18965@freescale.com>
> > > Signed-off-by: Jingchang Lu <b35083@freescale.com>
> > > Acked-by: Arnd Bergmann <arnd@arndb.de>
> > > ---
> >
> > > +static int fsl_edma_control(struct dma_chan *chan, enum dma_ctrl_cmd
> > cmd,
> > > + unsigned long arg)
> > > +{
> > > + struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
> > > + struct dma_slave_config *cfg = (void *)arg;
> > > + unsigned long flags;
> > > + LIST_HEAD(head);
> > > +
> > > + switch (cmd) {
> > > + case DMA_TERMINATE_ALL:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + fsl_edma_disable_request(fsl_chan);
> > > + fsl_chan->edesc = NULL;
> > > + vchan_get_all_descriptors(&fsl_chan->vchan, &head);
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + vchan_dma_desc_free_list(&fsl_chan->vchan, &head);
> > > + return 0;
> > well what happens to the current ongoing transactions, i don't see those
> > getting
> > terminated?
> The fsl_edma_disable_request(fsl_chan) would end the channel's ongoing transaction, then
> the eDMA would not response to device dma request, and the vchan_dma_desc_free_list()
> will release all associate memory. Thanks.
Can you explain a bit more how terminate will happen, given taht you are using
same thing for pause?
> >
> > > +
> > > + case DMA_SLAVE_CONFIG:
> > > + fsl_chan->fsc.dir = cfg->direction;
> > > + if (cfg->direction == DMA_DEV_TO_MEM) {
> > > + fsl_chan->fsc.dev_addr = cfg->src_addr;
> > > + fsl_chan->fsc.addr_width = cfg->src_addr_width;
> > > + fsl_chan->fsc.burst = cfg->src_maxburst;
> > > + fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg-
> > >src_addr_width);
> > > + } else if (cfg->direction == DMA_MEM_TO_DEV) {
> > > + fsl_chan->fsc.dev_addr = cfg->dst_addr;
> > > + fsl_chan->fsc.addr_width = cfg->dst_addr_width;
> > > + fsl_chan->fsc.burst = cfg->dst_maxburst;
> > > + fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg-
> > >dst_addr_width);
> > okay atrr is address width, why not save this standard struct instead?
> The value saved in fsc.attr is transferred by fsl_edma_get_tcd_attr(), it can
> be set into the channel control register later directly. the edma driver doesn't
> need to save all dma_slave_config parameters, so it only gets the necessaries.
Okay then this apprach looks okay
> > > + } else {
> > > + return -EINVAL;
> > > + }
> > > + return 0;
> > > +
> > > + case DMA_PAUSE:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + if (fsl_chan->edesc) {
> > > + fsl_edma_disable_request(fsl_chan);
> > > + fsl_chan->status = DMA_PAUSED;
> > > + }
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + return 0;
> > > +
> > > + case DMA_RESUME:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + if (fsl_chan->edesc) {
> > > + fsl_edma_enable_request(fsl_chan);
> > > + fsl_chan->status = DMA_IN_PROGRESS;
> > > + }
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + return 0;
> > > +
> > > + default:
> > > + return -ENXIO;
> > > + }
> > > +}
> > > +
> >
> > > +static struct fsl_edma_desc *fsl_edma_alloc_desc(struct fsl_edma_chan
> > *fsl_chan,
> > > + int sg_len)
> > > +{
> > > + struct fsl_edma_desc *fsl_desc;
> > > + int i;
> > > +
> > > + fsl_desc = kzalloc(sizeof(*fsl_desc) + sizeof(struct
> > fsl_edma_sw_tcd) * sg_len,
> > > + GFP_NOWAIT);
> > > + if (!fsl_desc)
> > > + return NULL;
> > > +
> > > + fsl_desc->echan = fsl_chan;
> > > + fsl_desc->n_tcds = sg_len;
> > > + for (i = 0; i < sg_len; i++) {
> > > + fsl_desc->tcd[i].vtcd = dma_pool_alloc(fsl_chan->tcd_pool,
> > > + GFP_NOWAIT, &fsl_desc->tcd[i].ptcd);
> > > + if (!fsl_desc->tcd[i].vtcd)
> > > + goto err;
> > > + }
> > > + return fsl_desc;
> > > +
> > > +err:
> > > + while (--i >= 0)
> > > + dma_pool_free(fsl_chan->tcd_pool, fsl_desc->tcd[i].vtcd,
> > > + fsl_desc->tcd[i].ptcd);
> > > + kfree(fsl_desc);
> > > + return NULL;
> > > +}
> > > +
> > > +static struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
> > > + struct dma_chan *chan, dma_addr_t dma_addr, size_t buf_len,
> > > + size_t period_len, enum dma_transfer_direction direction,
> > > + unsigned long flags, void *context)
> > > +{
> > you may want to implement the capablities api subsequently for audio
> > usage.
> Do you mean the device_slave_caps function? If it is, I will add it.
Yes, that can be incrementally added..
--
WARNING: multiple messages have this Message-ID (diff)
From: Vinod Koul <vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Jingchang Lu <jingchang.lu-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Cc: "dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org"
<dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
"arnd-r2nGTMty4D4@public.gmane.org"
<arnd-r2nGTMty4D4@public.gmane.org>,
"shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
<shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
"pawel.moll-5wv7dgnIgG8@public.gmane.org"
<pawel.moll-5wv7dgnIgG8@public.gmane.org>,
"mark.rutland-5wv7dgnIgG8@public.gmane.org"
<mark.rutland-5wv7dgnIgG8@public.gmane.org>,
"swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org"
<swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>,
"linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
"devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
<devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Huan Wang <Huan.Wang-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
Subject: Re: [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support
Date: Mon, 20 Jan 2014 15:05:41 +0530 [thread overview]
Message-ID: <20140120093541.GX26823@intel.com> (raw)
In-Reply-To: <43d79ce905e24e9bb58ef49ac19db7d7-AZ66ij2kwab4MB1ZSnT4iOO6mTEJWrR4XA4E9RH9d+qIuWR1G4zioA@public.gmane.org>
On Mon, Jan 20, 2014 at 09:06:43AM +0000, Jingchang Lu wrote:
>
>
> > -----Original Message-----
> > From: Vinod Koul [mailto:vinod.koul-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org]
> > Sent: Monday, January 20, 2014 3:40 PM
> > To: Lu Jingchang-B35083
> > Cc: dan.j.williams-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org; arnd-r2nGTMty4D4@public.gmane.org; shawn.guo-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org;
> > pawel.moll-5wv7dgnIgG8@public.gmane.org; mark.rutland-5wv7dgnIgG8@public.gmane.org; swarren-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org; linux-
> > kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org;
> > devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org; Wang Huan-B18965
> > Subject: Re: [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support
> >
> > On Fri, Jan 17, 2014 at 02:04:44PM +0800, Jingchang Lu wrote:
> > > Add Freescale enhanced direct memory(eDMA) controller support.
> > > This module can be found on Vybrid and LS-1 SoCs.
> > >
> > > Signed-off-by: Alison Wang <b18965-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > > Signed-off-by: Jingchang Lu <b35083-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
> > > Acked-by: Arnd Bergmann <arnd-r2nGTMty4D4@public.gmane.org>
> > > ---
> >
> > > +static int fsl_edma_control(struct dma_chan *chan, enum dma_ctrl_cmd
> > cmd,
> > > + unsigned long arg)
> > > +{
> > > + struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
> > > + struct dma_slave_config *cfg = (void *)arg;
> > > + unsigned long flags;
> > > + LIST_HEAD(head);
> > > +
> > > + switch (cmd) {
> > > + case DMA_TERMINATE_ALL:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + fsl_edma_disable_request(fsl_chan);
> > > + fsl_chan->edesc = NULL;
> > > + vchan_get_all_descriptors(&fsl_chan->vchan, &head);
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + vchan_dma_desc_free_list(&fsl_chan->vchan, &head);
> > > + return 0;
> > well what happens to the current ongoing transactions, i don't see those
> > getting
> > terminated?
> The fsl_edma_disable_request(fsl_chan) would end the channel's ongoing transaction, then
> the eDMA would not response to device dma request, and the vchan_dma_desc_free_list()
> will release all associate memory. Thanks.
Can you explain a bit more how terminate will happen, given taht you are using
same thing for pause?
> >
> > > +
> > > + case DMA_SLAVE_CONFIG:
> > > + fsl_chan->fsc.dir = cfg->direction;
> > > + if (cfg->direction == DMA_DEV_TO_MEM) {
> > > + fsl_chan->fsc.dev_addr = cfg->src_addr;
> > > + fsl_chan->fsc.addr_width = cfg->src_addr_width;
> > > + fsl_chan->fsc.burst = cfg->src_maxburst;
> > > + fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg-
> > >src_addr_width);
> > > + } else if (cfg->direction == DMA_MEM_TO_DEV) {
> > > + fsl_chan->fsc.dev_addr = cfg->dst_addr;
> > > + fsl_chan->fsc.addr_width = cfg->dst_addr_width;
> > > + fsl_chan->fsc.burst = cfg->dst_maxburst;
> > > + fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg-
> > >dst_addr_width);
> > okay atrr is address width, why not save this standard struct instead?
> The value saved in fsc.attr is transferred by fsl_edma_get_tcd_attr(), it can
> be set into the channel control register later directly. the edma driver doesn't
> need to save all dma_slave_config parameters, so it only gets the necessaries.
Okay then this apprach looks okay
> > > + } else {
> > > + return -EINVAL;
> > > + }
> > > + return 0;
> > > +
> > > + case DMA_PAUSE:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + if (fsl_chan->edesc) {
> > > + fsl_edma_disable_request(fsl_chan);
> > > + fsl_chan->status = DMA_PAUSED;
> > > + }
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + return 0;
> > > +
> > > + case DMA_RESUME:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + if (fsl_chan->edesc) {
> > > + fsl_edma_enable_request(fsl_chan);
> > > + fsl_chan->status = DMA_IN_PROGRESS;
> > > + }
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + return 0;
> > > +
> > > + default:
> > > + return -ENXIO;
> > > + }
> > > +}
> > > +
> >
> > > +static struct fsl_edma_desc *fsl_edma_alloc_desc(struct fsl_edma_chan
> > *fsl_chan,
> > > + int sg_len)
> > > +{
> > > + struct fsl_edma_desc *fsl_desc;
> > > + int i;
> > > +
> > > + fsl_desc = kzalloc(sizeof(*fsl_desc) + sizeof(struct
> > fsl_edma_sw_tcd) * sg_len,
> > > + GFP_NOWAIT);
> > > + if (!fsl_desc)
> > > + return NULL;
> > > +
> > > + fsl_desc->echan = fsl_chan;
> > > + fsl_desc->n_tcds = sg_len;
> > > + for (i = 0; i < sg_len; i++) {
> > > + fsl_desc->tcd[i].vtcd = dma_pool_alloc(fsl_chan->tcd_pool,
> > > + GFP_NOWAIT, &fsl_desc->tcd[i].ptcd);
> > > + if (!fsl_desc->tcd[i].vtcd)
> > > + goto err;
> > > + }
> > > + return fsl_desc;
> > > +
> > > +err:
> > > + while (--i >= 0)
> > > + dma_pool_free(fsl_chan->tcd_pool, fsl_desc->tcd[i].vtcd,
> > > + fsl_desc->tcd[i].ptcd);
> > > + kfree(fsl_desc);
> > > + return NULL;
> > > +}
> > > +
> > > +static struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
> > > + struct dma_chan *chan, dma_addr_t dma_addr, size_t buf_len,
> > > + size_t period_len, enum dma_transfer_direction direction,
> > > + unsigned long flags, void *context)
> > > +{
> > you may want to implement the capablities api subsequently for audio
> > usage.
> Do you mean the device_slave_caps function? If it is, I will add it.
Yes, that can be incrementally added..
--
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
WARNING: multiple messages have this Message-ID (diff)
From: Vinod Koul <vinod.koul@intel.com>
To: Jingchang Lu <jingchang.lu@freescale.com>
Cc: "dan.j.williams@intel.com" <dan.j.williams@intel.com>,
"arnd@arndb.de" <arnd@arndb.de>,
"shawn.guo@linaro.org" <shawn.guo@linaro.org>,
"pawel.moll@arm.com" <pawel.moll@arm.com>,
"mark.rutland@arm.com" <mark.rutland@arm.com>,
"swarren@wwwdotorg.org" <swarren@wwwdotorg.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Huan Wang <Huan.Wang@freescale.com>
Subject: Re: [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support
Date: Mon, 20 Jan 2014 15:05:41 +0530 [thread overview]
Message-ID: <20140120093541.GX26823@intel.com> (raw)
In-Reply-To: <43d79ce905e24e9bb58ef49ac19db7d7@BL2PR03MB467.namprd03.prod.outlook.com>
On Mon, Jan 20, 2014 at 09:06:43AM +0000, Jingchang Lu wrote:
>
>
> > -----Original Message-----
> > From: Vinod Koul [mailto:vinod.koul@intel.com]
> > Sent: Monday, January 20, 2014 3:40 PM
> > To: Lu Jingchang-B35083
> > Cc: dan.j.williams@intel.com; arnd@arndb.de; shawn.guo@linaro.org;
> > pawel.moll@arm.com; mark.rutland@arm.com; swarren@wwwdotorg.org; linux-
> > kernel@vger.kernel.org; linux-arm-kernel@lists.infradead.org;
> > devicetree@vger.kernel.org; Wang Huan-B18965
> > Subject: Re: [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support
> >
> > On Fri, Jan 17, 2014 at 02:04:44PM +0800, Jingchang Lu wrote:
> > > Add Freescale enhanced direct memory(eDMA) controller support.
> > > This module can be found on Vybrid and LS-1 SoCs.
> > >
> > > Signed-off-by: Alison Wang <b18965@freescale.com>
> > > Signed-off-by: Jingchang Lu <b35083@freescale.com>
> > > Acked-by: Arnd Bergmann <arnd@arndb.de>
> > > ---
> >
> > > +static int fsl_edma_control(struct dma_chan *chan, enum dma_ctrl_cmd
> > cmd,
> > > + unsigned long arg)
> > > +{
> > > + struct fsl_edma_chan *fsl_chan = to_fsl_edma_chan(chan);
> > > + struct dma_slave_config *cfg = (void *)arg;
> > > + unsigned long flags;
> > > + LIST_HEAD(head);
> > > +
> > > + switch (cmd) {
> > > + case DMA_TERMINATE_ALL:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + fsl_edma_disable_request(fsl_chan);
> > > + fsl_chan->edesc = NULL;
> > > + vchan_get_all_descriptors(&fsl_chan->vchan, &head);
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + vchan_dma_desc_free_list(&fsl_chan->vchan, &head);
> > > + return 0;
> > well what happens to the current ongoing transactions, i don't see those
> > getting
> > terminated?
> The fsl_edma_disable_request(fsl_chan) would end the channel's ongoing transaction, then
> the eDMA would not response to device dma request, and the vchan_dma_desc_free_list()
> will release all associate memory. Thanks.
Can you explain a bit more how terminate will happen, given taht you are using
same thing for pause?
> >
> > > +
> > > + case DMA_SLAVE_CONFIG:
> > > + fsl_chan->fsc.dir = cfg->direction;
> > > + if (cfg->direction == DMA_DEV_TO_MEM) {
> > > + fsl_chan->fsc.dev_addr = cfg->src_addr;
> > > + fsl_chan->fsc.addr_width = cfg->src_addr_width;
> > > + fsl_chan->fsc.burst = cfg->src_maxburst;
> > > + fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg-
> > >src_addr_width);
> > > + } else if (cfg->direction == DMA_MEM_TO_DEV) {
> > > + fsl_chan->fsc.dev_addr = cfg->dst_addr;
> > > + fsl_chan->fsc.addr_width = cfg->dst_addr_width;
> > > + fsl_chan->fsc.burst = cfg->dst_maxburst;
> > > + fsl_chan->fsc.attr = fsl_edma_get_tcd_attr(cfg-
> > >dst_addr_width);
> > okay atrr is address width, why not save this standard struct instead?
> The value saved in fsc.attr is transferred by fsl_edma_get_tcd_attr(), it can
> be set into the channel control register later directly. the edma driver doesn't
> need to save all dma_slave_config parameters, so it only gets the necessaries.
Okay then this apprach looks okay
> > > + } else {
> > > + return -EINVAL;
> > > + }
> > > + return 0;
> > > +
> > > + case DMA_PAUSE:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + if (fsl_chan->edesc) {
> > > + fsl_edma_disable_request(fsl_chan);
> > > + fsl_chan->status = DMA_PAUSED;
> > > + }
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + return 0;
> > > +
> > > + case DMA_RESUME:
> > > + spin_lock_irqsave(&fsl_chan->vchan.lock, flags);
> > > + if (fsl_chan->edesc) {
> > > + fsl_edma_enable_request(fsl_chan);
> > > + fsl_chan->status = DMA_IN_PROGRESS;
> > > + }
> > > + spin_unlock_irqrestore(&fsl_chan->vchan.lock, flags);
> > > + return 0;
> > > +
> > > + default:
> > > + return -ENXIO;
> > > + }
> > > +}
> > > +
> >
> > > +static struct fsl_edma_desc *fsl_edma_alloc_desc(struct fsl_edma_chan
> > *fsl_chan,
> > > + int sg_len)
> > > +{
> > > + struct fsl_edma_desc *fsl_desc;
> > > + int i;
> > > +
> > > + fsl_desc = kzalloc(sizeof(*fsl_desc) + sizeof(struct
> > fsl_edma_sw_tcd) * sg_len,
> > > + GFP_NOWAIT);
> > > + if (!fsl_desc)
> > > + return NULL;
> > > +
> > > + fsl_desc->echan = fsl_chan;
> > > + fsl_desc->n_tcds = sg_len;
> > > + for (i = 0; i < sg_len; i++) {
> > > + fsl_desc->tcd[i].vtcd = dma_pool_alloc(fsl_chan->tcd_pool,
> > > + GFP_NOWAIT, &fsl_desc->tcd[i].ptcd);
> > > + if (!fsl_desc->tcd[i].vtcd)
> > > + goto err;
> > > + }
> > > + return fsl_desc;
> > > +
> > > +err:
> > > + while (--i >= 0)
> > > + dma_pool_free(fsl_chan->tcd_pool, fsl_desc->tcd[i].vtcd,
> > > + fsl_desc->tcd[i].ptcd);
> > > + kfree(fsl_desc);
> > > + return NULL;
> > > +}
> > > +
> > > +static struct dma_async_tx_descriptor *fsl_edma_prep_dma_cyclic(
> > > + struct dma_chan *chan, dma_addr_t dma_addr, size_t buf_len,
> > > + size_t period_len, enum dma_transfer_direction direction,
> > > + unsigned long flags, void *context)
> > > +{
> > you may want to implement the capablities api subsequently for audio
> > usage.
> Do you mean the device_slave_caps function? If it is, I will add it.
Yes, that can be incrementally added..
--
next prev parent reply other threads:[~2014-01-20 9:35 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-01-17 6:04 [PATCHv10 0/2] dma: Add Freescale eDMA engine driver support Jingchang Lu
2014-01-17 6:04 ` Jingchang Lu
2014-01-17 6:04 ` Jingchang Lu
2014-01-17 6:04 ` [PATCHv10 1/2] ARM: dts: vf610: Add eDMA node Jingchang Lu
2014-01-17 6:04 ` Jingchang Lu
2014-01-17 6:04 ` Jingchang Lu
2014-01-17 6:04 ` [PATCHv10 2/2] dma: Add Freescale eDMA engine driver support Jingchang Lu
2014-01-17 6:04 ` Jingchang Lu
2014-01-17 6:04 ` Jingchang Lu
2014-01-20 7:40 ` Vinod Koul
2014-01-20 7:40 ` Vinod Koul
2014-01-20 9:06 ` Jingchang Lu
2014-01-20 9:06 ` Jingchang Lu
2014-01-20 9:06 ` Jingchang Lu
2014-01-20 9:35 ` Vinod Koul [this message]
2014-01-20 9:35 ` Vinod Koul
2014-01-20 9:35 ` Vinod Koul
2014-01-20 11:05 ` Jingchang Lu
2014-01-20 11:05 ` Jingchang Lu
2014-01-20 11:05 ` Jingchang Lu
2014-01-20 10:20 ` Vinod Koul
2014-01-20 10:20 ` Vinod Koul
2014-01-20 10:20 ` Vinod Koul
2014-01-20 14:26 ` Jingchang Lu
2014-01-20 14:26 ` Jingchang Lu
2014-01-20 14:26 ` Jingchang Lu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140120093541.GX26823@intel.com \
--to=vinod.koul@intel.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.