static long sr130pc10_set_whitebalance(int mode, int wb) { long rc = 0; printk(KERN_DEBUG "mode : %d, whitebalance : %d\n", mode, wb); switch (wb) { case CAMERA_WB_AUTO: printk(KERN_DEBUG "CAMERA_WB_AUTO\n"); sr130pc10_sensor_write_list(sr130pc10_wb_auto, sizeof(sr130pc10_wb_auto) / sizeof(sr130pc10_wb_auto[0]), "sr130pc10_wb_auto"); break; case CAMERA_WB_INCANDESCENT: printk(KERN_DEBUG "CAMERA_WB_INCANDESCENT\n"); sr130pc10_sensor_write_list(sr130pc10_wb_tungsten, sizeof(sr130pc10_wb_tungsten) / sizeof(sr130pc10_wb_tungsten[0]), "sr130pc10_wb_tungsten"); break; case CAMERA_WB_FLUORESCENT: printk(KERN_DEBUG "CAMERA_WB_FLUORESCENT\n"); sr130pc10_sensor_write_list(sr130pc10_wb_fluorescent, sizeof(sr130pc10_wb_fluorescent) / sizeof(sr130pc10_wb_fluorescent[0]), "sr130pc10_wb_fluorescent"); break; case CAMERA_WB_DAYLIGHT: printk(KERN_DEBUG "<=PCAM=> CAMERA_WB_DAYLIGHT\n"); sr130pc10_sensor_write_list(sr130pc10_wb_sunny, sizeof(sr130pc10_wb_sunny) / sizeof(sr130pc10_wb_sunny[0]), "sr130pc10_wb_sunny"); break; case CAMERA_WB_CLOUDY_DAYLIGHT: printk(KERN_DEBUG "<=PCAM=> CAMERA_WB_CLOUDY_DAYLIGHT\n"); sr130pc10_sensor_write_list(sr130pc10_wb_cloudy, sizeof(sr130pc10_wb_cloudy) / sizeof(sr130pc10_wb_cloudy[0]), "sr130pc10_wb_cloudy"); break; default: printk(KERN_DEBUG "<=PCAM=> unexpected WB mode %s/%d\n", __func__, __LINE__); /* return -EINVAL; */ return 0; } return rc; }
static int sr130pc10_sensor_init_probe() { int err = 0; printk("%s/%d \n", __func__, __LINE__); err = sr130pc10_sensor_write_list(sr130pc10_reg_init,\ sizeof(sr130pc10_reg_init) / sizeof(sr130pc10_reg_init[0]),"sr130pc10_reg_init"); msleep(10); return err; }
static long sr130pc10_set_effect(int mode, int effect) { long rc = 0; pr_info("[%s]effect(%d)\n", __func__, effect); switch (effect) { case CAMERA_EFFECT_OFF: printk(KERN_DEBUG "[SR130PC10] CAMERA_EFFECT_OFF\n"); sr130pc10_sensor_write_list(sr130pc10_effect_none, sizeof(sr130pc10_effect_none) / sizeof(sr130pc10_effect_none[0]), "sr130pc10_effect_none"); break; case CAMERA_EFFECT_MONO: printk(KERN_DEBUG "[SR130PC10] CAMERA_EFFECT_MONO\n"); sr130pc10_sensor_write_list(sr130pc10_effect_gray, sizeof(sr130pc10_effect_gray) / sizeof(sr130pc10_effect_gray[0]), "sr130pc10_effect_gray"); break; case CAMERA_EFFECT_NEGATIVE: printk(KERN_DEBUG "[SR130PC10] CAMERA_EFFECT_NEGATIVE\n"); sr130pc10_sensor_write_list(sr130pc10_effect_negative, sizeof(sr130pc10_effect_negative) / sizeof(sr130pc10_effect_negative [0]), "sr130pc10_effect_negative"); break; case CAMERA_EFFECT_SEPIA: printk(KERN_DEBUG "[SR130PC10] CAMERA_EFFECT_SEPIA\n"); sr130pc10_sensor_write_list(sr130pc10_effect_sepia, sizeof(sr130pc10_effect_sepia) / sizeof(sr130pc10_effect_sepia[0]), "sr130pc10_effect_sepia"); break; case CAMERA_EFFECT_AQUA: printk(KERN_DEBUG "[SR130PC10] CAMERA_EFFECT_AQUA\n"); sr130pc10_sensor_write_list(sr130pc10_effect_aqua, sizeof(sr130pc10_effect_aqua) / sizeof(sr130pc10_effect_aqua[0]), "sr130pc10_effect_aqua"); break; default: printk(KERN_DEBUG "[SR130PC10] default .dsfsdf\n"); sr130pc10_sensor_write_list(sr130pc10_effect_none, sizeof(sr130pc10_effect_none) / sizeof(sr130pc10_effect_none[0]), "sr130pc10_effect_none"); /*return -EINVAL; */ return 0; } return rc; }
static int sr130pc10_set_movie_mode(int mode) { printk(KERN_DEBUG "[%s:%d][E]\n", __func__, __LINE__); if (mode == SENSOR_MOVIE) { printk(KERN_DEBUG "[%s:%d] Camcorder_Mode_ON\n", __func__, __LINE__); sr130pc10_sensor_write_list(sr130pc10_fps_15, sizeof(sr130pc10_fps_15) / sizeof(sr130pc10_fps_15[0]), "sr130pc10_fps_15"); } else if ((mode != SENSOR_CAMERA) && (mode != SENSOR_MOVIE)) return -EINVAL; return 0; }
static int sr130pc10_sensor_init_probe(const struct msm_camera_sensor_info *data) { int err = 0; rotation_status = 0; factory_test = 0; Flipmode = 0; printk(KERN_DEBUG "%s/%d\n", __func__, __LINE__); err = sr130pc10_sensor_write_list(sr130pc10_reg_init, sizeof(sr130pc10_reg_init) / sizeof(sr130pc10_reg_init[0]), "sr130pc10_reg_init"); /*msleep(10); changed for coding rule*/ /*udelay(10000);*/ return err; }
static long sr130pc10_set_effect(char effect) { long rc = 0; switch (effect) { case CAMERA_EFFECT_OFF: printk("[SR130PC10] CAMERA_EFFECT_OFF\n"); sr130pc10_sensor_write_list(sr130pc10_effect_none, sizeof(sr130pc10_effect_none)/sizeof(sr130pc10_effect_none[0]),"sr130pc10_effect_none"); break; case CAMERA_EFFECT_MONO: printk("[SR130PC10] CAMERA_EFFECT_MONO\n"); sr130pc10_sensor_write_list(sr130pc10_effect_gray, sizeof(sr130pc10_effect_gray)/sizeof(sr130pc10_effect_gray[0]),"sr130pc10_effect_gray"); break; case CAMERA_EFFECT_NEGATIVE: printk("[SR130PC10] CAMERA_EFFECT_NEGATIVE\n"); sr130pc10_sensor_write_list(sr130pc10_effect_negative, sizeof(sr130pc10_effect_negative)/sizeof(sr130pc10_effect_negative[0]),"sr130pc10_effect_negative"); break; case CAMERA_EFFECT_SEPIA: printk("[SR130PC10] CAMERA_EFFECT_SEPIA\n"); sr130pc10_sensor_write_list(sr130pc10_effect_sepia, sizeof(sr130pc10_effect_sepia)/sizeof(sr130pc10_effect_sepia[0]),"sr130pc10_effect_sepia"); break; case CAMERA_EFFECT_AQUA: printk("[SR130PC10] CAMERA_EFFECT_AQUA\n"); sr130pc10_sensor_write_list(sr130pc10_effect_aqua, sizeof(sr130pc10_effect_aqua)/sizeof(sr130pc10_effect_aqua[0]),"sr130pc10_effect_aqua"); break; default: printk("[SR130PC10] default .dsfsdf\n"); sr130pc10_sensor_write_list(sr130pc10_effect_none, sizeof(sr130pc10_effect_none)/sizeof(sr130pc10_effect_none[0]),"sr130pc10_effect_none"); //return -EINVAL; return 0; } return rc; }
void sensor_rough_control_sr130pc10(void __user *arg) { sensor_ext_cfg_data ctrl_info; /* int Exptime; int Expmax; unsigned short read_1, read_2, read_3; */ printk("[SR130PC10] sensor_rough_control\n"); if(copy_from_user((void *)&ctrl_info, (const void *)arg, sizeof(ctrl_info))) { printk("<=SR130PC10=> %s fail copy_from_user!\n", __func__); } printk("<=SR130PC10=> TEST %d %d %d %d %d \n", ctrl_info.cmd, ctrl_info.device_id, ctrl_info.value_1, ctrl_info.value_2, ctrl_info.value_3); switch(ctrl_info.cmd) { case PCAM_CONNECT_CHECK: printk("[SR130PC10] PCAM_CONNECT_CHECK\n"); int rc = 0; rc = sr130pc10_sensor_write(0x03, 0x00); if(rc < 0) //check sensor connection { printk("[SR130PC10] Connect error\n"); ctrl_info.value_1 = 1; } break; case PCAM_EXPOSURE_TIME: printk("[SR130PC10] PCAM_EXPOSURE_TIME\n"); sr130pc10_sensor_write(0x03, 0x20); sr130pc10_sensor_read(0x80, &ctrl_info.value_1); sr130pc10_sensor_read(0x81, &ctrl_info.value_2); sr130pc10_sensor_read(0x82, &ctrl_info.value_3); printk("[SR130PC10] PCAM_EXPOSURE_TIME : A(%x), B(%x), C(%x)\n]",ctrl_info.value_1,ctrl_info.value_2,ctrl_info.value_3); break; case PCAM_ISO_SPEED: printk("[SR130PC10] PCAM_ISO_SPEED\n"); sr130pc10_sensor_write(0x03, 0x20); sr130pc10_sensor_read(0xb0, &ctrl_info.value_1); break; case PCAM_PREVIEW_FPS: printk("[SR130PC10] PCAM_PREVIEW_FPS : %d\n", ctrl_info.device_id); if(ctrl_info.device_id == 15) sr130pc10_sensor_write_list(sr130pc10_vt_fps_15, sizeof(sr130pc10_vt_fps_15)/sizeof(sr130pc10_vt_fps_15[0]),"sr130pc10_vt_fps_15"); break; default : printk("<=SR130PC10=> Unexpected mode on sensor_rough_control!!!\n"); break; } if(copy_to_user((void *)arg, (const void *)&ctrl_info, sizeof(ctrl_info))) { printk("<=SR130PC10=> %s fail on copy_to_user!\n", __func__); } }
static long sr130pc10_set_exposure_value(int exposure) { long rc = 0; printk("exposure value : %d\n", exposure); switch (exposure) { case SR130PC10_EV_MINUS_4: printk("CAMERA_EXPOSURE_VALUE_-4\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m4, sizeof(sr130pc10_ev_m4)/sizeof(sr130pc10_ev_m4[0]),"sr130pc10_ev_m4"); break; case SR130PC10_EV_MINUS_3: printk("CAMERA_EXPOSURE_VALUE_-3\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m3, sizeof(sr130pc10_ev_m3)/sizeof(sr130pc10_ev_m3[0]),"sr130pc10_ev_m3"); break; case SR130PC10_EV_MINUS_2: printk("CAMERA_EXPOSURE_VALUE_-2\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m2, sizeof(sr130pc10_ev_m2)/sizeof(sr130pc10_ev_m2[0]),"sr130pc10_ev_m2"); break; case SR130PC10_EV_MINUS_1: printk("CAMERA_EXPOSURE_VALUE_-1\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m1, sizeof(sr130pc10_ev_m1)/sizeof(sr130pc10_ev_m1[0]),"sr130pc10_ev_m1"); break; case SR130PC10_EV_DEFAULT: printk("CAMERA_EXPOSURE_VALUE_0\n"); sr130pc10_sensor_write_list(sr130pc10_ev_default, sizeof(sr130pc10_ev_default)/sizeof(sr130pc10_ev_default[0]),"sr130pc10_ev_default"); break; case SR130PC10_EV_PLUS_1: printk("CAMERA_EXPOSURE_VALUE_1\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p1, sizeof(sr130pc10_ev_p1)/sizeof(sr130pc10_ev_p1[0]),"sr130pc10_ev_p1"); break; case SR130PC10_EV_PLUS_2: printk("CAMERA_EXPOSURE_VALUE_2\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p2, sizeof(sr130pc10_ev_p2)/sizeof(sr130pc10_ev_p2[0]),"sr130pc10_ev_p2"); break; case SR130PC10_EV_PLUS_3: printk("CAMERA_EXPOSURE_VALUE_3\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p3, sizeof(sr130pc10_ev_p3)/sizeof(sr130pc10_ev_p3[0]),"sr130pc10_ev_p3"); break; case SR130PC10_EV_PLUS_4: printk("CAMERA_EXPOSURE_VALUE_4\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p4, sizeof(sr130pc10_ev_p4)/sizeof(sr130pc10_ev_p4[0]),"sr130pc10_ev_p4"); break; default: printk("<=PCAM=> unexpected Exposure Value %s/%d\n", __func__, __LINE__); // return -EINVAL; return 0; } return rc; }
static long sr130pc10_set_sensor_mode(int mode) { printk("[CAM-SENSOR] =Sensor Mode\n "); int cnt, vsync_value; switch (mode) { case SENSOR_PREVIEW_MODE: printk("[SR130PC10]-> Preview \n"); sr130pc10_set_preview(); //factory_test = 0; #if 0 for(cnt=0; cnt<200; cnt++) { vsync_value = gpio_get_value(14); if(vsync_value) { printk(" on preview, start cnt:%d vsync_value:%d\n", cnt, vsync_value); break; } else { printk(" on preview, wait cnt:%d vsync_value:%d\n", cnt, vsync_value); msleep(1); } } #endif // sr130pc10_sensor_write_list(sr130pc10_preview_reg, sizeof(sr130pc10_preview_reg)/\ arun // sizeof(sr130pc10_preview_reg[0]),"sr130pc10_preview_reg"); // preview start break; case SENSOR_SNAPSHOT_MODE: printk("[PGH}-> Capture \n"); //Snapshot mode is enabled so setting the preview flag preview_enable = 0; brightness = 0; sr130pc10_sensor_write_list(sr130pc10_capture_reg, sizeof(sr130pc10_capture_reg)/\ sizeof(sr130pc10_capture_reg[0]),"sr130pc10_capture_reg"); // preview start /* //SecFeature : for Android CCD preview mirror / snapshot non-mirror if(factory_test == 0) { if(rotation_status == 90 || rotation_status == 270) { sr130pc10_sensor_write(0x03, 0x00); sr130pc10_sensor_write(0x11, 0x93); } else { sr130pc10_sensor_write(0x03, 0x00); sr130pc10_sensor_write(0x11, 0x90); } } */ break; case SENSOR_RAW_SNAPSHOT_MODE: printk("[PGH}-> Capture RAW \n"); break; default: return 0; } return 0; }
static int sr130pc10_sensor_power_up(struct msm_sensor_ctrl_t *s_ctrl) { int err = 0; int rc = 0; int temp = 0; struct msm_camera_sensor_info *data = s_ctrl->sensordata; #ifdef CONFIG_LOAD_FILE if (0 > sr130pc10_regs_table_init()) { CDBG("%s file open failed!\n", __func__); rc = -1; goto FAIL_END; } #endif sr130pc10_ctrl->op_mode = 0; sr130pc10_ctrl->dtp_mode = 0; sr130pc10_ctrl->cam_mode = SENSOR_CAMERA; sr130pc10_ctrl->settings.exposure = 0; pr_info("=== Start ==="); rc = msm_camera_request_gpio_table(data, 1); if (rc < 0) pr_info(" request gpio failed"); gpio_set_value_cansleep(data->sensor_platform_info->vt_sensor_stby, 0); temp = __gpio_get_value(data->sensor_platform_info->vt_sensor_stby); pr_info("check VT standby : %d", temp); gpio_set_value_cansleep(data->sensor_platform_info->vt_sensor_reset, 0); temp = __gpio_get_value(data->sensor_platform_info->vt_sensor_reset); pr_info("check VT reset : %d", temp); gpio_set_value_cansleep(data->sensor_platform_info->sensor_reset, 0); temp = __gpio_get_value(data->sensor_platform_info->sensor_reset); pr_info("CAM_3M_RST : %d", temp); gpio_set_value_cansleep(data->sensor_platform_info->sensor_stby, 0); temp = __gpio_get_value(data->sensor_platform_info->sensor_stby); pr_info("CAM_3M_ISP_INIT : %d", temp); /*Power on the LDOs */ data->sensor_platform_info->sensor_power_on(1); udelay(10); /*standy VT */ gpio_set_value_cansleep(data->sensor_platform_info->vt_sensor_stby, 1); temp = __gpio_get_value(data->sensor_platform_info->vt_sensor_stby); pr_info("check VT standby : %d", temp); udelay(10); /*Set Main clock */ gpio_tlmm_config(GPIO_CFG(data->sensor_platform_info->mclk, 1, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); if (s_ctrl->clk_rate != 0) cam_clk_info->clk_rate = s_ctrl->clk_rate; rc = msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev, cam_clk_info, &s_ctrl->cam_clk, ARRAY_SIZE(cam_clk_info), 1); if (rc < 0) { gpio_tlmm_config(GPIO_CFG(data->sensor_platform_info->mclk, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); pr_info(" Mclk enable failed"); } if (rc != 0) goto FAIL_END; mdelay(12); /*reset VT */ gpio_set_value_cansleep(data->sensor_platform_info->vt_sensor_reset, 1); temp = __gpio_get_value(data->sensor_platform_info->vt_sensor_reset); pr_info("check VT reset : %d", temp); udelay(1500); err = sr130pc10_sensor_write_list(sr130pc10_i2c_check, sizeof(sr130pc10_i2c_check) / sizeof(sr130pc10_i2c_check[0]), "sr130pc10_i2c_check"); if (err == -EINVAL) { cam_err("[sr130pc20] start1 fail!\n"); msm_cam_clk_enable(&s_ctrl->sensor_i2c_client->client->dev, cam_clk_info, &s_ctrl->cam_clk, \ ARRAY_SIZE(cam_clk_info), 0); gpio_tlmm_config(GPIO_CFG(data->sensor_platform_info->mclk, 0, GPIO_CFG_OUTPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA), GPIO_CFG_ENABLE); udelay(10); msm_camera_request_gpio_table(data, 0); return -EIO; } FAIL_END: if (rc) { pr_info("Power up Failed!!"); msm_camera_request_gpio_table(data, 0); } else { pr_info("power up x"); } return rc; }
static long sr130pc10_set_sensor_mode(int mode) { int cnt, vsync_value; printk(KERN_DEBUG "[CAM-SENSOR] =Sensor Mode\n "); switch (mode) { case SENSOR_PREVIEW_MODE: case SENSOR_VIDEO_MODE: printk(KERN_DEBUG "[SR130PC10]-> Preview\n"); if (sr130pc10_ctrl->op_mode == 0) { sr130pc10_sensor_write_list(sr130pc10_reg_init, sizeof(sr130pc10_reg_init) / sizeof(sr130pc10_reg_init[0]), "sr130pc10_reg_init"); sr130pc10_ctrl->op_mode = 1; if (sr130pc10_ctrl->dtp_mode == 1) sr130pc10_check_dataline(1); } factory_test = 0; for (cnt = 0; cnt < 200; cnt++) { vsync_value = __gpio_get_value(14); if (vsync_value) { /*printk(KERN_DEBUG " on preview, start cnt:%d vsync_value:%d\n", cnt, vsync_value); */ break; } else { /*printk(KERN_DEBUG " on preview, " "wait cnt:%d vsync_value:%d\n", cnt, vsync_value);*/ /*msleep(1); changed for coding rule*/ udelay(1000); } } printk(KERN_DEBUG " on preview, " "wait cnt:%d vsync_value:%d\n", cnt, vsync_value); sr130pc10_sensor_write_list(sr130pc10_preview_reg, sizeof(sr130pc10_preview_reg) / sizeof(sr130pc10_preview_reg[0]), "sr130pc10_preview_reg"); /* preview start */ if (sr130pc10_ctrl->cam_mode == SENSOR_MOVIE) sr130pc10_set_movie_mode(SENSOR_MOVIE); sr130pc10_set_exposure_value(0, sr130pc10_ctrl->settings.exposure); break; case SENSOR_SNAPSHOT_MODE: case SENSOR_RAW_SNAPSHOT_MODE: printk(KERN_DEBUG "[PGH}-> Capture\n"); if (Flipmode) { sr130pc10_sensor_write_list( sr130pc10_capture_reg_X_Flip, sizeof(sr130pc10_capture_reg_X_Flip) / sizeof(sr130pc10_capture_reg_X_Flip[0]), "sr130pc10_capture_reg_X_Flip"); /* preview start */ } else { sr130pc10_sensor_write_list(sr130pc10_capture_reg, sizeof(sr130pc10_capture_reg) / sizeof(sr130pc10_capture_reg[0]), "sr130pc10_capture_reg"); /* preview start */ } /*SecFeature : for Android CCD preview mirror / snapshot non-mirror if(factory_test == 0) { if(rotation_status == 90 || rotation_status == 270) { sr130pc10_sensor_write(0x03, 0x00); sr130pc10_sensor_write(0x11, 0x93); } else { sr130pc10_sensor_write(0x03, 0x00); sr130pc10_sensor_write(0x11, 0x90); } } */ break; default: return 0; } return 0; }
static long sr130pc10_set_exposure_value(int mode, int exposure) { long rc = 0; printk(KERN_DEBUG "mode : %d, exposure value : %d\n", mode, exposure); switch (exposure) { case CAMERA_EV_M4: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_-4\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m4, sizeof(sr130pc10_ev_m4) / sizeof(sr130pc10_ev_m4[0]), "sr130pc10_ev_m4"); break; case CAMERA_EV_M3: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_-3\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m3, sizeof(sr130pc10_ev_m3) / sizeof(sr130pc10_ev_m3[0]), "sr130pc10_ev_m3"); break; case CAMERA_EV_M2: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_-2\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m2, sizeof(sr130pc10_ev_m2) / sizeof(sr130pc10_ev_m2[0]), "sr130pc10_ev_m2"); break; case CAMERA_EV_M1: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_-1\n"); sr130pc10_sensor_write_list(sr130pc10_ev_m1, sizeof(sr130pc10_ev_m1) / sizeof(sr130pc10_ev_m1[0]), "sr130pc10_ev_m1"); break; case CAMERA_EV_DEFAULT: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_0\n"); sr130pc10_sensor_write_list(sr130pc10_ev_default, sizeof(sr130pc10_ev_default) / sizeof(sr130pc10_ev_default[0]), "sr130pc10_ev_default"); break; case CAMERA_EV_P1: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_1\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p1, sizeof(sr130pc10_ev_p1) / sizeof(sr130pc10_ev_p1[0]), "sr130pc10_ev_p1"); break; case CAMERA_EV_P2: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_2\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p2, sizeof(sr130pc10_ev_p2) / sizeof(sr130pc10_ev_p2[0]), "sr130pc10_ev_p2"); break; case CAMERA_EV_P3: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_3\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p3, sizeof(sr130pc10_ev_p3) / sizeof(sr130pc10_ev_p3[0]), "sr130pc10_ev_p3"); break; case CAMERA_EV_P4: printk(KERN_DEBUG "CAMERA_EXPOSURE_VALUE_4\n"); sr130pc10_sensor_write_list(sr130pc10_ev_p4, sizeof(sr130pc10_ev_p4) / sizeof(sr130pc10_ev_p4[0]), "sr130pc10_ev_p4"); break; default: printk(KERN_DEBUG "unexpected Exposure Value %s/%d\n", __func__, __LINE__); /* return -EINVAL; */ return 0; } sr130pc10_ctrl->settings.exposure = exposure; return rc; }