|
@@ -1078,9 +1078,9 @@ static inline void pl011_dma_rx_stop(struct uart_amba_port *uap)
|
|
|
* Every polling, It checks the residue in the dma buffer and transfer
|
|
|
* data to the tty. Also, last_residue is updated for the next polling.
|
|
|
*/
|
|
|
-static void pl011_dma_rx_poll(unsigned long args)
|
|
|
+static void pl011_dma_rx_poll(struct timer_list *t)
|
|
|
{
|
|
|
- struct uart_amba_port *uap = (struct uart_amba_port *)args;
|
|
|
+ struct uart_amba_port *uap = from_timer(uap, t, dmarx.timer);
|
|
|
struct tty_port *port = &uap->port.state->port;
|
|
|
struct pl011_dmarx_data *dmarx = &uap->dmarx;
|
|
|
struct dma_chan *rxchan = uap->dmarx.chan;
|
|
@@ -1192,9 +1192,7 @@ skip_rx:
|
|
|
dev_dbg(uap->port.dev, "could not trigger initial "
|
|
|
"RX DMA job, fall back to interrupt mode\n");
|
|
|
if (uap->dmarx.poll_rate) {
|
|
|
- init_timer(&(uap->dmarx.timer));
|
|
|
- uap->dmarx.timer.function = pl011_dma_rx_poll;
|
|
|
- uap->dmarx.timer.data = (unsigned long)uap;
|
|
|
+ timer_setup(&uap->dmarx.timer, pl011_dma_rx_poll, 0);
|
|
|
mod_timer(&uap->dmarx.timer,
|
|
|
jiffies +
|
|
|
msecs_to_jiffies(uap->dmarx.poll_rate));
|