File tree Expand file tree Collapse file tree 1 file changed +19
-0
lines changed Expand file tree Collapse file tree 1 file changed +19
-0
lines changed Original file line number Diff line number Diff line change @@ -1263,6 +1263,24 @@ static int rcar_dmac_chan_terminate_all(struct dma_chan *chan)
1263
1263
return 0 ;
1264
1264
}
1265
1265
1266
+ static void rcar_dmac_synchronize (struct dma_chan * chan )
1267
+ {
1268
+ struct rcar_dmac_chan * rchan = to_rcar_dmac_chan (chan );
1269
+ struct rcar_dmac * dmac = to_rcar_dmac (chan -> device );
1270
+ struct platform_device * pdev = to_platform_device (dmac -> dev );
1271
+ int irq ;
1272
+ char pdev_irqname [5 ];
1273
+
1274
+ sprintf (pdev_irqname , "ch%u" , rchan -> index );
1275
+ irq = platform_get_irq_byname (pdev , pdev_irqname );
1276
+ if (irq < 0 ) {
1277
+ dev_err (dmac -> dev , "no IRQ specified for channel %u\n" ,
1278
+ rchan -> index );
1279
+ return ;
1280
+ }
1281
+ synchronize_irq (irq );
1282
+ }
1283
+
1266
1284
static unsigned int rcar_dmac_chan_get_residue (struct rcar_dmac_chan * chan ,
1267
1285
dma_cookie_t cookie )
1268
1286
{
@@ -1901,6 +1919,7 @@ static int rcar_dmac_probe(struct platform_device *pdev)
1901
1919
engine -> device_config = rcar_dmac_device_config ;
1902
1920
engine -> device_pause = rcar_dmac_chan_pause ;
1903
1921
engine -> device_terminate_all = rcar_dmac_chan_terminate_all ;
1922
+ engine -> device_synchronize = rcar_dmac_synchronize ;
1904
1923
engine -> device_tx_status = rcar_dmac_tx_status ;
1905
1924
engine -> device_issue_pending = rcar_dmac_issue_pending ;
1906
1925
You can’t perform that action at this time.
0 commit comments