diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/char/hvc_console.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c index 7bc65a76dfc4..d59c642f9654 100644 --- a/drivers/char/hvc_console.c +++ b/drivers/char/hvc_console.c | |||
@@ -219,10 +219,23 @@ struct console hvc_con_driver = { | |||
219 | .index = -1, | 219 | .index = -1, |
220 | }; | 220 | }; |
221 | 221 | ||
222 | /* Early console initialization. Preceeds driver initialization. */ | 222 | /* |
223 | * Early console initialization. Preceeds driver initialization. | ||
224 | * | ||
225 | * (1) we are first, and the user specified another driver | ||
226 | * -- index will remain -1 | ||
227 | * (2) we are first and the user specified no driver | ||
228 | * -- index will be set to 0, then we will fail setup. | ||
229 | * (3) we are first and the user specified our driver | ||
230 | * -- index will be set to user specified driver, and we will fail | ||
231 | * (4) we are after driver, and this initcall will register us | ||
232 | * -- if the user didn't specify a driver then the console will match | ||
233 | * | ||
234 | * Note that for cases 2 and 3, we will match later when the io driver | ||
235 | * calls hvc_instantiate() and call register again. | ||
236 | */ | ||
223 | static int __init hvc_console_init(void) | 237 | static int __init hvc_console_init(void) |
224 | { | 238 | { |
225 | hvc_find_vtys(); | ||
226 | register_console(&hvc_con_driver); | 239 | register_console(&hvc_con_driver); |
227 | return 0; | 240 | return 0; |
228 | } | 241 | } |
@@ -257,6 +270,13 @@ int hvc_instantiate(uint32_t vtermno, int index) | |||
257 | if (last_hvc < index) | 270 | if (last_hvc < index) |
258 | last_hvc = index; | 271 | last_hvc = index; |
259 | 272 | ||
273 | /* if this index is what the user requested, then register | ||
274 | * now (setup won't fail at this point). It's ok to just | ||
275 | * call register again if previously .setup failed. | ||
276 | */ | ||
277 | if (index == hvc_con_driver.index) | ||
278 | register_console(&hvc_con_driver); | ||
279 | |||
260 | return 0; | 280 | return 0; |
261 | } | 281 | } |
262 | 282 | ||