Skip to content

Commit

Permalink
tty: xuartps: Initialize ports according to aliases
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Michal Simek authored and Greg Kroah-Hartman committed Apr 24, 2014
1 parent 489810a commit 928e926
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions drivers/tty/serial/xilinx_uartps.c
Original file line number Diff line number Diff line change
Expand Up @@ -1031,17 +1031,21 @@ static struct uart_port xuartps_port[2];
* xuartps_get_port - Configure the port from the platform device resource
* info
*
* @id: Port id
*
* Return: a pointer to a uart_port or NULL for failure
*/
static struct uart_port *xuartps_get_port(void)
static struct uart_port *xuartps_get_port(int id)
{
struct uart_port *port;
int id;

/* Find the next unused port */
for (id = 0; id < XUARTPS_NR_PORTS; id++)
if (xuartps_port[id].mapbase == 0)
break;
/* Try the given port id if failed use default method */
if (xuartps_port[id].mapbase != 0) {
/* Find the next unused port */
for (id = 0; id < XUARTPS_NR_PORTS; id++)
if (xuartps_port[id].mapbase == 0)
break;
}

if (id >= XUARTPS_NR_PORTS)
return NULL;
Expand Down Expand Up @@ -1329,7 +1333,7 @@ static SIMPLE_DEV_PM_OPS(xuartps_dev_pm_ops, xuartps_suspend, xuartps_resume);
*/
static int xuartps_probe(struct platform_device *pdev)
{
int rc;
int rc, id;
struct uart_port *port;
struct resource *res, *res2;
struct xuartps *xuartps_data;
Expand Down Expand Up @@ -1380,9 +1384,13 @@ static int xuartps_probe(struct platform_device *pdev)
&xuartps_data->clk_rate_change_nb))
dev_warn(&pdev->dev, "Unable to register clock notifier.\n");
#endif
/* Look for a serialN alias */
id = of_alias_get_id(pdev->dev.of_node, "serial");
if (id < 0)
id = 0;

/* Initialize the port structure */
port = xuartps_get_port();
port = xuartps_get_port(id);

if (!port) {
dev_err(&pdev->dev, "Cannot get uart_port structure\n");
Expand Down

0 comments on commit 928e926

Please sign in to comment.