mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 10:41:38 -04:00
Merge branch 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'for-linus' of master.kernel.org:/home/rmk/linux-2.6-arm: (226 commits)
ARM: 6323/1: cam60: don't use __init for cam60_spi_{flash_platform_data,partitions}
ARM: 6324/1: cam60: move cam60_spi_devices to .init.data
ARM: 6322/1: imx/pca100: Fix name of spi platform data
ARM: 6321/1: fix syntax error in main Kconfig file
ARM: 6297/1: move U300 timer to dynamic clock lookup
ARM: 6296/1: clock U300 intcon and timer properly
ARM: 6295/1: fix U300 apb_pclk split
ARM: 6306/1: fix inverted MMC card detect in U300
ARM: 6299/1: errata: TLBIASIDIS and TLBIMVAIS operations can broadcast a faulty ASID
ARM: 6294/1: etm: do a dummy read from OSSRR during initialization
ARM: 6292/1: coresight: add ETM management registers
ARM: 6288/1: ftrace: document mcount formats
ARM: 6287/1: ftrace: clean up mcount assembly indentation
ARM: 6286/1: fix Thumb-2 decompressor broken by "Auto calculate ZRELADDR"
ARM: 6281/1: video/imxfb.c: allow usage without BACKLIGHT_CLASS_DEVICE
ARM: 6280/1: imx: Fix build failure when including <mach/gpio.h> without <linux/spinlock.h>
ARM: S5PV210: Fix on missing s3c-sdhci card detection method for hsmmc3
ARM: S5P: Fix on missing S5P_DEV_FIMC in plat-s5p/Kconfig
ARM: S5PV210: Override FIMC driver name on Aquila board
ARM: S5PC100: enable FIMC on SMDKC100
...
Fix up conflicts in arch/arm/mach-{s5pc100,s5pv210}/cpu.c due to
different subsystem 'setname' calls, and trivial port types in
include/linux/serial_core.h
This commit is contained in:
commit
636d17427b
307 changed files with 16336 additions and 4847 deletions
|
|
@ -536,8 +536,8 @@ config SERIAL_S3C6400
|
|||
|
||||
config SERIAL_S5PV210
|
||||
tristate "Samsung S5PV210 Serial port support"
|
||||
depends on SERIAL_SAMSUNG && (CPU_S5PV210 || CPU_S5P6442)
|
||||
select SERIAL_SAMSUNG_UARTS_4 if CPU_S5PV210
|
||||
depends on SERIAL_SAMSUNG && (CPU_S5PV210 || CPU_S5P6442 || CPU_S5PV310)
|
||||
select SERIAL_SAMSUNG_UARTS_4 if (CPU_S5PV210 || CPU_S5PV310)
|
||||
default y
|
||||
help
|
||||
Serial port support for Samsung's S5P Family of SoC's
|
||||
|
|
|
|||
|
|
@ -28,8 +28,12 @@
|
|||
static int s5pv210_serial_setsource(struct uart_port *port,
|
||||
struct s3c24xx_uart_clksrc *clk)
|
||||
{
|
||||
struct s3c2410_uartcfg *cfg = port->dev->platform_data;
|
||||
unsigned long ucon = rd_regl(port, S3C2410_UCON);
|
||||
|
||||
if ((cfg->clocks_size) == 1)
|
||||
return 0;
|
||||
|
||||
if (strcmp(clk->name, "pclk") == 0)
|
||||
ucon &= ~S5PV210_UCON_CLKMASK;
|
||||
else if (strcmp(clk->name, "uclk1") == 0)
|
||||
|
|
@ -47,10 +51,14 @@ static int s5pv210_serial_setsource(struct uart_port *port,
|
|||
static int s5pv210_serial_getsource(struct uart_port *port,
|
||||
struct s3c24xx_uart_clksrc *clk)
|
||||
{
|
||||
struct s3c2410_uartcfg *cfg = port->dev->platform_data;
|
||||
u32 ucon = rd_regl(port, S3C2410_UCON);
|
||||
|
||||
clk->divisor = 1;
|
||||
|
||||
if ((cfg->clocks_size) == 1)
|
||||
return 0;
|
||||
|
||||
switch (ucon & S5PV210_UCON_CLKMASK) {
|
||||
case S5PV210_UCON_PCLK:
|
||||
clk->name = "pclk";
|
||||
|
|
|
|||
|
|
@ -705,8 +705,13 @@ static void s3c24xx_serial_set_termios(struct uart_port *port,
|
|||
if (ourport->info->has_divslot) {
|
||||
unsigned int div = ourport->baudclk_rate / baud;
|
||||
|
||||
udivslot = udivslot_table[div & 15];
|
||||
dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
|
||||
if (cfg->has_fracval) {
|
||||
udivslot = (div & 15);
|
||||
dbg("fracval = %04x\n", udivslot);
|
||||
} else {
|
||||
udivslot = udivslot_table[div & 15];
|
||||
dbg("udivslot = %04x (div %d)\n", udivslot, div & 15);
|
||||
}
|
||||
}
|
||||
|
||||
switch (termios->c_cflag & CSIZE) {
|
||||
|
|
|
|||
|
|
@ -346,6 +346,27 @@ static int scif_rxfill(struct uart_port *port)
|
|||
return sci_in(port, SCFDR) & SCIF2_RFDC_MASK;
|
||||
}
|
||||
}
|
||||
#elif defined(CONFIG_ARCH_SH7372)
|
||||
static int scif_txfill(struct uart_port *port)
|
||||
{
|
||||
if (port->type == PORT_SCIFA)
|
||||
return sci_in(port, SCFDR) >> 8;
|
||||
else
|
||||
return sci_in(port, SCTFDR);
|
||||
}
|
||||
|
||||
static int scif_txroom(struct uart_port *port)
|
||||
{
|
||||
return port->fifosize - scif_txfill(port);
|
||||
}
|
||||
|
||||
static int scif_rxfill(struct uart_port *port)
|
||||
{
|
||||
if (port->type == PORT_SCIFA)
|
||||
return sci_in(port, SCFDR) & SCIF_RFDC_MASK;
|
||||
else
|
||||
return sci_in(port, SCRFDR);
|
||||
}
|
||||
#else
|
||||
static int scif_txfill(struct uart_port *port)
|
||||
{
|
||||
|
|
@ -683,7 +704,7 @@ static irqreturn_t sci_rx_interrupt(int irq, void *ptr)
|
|||
u16 ssr = sci_in(port, SCxSR);
|
||||
|
||||
/* Disable future Rx interrupts */
|
||||
if (port->type == PORT_SCIFA) {
|
||||
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
disable_irq_nosync(irq);
|
||||
scr |= 0x4000;
|
||||
} else {
|
||||
|
|
@ -928,7 +949,7 @@ static void sci_dma_tx_complete(void *arg)
|
|||
|
||||
if (!uart_circ_empty(xmit)) {
|
||||
schedule_work(&s->work_tx);
|
||||
} else if (port->type == PORT_SCIFA) {
|
||||
} else if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
u16 ctrl = sci_in(port, SCSCR);
|
||||
sci_out(port, SCSCR, ctrl & ~SCI_CTRL_FLAGS_TIE);
|
||||
}
|
||||
|
|
@ -1184,7 +1205,7 @@ static void sci_start_tx(struct uart_port *port)
|
|||
unsigned short ctrl;
|
||||
|
||||
#ifdef CONFIG_SERIAL_SH_SCI_DMA
|
||||
if (port->type == PORT_SCIFA) {
|
||||
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
u16 new, scr = sci_in(port, SCSCR);
|
||||
if (s->chan_tx)
|
||||
new = scr | 0x8000;
|
||||
|
|
@ -1197,7 +1218,7 @@ static void sci_start_tx(struct uart_port *port)
|
|||
s->cookie_tx < 0)
|
||||
schedule_work(&s->work_tx);
|
||||
#endif
|
||||
if (!s->chan_tx || port->type == PORT_SCIFA) {
|
||||
if (!s->chan_tx || port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
/* Set TIE (Transmit Interrupt Enable) bit in SCSCR */
|
||||
ctrl = sci_in(port, SCSCR);
|
||||
sci_out(port, SCSCR, ctrl | SCI_CTRL_FLAGS_TIE);
|
||||
|
|
@ -1210,7 +1231,7 @@ static void sci_stop_tx(struct uart_port *port)
|
|||
|
||||
/* Clear TIE (Transmit Interrupt Enable) bit in SCSCR */
|
||||
ctrl = sci_in(port, SCSCR);
|
||||
if (port->type == PORT_SCIFA)
|
||||
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
|
||||
ctrl &= ~0x8000;
|
||||
ctrl &= ~SCI_CTRL_FLAGS_TIE;
|
||||
sci_out(port, SCSCR, ctrl);
|
||||
|
|
@ -1222,7 +1243,7 @@ static void sci_start_rx(struct uart_port *port)
|
|||
|
||||
/* Set RIE (Receive Interrupt Enable) bit in SCSCR */
|
||||
ctrl |= sci_in(port, SCSCR);
|
||||
if (port->type == PORT_SCIFA)
|
||||
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
|
||||
ctrl &= ~0x4000;
|
||||
sci_out(port, SCSCR, ctrl);
|
||||
}
|
||||
|
|
@ -1233,7 +1254,7 @@ static void sci_stop_rx(struct uart_port *port)
|
|||
|
||||
/* Clear RIE (Receive Interrupt Enable) bit in SCSCR */
|
||||
ctrl = sci_in(port, SCSCR);
|
||||
if (port->type == PORT_SCIFA)
|
||||
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB)
|
||||
ctrl &= ~0x4000;
|
||||
ctrl &= ~(SCI_CTRL_FLAGS_RIE | SCI_CTRL_FLAGS_REIE);
|
||||
sci_out(port, SCSCR, ctrl);
|
||||
|
|
@ -1271,7 +1292,7 @@ static void rx_timer_fn(unsigned long arg)
|
|||
struct uart_port *port = &s->port;
|
||||
u16 scr = sci_in(port, SCSCR);
|
||||
|
||||
if (port->type == PORT_SCIFA) {
|
||||
if (port->type == PORT_SCIFA || port->type == PORT_SCIFB) {
|
||||
scr &= ~0x4000;
|
||||
enable_irq(s->irqs[1]);
|
||||
}
|
||||
|
|
@ -1524,6 +1545,8 @@ static const char *sci_type(struct uart_port *port)
|
|||
return "scif";
|
||||
case PORT_SCIFA:
|
||||
return "scifa";
|
||||
case PORT_SCIFB:
|
||||
return "scifb";
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
|
@ -1612,6 +1635,9 @@ static int __devinit sci_init_single(struct platform_device *dev,
|
|||
port->line = index;
|
||||
|
||||
switch (p->type) {
|
||||
case PORT_SCIFB:
|
||||
port->fifosize = 256;
|
||||
break;
|
||||
case PORT_SCIFA:
|
||||
port->fifosize = 64;
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -322,7 +322,7 @@
|
|||
#define CPU_SCIx_FNS(name, sci_offset, sci_size, scif_offset, scif_size)\
|
||||
static inline unsigned int sci_##name##_in(struct uart_port *port) \
|
||||
{ \
|
||||
if (port->type == PORT_SCIF) { \
|
||||
if (port->type == PORT_SCIF || port->type == PORT_SCIFB) { \
|
||||
SCI_IN(scif_size, scif_offset) \
|
||||
} else { /* PORT_SCI or PORT_SCIFA */ \
|
||||
SCI_IN(sci_size, sci_offset); \
|
||||
|
|
@ -330,7 +330,7 @@
|
|||
} \
|
||||
static inline void sci_##name##_out(struct uart_port *port, unsigned int value) \
|
||||
{ \
|
||||
if (port->type == PORT_SCIF) { \
|
||||
if (port->type == PORT_SCIF || port->type == PORT_SCIFB) { \
|
||||
SCI_OUT(scif_size, scif_offset, value) \
|
||||
} else { /* PORT_SCI or PORT_SCIFA */ \
|
||||
SCI_OUT(sci_size, sci_offset, value); \
|
||||
|
|
@ -384,8 +384,12 @@
|
|||
defined(CONFIG_CPU_SUBTYPE_SH7720) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7721) || \
|
||||
defined(CONFIG_ARCH_SH7367) || \
|
||||
defined(CONFIG_ARCH_SH7377) || \
|
||||
defined(CONFIG_ARCH_SH7372)
|
||||
defined(CONFIG_ARCH_SH7377)
|
||||
#define SCIF_FNS(name, scif_offset, scif_size) \
|
||||
CPU_SCIF_FNS(name, scif_offset, scif_size)
|
||||
#elif defined(CONFIG_ARCH_SH7372)
|
||||
#define SCIx_FNS(name, sh4_scifa_offset, sh4_scifa_size, sh4_scifb_offset, sh4_scifb_size) \
|
||||
CPU_SCIx_FNS(name, sh4_scifa_offset, sh4_scifa_size, sh4_scifb_offset, sh4_scifb_size)
|
||||
#define SCIF_FNS(name, scif_offset, scif_size) \
|
||||
CPU_SCIF_FNS(name, scif_offset, scif_size)
|
||||
#else
|
||||
|
|
@ -422,8 +426,7 @@
|
|||
defined(CONFIG_CPU_SUBTYPE_SH7720) || \
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7721) || \
|
||||
defined(CONFIG_ARCH_SH7367) || \
|
||||
defined(CONFIG_ARCH_SH7377) || \
|
||||
defined(CONFIG_ARCH_SH7372)
|
||||
defined(CONFIG_ARCH_SH7377)
|
||||
|
||||
SCIF_FNS(SCSMR, 0x00, 16)
|
||||
SCIF_FNS(SCBRR, 0x04, 8)
|
||||
|
|
@ -436,6 +439,20 @@ SCIF_FNS(SCFDR, 0x1c, 16)
|
|||
SCIF_FNS(SCxTDR, 0x20, 8)
|
||||
SCIF_FNS(SCxRDR, 0x24, 8)
|
||||
SCIF_FNS(SCLSR, 0x00, 0)
|
||||
#elif defined(CONFIG_ARCH_SH7372)
|
||||
SCIF_FNS(SCSMR, 0x00, 16)
|
||||
SCIF_FNS(SCBRR, 0x04, 8)
|
||||
SCIF_FNS(SCSCR, 0x08, 16)
|
||||
SCIF_FNS(SCTDSR, 0x0c, 16)
|
||||
SCIF_FNS(SCFER, 0x10, 16)
|
||||
SCIF_FNS(SCxSR, 0x14, 16)
|
||||
SCIF_FNS(SCFCR, 0x18, 16)
|
||||
SCIF_FNS(SCFDR, 0x1c, 16)
|
||||
SCIF_FNS(SCTFDR, 0x38, 16)
|
||||
SCIF_FNS(SCRFDR, 0x3c, 16)
|
||||
SCIx_FNS(SCxTDR, 0x20, 8, 0x40, 8)
|
||||
SCIx_FNS(SCxRDR, 0x24, 8, 0x60, 8)
|
||||
SCIF_FNS(SCLSR, 0x00, 0)
|
||||
#elif defined(CONFIG_CPU_SUBTYPE_SH7723) ||\
|
||||
defined(CONFIG_CPU_SUBTYPE_SH7724)
|
||||
SCIx_FNS(SCSMR, 0x00, 16, 0x00, 16)
|
||||
|
|
|
|||
Loading…
Reference in a new issue