mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
Merge branch 'for-arm-soc' of git://git.armlinux.org.uk/~rmk/linux-arm into arm/soc
* 'for-arm-soc' of git://git.armlinux.org.uk/~rmk/linux-arm: (21 commits) ARM: sa1100: convert to common clock framework ARM: riscpc: enable chained scatterlist support ARM: riscpc: reduce IRQ handling code ARM: riscpc: move RiscPC assembly files from arch/arm/lib to mach-rpc ARM: riscpc: parse video information from tagged list ARM: riscpc: add ecard quirk for Atomwide 3port serial card ARM: sa1100/neponset: convert serial to use gpiod APIs ARM: sa1100/hackkit: remove empty serial mctrl functions ARM: sa1100/badge4: remove commented out modem control initialisers ARM: sa1100/h3xxx: convert serial to gpiod APIs ARM: sa1100/assabet: convert serial to gpiod APIs serial: sa1100: add note about modem control signals serial: sa1100: add support for mctrl gpios ARM: riscpc: dma: use __iomem pointers for writing DMA ARM: riscpc: dma: improve address/length writing ARM: riscpc: dma: make state a local variable ARM: riscpc: dma: eliminate "cur_sg" scatterlist usage ARM: riscpc: fix DMA ARM: riscpc: fix ecard printing ARM: riscpc: fix lack of keyboard interrupts after irq conversion ... Signed-off-by: Olof Johansson <[email protected]>
This commit is contained in:
commit
7cba7cacee
20 changed files with 366 additions and 550 deletions
|
|
@ -511,6 +511,7 @@ config SERIAL_SA1100
|
|||
bool "SA1100 serial port support"
|
||||
depends on ARCH_SA1100
|
||||
select SERIAL_CORE
|
||||
select SERIAL_MCTRL_GPIO if GPIOLIB
|
||||
help
|
||||
If you have a machine based on a SA1100/SA1110 StrongARM(R) CPU you
|
||||
can enable its onboard serial port by enabling this option.
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
#include <mach/hardware.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "serial_mctrl_gpio.h"
|
||||
|
||||
/* We've been assigned a range on the "Low-density serial ports" major */
|
||||
#define SERIAL_SA1100_MAJOR 204
|
||||
#define MINOR_START 5
|
||||
|
|
@ -77,6 +79,7 @@ struct sa1100_port {
|
|||
struct uart_port port;
|
||||
struct timer_list timer;
|
||||
unsigned int old_status;
|
||||
struct mctrl_gpios *gpios;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -174,6 +177,8 @@ static void sa1100_enable_ms(struct uart_port *port)
|
|||
container_of(port, struct sa1100_port, port);
|
||||
|
||||
mod_timer(&sport->timer, jiffies);
|
||||
|
||||
mctrl_gpio_enable_ms(sport->gpios);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -322,11 +327,21 @@ static unsigned int sa1100_tx_empty(struct uart_port *port)
|
|||
|
||||
static unsigned int sa1100_get_mctrl(struct uart_port *port)
|
||||
{
|
||||
return TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
|
||||
struct sa1100_port *sport =
|
||||
container_of(port, struct sa1100_port, port);
|
||||
int ret = TIOCM_CTS | TIOCM_DSR | TIOCM_CAR;
|
||||
|
||||
mctrl_gpio_get(sport->gpios, &ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void sa1100_set_mctrl(struct uart_port *port, unsigned int mctrl)
|
||||
{
|
||||
struct sa1100_port *sport =
|
||||
container_of(port, struct sa1100_port, port);
|
||||
|
||||
mctrl_gpio_set(sport->gpios, mctrl);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -842,6 +857,31 @@ static int sa1100_serial_resume(struct platform_device *dev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int sa1100_serial_add_one_port(struct sa1100_port *sport, struct platform_device *dev)
|
||||
{
|
||||
sport->port.dev = &dev->dev;
|
||||
|
||||
// mctrl_gpio_init() requires that the GPIO driver supports interrupts,
|
||||
// but we need to support GPIO drivers for hardware that has no such
|
||||
// interrupts. Use mctrl_gpio_init_noauto() instead.
|
||||
sport->gpios = mctrl_gpio_init_noauto(sport->port.dev, 0);
|
||||
if (IS_ERR(sport->gpios)) {
|
||||
int err = PTR_ERR(sport->gpios);
|
||||
|
||||
dev_err(sport->port.dev, "failed to get mctrl gpios: %d\n",
|
||||
err);
|
||||
|
||||
if (err == -EPROBE_DEFER)
|
||||
return err;
|
||||
|
||||
sport->gpios = NULL;
|
||||
}
|
||||
|
||||
platform_set_drvdata(dev, sport);
|
||||
|
||||
return uart_add_one_port(&sa1100_reg, &sport->port);
|
||||
}
|
||||
|
||||
static int sa1100_serial_probe(struct platform_device *dev)
|
||||
{
|
||||
struct resource *res = dev->resource;
|
||||
|
|
@ -856,9 +896,7 @@ static int sa1100_serial_probe(struct platform_device *dev)
|
|||
if (sa1100_ports[i].port.mapbase != res->start)
|
||||
continue;
|
||||
|
||||
sa1100_ports[i].port.dev = &dev->dev;
|
||||
uart_add_one_port(&sa1100_reg, &sa1100_ports[i].port);
|
||||
platform_set_drvdata(dev, &sa1100_ports[i]);
|
||||
sa1100_serial_add_one_port(&sa1100_ports[i], dev);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue