mirror of
https://github.com/edk2-porting/linux-next.git
synced 2025-01-19 11:04:00 +08:00
ARM: 7902/1: sa1100: h3xxx: move serial port GPIO handling to common place
Both h3100 and h3600 request UART gpios during init_machine time. As sa1100 gpio driver is going to become proper machine driver, move gpio handling to UART port functions. Request all gpios using gpio_request array once and then guard them from rerequesting with bool variable. Signed-off-by: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
parent
162e68c08c
commit
eb02313d2c
@ -122,15 +122,8 @@ static struct irda_platform_data h3100_irda_data = {
|
|||||||
.shutdown = h3100_irda_shutdown,
|
.shutdown = h3100_irda_shutdown,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gpio_default_state h3100_default_gpio[] = {
|
|
||||||
{ H3XXX_GPIO_COM_DCD, GPIO_MODE_IN, "COM DCD" },
|
|
||||||
{ H3XXX_GPIO_COM_CTS, GPIO_MODE_IN, "COM CTS" },
|
|
||||||
{ H3XXX_GPIO_COM_RTS, GPIO_MODE_OUT0, "COM RTS" },
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init h3100_mach_init(void)
|
static void __init h3100_mach_init(void)
|
||||||
{
|
{
|
||||||
h3xxx_init_gpio(h3100_default_gpio, ARRAY_SIZE(h3100_default_gpio));
|
|
||||||
h3xxx_mach_init();
|
h3xxx_mach_init();
|
||||||
|
|
||||||
sa11x0_register_lcd(&h3100_lcd_info);
|
sa11x0_register_lcd(&h3100_lcd_info);
|
||||||
|
@ -130,15 +130,8 @@ static struct irda_platform_data h3600_irda_data = {
|
|||||||
.shutdown = h3600_irda_shutdown,
|
.shutdown = h3600_irda_shutdown,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gpio_default_state h3600_default_gpio[] = {
|
|
||||||
{ H3XXX_GPIO_COM_DCD, GPIO_MODE_IN, "COM DCD" },
|
|
||||||
{ H3XXX_GPIO_COM_CTS, GPIO_MODE_IN, "COM CTS" },
|
|
||||||
{ H3XXX_GPIO_COM_RTS, GPIO_MODE_OUT0, "COM RTS" },
|
|
||||||
};
|
|
||||||
|
|
||||||
static void __init h3600_mach_init(void)
|
static void __init h3600_mach_init(void)
|
||||||
{
|
{
|
||||||
h3xxx_init_gpio(h3600_default_gpio, ARRAY_SIZE(h3600_default_gpio));
|
|
||||||
h3xxx_mach_init();
|
h3xxx_mach_init();
|
||||||
|
|
||||||
sa11x0_register_lcd(&h3600_lcd_info);
|
sa11x0_register_lcd(&h3600_lcd_info);
|
||||||
|
@ -116,9 +116,34 @@ static struct resource h3xxx_flash_resource =
|
|||||||
/*
|
/*
|
||||||
* H3xxx uart support
|
* H3xxx uart support
|
||||||
*/
|
*/
|
||||||
|
static struct gpio h3xxx_uart_gpio[] = {
|
||||||
|
{ H3XXX_GPIO_COM_DCD, GPIOF_IN, "COM DCD" },
|
||||||
|
{ H3XXX_GPIO_COM_CTS, GPIOF_IN, "COM CTS" },
|
||||||
|
{ H3XXX_GPIO_COM_RTS, GPIOF_OUT_INIT_LOW, "COM RTS" },
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool h3xxx_uart_request_gpios(void)
|
||||||
|
{
|
||||||
|
static bool h3xxx_uart_gpio_ok;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (h3xxx_uart_gpio_ok)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
rc = gpio_request_array(h3xxx_uart_gpio, ARRAY_SIZE(h3xxx_uart_gpio));
|
||||||
|
if (rc)
|
||||||
|
pr_err("h3xxx_uart_request_gpios: error %d\n", rc);
|
||||||
|
else
|
||||||
|
h3xxx_uart_gpio_ok = true;
|
||||||
|
|
||||||
|
return h3xxx_uart_gpio_ok;
|
||||||
|
}
|
||||||
|
|
||||||
static void h3xxx_uart_set_mctrl(struct uart_port *port, u_int mctrl)
|
static void h3xxx_uart_set_mctrl(struct uart_port *port, u_int mctrl)
|
||||||
{
|
{
|
||||||
if (port->mapbase == _Ser3UTCR0) {
|
if (port->mapbase == _Ser3UTCR0) {
|
||||||
|
if (!h3xxx_uart_request_gpios())
|
||||||
|
return;
|
||||||
gpio_set_value(H3XXX_GPIO_COM_RTS, !(mctrl & TIOCM_RTS));
|
gpio_set_value(H3XXX_GPIO_COM_RTS, !(mctrl & TIOCM_RTS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -128,6 +153,8 @@ static u_int h3xxx_uart_get_mctrl(struct uart_port *port)
|
|||||||
u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR;
|
u_int ret = TIOCM_CD | TIOCM_CTS | TIOCM_DSR;
|
||||||
|
|
||||||
if (port->mapbase == _Ser3UTCR0) {
|
if (port->mapbase == _Ser3UTCR0) {
|
||||||
|
if (!h3xxx_uart_request_gpios())
|
||||||
|
return ret;
|
||||||
/*
|
/*
|
||||||
* DCD and CTS bits are inverted in GPLR by RS232 transceiver
|
* DCD and CTS bits are inverted in GPLR by RS232 transceiver
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user