diff options
Diffstat (limited to 'arch/arm/mach-sa1100/collie.c')
| -rw-r--r-- | arch/arm/mach-sa1100/collie.c | 72 |
1 files changed, 71 insertions, 1 deletions
diff --git a/arch/arm/mach-sa1100/collie.c b/arch/arm/mach-sa1100/collie.c index 102454082474..676b5c5b75bb 100644 --- a/arch/arm/mach-sa1100/collie.c +++ b/arch/arm/mach-sa1100/collie.c | |||
| @@ -11,7 +11,8 @@ | |||
| 11 | * published by the Free Software Foundation. | 11 | * published by the Free Software Foundation. |
| 12 | * | 12 | * |
| 13 | * ChangeLog: | 13 | * ChangeLog: |
| 14 | * 03-06-2004 John Lenz <jelenz@wisc.edu> | 14 | * 2006 Pavel Machek <pavel@suse.cz> |
| 15 | * 03-06-2004 John Lenz <lenz@cs.wisc.edu> | ||
| 15 | * 06-04-2002 Chris Larson <kergoth@digitalnemesis.net> | 16 | * 06-04-2002 Chris Larson <kergoth@digitalnemesis.net> |
| 16 | * 04-16-2001 Lineo Japan,Inc. ... | 17 | * 04-16-2001 Lineo Japan,Inc. ... |
| 17 | */ | 18 | */ |
| @@ -87,12 +88,75 @@ static struct mcp_plat_data collie_mcp_data = { | |||
| 87 | .sclk_rate = 11981000, | 88 | .sclk_rate = 11981000, |
| 88 | }; | 89 | }; |
| 89 | 90 | ||
| 91 | #ifdef CONFIG_SHARP_LOCOMO | ||
| 92 | /* | ||
| 93 | * low-level UART features. | ||
| 94 | */ | ||
| 95 | static struct locomo_dev *uart_dev = NULL; | ||
| 96 | |||
| 97 | static void collie_uart_set_mctrl(struct uart_port *port, u_int mctrl) | ||
| 98 | { | ||
| 99 | if (!uart_dev) return; | ||
| 100 | |||
| 101 | if (mctrl & TIOCM_RTS) | ||
| 102 | locomo_gpio_write(uart_dev, LOCOMO_GPIO_RTS, 0); | ||
| 103 | else | ||
| 104 | locomo_gpio_write(uart_dev, LOCOMO_GPIO_RTS, 1); | ||
| 105 | |||
| 106 | if (mctrl & TIOCM_DTR) | ||
| 107 | locomo_gpio_write(uart_dev, LOCOMO_GPIO_DTR, 0); | ||
| 108 | else | ||
| 109 | locomo_gpio_write(uart_dev, LOCOMO_GPIO_DTR, 1); | ||
| 110 | } | ||
| 111 | |||
| 112 | static u_int collie_uart_get_mctrl(struct uart_port *port) | ||
| 113 | { | ||
| 114 | int ret = TIOCM_CD; | ||
| 115 | unsigned int r; | ||
| 116 | if (!uart_dev) return ret; | ||
| 117 | |||
| 118 | r = locomo_gpio_read_output(uart_dev, LOCOMO_GPIO_CTS & LOCOMO_GPIO_DSR); | ||
| 119 | if (r & LOCOMO_GPIO_CTS) | ||
| 120 | ret |= TIOCM_CTS; | ||
| 121 | if (r & LOCOMO_GPIO_DSR) | ||
| 122 | ret |= TIOCM_DSR; | ||
| 123 | |||
| 124 | return ret; | ||
| 125 | } | ||
| 90 | 126 | ||
| 91 | static struct sa1100_port_fns collie_port_fns __initdata = { | 127 | static struct sa1100_port_fns collie_port_fns __initdata = { |
| 92 | .set_mctrl = collie_uart_set_mctrl, | 128 | .set_mctrl = collie_uart_set_mctrl, |
| 93 | .get_mctrl = collie_uart_get_mctrl, | 129 | .get_mctrl = collie_uart_get_mctrl, |
| 94 | }; | 130 | }; |
| 95 | 131 | ||
| 132 | static int collie_uart_probe(struct locomo_dev *dev) | ||
| 133 | { | ||
| 134 | uart_dev = dev; | ||
| 135 | return 0; | ||
| 136 | } | ||
| 137 | |||
| 138 | static int collie_uart_remove(struct locomo_dev *dev) | ||
| 139 | { | ||
| 140 | uart_dev = NULL; | ||
| 141 | return 0; | ||
| 142 | } | ||
| 143 | |||
| 144 | static struct locomo_driver collie_uart_driver = { | ||
| 145 | .drv = { | ||
| 146 | .name = "collie_uart", | ||
| 147 | }, | ||
| 148 | .devid = LOCOMO_DEVID_UART, | ||
| 149 | .probe = collie_uart_probe, | ||
| 150 | .remove = collie_uart_remove, | ||
| 151 | }; | ||
| 152 | |||
| 153 | static int __init collie_uart_init(void) { | ||
| 154 | return locomo_driver_register(&collie_uart_driver); | ||
| 155 | } | ||
| 156 | device_initcall(collie_uart_init); | ||
| 157 | |||
| 158 | #endif | ||
| 159 | |||
| 96 | 160 | ||
| 97 | static struct resource locomo_resources[] = { | 161 | static struct resource locomo_resources[] = { |
| 98 | [0] = { | 162 | [0] = { |
| @@ -218,6 +282,12 @@ static void __init collie_map_io(void) | |||
| 218 | { | 282 | { |
| 219 | sa1100_map_io(); | 283 | sa1100_map_io(); |
| 220 | iotable_init(collie_io_desc, ARRAY_SIZE(collie_io_desc)); | 284 | iotable_init(collie_io_desc, ARRAY_SIZE(collie_io_desc)); |
| 285 | |||
| 286 | #ifdef CONFIG_SHARP_LOCOMO | ||
| 287 | sa1100_register_uart_fns(&collie_port_fns); | ||
| 288 | #endif | ||
| 289 | sa1100_register_uart(0, 3); | ||
| 290 | sa1100_register_uart(1, 1); | ||
| 221 | } | 291 | } |
| 222 | 292 | ||
| 223 | MACHINE_START(COLLIE, "Sharp-Collie") | 293 | MACHINE_START(COLLIE, "Sharp-Collie") |
