From: grant.likely@secretlab.ca (Grant Likely)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 1/7] serial: pxa: add OF support
Date: Tue, 03 Apr 2012 09:45:05 -0600 [thread overview]
Message-ID: <20120403154505.21A5E3E04C1@localhost> (raw)
In-Reply-To: <1330950111-30797-2-git-send-email-haojian.zhuang@marvell.com>
On Mon, 5 Mar 2012 20:21:45 +0800, Haojian Zhuang <haojian.zhuang@marvell.com> wrote:
> Parse uart device id from alias in DTS file.
>
> Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
> ---
> drivers/tty/serial/pxa.c | 65 +++++++++++++++++++++++++++++++++++++--------
> 1 files changed, 53 insertions(+), 12 deletions(-)
Binding documentation!
>
> diff --git a/drivers/tty/serial/pxa.c b/drivers/tty/serial/pxa.c
> index 5c8e3bb..a71855b 100644
> --- a/drivers/tty/serial/pxa.c
> +++ b/drivers/tty/serial/pxa.c
> @@ -36,6 +36,7 @@
> #include <linux/circ_buf.h>
> #include <linux/delay.h>
> #include <linux/interrupt.h>
> +#include <linux/of.h>
> #include <linux/platform_device.h>
> #include <linux/tty.h>
> #include <linux/tty_flip.h>
> @@ -44,6 +45,8 @@
> #include <linux/io.h>
> #include <linux/slab.h>
>
> +#define PXA_NAME_LEN 8
> +
> struct uart_pxa_port {
> struct uart_port port;
> unsigned char ier;
> @@ -781,6 +784,39 @@ static const struct dev_pm_ops serial_pxa_pm_ops = {
> };
> #endif
>
> +static struct of_device_id serial_pxa_dt_ids[] = {
> + { .compatible = "mrvl,pxa-uart", },
> + { .compatible = "mrvl,mmp-uart", },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, serial_pxa_dt_ids);
> +
> +#ifdef CONFIG_OF
> +static int serial_pxa_probe_dt(struct platform_device *pdev,
> + struct uart_pxa_port *sport)
> +{
> + struct device_node *np = pdev->dev.of_node;
> + int ret;
> +
> + if (!np)
> + return 1;
> +
> + ret = of_alias_get_id(np, "serial");
> + if (ret < 0) {
> + dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
> + return ret;
> + }
> + sport->port.line = ret;
> + return 0;
> +}
> +#else
> +static int serial_pxa_probe_dt(struct platform_device *pdev,
> + struct uart_pxa_port *sport)
> +{
> + return 1;
> +}
> +#endif
> +
> static int serial_pxa_probe(struct platform_device *dev)
> {
> struct uart_pxa_port *sport;
> @@ -808,34 +844,37 @@ static int serial_pxa_probe(struct platform_device *dev)
> sport->port.irq = irqres->start;
> sport->port.fifosize = 64;
> sport->port.ops = &serial_pxa_pops;
> - sport->port.line = dev->id;
> sport->port.dev = &dev->dev;
> sport->port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
> sport->port.uartclk = clk_get_rate(sport->clk);
> -
> - switch (dev->id) {
> - case 0: sport->name = "FFUART"; break;
> - case 1: sport->name = "BTUART"; break;
> - case 2: sport->name = "STUART"; break;
> - case 3: sport->name = "HWUART"; break;
> - default:
> - sport->name = "???";
> - break;
> + sport->name = kzalloc(PXA_NAME_LEN, GFP_KERNEL);
devm_kzalloc()
> + if (!sport->name) {
> + ret = -ENOMEM;
> + goto err_clk;
> }
>
> + ret = serial_pxa_probe_dt(dev, sport);
> + if (ret > 0)
> + sport->port.line = dev->id;
> + else if (ret < 0)
> + goto err_clk;
> + snprintf(sport->name, PXA_NAME_LEN - 1, "UART%d", sport->port.line + 1);
Why +1 here? Won't that just cause confusion when compared with the
DT aliases?
> +
> sport->port.membase = ioremap(mmres->start, resource_size(mmres));
> if (!sport->port.membase) {
> ret = -ENOMEM;
> - goto err_clk;
> + goto err_name;
> }
>
> - serial_pxa_ports[dev->id] = sport;
> + serial_pxa_ports[sport->port.line] = sport;
>
> uart_add_one_port(&serial_pxa_reg, &sport->port);
> platform_set_drvdata(dev, sport);
>
> return 0;
>
> + err_name:
> + kfree(sport->name);
> err_clk:
> clk_put(sport->clk);
> err_free:
> @@ -850,6 +889,7 @@ static int serial_pxa_remove(struct platform_device *dev)
> platform_set_drvdata(dev, NULL);
>
> uart_remove_one_port(&serial_pxa_reg, &sport->port);
> + kfree(sport->name);
> clk_put(sport->clk);
> kfree(sport);
>
> @@ -866,6 +906,7 @@ static struct platform_driver serial_pxa_driver = {
> #ifdef CONFIG_PM
> .pm = &serial_pxa_pm_ops,
> #endif
> + .of_match_table = serial_pxa_dt_ids,
> },
> };
>
> --
> 1.7.0.4
>
--
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies,Ltd.
WARNING: multiple messages have this Message-ID (diff)
From: Grant Likely <grant.likely@secretlab.ca>
To: arnd@arndb.de, linux-arm-kernel@lists.infradead.org,
devicetree-discuss@lists.ozlabs.org, linux@arm.linux.org.uk,
eric.y.miao@gmail.com
Cc: Haojian Zhuang <haojian.zhuang@marvell.com>
Subject: Re: [PATCH v2 1/7] serial: pxa: add OF support
Date: Tue, 03 Apr 2012 09:45:05 -0600 [thread overview]
Message-ID: <20120403154505.21A5E3E04C1@localhost> (raw)
In-Reply-To: <1330950111-30797-2-git-send-email-haojian.zhuang@marvell.com>
On Mon, 5 Mar 2012 20:21:45 +0800, Haojian Zhuang <haojian.zhuang@marvell.com> wrote:
> Parse uart device id from alias in DTS file.
>
> Signed-off-by: Haojian Zhuang <haojian.zhuang@marvell.com>
> ---
> drivers/tty/serial/pxa.c | 65 +++++++++++++++++++++++++++++++++++++--------
> 1 files changed, 53 insertions(+), 12 deletions(-)
Binding documentation!
>
> diff --git a/drivers/tty/serial/pxa.c b/drivers/tty/serial/pxa.c
> index 5c8e3bb..a71855b 100644
> --- a/drivers/tty/serial/pxa.c
> +++ b/drivers/tty/serial/pxa.c
> @@ -36,6 +36,7 @@
> #include <linux/circ_buf.h>
> #include <linux/delay.h>
> #include <linux/interrupt.h>
> +#include <linux/of.h>
> #include <linux/platform_device.h>
> #include <linux/tty.h>
> #include <linux/tty_flip.h>
> @@ -44,6 +45,8 @@
> #include <linux/io.h>
> #include <linux/slab.h>
>
> +#define PXA_NAME_LEN 8
> +
> struct uart_pxa_port {
> struct uart_port port;
> unsigned char ier;
> @@ -781,6 +784,39 @@ static const struct dev_pm_ops serial_pxa_pm_ops = {
> };
> #endif
>
> +static struct of_device_id serial_pxa_dt_ids[] = {
> + { .compatible = "mrvl,pxa-uart", },
> + { .compatible = "mrvl,mmp-uart", },
> + {}
> +};
> +MODULE_DEVICE_TABLE(of, serial_pxa_dt_ids);
> +
> +#ifdef CONFIG_OF
> +static int serial_pxa_probe_dt(struct platform_device *pdev,
> + struct uart_pxa_port *sport)
> +{
> + struct device_node *np = pdev->dev.of_node;
> + int ret;
> +
> + if (!np)
> + return 1;
> +
> + ret = of_alias_get_id(np, "serial");
> + if (ret < 0) {
> + dev_err(&pdev->dev, "failed to get alias id, errno %d\n", ret);
> + return ret;
> + }
> + sport->port.line = ret;
> + return 0;
> +}
> +#else
> +static int serial_pxa_probe_dt(struct platform_device *pdev,
> + struct uart_pxa_port *sport)
> +{
> + return 1;
> +}
> +#endif
> +
> static int serial_pxa_probe(struct platform_device *dev)
> {
> struct uart_pxa_port *sport;
> @@ -808,34 +844,37 @@ static int serial_pxa_probe(struct platform_device *dev)
> sport->port.irq = irqres->start;
> sport->port.fifosize = 64;
> sport->port.ops = &serial_pxa_pops;
> - sport->port.line = dev->id;
> sport->port.dev = &dev->dev;
> sport->port.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF;
> sport->port.uartclk = clk_get_rate(sport->clk);
> -
> - switch (dev->id) {
> - case 0: sport->name = "FFUART"; break;
> - case 1: sport->name = "BTUART"; break;
> - case 2: sport->name = "STUART"; break;
> - case 3: sport->name = "HWUART"; break;
> - default:
> - sport->name = "???";
> - break;
> + sport->name = kzalloc(PXA_NAME_LEN, GFP_KERNEL);
devm_kzalloc()
> + if (!sport->name) {
> + ret = -ENOMEM;
> + goto err_clk;
> }
>
> + ret = serial_pxa_probe_dt(dev, sport);
> + if (ret > 0)
> + sport->port.line = dev->id;
> + else if (ret < 0)
> + goto err_clk;
> + snprintf(sport->name, PXA_NAME_LEN - 1, "UART%d", sport->port.line + 1);
Why +1 here? Won't that just cause confusion when compared with the
DT aliases?
> +
> sport->port.membase = ioremap(mmres->start, resource_size(mmres));
> if (!sport->port.membase) {
> ret = -ENOMEM;
> - goto err_clk;
> + goto err_name;
> }
>
> - serial_pxa_ports[dev->id] = sport;
> + serial_pxa_ports[sport->port.line] = sport;
>
> uart_add_one_port(&serial_pxa_reg, &sport->port);
> platform_set_drvdata(dev, sport);
>
> return 0;
>
> + err_name:
> + kfree(sport->name);
> err_clk:
> clk_put(sport->clk);
> err_free:
> @@ -850,6 +889,7 @@ static int serial_pxa_remove(struct platform_device *dev)
> platform_set_drvdata(dev, NULL);
>
> uart_remove_one_port(&serial_pxa_reg, &sport->port);
> + kfree(sport->name);
> clk_put(sport->clk);
> kfree(sport);
>
> @@ -866,6 +906,7 @@ static struct platform_driver serial_pxa_driver = {
> #ifdef CONFIG_PM
> .pm = &serial_pxa_pm_ops,
> #endif
> + .of_match_table = serial_pxa_dt_ids,
> },
> };
>
> --
> 1.7.0.4
>
--
Grant Likely, B.Sc, P.Eng.
Secret Lab Technologies,Ltd.
next prev parent reply other threads:[~2012-04-03 15:45 UTC|newest]
Thread overview: 64+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-05 12:21 [PATCH v2 0/7] ARM: mmp: support OF on pxa168 Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 12:21 ` [PATCH v2 1/7] serial: pxa: add OF support Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 12:55 ` Arnd Bergmann
2012-03-05 12:55 ` Arnd Bergmann
2012-03-05 14:03 ` Haojian Zhuang
2012-03-05 14:03 ` Haojian Zhuang
2012-03-06 2:42 ` [PATCH v3 " Haojian Zhuang
2012-03-06 2:42 ` Haojian Zhuang
2012-03-06 15:02 ` Arnd Bergmann
2012-03-06 15:02 ` Arnd Bergmann
2012-03-06 15:04 ` Haojian Zhuang
2012-03-06 15:04 ` Haojian Zhuang
2012-03-07 1:42 ` [PATCH v3 1/6] " Haojian Zhuang
2012-03-07 1:42 ` Haojian Zhuang
2012-03-07 7:58 ` Arnd Bergmann
2012-03-07 7:58 ` Arnd Bergmann
2012-03-09 15:24 ` [PATCH v2 1/7] " Grant Likely
2012-03-09 15:24 ` Grant Likely
2012-04-03 15:45 ` Grant Likely [this message]
2012-04-03 15:45 ` Grant Likely
2012-03-05 12:21 ` [PATCH v2 2/7] rtc: sa1100: " Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 14:41 ` Arnd Bergmann
2012-03-05 14:41 ` Arnd Bergmann
2012-03-05 12:21 ` [PATCH v2 3/7] i2c: pxa: " Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 14:41 ` Arnd Bergmann
2012-03-05 14:41 ` Arnd Bergmann
2012-03-05 12:21 ` [PATCH v2 4/7] ARM: mmp: enable rtc clk in pxa168 Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 14:38 ` Arnd Bergmann
2012-03-05 14:38 ` Arnd Bergmann
2012-03-05 12:21 ` [PATCH v2 5/7] ARM: mmp: append OF support on pxa168 Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 14:37 ` Arnd Bergmann
2012-03-05 14:37 ` Arnd Bergmann
2012-04-09 1:36 ` Chris Ball
2012-04-09 1:36 ` Chris Ball
2012-04-09 1:46 ` Haojian Zhuang
2012-04-09 1:46 ` Haojian Zhuang
2012-04-09 1:51 ` Chris Ball
2012-04-09 1:51 ` Chris Ball
2012-04-09 2:04 ` Haojian Zhuang
2012-04-09 2:04 ` Haojian Zhuang
2012-04-09 1:43 ` Chris Ball
2012-04-09 1:43 ` Chris Ball
2012-04-09 1:47 ` Haojian Zhuang
2012-04-09 1:47 ` Haojian Zhuang
2012-03-05 12:21 ` [PATCH v2 6/7] ARM: dts: append DTS file of pxa168 Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 14:35 ` Arnd Bergmann
2012-03-05 14:35 ` Arnd Bergmann
2012-03-05 12:21 ` [PATCH v2 7/7] Document: devicetree: add OF documents for arch-mmp Haojian Zhuang
2012-03-05 12:21 ` Haojian Zhuang
2012-03-05 14:46 ` Arnd Bergmann
2012-03-05 14:46 ` Arnd Bergmann
2012-03-05 15:07 ` Rob Herring
2012-03-05 15:07 ` Rob Herring
2012-03-05 15:08 ` Cousson, Benoit
2012-03-05 15:08 ` Cousson, Benoit
2012-04-02 23:21 ` Mitch Bradley
2012-04-02 23:21 ` Mitch Bradley
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120403154505.21A5E3E04C1@localhost \
--to=grant.likely@secretlab.ca \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.