You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
serial: pic32_uart: Add PIC32 UART driver
This adds UART and a serial console driver for Microchip PIC32 class devices. [ralf@linux-mips.org: Resolved merge conflict.] Signed-off-by: Andrei Pistirica <andrei.pistirica@microchip.com> Signed-off-by: Joshua Henderson <joshua.henderson@microchip.com> Reviewed-by: Alan Cox <alan@linux.intel.com> Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jiri Slaby <jslaby@suse.com> Cc: linux-kernel@vger.kernel.org Cc: linux-mips@linux-mips.org Cc: linux-serial@vger.kernel.org Cc: linux-api@vger.kernel.org Patchwork: https://patchwork.linux-mips.org/patch/12101/ Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
This commit is contained in:
committed by
Ralf Baechle
parent
81dfdd39c7
commit
157b939470
@@ -900,6 +900,27 @@ config SERIAL_SGI_L1_CONSOLE
|
||||
controller serial port as your console (you want this!),
|
||||
say Y. Otherwise, say N.
|
||||
|
||||
config SERIAL_PIC32
|
||||
tristate "Microchip PIC32 serial support"
|
||||
depends on MACH_PIC32
|
||||
select SERIAL_CORE
|
||||
help
|
||||
If you have a PIC32, this driver supports the serial ports.
|
||||
|
||||
Say Y or M to use PIC32 serial ports, otherwise say N. Note that
|
||||
to use a serial port as a console, this must be included in kernel and
|
||||
not as a module.
|
||||
|
||||
config SERIAL_PIC32_CONSOLE
|
||||
bool "PIC32 serial console support"
|
||||
depends on SERIAL_PIC32
|
||||
select SERIAL_CORE_CONSOLE
|
||||
help
|
||||
If you have a PIC32, this driver supports the putting a console on one
|
||||
of the serial ports.
|
||||
|
||||
Say Y to use the PIC32 console, otherwise say N.
|
||||
|
||||
config SERIAL_MPC52xx
|
||||
tristate "Freescale MPC52xx/MPC512x family PSC serial support"
|
||||
depends on PPC_MPC52xx || PPC_MPC512x
|
||||
|
||||
@@ -91,6 +91,7 @@ obj-$(CONFIG_SERIAL_MEN_Z135) += men_z135_uart.o
|
||||
obj-$(CONFIG_SERIAL_SPRD) += sprd_serial.o
|
||||
obj-$(CONFIG_SERIAL_STM32) += stm32-usart.o
|
||||
obj-$(CONFIG_SERIAL_MVEBU_UART) += mvebu-uart.o
|
||||
obj-$(CONFIG_SERIAL_PIC32) += pic32_uart.o
|
||||
|
||||
# GPIOLIB helpers for modem control lines
|
||||
obj-$(CONFIG_SERIAL_MCTRL_GPIO) += serial_mctrl_gpio.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,126 @@
|
||||
/*
|
||||
* PIC32 Integrated Serial Driver.
|
||||
*
|
||||
* Copyright (C) 2015 Microchip Technology, Inc.
|
||||
*
|
||||
* Authors:
|
||||
* Sorin-Andrei Pistirica <andrei.pistirica@microchip.com>
|
||||
*
|
||||
* Licensed under GPLv2 or later.
|
||||
*/
|
||||
#ifndef __DT_PIC32_UART_H__
|
||||
#define __DT_PIC32_UART_H__
|
||||
|
||||
#define PIC32_UART_DFLT_BRATE (9600)
|
||||
#define PIC32_UART_TX_FIFO_DEPTH (8)
|
||||
#define PIC32_UART_RX_FIFO_DEPTH (8)
|
||||
|
||||
#define PIC32_UART_MODE 0x00
|
||||
#define PIC32_UART_STA 0x10
|
||||
#define PIC32_UART_TX 0x20
|
||||
#define PIC32_UART_RX 0x30
|
||||
#define PIC32_UART_BRG 0x40
|
||||
|
||||
struct pic32_console_opt {
|
||||
int baud;
|
||||
int parity;
|
||||
int bits;
|
||||
int flow;
|
||||
};
|
||||
|
||||
/* struct pic32_sport - pic32 serial port descriptor
|
||||
* @port: uart port descriptor
|
||||
* @idx: port index
|
||||
* @irq_fault: virtual fault interrupt number
|
||||
* @irqflags_fault: flags related to fault irq
|
||||
* @irq_fault_name: irq fault name
|
||||
* @irq_rx: virtual rx interrupt number
|
||||
* @irqflags_rx: flags related to rx irq
|
||||
* @irq_rx_name: irq rx name
|
||||
* @irq_tx: virtual tx interrupt number
|
||||
* @irqflags_tx: : flags related to tx irq
|
||||
* @irq_tx_name: irq tx name
|
||||
* @cts_gpio: clear to send gpio
|
||||
* @dev: device descriptor
|
||||
**/
|
||||
struct pic32_sport {
|
||||
struct uart_port port;
|
||||
struct pic32_console_opt opt;
|
||||
int idx;
|
||||
|
||||
int irq_fault;
|
||||
int irqflags_fault;
|
||||
const char *irq_fault_name;
|
||||
int irq_rx;
|
||||
int irqflags_rx;
|
||||
const char *irq_rx_name;
|
||||
int irq_tx;
|
||||
int irqflags_tx;
|
||||
const char *irq_tx_name;
|
||||
u8 enable_tx_irq;
|
||||
|
||||
bool hw_flow_ctrl;
|
||||
int cts_gpio;
|
||||
|
||||
int ref_clk;
|
||||
struct clk *clk;
|
||||
|
||||
struct device *dev;
|
||||
};
|
||||
#define to_pic32_sport(c) container_of(c, struct pic32_sport, port)
|
||||
#define pic32_get_port(sport) (&sport->port)
|
||||
#define pic32_get_opt(sport) (&sport->opt)
|
||||
#define tx_irq_enabled(sport) (sport->enable_tx_irq)
|
||||
|
||||
static inline void pic32_uart_writel(struct pic32_sport *sport,
|
||||
u32 reg, u32 val)
|
||||
{
|
||||
struct uart_port *port = pic32_get_port(sport);
|
||||
|
||||
__raw_writel(val, port->membase + reg);
|
||||
}
|
||||
|
||||
static inline u32 pic32_uart_readl(struct pic32_sport *sport, u32 reg)
|
||||
{
|
||||
struct uart_port *port = pic32_get_port(sport);
|
||||
|
||||
return __raw_readl(port->membase + reg);
|
||||
}
|
||||
|
||||
/* pic32 uart mode register bits */
|
||||
#define PIC32_UART_MODE_ON BIT(15)
|
||||
#define PIC32_UART_MODE_FRZ BIT(14)
|
||||
#define PIC32_UART_MODE_SIDL BIT(13)
|
||||
#define PIC32_UART_MODE_IREN BIT(12)
|
||||
#define PIC32_UART_MODE_RTSMD BIT(11)
|
||||
#define PIC32_UART_MODE_RESV1 BIT(10)
|
||||
#define PIC32_UART_MODE_UEN1 BIT(9)
|
||||
#define PIC32_UART_MODE_UEN0 BIT(8)
|
||||
#define PIC32_UART_MODE_WAKE BIT(7)
|
||||
#define PIC32_UART_MODE_LPBK BIT(6)
|
||||
#define PIC32_UART_MODE_ABAUD BIT(5)
|
||||
#define PIC32_UART_MODE_RXINV BIT(4)
|
||||
#define PIC32_UART_MODE_BRGH BIT(3)
|
||||
#define PIC32_UART_MODE_PDSEL1 BIT(2)
|
||||
#define PIC32_UART_MODE_PDSEL0 BIT(1)
|
||||
#define PIC32_UART_MODE_STSEL BIT(0)
|
||||
|
||||
/* pic32 uart status register bits */
|
||||
#define PIC32_UART_STA_UTXISEL1 BIT(15)
|
||||
#define PIC32_UART_STA_UTXISEL0 BIT(14)
|
||||
#define PIC32_UART_STA_UTXINV BIT(13)
|
||||
#define PIC32_UART_STA_URXEN BIT(12)
|
||||
#define PIC32_UART_STA_UTXBRK BIT(11)
|
||||
#define PIC32_UART_STA_UTXEN BIT(10)
|
||||
#define PIC32_UART_STA_UTXBF BIT(9)
|
||||
#define PIC32_UART_STA_TRMT BIT(8)
|
||||
#define PIC32_UART_STA_URXISEL1 BIT(7)
|
||||
#define PIC32_UART_STA_URXISEL0 BIT(6)
|
||||
#define PIC32_UART_STA_ADDEN BIT(5)
|
||||
#define PIC32_UART_STA_RIDLE BIT(4)
|
||||
#define PIC32_UART_STA_PERR BIT(3)
|
||||
#define PIC32_UART_STA_FERR BIT(2)
|
||||
#define PIC32_UART_STA_OERR BIT(1)
|
||||
#define PIC32_UART_STA_URXDA BIT(0)
|
||||
|
||||
#endif /* __DT_PIC32_UART_H__ */
|
||||
@@ -264,4 +264,7 @@
|
||||
/* MVEBU UART */
|
||||
#define PORT_MVEBU 114
|
||||
|
||||
/* Microchip PIC32 UART */
|
||||
#define PORT_PIC32 114
|
||||
|
||||
#endif /* _UAPILINUX_SERIAL_CORE_H */
|
||||
|
||||
Reference in New Issue
Block a user