diff options
author | Zephaniah E. Hull <warp@agamemnon.b5> | 2007-05-22 21:30:39 -0400 |
---|---|---|
committer | Zephaniah E. Hull <warp@agamemnon.b5> | 2007-05-22 21:30:39 -0400 |
commit | 128dab7736b6f8866a713113d2c7aea169119cd0 (patch) | |
tree | ab90c990ec2015b0309b42009f2901f3908e8619 | |
parent | ba65c34068a836ae393565a6a8260a4e96709816 (diff) | |
download | xorg-driver-xf86-input-evdev-128dab7736b6f8866a713113d2c7aea169119cd0.tar.gz |
Revert ba65c34068a836ae393565a6a8260a4e96709816 and 9644a4afbfd8ac4cb51facf0409f73f55743d8a3, this is evdev-1.1-branch, and we need hotplugging to work.
-rw-r--r-- | src/evdev.c | 11 | ||||
-rw-r--r-- | src/evdev.h | 2 | ||||
-rw-r--r-- | src/evdev_brain.c | 62 |
3 files changed, 5 insertions, 70 deletions
diff --git a/src/evdev.c b/src/evdev.c index 5455062..b9f7303 100644 --- a/src/evdev.c +++ b/src/evdev.c @@ -334,7 +334,8 @@ EvdevNew(evdevDriverPtr driver, evdevDevicePtr device) if (driver->configured) { xf86ActivateDevice (pInfo); - pInfo->dev->inited = (ActivateDevice(pInfo->dev) == Success); + + pInfo->dev->inited = (device->callback(device->pInfo->dev, DEVICE_INIT) == Success); ActivateDevice(pInfo->dev); EnableDevice (pInfo->dev); } @@ -461,14 +462,6 @@ EvdevCorePreInit(InputDriverPtr drv, IDevPtr dev, int flags) if (pEvdev->devices && pEvdev->devices->pInfo) return pEvdev->devices->pInfo; - /* In some cases pEvdev->devices is NULL, but on the next - * evdevRescanDevices the device suddenly appears. If we return NULL here, - * the server will clean up and the sudden appearance of the device will - * segfault. We need to remove the driver from the list to avoid this. - * No. I don't know why it just appears. (whot) - */ - evdevRemoveDriver(pEvdev); - return NULL; } diff --git a/src/evdev.h b/src/evdev.h index 81abbb6..c6e9188 100644 --- a/src/evdev.h +++ b/src/evdev.h @@ -256,8 +256,6 @@ Bool evdevStart (InputDriverPtr drv); Bool evdevNewDriver (evdevDriverPtr driver); Bool evdevGetBits (int fd, evdevBitsPtr bits); void evdevRemoveDevice (evdevDevicePtr device); -void evdevDeleteDevice (evdevDevicePtr device); -void evdevRemoveDriver (evdevDriverPtr device); int EvdevBtnInit (DeviceIntPtr device); int EvdevBtnOn (DeviceIntPtr device); diff --git a/src/evdev_brain.c b/src/evdev_brain.c index 03506c4..d0d1ac6 100644 --- a/src/evdev_brain.c +++ b/src/evdev_brain.c @@ -555,24 +555,16 @@ evdevNewDriver (evdevDriverPtr driver) void evdevRemoveDevice (evdevDevicePtr pEvdev) { - evdevDriverPtr driver, prev; + evdevDriverPtr driver; evdevDevicePtr *device; - prev = evdev_drivers; - - for (driver = evdev_drivers; driver; prev = driver, driver = driver->next) { + for (driver = evdev_drivers; driver; driver = driver->next) { for (device = &driver->devices; *device; device = &(*device)->next) { if (*device == pEvdev) { *device = pEvdev->next; + xf86DeleteInput(pEvdev->pInfo, 0); pEvdev->next = NULL; - /* driver without device? get rid of it, otherwise it'll - * auto-hotplug when a device is plugged in again. - */ if (!driver->devices) - { - evdevDeleteDevice(pEvdev); - evdevRemoveDriver(driver); - } return; } } @@ -608,51 +600,3 @@ evdevGetBits (int fd, evdevBitsPtr bits) return TRUE; } -/** - * Free memory associated with device. - */ -void -evdevDeleteDevice(evdevDevicePtr pEvdev) -{ - /* pEvdev->pInp is freed in xf86DeleteInput() when - * DeleteInputDeviceRequest is called. */ - xfree(pEvdev->name); - xfree(pEvdev->phys); - xfree(pEvdev->device); - xfree(pEvdev); -} - -/** - * Remove a driver from the list, free memory. - */ -void evdevRemoveDriver(evdevDriverPtr drv) -{ - evdevDriverPtr driver, prev; - evdevDevicePtr device; - - if (drv == evdev_drivers) - evdev_drivers = evdev_drivers->next; - else - for (prev = evdev_drivers, driver = prev->next; driver; - prev = driver, driver = driver->next) - { - if (driver == drv) - { - prev->next = driver->next; - } - } - - xfree(drv->name); - xfree(drv->phys); - xfree(drv->device); - - device = drv->devices; - while(device) - { - evdevDeleteDevice(device); - device = device->next; - } - - xfree(drv); -} - |