Re: [PATCH v10 2/2] tty/serial: Add Spreadtrum sc9836-uart driver support

From
Varka Bhadram <hidden>
Date
2015-01-29 15:32:55
Also in
linux-arm-kernel, linux-devicetree, linux-serial, lkml
Reply to
Varka Bhadram, 2015-01-29
On Thursday 29 January 2015 08:56 PM, Varka Bhadram wrote:
Hi,

On Wednesday 28 January 2015 04:38 PM, Chunyan Zhang wrote:
quoted
Add a full sc9836-uart driver for SC9836 SoC which is based on the
spreadtrum sharkl64 platform.
This driver also support earlycon.

Originally-by: Lanqing Liu [off-list ref]
Signed-off-by: Orson Zhai <redacted>
Signed-off-by: Chunyan Zhang <redacted>
Acked-by: Arnd Bergmann <redacted>
Reviewed-by: Peter Hurley <redacted>
---
  drivers/tty/serial/Kconfig       |   18 +
  drivers/tty/serial/Makefile      |    1 +
  drivers/tty/serial/sprd_serial.c |  793 ++++++++++++++++++++++++++++++++++++++
  include/uapi/linux/serial_core.h |    3 +
  4 files changed, 815 insertions(+)
  create mode 100644 drivers/tty/serial/sprd_serial.c
(...)
quoted
+static int sprd_probe(struct platform_device *pdev)
+{
+    struct resource *res;
+    struct uart_port *up;
+    struct clk *clk;
+    int irq;
+    int index;
+    int ret;
+
+    for (index = 0; index < ARRAY_SIZE(sprd_port); index++)
+        if (sprd_port[index] == NULL)
+            break;
+
+    if (index == ARRAY_SIZE(sprd_port))
+        return -EBUSY;
+
+    index = sprd_probe_dt_alias(index, &pdev->dev);
+
+    sprd_port[index] = devm_kzalloc(&pdev->dev,
+        sizeof(*sprd_port[index]), GFP_KERNEL);
+    if (!sprd_port[index])
+        return -ENOMEM;
+
+    up = &sprd_port[index]->port;
+    up->dev = &pdev->dev;
+    up->line = index;
+    up->type = PORT_SPRD;
+    up->iotype = SERIAL_IO_PORT;
+    up->uartclk = SPRD_DEF_RATE;
+    up->fifosize = SPRD_FIFO_SIZE;
+    up->ops = &serial_sprd_ops;
+    up->flags = UPF_BOOT_AUTOCONF;
+
+    clk = devm_clk_get(&pdev->dev, NULL);
+    if (!IS_ERR(clk))
+        up->uartclk = clk_get_rate(clk);
+
+    res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+    if (!res) {
+        dev_err(&pdev->dev, "not provide mem resource\n");
+        return -ENODEV;
+    }
This check is not required. It will be done by devm_ioremap_resource()
quoted
+    up->mapbase = res->start;
Accessing of 'res' has to be done after devm_ioremap_resource()
quoted
+    up->membase = devm_ioremap_resource(&pdev->dev, res);
+    if (IS_ERR(up->membase))
+        return PTR_ERR(up->membase);
+
-- 
Thanks,
Varka Bhadram.
Thread (14 messages) 14 messages, 5 authors, last reply 2015-01-30
Keyboard shortcuts
hback out one level
jnext message in thread / next series-diff position
kprevious message in thread / previous series-diff position
ldrill in
Escclose help / fold thread tree
?toggle this help