Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

DMA: PL330: Add new pl330 filter for DT case.

This patch adds a new pl330_dt_filter for DT case to filter the
required channel based on the new filter params and modifies the
old filter only for non-DT case as suggested by Arnd Bergmann.

Signed-off-by: Padmavathi Venna <padma.v@samsung.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>

authored by

Padmavathi Venna and committed by
Vinod Koul
34d19355 a7220873

+15 -14
+15 -14
drivers/dma/pl330.c
··· 606 606 struct dma_pl330_chan *pchan; 607 607 }; 608 608 609 + struct dma_pl330_filter_args { 610 + struct dma_pl330_dmac *pdmac; 611 + unsigned int chan_id; 612 + }; 613 + 609 614 static inline void _callback(struct pl330_req *r, enum pl330_op_err err) 610 615 { 611 616 if (r && r->xfer_cb) ··· 2357 2352 tasklet_schedule(&pch->task); 2358 2353 } 2359 2354 2355 + static bool pl330_dt_filter(struct dma_chan *chan, void *param) 2356 + { 2357 + struct dma_pl330_filter_args *fargs = param; 2358 + 2359 + if (chan->device != &fargs->pdmac->ddma) 2360 + return false; 2361 + 2362 + return (chan->chan_id == fargs->chan_id); 2363 + } 2364 + 2360 2365 bool pl330_filter(struct dma_chan *chan, void *param) 2361 2366 { 2362 2367 u8 *peri_id; 2363 2368 2364 2369 if (chan->device->dev->driver != &pl330_driver.drv) 2365 2370 return false; 2366 - 2367 - #ifdef CONFIG_OF 2368 - if (chan->device->dev->of_node) { 2369 - const __be32 *prop_value; 2370 - phandle phandle; 2371 - struct device_node *node; 2372 - 2373 - prop_value = ((struct property *)param)->value; 2374 - phandle = be32_to_cpup(prop_value++); 2375 - node = of_find_node_by_phandle(phandle); 2376 - return ((chan->private == node) && 2377 - (chan->chan_id == be32_to_cpup(prop_value))); 2378 - } 2379 - #endif 2380 2371 2381 2372 peri_id = chan->private; 2382 2373 return *peri_id == (unsigned)param;