static int flashlight_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) #endif { int partId; int i4RetValue = 0; PK_DBG("XXflashlight_ioctl cmd,arg= %x, %x +\n",cmd,(unsigned int)arg); switch(cmd) { case FLASHLIGHTIOC_X_SET_DRIVER: i4RetValue = kdSetFlashlightDrv((unsigned int*)&arg); break; case FLASH_IOC_GET_MAIN_PART_ID: partId = strobe_getPartId(e_CAMERA_MAIN_SENSOR); g_strobePartIdMain = partId; if(copy_to_user((void __user *) arg , (void*)&partId , 4)) { PK_DBG("[FLASH_IOC_GET_MAIN_PART_ID] ioctl copy to user failed\n"); return -EFAULT; } break; case FLASH_IOC_GET_SUB_PART_ID: partId = strobe_getPartId(e_CAMERA_SUB_SENSOR); g_strobePartIdSub = partId; if(copy_to_user((void __user *) arg , (void*)&partId , 4)) { PK_DBG("[FLASH_IOC_GET_SUB_PART_ID] ioctl copy to user failed\n"); return -EFAULT; } break; case FLASH_IOC_GET_MAIN2_PART_ID: partId = strobe_getPartId(e_CAMERA_MAIN_2_SENSOR); g_strobePartIdMainSecond = partId; if(copy_to_user((void __user *) arg , (void*)&partId , 4)) { PK_DBG("[FLASH_IOC_GET_MAIN2_PART_ID] ioctl copy to user failed\n"); return -EFAULT; } break; default : if (g_pFlashlightFunc) { i4RetValue = g_pFlashlightFunc->flashlight_ioctl(cmd,arg); } break; } return i4RetValue; }
static long flashlight_ioctl_core(struct file *file, unsigned int cmd, unsigned long arg) { int partId; int sensorDevIndex; int strobeIndex; int partIndex; int i4RetValue = 0; kdStrobeDrvArg kdArg; unsigned long copyRet; copyRet = copy_from_user(&kdArg , (void *)arg , sizeof(kdStrobeDrvArg)); logI("flashlight_ioctl cmd=0x%x(nr=%d), senorDev=0x%x ledId=0x%x arg=0x%lx",cmd, _IOC_NR(cmd), kdArg.sensorDev, kdArg.strobeId ,(unsigned long)kdArg.arg); sensorDevIndex = getSensorDevIndex(kdArg.sensorDev); strobeIndex = getStrobeIndex(kdArg.strobeId); if(sensorDevIndex<0 || strobeIndex<0 ) return -1; partId = g_strobePartId[sensorDevIndex][strobeIndex]; partIndex = getPartIndex(partId); if(partIndex<0) return -1; switch(cmd) { case FLASH_IOC_GET_PROTOCOL_VERSION: i4RetValue=1; break; case FLASH_IOC_IS_LOW_POWER: logI("FLASH_IOC_IS_LOW_POWER"); { int isLow=0; if(gLowPowerPer!=BATTERY_PERCENT_LEVEL_0 || gLowPowerVbat!=LOW_BATTERY_LEVEL_0 ) isLow=1; logI("FLASH_IOC_IS_LOW_POWER %d %d %d",gLowPowerPer,gLowPowerVbat,isLow); kdArg.arg = isLow; if(copy_to_user((void __user *) arg , (void*)&kdArg , sizeof(kdStrobeDrvArg))) { logE("[FLASH_IOC_IS_LOW_POWER] ioctl copy to user failed ~"); return -EFAULT; } } break; case FLASH_IOC_LOW_POWER_DETECT_START: logI("FLASH_IOC_LOW_POWER_DETECT_START"); gLowBatDuty[sensorDevIndex][strobeIndex]=kdArg.arg; break; case FLASH_IOC_LOW_POWER_DETECT_END: logI("FLASH_IOC_LOW_POWER_DETECT_END"); gLowBatDuty[sensorDevIndex][strobeIndex]=-1; break; case FLASHLIGHTIOC_X_SET_DRIVER: i4RetValue = setFlashDrv(kdArg.sensorDev, kdArg.strobeId); break; case FLASH_IOC_GET_PART_ID: case FLASH_IOC_GET_MAIN_PART_ID: case FLASH_IOC_GET_SUB_PART_ID: case FLASH_IOC_GET_MAIN2_PART_ID: { int partId; partId = strobe_getPartId(kdArg.sensorDev, kdArg.strobeId); g_strobePartId[sensorDevIndex][strobeIndex]=partId; kdArg.arg = partId; if(copy_to_user((void __user *) arg , (void*)&kdArg , sizeof(kdStrobeDrvArg))) { logE("[FLASH_IOC_GET_PART_ID] ioctl copy to user failed ~"); return -EFAULT; } logI("FLASH_IOC_GET_PART_ID line=%d partId=%d",__LINE__,partId); } break; case FLASH_IOC_SET_ONOFF: { FLASHLIGHT_FUNCTION_STRUCT *pF; pF = g_pFlashInitFunc[sensorDevIndex][strobeIndex][partIndex]; if(pF!=0) { kicker_pbm_by_flash(kdArg.arg); i4RetValue = pF->flashlight_ioctl(cmd,kdArg.arg); } else { logE("[FLASH_IOC_SET_ONOFF] function pointer is wrong -"); } } break; case FLASH_IOC_UNINIT: { FLASHLIGHT_FUNCTION_STRUCT *pF; pF = g_pFlashInitFunc[sensorDevIndex][strobeIndex][partIndex]; if(pF!=0) { i4RetValue = pF->flashlight_release((void*)0); pF=0; } else { logE("[FLASH_IOC_UNINIT] function pointer is wrong ~"); } } default : { FLASHLIGHT_FUNCTION_STRUCT *pF; pF = g_pFlashInitFunc[sensorDevIndex][strobeIndex][partIndex]; if(pF!=0) { i4RetValue = pF->flashlight_ioctl(cmd,kdArg.arg); } else { logE("[default] function pointer is wrong ~"); } } break; } return i4RetValue; }
static int flashlight_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) #endif { int temp; int partId; int i4RetValue = 0; PK_DBG("XXflashlight_ioctl cmd,arg= %x, %x +\n",cmd,(unsigned int)arg); static int bInit=1; if(bInit==1) { #if DEF_HAS_LOW_POWER_KERNEL register_low_battery_notify(&lowPowerCB, LOW_BATTERY_PRIO_FLASHLIGHT); #endif bInit=0; } switch(cmd) { case FLASHLIGHTIOC_X_SET_DRIVER: i4RetValue = kdSetFlashlightDrv((unsigned int*)&arg); break; case FLASH_IOC_GET_MAIN_PART_ID: partId = strobe_getPartId(e_CAMERA_MAIN_SENSOR); g_strobePartIdMain = partId; if(copy_to_user((void __user *) arg , (void*)&partId , 4)) { PK_DBG("[FLASH_IOC_GET_MAIN_PART_ID] ioctl copy to user failed\n"); return -EFAULT; } break; case FLASH_IOC_GET_SUB_PART_ID: partId = strobe_getPartId(e_CAMERA_SUB_SENSOR); g_strobePartIdSub = partId; if(copy_to_user((void __user *) arg , (void*)&partId , 4)) { PK_DBG("[FLASH_IOC_GET_SUB_PART_ID] ioctl copy to user failed\n"); return -EFAULT; } break; case FLASH_IOC_GET_MAIN2_PART_ID: partId = strobe_getPartId(e_CAMERA_MAIN_2_SENSOR); g_strobePartIdMainSecond = partId; if(copy_to_user((void __user *) arg , (void*)&partId , 4)) { PK_DBG("[FLASH_IOC_GET_MAIN2_PART_ID] ioctl copy to user failed\n"); return -EFAULT; } break; case FLASH_IOC_HAS_LOW_POWER_DETECT: PK_DBG("FLASH_IOC_HAS_LOW_POWER_DETECT"); temp=FL_hasLowPowerDetect(); if(copy_to_user((void __user *) arg , (void*)&temp , 4)) { PK_DBG(" ioctl copy to user failed\n"); return -1; } break; case FLASH_IOC_LOW_POWER_DETECT_START: PK_DBG("FLASH_IOC_LOW_POWER_DETECT_START"); detLowPowerStart(); break; case FLASH_IOC_LOW_POWER_DETECT_END: PK_DBG("FLASH_IOC_LOW_POWER_DETECT_END"); i4RetValue = detLowPowerEnd(); break; default : if (g_pFlashlightFunc) { i4RetValue = g_pFlashlightFunc->flashlight_ioctl(cmd,arg); } break; } return i4RetValue; }