* [PATCH v2 1/4] omap-serial: Get rid of all pdev->id usage
[not found] ` <1321969456-24266-1-git-send-email-rnayak-l0cyMroinI0@public.gmane.org>
@ 2011-11-22 13:44 ` Rajendra Nayak
2011-11-22 13:44 ` [PATCH v2 3/4] omap-serial: Add minimal device tree support Rajendra Nayak
2011-11-22 13:44 ` [PATCH v2 4/4] ARM: omap: pass minimal SoC/board data for UART from dt Rajendra Nayak
2 siblings, 0 replies; 12+ messages in thread
From: Rajendra Nayak @ 2011-11-22 13:44 UTC (permalink / raw)
To: linux-serial-u79uwXL29TY76Z2rM5mHXA,
linux-omap-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ
Cc: khilman-l0cyMroinI0, linaro-dev-cunTk1MwBs8s++Sfvej+rw,
patches-QSEj5FYQhm4dnm+yROfE0A, tony-4v6yS6AI5VpBDgjK7y7TUQ,
Rajendra Nayak, govindraj.raja-l0cyMroinI0,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
With Device tree, pdev->id would no longer be Valid.
Hence get rid of all instances of its usage in the
driver. Device tree support for the driver is added
in subsequent patches.
Signed-off-by: Rajendra Nayak <rnayak-l0cyMroinI0@public.gmane.org>
---
drivers/tty/serial/omap-serial.c | 30 +++++++++++++++---------------
1 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index f3ff0ca..a02cc9f 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -115,7 +115,7 @@ static void serial_omap_enable_ms(struct uart_port *port)
{
struct uart_omap_port *up = (struct uart_omap_port *)port;
- dev_dbg(up->port.dev, "serial_omap_enable_ms+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_enable_ms+%d\n", up->port.line);
pm_runtime_get_sync(&up->pdev->dev);
up->ier |= UART_IER_MSI;
@@ -418,7 +418,7 @@ static unsigned int serial_omap_tx_empty(struct uart_port *port)
unsigned int ret = 0;
pm_runtime_get_sync(&up->pdev->dev);
- dev_dbg(up->port.dev, "serial_omap_tx_empty+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_tx_empty+%d\n", up->port.line);
spin_lock_irqsave(&up->port.lock, flags);
ret = serial_in(up, UART_LSR) & UART_LSR_TEMT ? TIOCSER_TEMT : 0;
spin_unlock_irqrestore(&up->port.lock, flags);
@@ -436,7 +436,7 @@ static unsigned int serial_omap_get_mctrl(struct uart_port *port)
status = check_modem_status(up);
pm_runtime_put(&up->pdev->dev);
- dev_dbg(up->port.dev, "serial_omap_get_mctrl+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_get_mctrl+%d\n", up->port.line);
if (status & UART_MSR_DCD)
ret |= TIOCM_CAR;
@@ -454,7 +454,7 @@ static void serial_omap_set_mctrl(struct uart_port *port, unsigned int mctrl)
struct uart_omap_port *up = (struct uart_omap_port *)port;
unsigned char mcr = 0;
- dev_dbg(up->port.dev, "serial_omap_set_mctrl+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_set_mctrl+%d\n", up->port.line);
if (mctrl & TIOCM_RTS)
mcr |= UART_MCR_RTS;
if (mctrl & TIOCM_DTR)
@@ -478,7 +478,7 @@ static void serial_omap_break_ctl(struct uart_port *port, int break_state)
struct uart_omap_port *up = (struct uart_omap_port *)port;
unsigned long flags = 0;
- dev_dbg(up->port.dev, "serial_omap_break_ctl+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_break_ctl+%d\n", up->port.line);
pm_runtime_get_sync(&up->pdev->dev);
spin_lock_irqsave(&up->port.lock, flags);
if (break_state == -1)
@@ -504,7 +504,7 @@ static int serial_omap_startup(struct uart_port *port)
if (retval)
return retval;
- dev_dbg(up->port.dev, "serial_omap_startup+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_startup+%d\n", up->port.line);
pm_runtime_get_sync(&up->pdev->dev);
/*
@@ -545,7 +545,7 @@ static int serial_omap_startup(struct uart_port *port)
0);
init_timer(&(up->uart_dma.rx_timer));
up->uart_dma.rx_timer.function = serial_omap_rxdma_poll;
- up->uart_dma.rx_timer.data = up->pdev->id;
+ up->uart_dma.rx_timer.data = up->port.line;
/* Currently the buffer size is 4KB. Can increase it */
up->uart_dma.rx_buf = dma_alloc_coherent(NULL,
up->uart_dma.rx_buf_size,
@@ -573,7 +573,7 @@ static void serial_omap_shutdown(struct uart_port *port)
struct uart_omap_port *up = (struct uart_omap_port *)port;
unsigned long flags = 0;
- dev_dbg(up->port.dev, "serial_omap_shutdown+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_shutdown+%d\n", up->port.line);
pm_runtime_get_sync(&up->pdev->dev);
/*
@@ -883,7 +883,7 @@ serial_omap_set_termios(struct uart_port *port, struct ktermios *termios,
spin_unlock_irqrestore(&up->port.lock, flags);
pm_runtime_put(&up->pdev->dev);
- dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_set_termios+%d\n", up->port.line);
}
static void
@@ -893,7 +893,7 @@ serial_omap_pm(struct uart_port *port, unsigned int state,
struct uart_omap_port *up = (struct uart_omap_port *)port;
unsigned char efr;
- dev_dbg(up->port.dev, "serial_omap_pm+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_pm+%d\n", up->port.line);
pm_runtime_get_sync(&up->pdev->dev);
serial_out(up, UART_LCR, UART_LCR_CONF_MODE_B);
@@ -932,7 +932,7 @@ static void serial_omap_config_port(struct uart_port *port, int flags)
struct uart_omap_port *up = (struct uart_omap_port *)port;
dev_dbg(up->port.dev, "serial_omap_config_port+%d\n",
- up->pdev->id);
+ up->port.line);
up->port.type = PORT_OMAP;
}
@@ -949,7 +949,7 @@ serial_omap_type(struct uart_port *port)
{
struct uart_omap_port *up = (struct uart_omap_port *)port;
- dev_dbg(up->port.dev, "serial_omap_type+%d\n", up->pdev->id);
+ dev_dbg(up->port.dev, "serial_omap_type+%d\n", up->port.line);
return up->name;
}
@@ -1110,7 +1110,7 @@ static struct console serial_omap_console = {
static void serial_omap_add_console_port(struct uart_omap_port *up)
{
- serial_omap_console_ports[up->pdev->id] = up;
+ serial_omap_console_ports[up->port.line] = up;
}
#define OMAP_CONSOLE (&serial_omap_console)
@@ -1364,7 +1364,6 @@ static int serial_omap_probe(struct platform_device *pdev)
ret = -ENOMEM;
goto do_release_region;
}
- sprintf(up->name, "OMAP UART%d", pdev->id);
up->pdev = pdev;
up->port.dev = &pdev->dev;
up->port.type = PORT_OMAP;
@@ -1375,6 +1374,7 @@ static int serial_omap_probe(struct platform_device *pdev)
up->port.fifosize = 64;
up->port.ops = &serial_omap_pops;
up->port.line = pdev->id;
+ sprintf(up->name, "OMAP UART%d", up->port.line);
up->port.mapbase = mem->start;
up->port.membase = ioremap(mem->start, resource_size(mem));
@@ -1417,7 +1417,7 @@ static int serial_omap_probe(struct platform_device *pdev)
pm_runtime_enable(&pdev->dev);
pm_runtime_get_sync(&pdev->dev);
- ui[pdev->id] = up;
+ ui[up->port.line] = up;
serial_omap_add_console_port(up);
ret = uart_add_one_port(&serial_omap_reg, &up->port);
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* [PATCH v2 3/4] omap-serial: Add minimal device tree support
[not found] ` <1321969456-24266-1-git-send-email-rnayak-l0cyMroinI0@public.gmane.org>
2011-11-22 13:44 ` [PATCH v2 1/4] omap-serial: Get rid of all pdev->id usage Rajendra Nayak
@ 2011-11-22 13:44 ` Rajendra Nayak
2011-11-28 13:39 ` Rob Herring
2011-11-22 13:44 ` [PATCH v2 4/4] ARM: omap: pass minimal SoC/board data for UART from dt Rajendra Nayak
2 siblings, 1 reply; 12+ messages in thread
From: Rajendra Nayak @ 2011-11-22 13:44 UTC (permalink / raw)
To: linux-serial-u79uwXL29TY76Z2rM5mHXA,
linux-omap-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ
Cc: khilman-l0cyMroinI0, linaro-dev-cunTk1MwBs8s++Sfvej+rw,
patches-QSEj5FYQhm4dnm+yROfE0A, tony-4v6yS6AI5VpBDgjK7y7TUQ,
Rajendra Nayak, govindraj.raja-l0cyMroinI0,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Adapt the driver to device tree and pass minimal platform
data from device tree needed for console boot.
No power management features will be suppported for now
since it requires more tweaks around OCP settings
to toggle forceidle/noidle/smaridle bits and handling
remote wakeup and dynamic muxing.
Signed-off-by: Rajendra Nayak <rnayak-l0cyMroinI0@public.gmane.org>
---
.../devicetree/bindings/serial/omap_serial.txt | 10 ++++
drivers/tty/serial/omap-serial.c | 45 ++++++++++++++++++-
2 files changed, 52 insertions(+), 3 deletions(-)
create mode 100644 Documentation/devicetree/bindings/serial/omap_serial.txt
diff --git a/Documentation/devicetree/bindings/serial/omap_serial.txt b/Documentation/devicetree/bindings/serial/omap_serial.txt
new file mode 100644
index 0000000..342eedd
--- /dev/null
+++ b/Documentation/devicetree/bindings/serial/omap_serial.txt
@@ -0,0 +1,10 @@
+OMAP UART controller
+
+Required properties:
+- compatible : should be "ti,omap2-uart" for OMAP2 controllers
+- compatible : should be "ti,omap3-uart" for OMAP3 controllers
+- compatible : should be "ti,omap4-uart" for OMAP4 controllers
+- ti,hwmods : Must be "uart<n>", n being the instance number (1-based)
+
+Optional properties:
+- clock-frequency : frequency of the clock input to the UART
diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index f14b9c5..5aa524e 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -38,6 +38,7 @@
#include <linux/serial_core.h>
#include <linux/irq.h>
#include <linux/pm_runtime.h>
+#include <linux/of.h>
#include <plat/dma.h>
#include <plat/dmtimer.h>
@@ -1324,6 +1325,19 @@ static void uart_tx_dma_callback(int lch, u16 ch_status, void *data)
return;
}
+static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
+{
+ struct omap_uart_port_info *omap_up_info;
+
+ omap_up_info = devm_kzalloc(dev, sizeof(*omap_up_info), GFP_KERNEL);
+ if (!omap_up_info)
+ return NULL; /* out of memory */
+
+ of_property_read_u32(dev->of_node, "clock-frequency",
+ &omap_up_info->uartclk);
+ return omap_up_info;
+}
+
static int serial_omap_probe(struct platform_device *pdev)
{
struct uart_omap_port *up;
@@ -1331,6 +1345,9 @@ static int serial_omap_probe(struct platform_device *pdev)
struct omap_uart_port_info *omap_up_info = pdev->dev.platform_data;
int ret = -ENOSPC;
+ if (pdev->dev.of_node)
+ omap_up_info = of_get_uart_port_info(&pdev->dev);
+
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (!mem) {
dev_err(&pdev->dev, "no mem resource?\n");
@@ -1375,9 +1392,20 @@ static int serial_omap_probe(struct platform_device *pdev)
up->port.regshift = 2;
up->port.fifosize = 64;
up->port.ops = &serial_omap_pops;
- up->port.line = pdev->id;
- sprintf(up->name, "OMAP UART%d", up->port.line);
+ if (pdev->dev.of_node)
+ up->port.line = of_alias_get_id(pdev->dev.of_node, "serial");
+ else
+ up->port.line = pdev->id;
+
+ if (up->port.line < 0) {
+ dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
+ up->port.line);
+ ret = -ENODEV;
+ goto err;
+ }
+
+ sprintf(up->name, "OMAP UART%d", up->port.line);
up->port.mapbase = mem->start;
up->port.membase = ioremap(mem->start, resource_size(mem));
if (!up->port.membase) {
@@ -1530,7 +1558,7 @@ static int serial_omap_runtime_suspend(struct device *dev)
if (!up)
return -EINVAL;
- if (!pdata->enable_wakeup)
+ if (!pdata || !pdata->enable_wakeup)
return 0;
if (pdata->get_context_loss_count)
@@ -1591,12 +1619,23 @@ static const struct dev_pm_ops serial_omap_dev_pm_ops = {
serial_omap_runtime_resume, NULL)
};
+#if defined(CONFIG_OF)
+static const struct of_device_id omap_serial_of_match[] = {
+ { .compatible = "ti,omap2-uart" },
+ { .compatible = "ti,omap3-uart" },
+ { .compatible = "ti,omap4-uart" },
+ {},
+};
+MODULE_DEVICE_TABLE(of, omap_serial_of_match);
+#endif
+
static struct platform_driver serial_omap_driver = {
.probe = serial_omap_probe,
.remove = serial_omap_remove,
.driver = {
.name = DRIVER_NAME,
.pm = &serial_omap_dev_pm_ops,
+ .of_match_table = of_match_ptr(omap_serial_of_match),
},
};
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 3/4] omap-serial: Add minimal device tree support
2011-11-22 13:44 ` [PATCH v2 3/4] omap-serial: Add minimal device tree support Rajendra Nayak
@ 2011-11-28 13:39 ` Rob Herring
2011-11-29 7:04 ` Rajendra Nayak
0 siblings, 1 reply; 12+ messages in thread
From: Rob Herring @ 2011-11-28 13:39 UTC (permalink / raw)
To: Rajendra Nayak
Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches
On 11/22/2011 07:44 AM, Rajendra Nayak wrote:
> Adapt the driver to device tree and pass minimal platform
> data from device tree needed for console boot.
> No power management features will be suppported for now
> since it requires more tweaks around OCP settings
> to toggle forceidle/noidle/smaridle bits and handling
typo: smartidle
> remote wakeup and dynamic muxing.
>
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Acked-by: Rob Herring <rob.herring@calxeda.com>
Rob
> ---
> .../devicetree/bindings/serial/omap_serial.txt | 10 ++++
> drivers/tty/serial/omap-serial.c | 45 ++++++++++++++++++-
> 2 files changed, 52 insertions(+), 3 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/serial/omap_serial.txt
>
> diff --git a/Documentation/devicetree/bindings/serial/omap_serial.txt b/Documentation/devicetree/bindings/serial/omap_serial.txt
> new file mode 100644
> index 0000000..342eedd
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/serial/omap_serial.txt
> @@ -0,0 +1,10 @@
> +OMAP UART controller
> +
> +Required properties:
> +- compatible : should be "ti,omap2-uart" for OMAP2 controllers
> +- compatible : should be "ti,omap3-uart" for OMAP3 controllers
> +- compatible : should be "ti,omap4-uart" for OMAP4 controllers
> +- ti,hwmods : Must be "uart<n>", n being the instance number (1-based)
> +
> +Optional properties:
> +- clock-frequency : frequency of the clock input to the UART
> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
> index f14b9c5..5aa524e 100644
> --- a/drivers/tty/serial/omap-serial.c
> +++ b/drivers/tty/serial/omap-serial.c
> @@ -38,6 +38,7 @@
> #include <linux/serial_core.h>
> #include <linux/irq.h>
> #include <linux/pm_runtime.h>
> +#include <linux/of.h>
>
> #include <plat/dma.h>
> #include <plat/dmtimer.h>
> @@ -1324,6 +1325,19 @@ static void uart_tx_dma_callback(int lch, u16 ch_status, void *data)
> return;
> }
>
> +static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
> +{
> + struct omap_uart_port_info *omap_up_info;
> +
> + omap_up_info = devm_kzalloc(dev, sizeof(*omap_up_info), GFP_KERNEL);
> + if (!omap_up_info)
> + return NULL; /* out of memory */
> +
> + of_property_read_u32(dev->of_node, "clock-frequency",
> + &omap_up_info->uartclk);
> + return omap_up_info;
> +}
> +
> static int serial_omap_probe(struct platform_device *pdev)
> {
> struct uart_omap_port *up;
> @@ -1331,6 +1345,9 @@ static int serial_omap_probe(struct platform_device *pdev)
> struct omap_uart_port_info *omap_up_info = pdev->dev.platform_data;
> int ret = -ENOSPC;
>
> + if (pdev->dev.of_node)
> + omap_up_info = of_get_uart_port_info(&pdev->dev);
> +
> mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> if (!mem) {
> dev_err(&pdev->dev, "no mem resource?\n");
> @@ -1375,9 +1392,20 @@ static int serial_omap_probe(struct platform_device *pdev)
> up->port.regshift = 2;
> up->port.fifosize = 64;
> up->port.ops = &serial_omap_pops;
> - up->port.line = pdev->id;
> - sprintf(up->name, "OMAP UART%d", up->port.line);
>
> + if (pdev->dev.of_node)
> + up->port.line = of_alias_get_id(pdev->dev.of_node, "serial");
> + else
> + up->port.line = pdev->id;
> +
> + if (up->port.line < 0) {
> + dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
> + up->port.line);
> + ret = -ENODEV;
> + goto err;
> + }
> +
> + sprintf(up->name, "OMAP UART%d", up->port.line);
> up->port.mapbase = mem->start;
> up->port.membase = ioremap(mem->start, resource_size(mem));
> if (!up->port.membase) {
> @@ -1530,7 +1558,7 @@ static int serial_omap_runtime_suspend(struct device *dev)
> if (!up)
> return -EINVAL;
>
> - if (!pdata->enable_wakeup)
> + if (!pdata || !pdata->enable_wakeup)
> return 0;
>
> if (pdata->get_context_loss_count)
> @@ -1591,12 +1619,23 @@ static const struct dev_pm_ops serial_omap_dev_pm_ops = {
> serial_omap_runtime_resume, NULL)
> };
>
> +#if defined(CONFIG_OF)
> +static const struct of_device_id omap_serial_of_match[] = {
> + { .compatible = "ti,omap2-uart" },
> + { .compatible = "ti,omap3-uart" },
> + { .compatible = "ti,omap4-uart" },
> + {},
> +};
> +MODULE_DEVICE_TABLE(of, omap_serial_of_match);
> +#endif
> +
> static struct platform_driver serial_omap_driver = {
> .probe = serial_omap_probe,
> .remove = serial_omap_remove,
> .driver = {
> .name = DRIVER_NAME,
> .pm = &serial_omap_dev_pm_ops,
> + .of_match_table = of_match_ptr(omap_serial_of_match),
> },
> };
>
^ permalink raw reply [flat|nested] 12+ messages in thread* Re: [PATCH v2 3/4] omap-serial: Add minimal device tree support
2011-11-28 13:39 ` Rob Herring
@ 2011-11-29 7:04 ` Rajendra Nayak
0 siblings, 0 replies; 12+ messages in thread
From: Rajendra Nayak @ 2011-11-29 7:04 UTC (permalink / raw)
To: Rob Herring
Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches
On Monday 28 November 2011 07:09 PM, Rob Herring wrote:
> On 11/22/2011 07:44 AM, Rajendra Nayak wrote:
>> Adapt the driver to device tree and pass minimal platform
>> data from device tree needed for console boot.
>> No power management features will be suppported for now
>> since it requires more tweaks around OCP settings
>> to toggle forceidle/noidle/smaridle bits and handling
>
> typo: smartidle
>
>> remote wakeup and dynamic muxing.
>>
>> Signed-off-by: Rajendra Nayak<rnayak@ti.com>
>
> Acked-by: Rob Herring<rob.herring@calxeda.com>
Thanks Rob, will fix the above typo.
>
> Rob
>
>> ---
>> .../devicetree/bindings/serial/omap_serial.txt | 10 ++++
>> drivers/tty/serial/omap-serial.c | 45 ++++++++++++++++++-
>> 2 files changed, 52 insertions(+), 3 deletions(-)
>> create mode 100644 Documentation/devicetree/bindings/serial/omap_serial.txt
>>
>> diff --git a/Documentation/devicetree/bindings/serial/omap_serial.txt b/Documentation/devicetree/bindings/serial/omap_serial.txt
>> new file mode 100644
>> index 0000000..342eedd
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/serial/omap_serial.txt
>> @@ -0,0 +1,10 @@
>> +OMAP UART controller
>> +
>> +Required properties:
>> +- compatible : should be "ti,omap2-uart" for OMAP2 controllers
>> +- compatible : should be "ti,omap3-uart" for OMAP3 controllers
>> +- compatible : should be "ti,omap4-uart" for OMAP4 controllers
>> +- ti,hwmods : Must be "uart<n>", n being the instance number (1-based)
>> +
>> +Optional properties:
>> +- clock-frequency : frequency of the clock input to the UART
>> diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
>> index f14b9c5..5aa524e 100644
>> --- a/drivers/tty/serial/omap-serial.c
>> +++ b/drivers/tty/serial/omap-serial.c
>> @@ -38,6 +38,7 @@
>> #include<linux/serial_core.h>
>> #include<linux/irq.h>
>> #include<linux/pm_runtime.h>
>> +#include<linux/of.h>
>>
>> #include<plat/dma.h>
>> #include<plat/dmtimer.h>
>> @@ -1324,6 +1325,19 @@ static void uart_tx_dma_callback(int lch, u16 ch_status, void *data)
>> return;
>> }
>>
>> +static struct omap_uart_port_info *of_get_uart_port_info(struct device *dev)
>> +{
>> + struct omap_uart_port_info *omap_up_info;
>> +
>> + omap_up_info = devm_kzalloc(dev, sizeof(*omap_up_info), GFP_KERNEL);
>> + if (!omap_up_info)
>> + return NULL; /* out of memory */
>> +
>> + of_property_read_u32(dev->of_node, "clock-frequency",
>> + &omap_up_info->uartclk);
>> + return omap_up_info;
>> +}
>> +
>> static int serial_omap_probe(struct platform_device *pdev)
>> {
>> struct uart_omap_port *up;
>> @@ -1331,6 +1345,9 @@ static int serial_omap_probe(struct platform_device *pdev)
>> struct omap_uart_port_info *omap_up_info = pdev->dev.platform_data;
>> int ret = -ENOSPC;
>>
>> + if (pdev->dev.of_node)
>> + omap_up_info = of_get_uart_port_info(&pdev->dev);
>> +
>> mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>> if (!mem) {
>> dev_err(&pdev->dev, "no mem resource?\n");
>> @@ -1375,9 +1392,20 @@ static int serial_omap_probe(struct platform_device *pdev)
>> up->port.regshift = 2;
>> up->port.fifosize = 64;
>> up->port.ops =&serial_omap_pops;
>> - up->port.line = pdev->id;
>> - sprintf(up->name, "OMAP UART%d", up->port.line);
>>
>> + if (pdev->dev.of_node)
>> + up->port.line = of_alias_get_id(pdev->dev.of_node, "serial");
>> + else
>> + up->port.line = pdev->id;
>> +
>> + if (up->port.line< 0) {
>> + dev_err(&pdev->dev, "failed to get alias/pdev id, errno %d\n",
>> + up->port.line);
>> + ret = -ENODEV;
>> + goto err;
>> + }
>> +
>> + sprintf(up->name, "OMAP UART%d", up->port.line);
>> up->port.mapbase = mem->start;
>> up->port.membase = ioremap(mem->start, resource_size(mem));
>> if (!up->port.membase) {
>> @@ -1530,7 +1558,7 @@ static int serial_omap_runtime_suspend(struct device *dev)
>> if (!up)
>> return -EINVAL;
>>
>> - if (!pdata->enable_wakeup)
>> + if (!pdata || !pdata->enable_wakeup)
>> return 0;
>>
>> if (pdata->get_context_loss_count)
>> @@ -1591,12 +1619,23 @@ static const struct dev_pm_ops serial_omap_dev_pm_ops = {
>> serial_omap_runtime_resume, NULL)
>> };
>>
>> +#if defined(CONFIG_OF)
>> +static const struct of_device_id omap_serial_of_match[] = {
>> + { .compatible = "ti,omap2-uart" },
>> + { .compatible = "ti,omap3-uart" },
>> + { .compatible = "ti,omap4-uart" },
>> + {},
>> +};
>> +MODULE_DEVICE_TABLE(of, omap_serial_of_match);
>> +#endif
>> +
>> static struct platform_driver serial_omap_driver = {
>> .probe = serial_omap_probe,
>> .remove = serial_omap_remove,
>> .driver = {
>> .name = DRIVER_NAME,
>> .pm =&serial_omap_dev_pm_ops,
>> + .of_match_table = of_match_ptr(omap_serial_of_match),
>> },
>> };
>>
>
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 4/4] ARM: omap: pass minimal SoC/board data for UART from dt
[not found] ` <1321969456-24266-1-git-send-email-rnayak-l0cyMroinI0@public.gmane.org>
2011-11-22 13:44 ` [PATCH v2 1/4] omap-serial: Get rid of all pdev->id usage Rajendra Nayak
2011-11-22 13:44 ` [PATCH v2 3/4] omap-serial: Add minimal device tree support Rajendra Nayak
@ 2011-11-22 13:44 ` Rajendra Nayak
2011-11-28 13:40 ` Rob Herring
2 siblings, 1 reply; 12+ messages in thread
From: Rajendra Nayak @ 2011-11-22 13:44 UTC (permalink / raw)
To: linux-serial-u79uwXL29TY76Z2rM5mHXA,
linux-omap-u79uwXL29TY76Z2rM5mHXA,
devicetree-discuss-uLR06cmDAlY/bJ5BZ2RsiQ
Cc: khilman-l0cyMroinI0, linaro-dev-cunTk1MwBs8s++Sfvej+rw,
patches-QSEj5FYQhm4dnm+yROfE0A, tony-4v6yS6AI5VpBDgjK7y7TUQ,
Rajendra Nayak, govindraj.raja-l0cyMroinI0,
linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Pass minimal data needed for console boot, from dt, for
OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
static initialization from generic board file.
Signed-off-by: Rajendra Nayak <rnayak-l0cyMroinI0@public.gmane.org>
---
arch/arm/boot/dts/omap3.dtsi | 31 +++++++++++++++++++++++++++++++
arch/arm/boot/dts/omap4.dtsi | 28 ++++++++++++++++++++++++++++
arch/arm/mach-omap2/board-generic.c | 1 -
3 files changed, 59 insertions(+), 1 deletions(-)
diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
index d202bb5..216c331 100644
--- a/arch/arm/boot/dts/omap3.dtsi
+++ b/arch/arm/boot/dts/omap3.dtsi
@@ -13,6 +13,13 @@
/ {
compatible = "ti,omap3430", "ti,omap3";
+ aliases {
+ serial0 = &uart1;
+ serial1 = &uart2;
+ serial2 = &uart3;
+ serial3 = &uart4;
+ };
+
cpus {
cpu@0 {
compatible = "arm,cortex-a8";
@@ -59,5 +66,29 @@
interrupt-controller;
#interrupt-cells = <1>;
};
+
+ uart1: serial@0x4806a000 {
+ compatible = "ti,omap3-uart";
+ ti,hwmods = "uart1";
+ clock-frequency = <48000000>;
+ };
+
+ uart2: serial@0x4806c000 {
+ compatible = "ti,omap3-uart";
+ ti,hwmods = "uart2";
+ clock-frequency = <48000000>;
+ };
+
+ uart3: serial@0x49020000 {
+ compatible = "ti,omap3-uart";
+ ti,hwmods = "uart3";
+ clock-frequency = <48000000>;
+ };
+
+ uart4: serial@0x49042000 {
+ compatible = "ti,omap3-uart";
+ ti,hwmods = "uart4";
+ clock-frequency = <48000000>;
+ };
};
};
diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
index 4c61c82..e8fe75f 100644
--- a/arch/arm/boot/dts/omap4.dtsi
+++ b/arch/arm/boot/dts/omap4.dtsi
@@ -21,6 +21,10 @@
interrupt-parent = <&gic>;
aliases {
+ serial0 = &uart1;
+ serial1 = &uart2;
+ serial2 = &uart3;
+ serial3 = &uart4;
};
cpus {
@@ -99,5 +103,29 @@
reg = <0x48241000 0x1000>,
<0x48240100 0x0100>;
};
+
+ uart1: serial@0x4806a000 {
+ compatible = "ti,omap4-uart";
+ ti,hwmods = "uart1";
+ clock-frequency = <48000000>;
+ };
+
+ uart2: serial@0x4806c000 {
+ compatible = "ti,omap4-uart";
+ ti,hwmods = "uart2";
+ clock-frequency = <48000000>;
+ };
+
+ uart3: serial@0x48020000 {
+ compatible = "ti,omap4-uart";
+ ti,hwmods = "uart3";
+ clock-frequency = <48000000>;
+ };
+
+ uart4: serial@0x4806e000 {
+ compatible = "ti,omap4-uart";
+ ti,hwmods = "uart4";
+ clock-frequency = <48000000>;
+ };
};
};
diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
index fb55fa3..bb72809 100644
--- a/arch/arm/mach-omap2/board-generic.c
+++ b/arch/arm/mach-omap2/board-generic.c
@@ -70,7 +70,6 @@ static void __init omap_generic_init(void)
if (node)
irq_domain_add_simple(node, 0);
- omap_serial_init();
omap_sdrc_init(NULL, NULL);
of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
--
1.7.1
^ permalink raw reply related [flat|nested] 12+ messages in thread* Re: [PATCH v2 4/4] ARM: omap: pass minimal SoC/board data for UART from dt
2011-11-22 13:44 ` [PATCH v2 4/4] ARM: omap: pass minimal SoC/board data for UART from dt Rajendra Nayak
@ 2011-11-28 13:40 ` Rob Herring
0 siblings, 0 replies; 12+ messages in thread
From: Rob Herring @ 2011-11-28 13:40 UTC (permalink / raw)
To: Rajendra Nayak
Cc: linux-serial, linux-omap, devicetree-discuss, tony, khilman,
govindraj.raja, b-cousson, linux-arm-kernel, linaro-dev, patches
On 11/22/2011 07:44 AM, Rajendra Nayak wrote:
> Pass minimal data needed for console boot, from dt, for
> OMAP4 panda/sdp and OMAP3 beagle boards, and get rid of the
> static initialization from generic board file.
>
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Acked-by: Rob Herring <rob.herring@calxeda.com>
Rob
> ---
> arch/arm/boot/dts/omap3.dtsi | 31 +++++++++++++++++++++++++++++++
> arch/arm/boot/dts/omap4.dtsi | 28 ++++++++++++++++++++++++++++
> arch/arm/mach-omap2/board-generic.c | 1 -
> 3 files changed, 59 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
> index d202bb5..216c331 100644
> --- a/arch/arm/boot/dts/omap3.dtsi
> +++ b/arch/arm/boot/dts/omap3.dtsi
> @@ -13,6 +13,13 @@
> / {
> compatible = "ti,omap3430", "ti,omap3";
>
> + aliases {
> + serial0 = &uart1;
> + serial1 = &uart2;
> + serial2 = &uart3;
> + serial3 = &uart4;
> + };
> +
> cpus {
> cpu@0 {
> compatible = "arm,cortex-a8";
> @@ -59,5 +66,29 @@
> interrupt-controller;
> #interrupt-cells = <1>;
> };
> +
> + uart1: serial@0x4806a000 {
> + compatible = "ti,omap3-uart";
> + ti,hwmods = "uart1";
> + clock-frequency = <48000000>;
> + };
> +
> + uart2: serial@0x4806c000 {
> + compatible = "ti,omap3-uart";
> + ti,hwmods = "uart2";
> + clock-frequency = <48000000>;
> + };
> +
> + uart3: serial@0x49020000 {
> + compatible = "ti,omap3-uart";
> + ti,hwmods = "uart3";
> + clock-frequency = <48000000>;
> + };
> +
> + uart4: serial@0x49042000 {
> + compatible = "ti,omap3-uart";
> + ti,hwmods = "uart4";
> + clock-frequency = <48000000>;
> + };
> };
> };
> diff --git a/arch/arm/boot/dts/omap4.dtsi b/arch/arm/boot/dts/omap4.dtsi
> index 4c61c82..e8fe75f 100644
> --- a/arch/arm/boot/dts/omap4.dtsi
> +++ b/arch/arm/boot/dts/omap4.dtsi
> @@ -21,6 +21,10 @@
> interrupt-parent = <&gic>;
>
> aliases {
> + serial0 = &uart1;
> + serial1 = &uart2;
> + serial2 = &uart3;
> + serial3 = &uart4;
> };
>
> cpus {
> @@ -99,5 +103,29 @@
> reg = <0x48241000 0x1000>,
> <0x48240100 0x0100>;
> };
> +
> + uart1: serial@0x4806a000 {
> + compatible = "ti,omap4-uart";
> + ti,hwmods = "uart1";
> + clock-frequency = <48000000>;
> + };
> +
> + uart2: serial@0x4806c000 {
> + compatible = "ti,omap4-uart";
> + ti,hwmods = "uart2";
> + clock-frequency = <48000000>;
> + };
> +
> + uart3: serial@0x48020000 {
> + compatible = "ti,omap4-uart";
> + ti,hwmods = "uart3";
> + clock-frequency = <48000000>;
> + };
> +
> + uart4: serial@0x4806e000 {
> + compatible = "ti,omap4-uart";
> + ti,hwmods = "uart4";
> + clock-frequency = <48000000>;
> + };
> };
> };
> diff --git a/arch/arm/mach-omap2/board-generic.c b/arch/arm/mach-omap2/board-generic.c
> index fb55fa3..bb72809 100644
> --- a/arch/arm/mach-omap2/board-generic.c
> +++ b/arch/arm/mach-omap2/board-generic.c
> @@ -70,7 +70,6 @@ static void __init omap_generic_init(void)
> if (node)
> irq_domain_add_simple(node, 0);
>
> - omap_serial_init();
> omap_sdrc_init(NULL, NULL);
>
> of_platform_populate(NULL, omap_dt_match_table, NULL, NULL);
^ permalink raw reply [flat|nested] 12+ messages in thread