Patch by Olivier Coursiere: Reset the touchpad mode when closing the device.
Will be useful when (input) devices are closed during shutdown. (app_server and input_server are never quit during shutdown, so the drivers are not closed either.) Apparently, the touchpad will remain as configured before, on a soft reset which confuses for example BeOS, when it's booted after Haiku. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29920 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -66,7 +66,7 @@ ps2_dev ps2_device[PS2_DEVICE_COUNT] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
status_t
|
||||||
ps2_reset_mouse(ps2_dev *dev)
|
ps2_reset_mouse(ps2_dev *dev)
|
||||||
{
|
{
|
||||||
uint8 data[2];
|
uint8 data[2];
|
||||||
|
|||||||
@@ -74,6 +74,8 @@ status_t ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out,
|
|||||||
status_t ps2_dev_command_timeout(ps2_dev *dev, uint8 cmd, const uint8 *out,
|
status_t ps2_dev_command_timeout(ps2_dev *dev, uint8 cmd, const uint8 *out,
|
||||||
int out_count, uint8 *in, int in_count, bigtime_t timeout);
|
int out_count, uint8 *in, int in_count, bigtime_t timeout);
|
||||||
|
|
||||||
|
status_t ps2_reset_mouse(ps2_dev *dev);
|
||||||
|
|
||||||
void ps2_dev_publish(ps2_dev *dev);
|
void ps2_dev_publish(ps2_dev *dev);
|
||||||
void ps2_dev_unpublish(ps2_dev *dev);
|
void ps2_dev_unpublish(ps2_dev *dev);
|
||||||
|
|
||||||
|
|||||||
@@ -630,6 +630,7 @@ err1:
|
|||||||
status_t
|
status_t
|
||||||
synaptics_close(void *_cookie)
|
synaptics_close(void *_cookie)
|
||||||
{
|
{
|
||||||
|
status_t status;
|
||||||
synaptics_cookie *cookie = _cookie;
|
synaptics_cookie *cookie = _cookie;
|
||||||
|
|
||||||
ps2_dev_command_timeout(cookie->dev, PS2_CMD_DISABLE, NULL, 0, NULL, 0,
|
ps2_dev_command_timeout(cookie->dev, PS2_CMD_DISABLE, NULL, 0, NULL, 0,
|
||||||
@@ -641,6 +642,15 @@ synaptics_close(void *_cookie)
|
|||||||
atomic_and(&cookie->dev->flags, ~PS2_FLAG_OPEN);
|
atomic_and(&cookie->dev->flags, ~PS2_FLAG_OPEN);
|
||||||
atomic_and(&cookie->dev->flags, ~PS2_FLAG_ENABLED);
|
atomic_and(&cookie->dev->flags, ~PS2_FLAG_ENABLED);
|
||||||
|
|
||||||
|
// Reset the touchpad so it generate standard ps2 packets instead of
|
||||||
|
// extended ones. If not, BeOS is confused with such packets when rebooting
|
||||||
|
// without a complete shutdown.
|
||||||
|
status = ps2_reset_mouse(cookie->dev);
|
||||||
|
if (status != B_OK) {
|
||||||
|
INFO("ps2: reset failed\n");
|
||||||
|
return B_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
if (gTouchpadInfo.capPassThrough)
|
if (gTouchpadInfo.capPassThrough)
|
||||||
ps2_service_notify_device_removed(gPassthroughDevice);
|
ps2_service_notify_device_removed(gPassthroughDevice);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user