summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZephaniah E. Hull <warp@agamemnon.b5>2007-05-22 21:30:39 -0400
committerZephaniah E. Hull <warp@agamemnon.b5>2007-05-22 21:30:39 -0400
commit128dab7736b6f8866a713113d2c7aea169119cd0 (patch)
treeab90c990ec2015b0309b42009f2901f3908e8619
parentba65c34068a836ae393565a6a8260a4e96709816 (diff)
downloadxorg-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.c11
-rw-r--r--src/evdev.h2
-rw-r--r--src/evdev_brain.c62
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);
-}
-