From 05067674952ea3ebfa4e26b81f7e5ccd43789682 Mon Sep 17 00:00:00 2001 From: lw Date: Sat, 31 Mar 2012 12:29:01 +0800 Subject: [PATCH] rk30:modify gyrosensor l3g4200d according to android --- drivers/input/gyroscope/l3g4200d.c | 32 ++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/input/gyroscope/l3g4200d.c b/drivers/input/gyroscope/l3g4200d.c index 5552c80a0214..2c2c9403f2bf 100755 --- a/drivers/input/gyroscope/l3g4200d.c +++ b/drivers/input/gyroscope/l3g4200d.c @@ -391,9 +391,9 @@ static void l3g4200d_report_value(struct i2c_client *client, struct l3g4200d_axi //struct l3g4200d_axis *axis = (struct l3g4200d_axis *)rbuf; /* Report acceleration sensor information */ - input_report_abs(l3g4200d->input_dev, ABS_RX, axis->x); - input_report_abs(l3g4200d->input_dev, ABS_RY, axis->y); - input_report_abs(l3g4200d->input_dev, ABS_RZ, axis->z); + input_report_rel(l3g4200d->input_dev, ABS_RX, axis->x); + input_report_rel(l3g4200d->input_dev, ABS_RY, axis->y); + input_report_rel(l3g4200d->input_dev, ABS_RZ, axis->z); input_sync(l3g4200d->input_dev); mmaprintk("%s:x==%d y==%d z==%d\n",__func__,axis->x,axis->y,axis->z); } @@ -480,7 +480,10 @@ static long l3g4200d_ioctl( struct file *file, unsigned int cmd,unsigned long ar mmaprintk("%s :L3G4200D_IOCTL_GET_ENABLE\n",__FUNCTION__); ret=!l3g4200d->status; if (copy_to_user(argp, &ret, sizeof(ret))) - return 0; + { + printk("%s:failed to copy status to user space.\n",__FUNCTION__); + return -EFAULT; + } break; //case ECS_IOCTL_START: case L3G4200D_IOCTL_SET_ENABLE: @@ -488,6 +491,12 @@ static long l3g4200d_ioctl( struct file *file, unsigned int cmd,unsigned long ar ret = l3g4200d_start(client, ODR100_BW12_5); if (ret < 0) return ret; + ret=l3g4200d->status; + if (copy_to_user(argp, &ret, sizeof(ret))) + { + printk("%s:failed to copy sense data to user space.\n",__FUNCTION__); + return -EFAULT; + } break; case ECS_IOCTL_CLOSE: mmaprintk("%s :ECS_IOCTL_CLOSE\n",__FUNCTION__); @@ -762,16 +771,19 @@ static int l3g4200d_probe(struct i2c_client *client, const struct i2c_device_id goto exit_input_allocate_device_failed; } - set_bit(EV_ABS, l3g4200d->input_dev->evbit); + //set_bit(EV_ABS, l3g4200d->input_dev->evbit); /* x-axis acceleration */ - input_set_abs_params(l3g4200d->input_dev, ABS_RX, -28571, 28571, 0, 0); //2g full scale range - /* y-axis acceleration */ - input_set_abs_params(l3g4200d->input_dev, ABS_RY, -28571, 28571, 0, 0); //2g full scale range + input_set_capability(l3g4200d->input_dev, EV_REL, REL_RX); + input_set_abs_params(l3g4200d->input_dev, ABS_RX, -32768, 32768, 0, 0); //2g full scale range + /* y-axis acceleration */ + input_set_capability(l3g4200d->input_dev, EV_REL, REL_RY); + input_set_abs_params(l3g4200d->input_dev, ABS_RY, -32768, 32768, 0, 0); //2g full scale range /* z-axis acceleration */ - input_set_abs_params(l3g4200d->input_dev, ABS_RZ, -28571, 28571, 0, 0); //2g full scale range + input_set_capability(l3g4200d->input_dev, EV_REL, REL_RZ); + input_set_abs_params(l3g4200d->input_dev, ABS_RZ, -32768, 32768, 0, 0); //2g full scale range - l3g4200d->input_dev->name = "gyrosensor"; + l3g4200d->input_dev->name = "gyro"; l3g4200d->input_dev->dev.parent = &client->dev; err = input_register_device(l3g4200d->input_dev); -- 2.34.1