*/
static void xilinx_frmbuf_reset(struct xilinx_frmbuf_chan *chan)
{
- frmbuf_write(chan, XILINX_FRMBUF_CTRL_OFFSET, 0);
+ /* reset ip */
+ gpiod_set_value(chan->xdev->rst_gpio, 1);
+ udelay(1);
+ gpiod_set_value(chan->xdev->rst_gpio, 0);
}
/**
static void xilinx_frmbuf_chan_reset(struct xilinx_frmbuf_chan *chan)
{
xilinx_frmbuf_reset(chan);
-
- frmbuf_set(chan, XILINX_FRMBUF_IE_OFFSET,
- XILINX_FRMBUF_ISR_ALL_IRQ_MASK);
+ frmbuf_write(chan, XILINX_FRMBUF_IE_OFFSET, XILINX_FRMBUF_IE_AP_READY);
+ frmbuf_write(chan, XILINX_FRMBUF_GIE_OFFSET, XILINX_FRMBUF_GIE_EN);
}
/**
xilinx_frmbuf_halt(chan);
xilinx_frmbuf_free_descriptors(chan);
+ /* worst case frame-to-frame boundary; ensure frame output complete */
+ msleep(50);
+ xilinx_frmbuf_chan_reset(chan);
return 0;
}
xilinx_frmbuf_chan_reset(chan);
- frmbuf_write(chan, XILINX_FRMBUF_IE_OFFSET, XILINX_FRMBUF_IE_AP_READY);
- frmbuf_write(chan, XILINX_FRMBUF_GIE_OFFSET, XILINX_FRMBUF_GIE_EN);
-
return 0;
}