Lines Matching +full:keyboard +full:- +full:controller
2 * i8042 keyboard and mouse controller driver for Linux
4 * Copyright (c) 1999-2004 Vojtech Pavlik
32 MODULE_DESCRIPTION("i8042 keyboard and mouse controller driver");
45 MODULE_PARM_DESC(nomux, "Do not check whether an active multiplexing controller is present.");
49 MODULE_PARM_DESC(unlock, "Ignore keyboard lock.");
60 enum i8042_controller_reset_mode *arg = kp->arg; in i8042_set_reset()
83 MODULE_PARM_DESC(reset, "Reset controller on resume, cleanup or both");
87 MODULE_PARM_DESC(direct, "Put keyboard port into non-translated mode.");
91 MODULE_PARM_DESC(dumbkbd, "Pretend that controller can only read data from keyboard");
108 MODULE_PARM_DESC(dritek, "Force enable the Dritek keyboard extension");
114 MODULE_PARM_DESC(nopnp, "Do not use PNP to detect controller settings");
125 …enable (may reveal sensitive data) of normally sanitize-filtered kbd data traffic debug log [pre-c…
199 ret = -EBUSY; in i8042_install_filter()
220 ret = -EINVAL; in i8042_remove_filter()
246 return -(i == I8042_CTL_TIMEOUT); in i8042_wait_read()
257 return -(i == I8042_CTL_TIMEOUT); in i8042_wait_write()
261 * i8042_flush() flushes all data that may be in the keyboard and mouse buffers
278 dbg("%02x <- i8042 (flush, %s)\n", in i8042_flush()
281 retval = -EIO; in i8042_flush()
296 * encoded in bits 8-11 of the command number.
304 return -1; in __i8042_command()
310 dbg("%02x -> i8042 (command)\n", command & 0xff); in __i8042_command()
316 dbg(" -- i8042 (wait write timeout)\n"); in __i8042_command()
319 dbg("%02x -> i8042 (parameter)\n", param[i]); in __i8042_command()
326 dbg(" -- i8042 (wait read timeout)\n"); in __i8042_command()
332 dbg(" -- i8042 (auxerr)\n"); in __i8042_command()
333 return -1; in __i8042_command()
337 dbg("%02x <- i8042 (return)\n", param[i]); in __i8042_command()
357 * i8042_kbd_write() sends a byte out through the keyboard interface.
368 dbg("%02x -> i8042 (kbd-data)\n", c); in i8042_kbd_write()
383 struct i8042_port *port = serio->port_data; in i8042_aux_write()
385 return i8042_command(&c, port->mux == -1 ? in i8042_aux_write()
387 I8042_CMD_MUX_SEND + port->mux); in i8042_aux_write()
393 * and then re-enabling it.
437 struct i8042_port *port = serio->port_data; in i8042_start()
440 port->exists = true; in i8042_start()
447 * i8042_stop() marks serio port as non-existing so i8042_interrupt
453 struct i8042_port *port = serio->port_data; in i8042_stop()
456 port->exists = false; in i8042_stop()
457 port->serio = NULL; in i8042_stop()
482 i8042_suppress_kbd_ack--; in i8042_filter()
483 dbg("Extra keyboard ACK - filtered out\n"); in i8042_filter()
497 * i8042_interrupt() is the most important function in this driver -
553 /* fall through - report timeout */ in i8042_interrupt()
574 serio = port->exists ? port->serio : NULL; in i8042_interrupt()
577 pm_wakeup_event(&serio->dev, 0); in i8042_interrupt()
579 filter_dbg(port->driver_bound, data, "<- i8042 (interrupt, %d, %d%s%s)\n", in i8042_interrupt()
596 * i8042_enable_kbd_port enables keyboard port on chip
608 return -EIO; in i8042_enable_kbd_port()
627 return -EIO; in i8042_enable_aux_port()
635 * the controller has been switched into Multiplexed mode
652 * i8042_set_mux_mode checks whether the controller has an
668 * Internal loopback test - send three bytes, they should come back from the in i8042_set_mux_mode()
674 return -1; in i8042_set_mux_mode()
677 return -1; in i8042_set_mux_mode()
680 return -1; in i8042_set_mux_mode()
687 return -1; in i8042_set_mux_mode()
696 * i8042_check_mux() checks whether the controller supports the PS/2 Active
706 return -1; in i8042_check_mux()
708 pr_info("Detected active multiplexing controller, rev %d.%d\n", in i8042_check_mux()
719 return -EIO; in i8042_check_mux()
743 dbg("%02x <- i8042 (aux_test_irq, %s)\n", in i8042_aux_test_irq()
756 * i8042_toggle_aux - enables or disables AUX port on i8042 via command and
767 return -1; in i8042_toggle_aux()
774 return -1; in i8042_toggle_aux()
780 return -1; in i8042_toggle_aux()
790 int retval = -1; in i8042_check_aux()
803 * Internal loopback test - filters out AT-type i8042's. Unfortunately in i8042_check_aux()
813 * External connection test - filters out AT-soldered PS/2 i8042's in i8042_check_aux()
814 * 0x00 - no error, 0x01-0x03 - clock/data stuck, 0xff - general error in i8042_check_aux()
815 * 0xfa - no error on some notebooks which ignore the spec in i8042_check_aux()
822 return -1; in i8042_check_aux()
833 * Bit assignment test - filters out PS/2 i8042's in AT mode in i8042_check_aux()
842 return -1; in i8042_check_aux()
845 * Reset keyboard (needed on some laptops to successfully detect in i8042_check_aux()
893 * AUX IRQ was never delivered so we need to flush the controller to in i8042_check_aux()
894 * get rid of the byte we put there; otherwise keyboard may not work. in i8042_check_aux()
896 dbg(" -- i8042 (aux irq test timeout)\n"); in i8042_check_aux()
898 retval = -1; in i8042_check_aux()
911 retval = -1; in i8042_check_aux()
922 pr_info("No controller found\n"); in i8042_controller_check()
923 return -ENODEV; in i8042_controller_check()
941 pr_err("i8042 controller selftest timeout\n"); in i8042_controller_selftest()
942 return -ENODEV; in i8042_controller_selftest()
948 dbg("i8042 controller selftest: %#x != %#x\n", in i8042_controller_selftest()
955 * On x86, we don't fail entire i8042 initialization if controller in i8042_controller_selftest()
956 * reset fails in hopes that keyboard port will still be functional in i8042_controller_selftest()
957 * and user will still get a working keyboard. This is especially in i8042_controller_selftest()
960 pr_info("giving up on controller selftest, continuing anyway...\n"); in i8042_controller_selftest()
963 pr_err("i8042 controller selftest failed\n"); in i8042_controller_selftest()
964 return -EIO; in i8042_controller_selftest()
969 * i8042_controller init initializes the i8042 controller, and,
970 * most importantly, sets it into non-xlated mode if that's
987 return -EIO; in i8042_controller_init()
995 return -EIO; in i8042_controller_init()
1003 * Disable the keyboard interface and interrupt. in i8042_controller_init()
1046 return -EIO; in i8042_controller_init()
1050 * Flush whatever accumulated while we were disabling keyboard port. in i8042_controller_init()
1060 * Reset the controller and reset CRT to the original value set by BIOS.
1085 * Reset the controller if requested. in i8042_controller_reset()
1103 * i8042_panic_blink() will turn the keyboard LEDs on or off and is called
1122 dbg("%02x -> i8042 (panic blink)\n", 0xed); in i8042_panic_blink()
1129 dbg("%02x -> i8042 (panic blink)\n", led); in i8042_panic_blink()
1185 return -EIO; in i8042_controller_resume()
1225 if (serio && device_may_wakeup(&serio->dev)) in i8042_pm_suspend()
1248 if (serio && device_may_wakeup(&serio->dev)) in i8042_pm_resume()
1254 * not restore the controller state to whatever it had been at boot in i8042_pm_resume()
1261 * We only need to reset the controller if we are resuming after handing in i8042_pm_resume()
1317 return -ENOMEM; in i8042_create_kbd_port()
1319 serio->id.type = i8042_direct ? SERIO_8042 : SERIO_8042_XL; in i8042_create_kbd_port()
1320 serio->write = i8042_dumbkbd ? NULL : i8042_kbd_write; in i8042_create_kbd_port()
1321 serio->start = i8042_start; in i8042_create_kbd_port()
1322 serio->stop = i8042_stop; in i8042_create_kbd_port()
1323 serio->close = i8042_port_close; in i8042_create_kbd_port()
1324 serio->ps2_cmd_mutex = &i8042_mutex; in i8042_create_kbd_port()
1325 serio->port_data = port; in i8042_create_kbd_port()
1326 serio->dev.parent = &i8042_platform_device->dev; in i8042_create_kbd_port()
1327 strlcpy(serio->name, "i8042 KBD port", sizeof(serio->name)); in i8042_create_kbd_port()
1328 strlcpy(serio->phys, I8042_KBD_PHYS_DESC, sizeof(serio->phys)); in i8042_create_kbd_port()
1329 strlcpy(serio->firmware_id, i8042_kbd_firmware_id, in i8042_create_kbd_port()
1330 sizeof(serio->firmware_id)); in i8042_create_kbd_port()
1332 port->serio = serio; in i8042_create_kbd_port()
1333 port->irq = I8042_KBD_IRQ; in i8042_create_kbd_port()
1346 return -ENOMEM; in i8042_create_aux_port()
1348 serio->id.type = SERIO_8042; in i8042_create_aux_port()
1349 serio->write = i8042_aux_write; in i8042_create_aux_port()
1350 serio->start = i8042_start; in i8042_create_aux_port()
1351 serio->stop = i8042_stop; in i8042_create_aux_port()
1352 serio->ps2_cmd_mutex = &i8042_mutex; in i8042_create_aux_port()
1353 serio->port_data = port; in i8042_create_aux_port()
1354 serio->dev.parent = &i8042_platform_device->dev; in i8042_create_aux_port()
1356 strlcpy(serio->name, "i8042 AUX port", sizeof(serio->name)); in i8042_create_aux_port()
1357 strlcpy(serio->phys, I8042_AUX_PHYS_DESC, sizeof(serio->phys)); in i8042_create_aux_port()
1358 strlcpy(serio->firmware_id, i8042_aux_firmware_id, in i8042_create_aux_port()
1359 sizeof(serio->firmware_id)); in i8042_create_aux_port()
1360 serio->close = i8042_port_close; in i8042_create_aux_port()
1362 snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx); in i8042_create_aux_port()
1363 snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1); in i8042_create_aux_port()
1364 strlcpy(serio->firmware_id, i8042_aux_firmware_id, in i8042_create_aux_port()
1365 sizeof(serio->firmware_id)); in i8042_create_aux_port()
1368 port->serio = serio; in i8042_create_aux_port()
1369 port->mux = idx; in i8042_create_aux_port()
1370 port->irq = I8042_AUX_IRQ; in i8042_create_aux_port()
1402 serio->name, in i8042_register_ports()
1407 device_set_wakeup_capable(&serio->dev, true); in i8042_register_ports()
1410 * On platforms using suspend-to-idle, allow the keyboard to in i8042_register_ports()
1411 * wake up the system from sleep by enabling keyboard wakeups in i8042_register_ports()
1412 * by default. This is consistent with keyboard wakeup in i8042_register_ports()
1413 * behavior on many platforms using suspend-to-RAM (ACPI S3) in i8042_register_ports()
1417 device_set_wakeup_enable(&serio->dev, true); in i8042_register_ports()
1450 return -ENODEV; in i8042_setup_aux()
1453 error = i8042_create_aux_port(-1); in i8042_setup_aux()
1516 struct i8042_port *port = serio->port_data; in i8042_kbd_bind_notifier()
1523 port->driver_bound = true; in i8042_kbd_bind_notifier()
1527 port->driver_bound = false; in i8042_kbd_bind_notifier()
1557 if (error && error != -ENODEV && error != -EBUSY) in i8042_probe()