Merge tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc
Pull ARM SoC platform updates from Olof Johansson: "SoC platform changes. Main theme this merge window: - The Netx platform (Netx 100/500) platform is removed by Linus Walleij-- the SoC doesn't have active maintainers with hardware, and in discussions with the vendor the agreement was that it's OK to remove. - Russell King has a series of patches that cleans up and refactors SA1101 and RiscPC support" * tag 'armsoc-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (47 commits) ARM: stm32: use "depends on" instead of "if" after prompt ARM: sa1100: convert to common clock framework ARM: exynos: Cleanup cppcheck shifting warning ARM: pxa/lubbock: remove lubbock_set_misc_wr() from global view ARM: exynos: Only build MCPM support if used arm: add missing include platform-data/atmel.h ARM: davinci: Use GPIO lookup table for DA850 LEDs ARM: OMAP2: drop explicit assembler architecture ARM: use arch_extension directive instead of arch argument ARM: imx: Switch imx7d to imx-cpufreq-dt for speed-grading ARM: bcm: Enable PINCTRL for ARCH_BRCMSTB ARM: bcm: Enable ARCH_HAS_RESET_CONTROLLER for ARCH_BRCMSTB 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 MAINTAINERS: mvebu: Add git entry soc: ti: pm33xx: Add a print while entering RTC only mode with DDR in self-refresh ARM: OMAP2+: Make some variables static ...
This commit is contained in:
@@ -497,6 +497,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;
|
||||
}
|
||||
}
|
||||
|
مرجع در شماره جدید
Block a user