msm_port
struct msm_port *msm_port = to_msm_port(port);
if (msm_port->is_uartdm)
struct msm_port *msm_port = to_msm_port(port);
target = clk_round_rate(msm_port->clk, 16 * baud);
target = clk_round_rate(msm_port->clk, old + 1);
struct msm_port *msm_port = to_msm_port(port);
if (msm_port->is_uartdm) {
msm_port->imr = MSM_UART_IMR_RXLEV | MSM_UART_IMR_RXSTALE |
msm_write(port, msm_port->imr, MSM_UART_IMR);
if (msm_port->is_uartdm) {
struct msm_port *msm_port = to_msm_port(port);
clk_prepare_enable(msm_port->clk);
clk_prepare_enable(msm_port->pclk);
struct msm_port *msm_port = to_msm_port(port);
snprintf(msm_port->name, sizeof(msm_port->name),
if (msm_port->is_uartdm)
if (msm_port->is_uartdm) {
msm_request_tx_dma(msm_port, msm_port->uart.mapbase);
msm_request_rx_dma(msm_port, msm_port->uart.mapbase);
msm_port->name, port);
if (msm_port->is_uartdm)
msm_release_dma(msm_port);
clk_disable_unprepare(msm_port->pclk);
clk_disable_unprepare(msm_port->clk);
struct msm_port *msm_port = to_msm_port(port);
msm_port->imr = 0;
if (msm_port->is_uartdm)
msm_release_dma(msm_port);
clk_disable_unprepare(msm_port->clk);
struct msm_port *msm_port = to_msm_port(port);
struct msm_dma *dma = &msm_port->rx_dma;
msm_start_rx_dma(msm_port);
struct msm_port *msm_port = to_msm_port(port);
clk_prepare_enable(msm_port->clk);
clk_prepare_enable(msm_port->pclk);
clk_disable_unprepare(msm_port->clk);
clk_disable_unprepare(msm_port->pclk);
struct msm_port *msm_port = to_msm_port(port);
unsigned int rf_reg = msm_port->is_uartdm ? UARTDM_RF : MSM_UART_RF;
struct msm_port *msm_port = to_msm_port(port);
if (msm_port->is_uartdm)
struct msm_port *msm_port = to_msm_port(port);
if (msm_port->is_uartdm)
msm_write(port, c, msm_port->is_uartdm ? UARTDM_TF : MSM_UART_TF);
static struct msm_port msm_uart_ports[] = {
struct msm_port *msm_port;
msm_port = to_msm_port(port);
__msm_console_write(port, s, count, msm_port->is_uartdm);
struct msm_port *msm_port;
msm_port = to_msm_port(port);
msm_port->is_uartdm = (unsigned long)id->data;
msm_port->is_uartdm = 0;
msm_port->clk = devm_clk_get(&pdev->dev, "core");
if (IS_ERR(msm_port->clk))
return PTR_ERR(msm_port->clk);
if (msm_port->is_uartdm) {
msm_port->pclk = devm_clk_get(&pdev->dev, "iface");
if (IS_ERR(msm_port->pclk))
return PTR_ERR(msm_port->pclk);
port->uartclk = clk_get_rate(msm_port->clk);
struct msm_port *port = dev_get_drvdata(dev);
struct msm_port *port = dev_get_drvdata(dev);
static inline struct msm_port *to_msm_port(struct uart_port *up)
return container_of(up, struct msm_port, uart);
struct msm_port *msm_port = to_msm_port(port);
if (msm_port->is_uartdm)
static void msm_start_rx_dma(struct msm_port *msm_port);
static void msm_release_dma(struct msm_port *msm_port)
dma = &msm_port->tx_dma;
msm_stop_dma(&msm_port->uart, dma);
dma = &msm_port->rx_dma;
msm_stop_dma(&msm_port->uart, dma);
static void msm_request_tx_dma(struct msm_port *msm_port, resource_size_t base)
struct device *dev = msm_port->uart.dev;
dma = &msm_port->tx_dma;
if (msm_port->is_uartdm < UARTDM_1P4)
static void msm_request_rx_dma(struct msm_port *msm_port, resource_size_t base)
struct device *dev = msm_port->uart.dev;
dma = &msm_port->rx_dma;
if (msm_port->is_uartdm < UARTDM_1P4)
struct msm_port *msm_port = to_msm_port(port);
msm_port->imr &= ~MSM_UART_IMR_TXLEV;
msm_write(port, msm_port->imr, MSM_UART_IMR);
struct msm_port *msm_port = to_msm_port(port);
struct msm_dma *dma = &msm_port->tx_dma;
msm_port->imr |= MSM_UART_IMR_TXLEV;
msm_write(port, msm_port->imr, MSM_UART_IMR);
struct msm_port *msm_port = args;
struct uart_port *port = &msm_port->uart;
struct msm_dma *dma = &msm_port->tx_dma;
if (msm_port->is_uartdm > UARTDM_1P3) {
msm_port->imr |= MSM_UART_IMR_TXLEV;
msm_write(port, msm_port->imr, MSM_UART_IMR);
static int msm_handle_tx_dma(struct msm_port *msm_port, unsigned int count)
struct uart_port *port = &msm_port->uart;
struct msm_dma *dma = &msm_port->tx_dma;
dma->desc->callback_param = msm_port;
msm_port->imr &= ~MSM_UART_IMR_TXLEV;
msm_write(port, msm_port->imr, MSM_UART_IMR);
if (msm_port->is_uartdm < UARTDM_1P4)
if (msm_port->is_uartdm > UARTDM_1P3)
struct msm_port *msm_port = args;
struct uart_port *port = &msm_port->uart;
struct msm_dma *dma = &msm_port->rx_dma;
if (msm_port->break_detected && dma->rx.virt[i] == 0) {
msm_port->break_detected = false;
msm_start_rx_dma(msm_port);
static void msm_start_rx_dma(struct msm_port *msm_port)
struct msm_dma *dma = &msm_port->rx_dma;
struct uart_port *uart = &msm_port->uart;
dma->desc->callback_param = msm_port;
msm_port->imr &= ~(MSM_UART_IMR_RXLEV | MSM_UART_IMR_RXSTALE);
if (msm_port->is_uartdm < UARTDM_1P4)
msm_port->imr |= MSM_UART_IMR_RXSTALE;
msm_write(uart, msm_port->imr, MSM_UART_IMR);
if (msm_port->is_uartdm < UARTDM_1P4)
if (msm_port->is_uartdm > UARTDM_1P3)
msm_port->imr |= MSM_UART_IMR_RXLEV | MSM_UART_IMR_RXSTALE;
msm_write(uart, msm_port->imr, MSM_UART_IMR);
struct msm_port *msm_port = to_msm_port(port);
struct msm_dma *dma = &msm_port->rx_dma;
msm_port->imr &= ~(MSM_UART_IMR_RXLEV | MSM_UART_IMR_RXSTALE);
msm_write(port, msm_port->imr, MSM_UART_IMR);
struct msm_port *msm_port = to_msm_port(port);
msm_port->imr |= MSM_UART_IMR_DELTA_CTS;
msm_write(port, msm_port->imr, MSM_UART_IMR);
struct msm_port *msm_port = to_msm_port(port);
msm_port->old_snap_state;
msm_port->old_snap_state = 0;
msm_port->old_snap_state += count;
msm_port->old_snap_state -= count;
if (msm_port->break_detected && buf[i] == 0) {
msm_port->break_detected = false;
msm_start_rx_dma(msm_port);
struct msm_port *msm_port = to_msm_port(port);
if (msm_port->is_uartdm)
if (tx_count && msm_port->is_uartdm)
if (msm_port->is_uartdm)
struct msm_port *msm_port = to_msm_port(port);
struct msm_dma *dma = &msm_port->tx_dma;
if (msm_port->is_uartdm)
if (msm_port->is_uartdm)
if (msm_port->is_uartdm > UARTDM_1P3) {
err = msm_handle_tx_dma(msm_port, dma_count);
struct msm_port *msm_port = to_msm_port(port);
struct msm_dma *dma = &msm_port->rx_dma;
msm_port->break_detected = true;
} else if (msm_port->is_uartdm) {
msm_write(port, msm_port->imr, MSM_UART_IMR); /* restore interrupt */