On Nov 5, 2013, at 11:29 PM, Nicolas Ferre <[email protected]> wrote:
> Signed-off-by: Nicolas Ferre <[email protected]> > --- > Documentation/devicetree/bindings/serial/atmel-usart.txt | 3 +++ > drivers/tty/serial/atmel_serial.c | 13 ++++++++++--- > 2 files changed, 13 insertions(+), 3 deletions(-) > > diff --git a/Documentation/devicetree/bindings/serial/atmel-usart.txt > b/Documentation/devicetree/bindings/serial/atmel-usart.txt > index 2191dcb..3adc61c 100644 > --- a/Documentation/devicetree/bindings/serial/atmel-usart.txt > +++ b/Documentation/devicetree/bindings/serial/atmel-usart.txt > @@ -10,6 +10,8 @@ Required properties: > Optional properties: > - atmel,use-dma-rx: use of PDC or DMA for receiving data > - atmel,use-dma-tx: use of PDC or DMA for transmitting data > +- rts-gpios: specify a GPIO for RTS line. It will use specified PIO instead > of the peripheral > + function pin for the USART RTS feature. If unsure, don't specify this > property. > - add dma bindings for dma transfer: > - dmas: DMA specifier, consisting of a phandle to DMA controller node, > memory peripheral interface and USART DMA channel ID, FIFO > configuration. > @@ -28,6 +30,7 @@ Example: > interrupts = <7>; > atmel,use-dma-rx; > atmel,use-dma-tx; > + rts-gpios = <&pioD 15 0>; > }; gpios means 2 gpio I’ll rts-gpio as we can only use one anyway > > - use DMA: > diff --git a/drivers/tty/serial/atmel_serial.c > b/drivers/tty/serial/atmel_serial.c > index b4e0794..71f8ea9 100644 > --- a/drivers/tty/serial/atmel_serial.c > +++ b/drivers/tty/serial/atmel_serial.c > @@ -35,6 +35,7 @@ > #include <linux/platform_device.h> > #include <linux/of.h> > #include <linux/of_device.h> > +#include <linux/of_gpio.h> > #include <linux/dma-mapping.h> > #include <linux/atmel_pdc.h> > #include <linux/atmel_serial.h> > @@ -2327,6 +2328,7 @@ static int atmel_serial_probe(struct platform_device > *pdev) > struct device_node *np = pdev->dev.of_node; > struct atmel_uart_data *pdata = dev_get_platdata(&pdev->dev); > void *data; > + int rts_pin = -EINVAL; > int ret = -ENODEV; > > BUILD_BUG_ON(ATMEL_SERIAL_RINGSIZE & (ATMEL_SERIAL_RINGSIZE - 1)); > @@ -2364,13 +2366,18 @@ static int atmel_serial_probe(struct platform_device > *pdev) > * structs to indicate "no RTS GPIO" instead of open-coding some > * invalid value everywhere. > */ > - if (pdata->rts_gpio > 0) { > - ret = devm_gpio_request(&pdev->dev, pdata->rts_gpio, "RTS"); > + if (pdata && pdata->rts_gpio > 0) > + rts_pin = pdata->rts_gpio; > + else if (np) > + rts_pin = of_get_named_gpio(np, "rts-gpios", 0); > + use directly port->rts_gpio so we can drop the assign after if the gpio is invalid the port->rts_gpio need to be < 0 too Best Regards, J. > + if (gpio_is_valid(rts_pin)) { > + ret = devm_gpio_request(&pdev->dev, rts_pin, "RTS"); > if (ret) { > dev_err(&pdev->dev, "error requesting RTS GPIO\n"); > goto err; > } > - port->rts_gpio = pdata->rts_gpio; > + port->rts_gpio = rts_pin; > ret = gpio_direction_output(port->rts_gpio, 0); > if (ret) { > dev_err(&pdev->dev, "error setting up RTS GPIO\n"); > -- > 1.8.2.2 > -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
