aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Figa <t.figa@samsung.com>2014-06-26 07:24:34 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-07-09 20:22:55 -0400
commit13a9f6c64fdc55eb6c5e129c1f56cb022613a96f (patch)
treef926e266c3aab73e17ce8a43b5ef00a0c506c5ea
parent9b58bec76e8f80664a849ed788e30503463a8eb8 (diff)
serial: samsung: Consider DT alias when probing ports
Current driver code relies on probe order of particular samsung-uart instances, which makes it impossible to get proper initialization of ports when not all ports are available on board, not even saying of deterministic device naming. This patch fixes this on DT-enabled systems by using DT aliases for ports as instance ID, if specified, or falling back to legacy method otherwise to provide backwards compatibility. Signed-off-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/samsung.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/tty/serial/samsung.c b/drivers/tty/serial/samsung.c
index bf9301094c41..be405c6115ca 100644
--- a/drivers/tty/serial/samsung.c
+++ b/drivers/tty/serial/samsung.c
@@ -1275,11 +1275,18 @@ static inline struct s3c24xx_serial_drv_data *s3c24xx_get_driver_data(
1275static int s3c24xx_serial_probe(struct platform_device *pdev) 1275static int s3c24xx_serial_probe(struct platform_device *pdev)
1276{ 1276{
1277 struct s3c24xx_uart_port *ourport; 1277 struct s3c24xx_uart_port *ourport;
1278 int index = probe_index;
1278 int ret; 1279 int ret;
1279 1280
1280 dbg("s3c24xx_serial_probe(%p) %d\n", pdev, probe_index); 1281 if (pdev->dev.of_node) {
1282 ret = of_alias_get_id(pdev->dev.of_node, "serial");
1283 if (ret >= 0)
1284 index = ret;
1285 }
1286
1287 dbg("s3c24xx_serial_probe(%p) %d\n", pdev, index);
1281 1288
1282 ourport = &s3c24xx_serial_ports[probe_index]; 1289 ourport = &s3c24xx_serial_ports[index];
1283 1290
1284 ourport->drv_data = s3c24xx_get_driver_data(pdev); 1291 ourport->drv_data = s3c24xx_get_driver_data(pdev);
1285 if (!ourport->drv_data) { 1292 if (!ourport->drv_data) {
@@ -1295,7 +1302,7 @@ static int s3c24xx_serial_probe(struct platform_device *pdev)
1295 1302
1296 ourport->port.fifosize = (ourport->info->fifosize) ? 1303 ourport->port.fifosize = (ourport->info->fifosize) ?
1297 ourport->info->fifosize : 1304 ourport->info->fifosize :
1298 ourport->drv_data->fifosize[probe_index]; 1305 ourport->drv_data->fifosize[index];
1299 1306
1300 probe_index++; 1307 probe_index++;
1301 1308