static ssize_t show_calidata_value(struct device *dev, struct device_attribute *attr, char *buf) { char strbuf[AMI304_BUFSIZE]; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); return sprintf(buf, "%s\n", strbuf); }
static int ami304hal_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { char strbuf[AMI304_BUFSIZE]; void __user *data; int retval=0; switch (cmd) { case AMI304HAL_IOCTL_GET_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_POSTURE: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; default: printk(KERN_ERR "%s not supported = 0x%04x", __FUNCTION__, cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }
static int ami304_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { char strbuf[AMI304_BUFSIZE]; int controlbuf[10]; void __user *data; int retval=0; int mode=0; #if DEBUG_AMI304 printk(KERN_ERR "ami304 - %s \n",__FUNCTION__); #endif //check the authority is root or not if (!capable(CAP_SYS_ADMIN)) { retval = -EPERM; goto err_out; } switch (cmd) { case AMI304_IOCTL_INIT: read_lock(&ami304_data.lock); mode = ami304_data.mode; read_unlock(&ami304_data.lock); AMI304_Init(mode); break; case AMI304_IOCTL_READ_CHIPINFO: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadChipInfo(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf) + 1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf) + 1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_POSTUREDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf) + 1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf) + 1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_CONTROL: read_lock(&ami304mid_data.ctrllock); memcpy(controlbuf, &ami304mid_data.controldata[0], sizeof(controlbuf)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, controlbuf, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_SET_CONTROL: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(controlbuf, data, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.controldata[0], controlbuf, sizeof(controlbuf)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304_IOCTL_SET_MODE: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&mode, data, sizeof(mode))) { retval = -EFAULT; goto err_out; } AMI304_SetMode(mode); break; default: printk(KERN_ERR "%s not supported = 0x%04x", __FUNCTION__, cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }
static int ami304hal_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { char strbuf[AMI304_BUFSIZE]; void __user *data; int retval=0; unsigned int mode =0; int controlbuf[10]; switch (cmd) { case AMI304HAL_IOCTL_GET_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_POSTURE: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_SET_ACTIVE: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&mode, data, sizeof(mode))) { retval = -EFAULT; goto err_out; } if (AMI304_DEBUG_GEN_INFO & ami304_debug_mask) AMID("ami304hal active sensor %d\n", mode); if(mode & (0x00000001<<AMI_ORIENTATION_SENSOR)) atomic_set(&o_status, 1); else atomic_set(&o_status, 0); if(mode & (0x00000001<<AMI_MAGNETIC_FIELD_SENSOR)) atomic_set(&m_status, 1); else atomic_set(&m_status, 0); if(mode & (0x00000001<<AMI_ACCELEROMETER_SENSOR)) atomic_set(&a_status, 1); else atomic_set(&a_status, 0); break; case AMI304HAL_IOCTL_GET_CONTROL: read_lock(&ami304mid_data.ctrllock); memcpy(controlbuf, &ami304mid_data.controldata[0], sizeof(controlbuf)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, controlbuf, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_SET_CONTROL: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(controlbuf, data, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.controldata[0], controlbuf, sizeof(controlbuf)); write_unlock(&ami304mid_data.ctrllock); if (AMI304_DEBUG_DELAY_SETTING & ami304_debug_mask) AMID("Dleay setting = %dms\n", ami304mid_data.controldata[0] / 1000); break; default: if (AMI304_DEBUG_USER_ERROR & ami304_debug_mask) AMIE("not supported command= 0x%04x\n", cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }
static int ami304_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { char strbuf[AMI304_BUFSIZE]; int controlbuf[10]; void __user *data; int retval=0; int mode=0; //LGE_CHANGE_S, [[email protected]], 2010-12-31, <Block Root Authorization Check> //check the authority is root or not // if(!capable(CAP_SYS_ADMIN)) { // retval = -EPERM; // goto err_out; // } //LGE_CHANGE_E, [[email protected]], 2010-12-31, <Block Root Authorization Check> switch (cmd) { case AMI304_IOCTL_INIT: read_lock(&ami304_data.lock); mode = ami304_data.mode; read_unlock(&ami304_data.lock); AMI304_Init(mode); break; case AMI304_IOCTL_READ_CHIPINFO: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadChipInfo(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_POSTUREDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_CONTROL: read_lock(&ami304mid_data.ctrllock); memcpy(controlbuf, &ami304mid_data.controldata[0], sizeof(controlbuf)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, controlbuf, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_SET_CONTROL: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(controlbuf, data, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.controldata[0], controlbuf, sizeof(controlbuf)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304_IOCTL_SET_MODE: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&mode, data, sizeof(mode))) { retval = -EFAULT; goto err_out; } AMI304_SetMode(mode); break; default: if (AMI304_DEBUG_USER_ERROR & ami304_debug_mask) AMIE("not supported command= 0x%04x\n", cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }
static int ami304_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { char strbuf[AMI304_BUFSIZE]; int controlbuf[AMI304_CB_LENGTH]; int valuebuf[4]; int calidata[7]; int gyrodata[3]; long pedodata[3]; int pedoparam[AMI304_PD_LENGTH]; void __user *data; int retval=0; int mode=0,chipset=0; int iEnReport; switch (cmd) { case AMI304_IOCTL_INIT: read_lock(&ami304_data.lock); mode = ami304_data.mode; chipset = ami304_data.chipset; read_unlock(&ami304_data.lock); AMI304_Chipset_Init(mode, chipset); break; case AMI304_IOCTL_READ_CHIPINFO: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadChipInfo(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_POSTUREDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_WRITE_POSTUREDATA: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&valuebuf, data, sizeof(valuebuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.datalock); ami304mid_data.yaw = valuebuf[0]; ami304mid_data.pitch = valuebuf[1]; ami304mid_data.roll = valuebuf[2]; ami304mid_data.status = valuebuf[3]; write_unlock(&ami304mid_data.datalock); break; case AMI304_IOCTL_READ_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_WRITE_CALIDATA: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&calidata, data, sizeof(calidata))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.datalock); ami304mid_data.nm.x = calidata[0]; ami304mid_data.nm.y = calidata[1]; ami304mid_data.nm.z = calidata[2]; ami304mid_data.na.x = calidata[3]; ami304mid_data.na.y = calidata[4]; ami304mid_data.na.z = calidata[5]; ami304mid_data.status = calidata[6]; write_unlock(&ami304mid_data.datalock); break; case AMI304_IOCTL_READ_GYRODATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadGyroData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_WRITE_GYRODATA: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&gyrodata, data, sizeof(gyrodata))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.datalock); ami304mid_data.gyro.x = gyrodata[0]; ami304mid_data.gyro.y = gyrodata[1]; ami304mid_data.gyro.z = gyrodata[2]; write_unlock(&ami304mid_data.datalock); break; case AMI304_IOCTL_READ_PEDODATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPedoData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_WRITE_PEDODATA: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&pedodata, data, sizeof(pedodata))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.datalock); ami304mid_data.pedo.pedo_step = pedodata[0]; ami304mid_data.pedo.pedo_time = pedodata[1]; ami304mid_data.pedo.pedo_stat = (int)pedodata[2]; write_unlock(&ami304mid_data.datalock); break; case AMI304_IOCTL_READ_PEDOPARAM: read_lock(&ami304mid_data.ctrllock); memcpy(pedoparam, &ami304mid_data.pedometerparam[0], sizeof(pedoparam)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, pedoparam, sizeof(pedoparam))) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_WRITE_PEDOPARAM: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(pedoparam, data, sizeof(pedoparam))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.pedometerparam[0], pedoparam, sizeof(pedoparam)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304_IOCTL_READ_CONTROL: read_lock(&ami304mid_data.ctrllock); memcpy(controlbuf, &ami304mid_data.controldata[0], sizeof(controlbuf)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, controlbuf, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_WRITE_CONTROL: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(controlbuf, data, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.controldata[0], controlbuf, sizeof(controlbuf)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304_IOCTL_WRITE_MODE: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&mode, data, sizeof(mode))) { retval = -EFAULT; goto err_out; } AMI304_SetMode(mode); break; case AMI304_IOCTL_WRITE_REPORT: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&iEnReport, data, sizeof(iEnReport))) { retval = -EFAULT; goto err_out; } AMI304_Report_Value(iEnReport); break; case AMI304_IOCTL_READ_WIA: data = (void __user *) arg; if (data == NULL) break; AMI304_WIA(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; default: if (AMI304_DEBUG_USER_ERROR & ami304_debug_mask) AMIE("not supported command= 0x%04x\n", cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }
static int ami304hal_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { int controlbuf[AMI304_CB_LENGTH]; char strbuf[AMI304_BUFSIZE]; int pedoparam[AMI304_PD_LENGTH]; void __user *data; int retval=0; switch (cmd) { case AMI304HAL_IOCTL_GET_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_POSTURE: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_GYRODATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadGyroData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_PEDODATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPedoData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_GET_PEDOPARAM: read_lock(&ami304mid_data.ctrllock); memcpy(pedoparam, &ami304mid_data.pedometerparam[0], sizeof(pedoparam)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, pedoparam, sizeof(pedoparam))) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_SET_PEDOPARAM: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(pedoparam, data, sizeof(pedoparam))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.pedometerparam[0], pedoparam, sizeof(pedoparam)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304HAL_IOCTL_GET_CONTROL: read_lock(&ami304mid_data.ctrllock); memcpy(controlbuf, &ami304mid_data.controldata[0], sizeof(controlbuf)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, controlbuf, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } break; case AMI304HAL_IOCTL_SET_CONTROL: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(controlbuf, data, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.controldata[0], controlbuf, sizeof(controlbuf)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304HAL_IOCTL_GET_WIA: data = (void __user *) arg; if (data == NULL) break; AMI304_WIA(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; default: if (AMI304_DEBUG_USER_ERROR & ami304_debug_mask) AMIE("not supported command= 0x%04x\n", cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }
static int ami304_ioctl(struct inode *inode, struct file *file, unsigned int cmd,unsigned long arg) { char strbuf[AMI304_BUFSIZE]; int controlbuf[10]; void __user *data; int retval=0; int mode=0; switch (cmd) { case AMI304_IOCTL_INIT: read_lock(&ami304_data.lock); mode = ami304_data.mode; read_unlock(&ami304_data.lock); AMI304_Init(mode); break; case AMI304_IOCTL_READ_CHIPINFO: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadChipInfo(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_SENSORDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadSensorData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_POSTUREDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadPostureData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_CALIDATA: data = (void __user *) arg; if (data == NULL) break; AMI304_ReadCaliData(strbuf, AMI304_BUFSIZE); if (copy_to_user(data, strbuf, strlen(strbuf)+1)) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_READ_CONTROL: read_lock(&ami304mid_data.ctrllock); memcpy(controlbuf, &ami304mid_data.controldata[0], sizeof(controlbuf)); read_unlock(&ami304mid_data.ctrllock); data = (void __user *) arg; if (data == NULL) break; if (copy_to_user(data, controlbuf, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } break; case AMI304_IOCTL_SET_CONTROL: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(controlbuf, data, sizeof(controlbuf))) { retval = -EFAULT; goto err_out; } write_lock(&ami304mid_data.ctrllock); memcpy(&ami304mid_data.controldata[0], controlbuf, sizeof(controlbuf)); write_unlock(&ami304mid_data.ctrllock); break; case AMI304_IOCTL_SET_MODE: data = (void __user *) arg; if (data == NULL) break; if (copy_from_user(&mode, data, sizeof(mode))) { retval = -EFAULT; goto err_out; } AMI304_SetMode(mode); break; default: if (AMI304_DEBUG_USER_ERROR & ami304_debug_mask) AMIE("not supported command= 0x%04x\n", cmd); retval = -ENOIOCTLCMD; break; } err_out: return retval; }