@@ -1339,11 +1339,41 @@ static void pl011_start_tx_pio(struct uart_amba_port *uap)
1339
1339
}
1340
1340
}
1341
1341
1342
+ static void pl011_rs485_tx_start (struct uart_amba_port * uap )
1343
+ {
1344
+ struct uart_port * port = & uap -> port ;
1345
+ u32 cr ;
1346
+
1347
+ /* Enable transmitter */
1348
+ cr = pl011_read (uap , REG_CR );
1349
+ cr |= UART011_CR_TXE ;
1350
+
1351
+ /* Disable receiver if half-duplex */
1352
+ if (!(port -> rs485 .flags & SER_RS485_RX_DURING_TX ))
1353
+ cr &= ~UART011_CR_RXE ;
1354
+
1355
+ if (port -> rs485 .flags & SER_RS485_RTS_ON_SEND )
1356
+ cr &= ~UART011_CR_RTS ;
1357
+ else
1358
+ cr |= UART011_CR_RTS ;
1359
+
1360
+ pl011_write (cr , uap , REG_CR );
1361
+
1362
+ if (port -> rs485 .delay_rts_before_send )
1363
+ mdelay (port -> rs485 .delay_rts_before_send );
1364
+
1365
+ uap -> rs485_tx_started = true;
1366
+ }
1367
+
1342
1368
static void pl011_start_tx (struct uart_port * port )
1343
1369
{
1344
1370
struct uart_amba_port * uap =
1345
1371
container_of (port , struct uart_amba_port , port );
1346
1372
1373
+ if ((uap -> port .rs485 .flags & SER_RS485_ENABLED ) &&
1374
+ !uap -> rs485_tx_started )
1375
+ pl011_rs485_tx_start (uap );
1376
+
1347
1377
if (!pl011_dma_tx_start (uap ))
1348
1378
pl011_start_tx_pio (uap );
1349
1379
}
@@ -1424,42 +1454,12 @@ static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c,
1424
1454
return true;
1425
1455
}
1426
1456
1427
- static void pl011_rs485_tx_start (struct uart_amba_port * uap )
1428
- {
1429
- struct uart_port * port = & uap -> port ;
1430
- u32 cr ;
1431
-
1432
- /* Enable transmitter */
1433
- cr = pl011_read (uap , REG_CR );
1434
- cr |= UART011_CR_TXE ;
1435
-
1436
- /* Disable receiver if half-duplex */
1437
- if (!(port -> rs485 .flags & SER_RS485_RX_DURING_TX ))
1438
- cr &= ~UART011_CR_RXE ;
1439
-
1440
- if (port -> rs485 .flags & SER_RS485_RTS_ON_SEND )
1441
- cr &= ~UART011_CR_RTS ;
1442
- else
1443
- cr |= UART011_CR_RTS ;
1444
-
1445
- pl011_write (cr , uap , REG_CR );
1446
-
1447
- if (port -> rs485 .delay_rts_before_send )
1448
- mdelay (port -> rs485 .delay_rts_before_send );
1449
-
1450
- uap -> rs485_tx_started = true;
1451
- }
1452
-
1453
1457
/* Returns true if tx interrupts have to be (kept) enabled */
1454
1458
static bool pl011_tx_chars (struct uart_amba_port * uap , bool from_irq )
1455
1459
{
1456
1460
struct circ_buf * xmit = & uap -> port .state -> xmit ;
1457
1461
int count = uap -> fifosize >> 1 ;
1458
1462
1459
- if ((uap -> port .rs485 .flags & SER_RS485_ENABLED ) &&
1460
- !uap -> rs485_tx_started )
1461
- pl011_rs485_tx_start (uap );
1462
-
1463
1463
if (uap -> port .x_char ) {
1464
1464
if (!pl011_tx_char (uap , uap -> port .x_char , from_irq ))
1465
1465
return true;
0 commit comments