I have a Sharp laptop that since I switched from FC5 to FC7 the synaptics touchpad quit working.
I am now running 2.6.23.1 kernel with a modified file:
2.6.23.1/drivers/input/serio/i8042.c
The function named :__devinit i8042_check_aux() shown below, returns a -1 from the first call
with a param still at 0x5A.
if I add a return 0 at the top of the function everything works.
I found this in the function being called;
static int __i8042_command(unsigned char *param, int command)
{
int i, error;
if (i8042_noloop && command == I8042_CMD_AUX_LOOP)
return -1;
But I don't see how the parameter i8042_noloop is being initialized.
static int __devinit i8042_check_aux(void)
{
int retval = -1;
int irq_registered = 0;
int aux_loop_broken = 0;
unsigned long flags;
unsigned char param;
/*
* Get rid of bytes in the queue.
*/
i8042_flush();
/*
* Internal loopback test - filters out AT-type i8042's. Unfortunately
* SiS screwed up and their 5597 doesn't support the LOOP command even
* though it has an AUX port.
*/
param = 0x5a;
retval = i8042_command(¶m, I8042_CMD_AUX_LOOP);
if (retval || param != 0x5a) {