Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 98267d33 authored by Andrew Jackson's avatar Andrew Jackson Committed by Greg Kroah-Hartman
Browse files

serial: pl011: Add device tree support for RX DMA polling



Add equivalent attributes to those provided in the platform data
for use when RX DMA is enabled.

Signed-off-by: default avatarAndrew Jackson <Andrew.Jackson@arm.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2d3b7d6e
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -13,5 +13,10 @@ Optional properties:
- dmas:			When present, may have one or two dma channels.
			The first one must be named "rx", the second one
			must be named "tx".
- auto-poll:		Enables polling when using RX DMA.
- poll-rate-ms:		Rate at which poll occurs when auto-poll is set,
			default 100ms.
- poll-timeout-ms:	Poll timeout when auto-poll is set, default
			3000ms.

See also bindings/arm/primecell.txt
+19 −3
Original line number Diff line number Diff line
@@ -341,6 +341,7 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port *
		dmaengine_slave_config(chan, &rx_conf);
		uap->dmarx.chan = chan;

		uap->dmarx.auto_poll_rate = false;
		if (plat && plat->dma_rx_poll_enable) {
			/* Set poll rate if specified. */
			if (plat->dma_rx_poll_rate) {
@@ -361,9 +362,24 @@ static void pl011_dma_probe_initcall(struct device *dev, struct uart_amba_port *
					plat->dma_rx_poll_timeout;
			else
				uap->dmarx.poll_timeout = 3000;
		} else
			uap->dmarx.auto_poll_rate = false;

		} else if (!plat && dev->of_node) {
			uap->dmarx.auto_poll_rate = of_property_read_bool(
						dev->of_node, "auto-poll");
			if (uap->dmarx.auto_poll_rate) {
				u32 x;

				if (0 == of_property_read_u32(dev->of_node,
						"poll-rate-ms", &x))
					uap->dmarx.poll_rate = x;
				else
					uap->dmarx.poll_rate = 100;
				if (0 == of_property_read_u32(dev->of_node,
						"poll-timeout-ms", &x))
					uap->dmarx.poll_timeout = x;
				else
					uap->dmarx.poll_timeout = 3000;
			}
		}
		dev_info(uap->port.dev, "DMA channel RX %s\n",
			 dma_chan_name(uap->dmarx.chan));
	}