diff --git a/src/add-ons/kernel/bus_managers/ps2/ps2_dev.c b/src/add-ons/kernel/bus_managers/ps2/ps2_dev.c index 981454aaf0..c20ebb8efb 100644 --- a/src/add-ons/kernel/bus_managers/ps2/ps2_dev.c +++ b/src/add-ons/kernel/bus_managers/ps2/ps2_dev.c @@ -87,7 +87,9 @@ ps2_dev_unpublish(ps2_dev *dev) dev->active = false; status = devfs_unpublish_device(dev->name, true); - dev->disconnect(dev); + + if ((dev->flags & PS2_FLAG_ENABLED) && dev->disconnect) + dev->disconnect(dev); dprintf("ps2: devfs_unpublish_device %s, status = 0x%08lx\n", dev->name, status); } diff --git a/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c b/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c index 2c1c45560d..99acb28877 100644 --- a/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c +++ b/src/add-ons/kernel/bus_managers/ps2/ps2_keyboard.c @@ -239,12 +239,12 @@ keyboard_open(const char *name, uint32 flags, void **_cookie) goto err2; } - atomic_or(&ps2_device[PS2_DEVICE_KEYB].flags, PS2_FLAG_ENABLED); - *_cookie = NULL; ps2_device[PS2_DEVICE_KEYB].disconnect = &ps2_keyboard_disconnect; ps2_device[PS2_DEVICE_KEYB].handle_int = &keyboard_handle_int; + atomic_or(&ps2_device[PS2_DEVICE_KEYB].flags, PS2_FLAG_ENABLED); + dprintf("ps2: keyboard_open %s success\n", name); return B_OK;