stm32-usart.c (c0f3332cb5f2e370c041594fa1ff59db4ee68925) stm32-usart.c (3d530017bef1de7f7773eb9d3c65fbce924894a2)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) Maxime Coquelin 2015
4 * Copyright (C) STMicroelectronics SA 2017
5 * Authors: Maxime Coquelin <mcoquelin.stm32@gmail.com>
6 * Gerald Baeza <gerald.baeza@foss.st.com>
7 * Erwan Le Ray <erwan.leray@foss.st.com>
8 *

--- 910 unchanged lines hidden (view full) ---

919 }
920
921 } else {
922 cr3 &= ~(USART_CR3_DEM | USART_CR3_DEP);
923 cr1 &= ~(USART_CR1_DEDT_MASK | USART_CR1_DEAT_MASK);
924 }
925
926 /* Configure wake up from low power on start bit detection */
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * Copyright (C) Maxime Coquelin 2015
4 * Copyright (C) STMicroelectronics SA 2017
5 * Authors: Maxime Coquelin <mcoquelin.stm32@gmail.com>
6 * Gerald Baeza <gerald.baeza@foss.st.com>
7 * Erwan Le Ray <erwan.leray@foss.st.com>
8 *

--- 910 unchanged lines hidden (view full) ---

919 }
920
921 } else {
922 cr3 &= ~(USART_CR3_DEM | USART_CR3_DEP);
923 cr1 &= ~(USART_CR1_DEDT_MASK | USART_CR1_DEAT_MASK);
924 }
925
926 /* Configure wake up from low power on start bit detection */
927 if (stm32_port->wakeirq > 0) {
927 if (stm32_port->wakeup_src) {
928 cr3 &= ~USART_CR3_WUS_MASK;
929 cr3 |= USART_CR3_WUS_START_BIT;
930 }
931
932 writel_relaxed(cr3, port->membase + ofs->cr3);
933 writel_relaxed(cr2, port->membase + ofs->cr2);
934 writel_relaxed(cr1, port->membase + ofs->cr1);
935

--- 103 unchanged lines hidden (view full) ---

1039 port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_STM32_CONSOLE);
1040 port->irq = irq;
1041 port->rs485_config = stm32_usart_config_rs485;
1042
1043 ret = stm32_usart_init_rs485(port, pdev);
1044 if (ret)
1045 return ret;
1046
928 cr3 &= ~USART_CR3_WUS_MASK;
929 cr3 |= USART_CR3_WUS_START_BIT;
930 }
931
932 writel_relaxed(cr3, port->membase + ofs->cr3);
933 writel_relaxed(cr2, port->membase + ofs->cr2);
934 writel_relaxed(cr1, port->membase + ofs->cr1);
935

--- 103 unchanged lines hidden (view full) ---

1039 port->has_sysrq = IS_ENABLED(CONFIG_SERIAL_STM32_CONSOLE);
1040 port->irq = irq;
1041 port->rs485_config = stm32_usart_config_rs485;
1042
1043 ret = stm32_usart_init_rs485(port, pdev);
1044 if (ret)
1045 return ret;
1046
1047 if (stm32port->info->cfg.has_wakeup) {
1048 stm32port->wakeirq = platform_get_irq_optional(pdev, 1);
1049 if (stm32port->wakeirq <= 0 && stm32port->wakeirq != -ENXIO)
1050 return stm32port->wakeirq ? : -ENODEV;
1051 }
1047 stm32port->wakeup_src = stm32port->info->cfg.has_wakeup &&
1048 of_property_read_bool(pdev->dev.of_node, "wakeup-source");
1052
1053 stm32port->fifoen = stm32port->info->cfg.has_fifo;
1054
1055 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1056 port->membase = devm_ioremap_resource(&pdev->dev, res);
1057 if (IS_ERR(port->membase))
1058 return PTR_ERR(port->membase);
1059 port->mapbase = res->start;

--- 218 unchanged lines hidden (view full) ---

1278 stm32port->info = of_device_get_match_data(&pdev->dev);
1279 if (!stm32port->info)
1280 return -EINVAL;
1281
1282 ret = stm32_usart_init_port(stm32port, pdev);
1283 if (ret)
1284 return ret;
1285
1049
1050 stm32port->fifoen = stm32port->info->cfg.has_fifo;
1051
1052 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1053 port->membase = devm_ioremap_resource(&pdev->dev, res);
1054 if (IS_ERR(port->membase))
1055 return PTR_ERR(port->membase);
1056 port->mapbase = res->start;

--- 218 unchanged lines hidden (view full) ---

1275 stm32port->info = of_device_get_match_data(&pdev->dev);
1276 if (!stm32port->info)
1277 return -EINVAL;
1278
1279 ret = stm32_usart_init_port(stm32port, pdev);
1280 if (ret)
1281 return ret;
1282
1286 if (stm32port->wakeirq > 0) {
1287 ret = device_init_wakeup(&pdev->dev, true);
1283 if (stm32port->wakeup_src) {
1284 device_set_wakeup_capable(&pdev->dev, true);
1285 ret = dev_pm_set_wake_irq(&pdev->dev, stm32port->port.irq);
1288 if (ret)
1286 if (ret)
1289 goto err_uninit;
1290
1291 ret = dev_pm_set_dedicated_wake_irq(&pdev->dev,
1292 stm32port->wakeirq);
1293 if (ret)
1294 goto err_nowup;
1287 goto err_nowup;
1295
1296 device_set_wakeup_enable(&pdev->dev, false);
1297 }
1298
1299 ret = stm32_usart_of_dma_rx_probe(stm32port, pdev);
1300 if (ret)
1301 dev_info(&pdev->dev, "interrupt mode used for rx (no dma)\n");
1302
1303 ret = stm32_usart_of_dma_tx_probe(stm32port, pdev);
1304 if (ret)

--- 33 unchanged lines hidden (view full) ---

1338 dma_release_channel(stm32port->tx_ch);
1339 }
1340
1341 if (stm32port->tx_dma_buf)
1342 dma_free_coherent(&pdev->dev,
1343 TX_BUF_L, stm32port->tx_buf,
1344 stm32port->tx_dma_buf);
1345
1288 }
1289
1290 ret = stm32_usart_of_dma_rx_probe(stm32port, pdev);
1291 if (ret)
1292 dev_info(&pdev->dev, "interrupt mode used for rx (no dma)\n");
1293
1294 ret = stm32_usart_of_dma_tx_probe(stm32port, pdev);
1295 if (ret)

--- 33 unchanged lines hidden (view full) ---

1329 dma_release_channel(stm32port->tx_ch);
1330 }
1331
1332 if (stm32port->tx_dma_buf)
1333 dma_free_coherent(&pdev->dev,
1334 TX_BUF_L, stm32port->tx_buf,
1335 stm32port->tx_dma_buf);
1336
1346 if (stm32port->wakeirq > 0)
1337 if (stm32port->wakeup_src)
1347 dev_pm_clear_wake_irq(&pdev->dev);
1348
1349err_nowup:
1338 dev_pm_clear_wake_irq(&pdev->dev);
1339
1340err_nowup:
1350 if (stm32port->wakeirq > 0)
1351 device_init_wakeup(&pdev->dev, false);
1341 if (stm32port->wakeup_src)
1342 device_set_wakeup_capable(&pdev->dev, false);
1352
1343
1353err_uninit:
1354 stm32_usart_deinit_port(stm32port);
1355
1356 return ret;
1357}
1358
1359static int stm32_usart_serial_remove(struct platform_device *pdev)
1360{
1361 struct uart_port *port = platform_get_drvdata(pdev);

--- 29 unchanged lines hidden (view full) ---

1391 dma_release_channel(stm32_port->tx_ch);
1392 }
1393
1394 if (stm32_port->tx_dma_buf)
1395 dma_free_coherent(&pdev->dev,
1396 TX_BUF_L, stm32_port->tx_buf,
1397 stm32_port->tx_dma_buf);
1398
1344 stm32_usart_deinit_port(stm32port);
1345
1346 return ret;
1347}
1348
1349static int stm32_usart_serial_remove(struct platform_device *pdev)
1350{
1351 struct uart_port *port = platform_get_drvdata(pdev);

--- 29 unchanged lines hidden (view full) ---

1381 dma_release_channel(stm32_port->tx_ch);
1382 }
1383
1384 if (stm32_port->tx_dma_buf)
1385 dma_free_coherent(&pdev->dev,
1386 TX_BUF_L, stm32_port->tx_buf,
1387 stm32_port->tx_dma_buf);
1388
1399 if (stm32_port->wakeirq > 0) {
1389 if (stm32_port->wakeup_src) {
1400 dev_pm_clear_wake_irq(&pdev->dev);
1401 device_init_wakeup(&pdev->dev, false);
1402 }
1403
1404 stm32_usart_deinit_port(stm32_port);
1405
1406 return 0;
1407}

--- 99 unchanged lines hidden (view full) ---

1507};
1508
1509static void __maybe_unused stm32_usart_serial_en_wakeup(struct uart_port *port,
1510 bool enable)
1511{
1512 struct stm32_port *stm32_port = to_stm32_port(port);
1513 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
1514
1390 dev_pm_clear_wake_irq(&pdev->dev);
1391 device_init_wakeup(&pdev->dev, false);
1392 }
1393
1394 stm32_usart_deinit_port(stm32_port);
1395
1396 return 0;
1397}

--- 99 unchanged lines hidden (view full) ---

1497};
1498
1499static void __maybe_unused stm32_usart_serial_en_wakeup(struct uart_port *port,
1500 bool enable)
1501{
1502 struct stm32_port *stm32_port = to_stm32_port(port);
1503 const struct stm32_usart_offsets *ofs = &stm32_port->info->ofs;
1504
1515 if (stm32_port->wakeirq <= 0)
1505 if (!stm32_port->wakeup_src)
1516 return;
1517
1518 /*
1519 * Enable low-power wake-up and wake-up irq if argument is set to
1520 * "enable", disable low-power wake-up and wake-up irq otherwise
1521 */
1522 if (enable) {
1523 stm32_usart_set_bits(port, ofs->cr1, USART_CR1_UESM);

--- 111 unchanged lines hidden ---
1506 return;
1507
1508 /*
1509 * Enable low-power wake-up and wake-up irq if argument is set to
1510 * "enable", disable low-power wake-up and wake-up irq otherwise
1511 */
1512 if (enable) {
1513 stm32_usart_set_bits(port, ofs->cr1, USART_CR1_UESM);

--- 111 unchanged lines hidden ---