From mboxrd@z Thu Jan 1 00:00:00 1970 From: varkabhadram@gmail.com (Varka Bhadram) Date: Thu, 29 Jan 2015 21:02:41 +0530 Subject: [PATCH v10 2/2] tty/serial: Add Spreadtrum sc9836-uart driver support In-Reply-To: <54CA5128.8050500@gmail.com> References: <1422443324-25082-1-git-send-email-chunyan.zhang@spreadtrum.com> <1422443324-25082-3-git-send-email-chunyan.zhang@spreadtrum.com> <54CA5128.8050500@gmail.com> Message-ID: <54CA5299.6050304@gmail.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Thursday 29 January 2015 08:56 PM, Varka Bhadram wrote: > Hi, > > On Wednesday 28 January 2015 04:38 PM, Chunyan Zhang wrote: >> 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 >> Signed-off-by: Orson Zhai >> Signed-off-by: Chunyan Zhang >> Acked-by: Arnd Bergmann >> Reviewed-by: Peter Hurley >> --- >> 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 >> > (...) > >> +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() > >> + up->mapbase = res->start; Accessing of 'res' has to be done after devm_ioremap_resource() >> + up->membase = devm_ioremap_resource(&pdev->dev, res); >> + if (IS_ERR(up->membase)) >> + return PTR_ERR(up->membase); >> + >> > -- Thanks, Varka Bhadram.