void ApplePS2SynapticsTouchPad::setDevicePowerState( UInt32 whatToDo ) { switch ( whatToDo ) { case kPS2C_DisableDevice: // // Disable touchpad (synchronous). // setTouchPadEnable( false ); break; case kPS2C_EnableDevice: // // Must not issue any commands before the device has // completed its power-on self-test and calibration. // IOSleep(1000); setTouchPadModeByte( _touchPadModeByte ); // // Enable the mouse clock (should already be so) and the // mouse IRQ line. // setCommandByte( kCB_EnableMouseIRQ, kCB_DisableMouseClock ); // // Clear packet buffer pointer to avoid issues caused by // stale packet fragments. // _packetByteCount = 0; // // Finally, we enable the trackpad itself, so that it may // start reporting asynchronous events. // setTouchPadEnable( true ); break; } }
void ApplePS2SynapticsTouchPad::stop( IOService * provider ) { // // The driver has been instructed to stop. Note that we must break all // connections to other service objects now (ie. no registered actions, // no pointers and retains to objects, etc), if any. // assert(_device == provider); // // Disable the mouse itself, so that it may stop reporting mouse events. // setTouchPadEnable(false); // // Disable the mouse clock and the mouse IRQ line. // setCommandByte( kCB_DisableMouseClock, kCB_EnableMouseIRQ ); // // Uninstall the interrupt handler. // if ( _interruptHandlerInstalled ) _device->uninstallInterruptAction(); _interruptHandlerInstalled = false; // // Uninstall the power control handler. // if ( _powerControlHandlerInstalled ) _device->uninstallPowerControlAction(); _powerControlHandlerInstalled = false; super::stop(provider); }
void ApplePS2CypressTouchPad::stop( IOService * provider ) { // // The driver has been instructed to stop. Note that we must break all // connections to other service objects now (ie. no registered actions, // no pointers and retains to objects, etc), if any. // assert(_device == provider); // // Disable the mouse itself, so that it may stop reporting mouse events. // setTouchPadEnable(false); // // Uninstall the interrupt handler. // if ( _interruptHandlerInstalled ) _device->uninstallInterruptAction(); _interruptHandlerInstalled = false; // // Uninstall the power control handler. // if ( _powerControlHandlerInstalled ) _device->uninstallPowerControlAction(); _powerControlHandlerInstalled = false; // // Release the pointer to the provider object. // OSSafeReleaseNULL(_device); super::stop(provider); }
void ApplePS2CypressTouchPad::setDevicePowerState( UInt32 whatToDo ) { switch ( whatToDo ) { case kPS2C_DisableDevice: // // Disable touchpad. // setTouchPadEnable( false ); break; case kPS2C_EnableDevice: // // Finally, we enable the trackpad itself, so that it may // start reporting asynchronous events. // IOSleep(_wakeDelay); initTouchPad(); break; } }
bool ApplePS2SynapticsTouchPad::start( IOService * provider ) { UInt64 gesturesEnabled; // // The driver has been instructed to start. This is called after a // successful probe and match. // if (!super::start(provider)) return false; // // Maintain a pointer to and retain the provider object. // _device = (ApplePS2MouseDevice *) provider; _device->retain(); // // Announce hardware properties. // IOLog("ApplePS2Trackpad: Synaptics TouchPad v%d.%d\n", (UInt8)(_touchPadVersion >> 8), (UInt8)(_touchPadVersion)); // // Write the TouchPad mode byte value. // setTouchPadModeByte(_touchPadModeByte); // // Advertise the current state of the tapping feature. // gesturesEnabled = (_touchPadModeByte == kModeByteValueGesturesEnabled) ? 1 : 0; setProperty("Clicking", gesturesEnabled, sizeof(gesturesEnabled)*8); // // Must add this property to let our superclass know that it should handle // trackpad acceleration settings from user space. Without this, tracking // speed adjustments from the mouse prefs panel have no effect. // setProperty(kIOHIDPointerAccelerationTypeKey, kIOHIDTrackpadAccelerationType); // // Install our driver's interrupt handler, for asynchronous data delivery. // _device->installInterruptAction(this, (PS2InterruptAction)&ApplePS2SynapticsTouchPad::interruptOccurred); _interruptHandlerInstalled = true; // // Enable the mouse clock (should already be so) and the mouse IRQ line. // setCommandByte( kCB_EnableMouseIRQ, kCB_DisableMouseClock ); // // Finally, we enable the trackpad itself, so that it may start reporting // asynchronous events. // setTouchPadEnable(true); // // Install our power control handler. // _device->installPowerControlAction( this, (PS2PowerControlAction) &ApplePS2SynapticsTouchPad::setDevicePowerState ); _powerControlHandlerInstalled = true; return true; }