aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/tty/serial/xilinx_uartps.c
diff options
context:
space:
mode:
authorMichal Simek <michal.simek@xilinx.com>2014-04-04 20:23:38 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-04-24 19:21:50 -0400
commit928e9263492069eeebb4c867b841508837895e0e (patch)
treee99bb1b48274b5a9359fa4d87f0e8c5d6dadb874 /drivers/tty/serial/xilinx_uartps.c
parent489810a1a6efa08eb8168b96dcc22d71be2867b9 (diff)
tty: xuartps: Initialize ports according to aliases
Register port numbers according to order in DT aliases. If aliases are not defined, order in DT is used. If aliases are defined, register port id based on that. This patch ensures proper ttyPS0/1 assignment. [soren]: Combined integer declarations in probe(), removed warning message if no alias is found. Signed-off-by: Michal Simek <michal.simek@xilinx.com> Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/tty/serial/xilinx_uartps.c')
-rw-r--r--drivers/tty/serial/xilinx_uartps.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/drivers/tty/serial/xilinx_uartps.c b/drivers/tty/serial/xilinx_uartps.c
index b2f929e48ddd..2cd0cd456c7a 100644
--- a/drivers/tty/serial/xilinx_uartps.c
+++ b/drivers/tty/serial/xilinx_uartps.c
@@ -1031,17 +1031,21 @@ static struct uart_port xuartps_port[2];
1031 * xuartps_get_port - Configure the port from the platform device resource 1031 * xuartps_get_port - Configure the port from the platform device resource
1032 * info 1032 * info
1033 * 1033 *
1034 * @id: Port id
1035 *
1034 * Return: a pointer to a uart_port or NULL for failure 1036 * Return: a pointer to a uart_port or NULL for failure
1035 */ 1037 */
1036static struct uart_port *xuartps_get_port(void) 1038static struct uart_port *xuartps_get_port(int id)
1037{ 1039{
1038 struct uart_port *port; 1040 struct uart_port *port;
1039 int id;
1040 1041
1041 /* Find the next unused port */ 1042 /* Try the given port id if failed use default method */
1042 for (id = 0; id < XUARTPS_NR_PORTS; id++) 1043 if (xuartps_port[id].mapbase != 0) {
1043 if (xuartps_port[id].mapbase == 0) 1044 /* Find the next unused port */
1044 break; 1045 for (id = 0; id < XUARTPS_NR_PORTS; id++)
1046 if (xuartps_port[id].mapbase == 0)
1047 break;
1048 }
1045 1049
1046 if (id >= XUARTPS_NR_PORTS) 1050 if (id >= XUARTPS_NR_PORTS)
1047 return NULL; 1051 return NULL;
@@ -1329,7 +1333,7 @@ static SIMPLE_DEV_PM_OPS(xuartps_dev_pm_ops, xuartps_suspend, xuartps_resume);
1329 */ 1333 */
1330static int xuartps_probe(struct platform_device *pdev) 1334static int xuartps_probe(struct platform_device *pdev)
1331{ 1335{
1332 int rc; 1336 int rc, id;
1333 struct uart_port *port; 1337 struct uart_port *port;
1334 struct resource *res, *res2; 1338 struct resource *res, *res2;
1335 struct xuartps *xuartps_data; 1339 struct xuartps *xuartps_data;
@@ -1380,9 +1384,13 @@ static int xuartps_probe(struct platform_device *pdev)
1380 &xuartps_data->clk_rate_change_nb)) 1384 &xuartps_data->clk_rate_change_nb))
1381 dev_warn(&pdev->dev, "Unable to register clock notifier.\n"); 1385 dev_warn(&pdev->dev, "Unable to register clock notifier.\n");
1382#endif 1386#endif
1387 /* Look for a serialN alias */
1388 id = of_alias_get_id(pdev->dev.of_node, "serial");
1389 if (id < 0)
1390 id = 0;
1383 1391
1384 /* Initialize the port structure */ 1392 /* Initialize the port structure */
1385 port = xuartps_get_port(); 1393 port = xuartps_get_port(id);
1386 1394
1387 if (!port) { 1395 if (!port) {
1388 dev_err(&pdev->dev, "Cannot get uart_port structure\n"); 1396 dev_err(&pdev->dev, "Cannot get uart_port structure\n");