static int gs_adi_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { int i; void __user *argp = (void __user *)arg; int accel_buf[3]; short flag; switch (cmd) { case ECS_IOCTL_APP_SET_AFLAG: /*set open acceleration sensor flag*/ if (copy_from_user(&flag, argp, sizeof(flag))) return -EFAULT; break; case ECS_IOCTL_APP_SET_DELAY: if (copy_from_user(&flag, argp, sizeof(flag))) return -EFAULT; break; default: break; } switch (cmd) { case ECS_IOCTL_APP_SET_AFLAG: atomic_set(&a_flag, flag); break; case ECS_IOCTL_APP_GET_AFLAG: /*get open acceleration sensor flag*/ flag = atomic_read(&a_flag); break; case ECS_IOCTL_APP_SET_DELAY: if(flag) accel_delay = flag; else accel_delay = 10; /*10ms*/ break; case ECS_IOCTL_APP_GET_DELAY: flag = accel_delay; break; case ECS_IOCTL_READ_ACCEL_XYZ: for(i=0;i<3;i++) gs_adi_data_to_compass(accel_buf); break; default: break; } switch (cmd) { case ECS_IOCTL_APP_GET_AFLAG: if (copy_to_user(argp, &flag, sizeof(flag))) return -EFAULT; break; case ECS_IOCTL_APP_GET_DELAY: if (copy_to_user(argp, &flag, sizeof(flag))) return -EFAULT; break; case ECS_IOCTL_READ_ACCEL_XYZ: if (copy_to_user(argp, &accel_buf, sizeof(accel_buf))) return -EFAULT; break; case ECS_IOCTL_READ_DEVICEID: if (copy_to_user(argp, adix_device_id, sizeof(adix_device_id))) return -EFAULT; break; default: break; } return 0; }
static long gs_adi_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int i; void __user *argp = (void __user *)arg; int accel_buf[3]; /*BK4D01075, add set delay interface for app , dingxifeng KF14049, 2009-6-10 begin*/ short flag; switch (cmd) { /*BK4D01898, add acc_flag for control G-sensor, dingxifeng KF14049, 2009-7-2 begin*/ case ECS_IOCTL_APP_SET_AFLAG: /*set open acceleration sensor flag*/ if (copy_from_user(&flag, argp, sizeof(flag))) return -EFAULT; break; case ECS_IOCTL_APP_SET_DELAY: if (copy_from_user(&flag, argp, sizeof(flag))) return -EFAULT; break; default: break; } switch (cmd) { case ECS_IOCTL_APP_SET_AFLAG: atomic_set(&a_flag, flag); break; case ECS_IOCTL_APP_GET_AFLAG: /*get open acceleration sensor flag*/ flag = atomic_read(&a_flag); break; case ECS_IOCTL_APP_SET_DELAY: /*BK4D01637, the driver cant not use 0ms , dingxifeng KF14049, 2009-6-22 begin*/ if(flag) accel_delay = flag; else accel_delay = 10; /*10ms*/ /*BK4D01637, the driver cant not use 0ms , dingxifeng KF14049, 2009-6-22 end*/ break; case ECS_IOCTL_APP_GET_DELAY: flag = accel_delay; break; /*BK4D01075, add set delay interface for app , dingxifeng KF14049, 2009-6-10 end*/ case ECS_IOCTL_READ_ACCEL_XYZ: for(i=0;i<3;i++) gs_adi_data_to_compass(accel_buf); break; default: break; } switch (cmd) { case ECS_IOCTL_APP_GET_AFLAG: if (copy_to_user(argp, &flag, sizeof(flag))) return -EFAULT; break; /*BK4D01898, add acc_flag for control G-sensor, dingxifeng KF14049, 2009-7-2 end*/ /*BK4D01075, add set delay interface for app , dingxifeng KF14049, 2009-6-10 begin*/ case ECS_IOCTL_APP_GET_DELAY: if (copy_to_user(argp, &flag, sizeof(flag))) return -EFAULT; break; /*BK4D01075, add set delay interface for app , dingxifeng KF14049, 2009-6-10 end*/ case ECS_IOCTL_READ_ACCEL_XYZ: if (copy_to_user(argp, &accel_buf, sizeof(accel_buf))) return -EFAULT; break; case ECS_IOCTL_READ_DEVICEID: if (copy_to_user(argp, adix_device_id, sizeof(adix_device_id))) return -EFAULT; break; default: break; } return 0; }