• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/media/video/cpia2/

Lines Matching defs:cam

59 static int apply_vp_patch(struct camera_data *cam);
60 static int set_default_user_mode(struct camera_data *cam);
61 static int set_vw_size(struct camera_data *cam, int size);
62 static int configure_sensor(struct camera_data *cam,
64 static int config_sensor_410(struct camera_data *cam,
66 static int config_sensor_500(struct camera_data *cam,
68 static int set_all_properties(struct camera_data *cam);
69 static void get_color_params(struct camera_data *cam);
70 static void wake_system(struct camera_data *cam);
71 static void set_lowlight_boost(struct camera_data *cam);
72 static void reset_camera_struct(struct camera_data *cam);
73 static int cpia2_set_high_power(struct camera_data *cam);
137 int cpia2_do_command(struct camera_data *cam,
142 unsigned int device = cam->params.pnp_id.device_type;
412 retval = cpia2_send_command(cam, &cmd);
422 cam->params.version.firmware_revision_hi =
424 cam->params.version.firmware_revision_lo =
428 cam->params.pnp_id.vendor = (cmd.buffer.block_data[0] << 8) |
430 cam->params.pnp_id.product = (cmd.buffer.block_data[2] << 8) |
432 cam->params.pnp_id.device_revision =
435 if (cam->params.pnp_id.vendor == 0x553) {
436 if (cam->params.pnp_id.product == 0x100) {
437 cam->params.pnp_id.device_type = DEVICE_STV_672;
438 } else if (cam->params.pnp_id.product == 0x140 ||
439 cam->params.pnp_id.product == 0x151) {
440 cam->params.pnp_id.device_type = DEVICE_STV_676;
445 cam->params.version.asic_id = cmd.buffer.block_data[0];
446 cam->params.version.asic_rev = cmd.buffer.block_data[1];
449 cam->params.version.sensor_flags = cmd.buffer.block_data[0];
450 cam->params.version.sensor_rev = cmd.buffer.block_data[1];
453 cam->params.version.vp_device_hi = cmd.buffer.block_data[0];
454 cam->params.version.vp_device_lo = cmd.buffer.block_data[1];
457 cam->params.color_params.brightness = cmd.buffer.block_data[0];
460 cam->params.color_params.contrast = cmd.buffer.block_data[0];
463 cam->params.color_params.saturation = cmd.buffer.block_data[0];
466 cam->params.vp_params.gpio_data = cmd.buffer.block_data[0];
469 cam->params.vp_params.gpio_direction = cmd.buffer.block_data[0];
472 cam->params.vc_params.vc_mp_direction =cmd.buffer.block_data[0];
475 cam->params.vc_params.vc_mp_data = cmd.buffer.block_data[0];
478 cam->params.flicker_control.cam_register =
482 cam->params.vc_params.wakeup = cmd.buffer.block_data[0];
485 cam->params.vc_params.pw_control = cmd.buffer.block_data[0];
488 cam->params.camera_state.system_ctrl = cmd.buffer.block_data[0];
491 cam->params.vp_params.system_state = cmd.buffer.block_data[0];
494 cam->params.vp_params.system_ctrl = cmd.buffer.block_data[0];
497 cam->params.vp_params.exposure_modes = cmd.buffer.block_data[0];
500 cam->params.vp_params.device_config = cmd.buffer.block_data[0];
503 cam->params.vc_params.vc_control = cmd.buffer.block_data[0];
506 cam->params.vp_params.video_mode = cmd.buffer.block_data[0];
509 cam->params.vp_params.user_effects = cmd.buffer.block_data[0];
522 int cpia2_send_command(struct camera_data *cam, struct cpia2_command *cmd)
577 retval = cpia2_usb_transfer_cmd(cam,
607 static void cpia2_get_version_info(struct camera_data *cam)
609 cpia2_do_command(cam, CPIA2_CMD_GET_VERSION, TRANSFER_READ, 0);
610 cpia2_do_command(cam, CPIA2_CMD_GET_PNP_ID, TRANSFER_READ, 0);
611 cpia2_do_command(cam, CPIA2_CMD_GET_ASIC_TYPE, TRANSFER_READ, 0);
612 cpia2_do_command(cam, CPIA2_CMD_GET_SENSOR, TRANSFER_READ, 0);
613 cpia2_do_command(cam, CPIA2_CMD_GET_VP_DEVICE, TRANSFER_READ, 0);
622 int cpia2_reset_camera(struct camera_data *cam)
632 retval = configure_sensor(cam,
633 cam->params.roi.width,
634 cam->params.roi.height);
652 cpia2_send_command(cam, &cmd);
654 cpia2_set_high_power(cam);
656 if (cam->params.pnp_id.device_type == DEVICE_STV_672) {
663 cpia2_send_command(cam, &cmd);
669 if (cam->params.pnp_id.device_type == DEVICE_STV_672)
670 retval = apply_vp_patch(cam);
679 if (cam->params.pnp_id.device_type == DEVICE_STV_676) {
715 cpia2_send_command(cam, &cmd);
720 set_default_user_mode(cam);
726 set_all_properties(cam);
728 cpia2_do_command(cam, CPIA2_CMD_GET_USER_MODE, TRANSFER_READ, 0);
729 DBG("After SetAllProperties(cam), user mode is 0x%0X\n",
730 cam->params.vp_params.video_mode);
738 cpia2_do_command(cam, CPIA2_CMD_GET_VP_SYSTEM_CTRL, TRANSFER_READ, 0);
739 tmp_reg = cam->params.vp_params.system_ctrl;
743 cpia2_do_command(cam, CPIA2_CMD_GET_DEVICE_CONFIG, TRANSFER_READ, 0);
744 cmd.buffer.registers[1].value = cam->params.vp_params.device_config |
752 cpia2_send_command(cam, &cmd);
755 cpia2_do_command(cam,
761 cpia2_do_command(cam,
766 if (cam->params.pnp_id.device_type == DEVICE_STV_672)
767 cpia2_do_command(cam,
772 cpia2_do_command(cam,
778 if (cam->params.pnp_id.device_type == DEVICE_STV_676)
779 cpia2_do_command(cam,
785 cpia2_do_command(cam, CPIA2_CMD_GET_DEVICE_CONFIG, TRANSFER_READ, 0);
786 cmd.buffer.registers[0].value = cam->params.vp_params.device_config &
789 cpia2_do_command(cam, CPIA2_CMD_GET_VP_SYSTEM_CTRL, TRANSFER_READ, 0);
791 cam->params.vp_params.system_ctrl | CPIA2_VP_SYSTEMCTRL_HK_CONTROL;
799 cpia2_send_command(cam, &cmd);
802 cpia2_do_command(cam, CPIA2_CMD_GET_VC_CONTROL, TRANSFER_READ, 0);
803 if (cam->params.compression.inhibit_htables) {
804 tmp_reg = cam->params.vc_params.vc_control |
807 tmp_reg = cam->params.vc_params.vc_control &
810 cpia2_do_command(cam, CPIA2_CMD_SET_VC_CONTROL, TRANSFER_WRITE,tmp_reg);
813 cpia2_do_command(cam, CPIA2_CMD_SET_TARGET_KB,
814 TRANSFER_WRITE, cam->params.vc_params.target_kb);
821 cpia2_do_command(cam, CPIA2_CMD_GET_PW_CONTROL,
825 tmp_reg = cam->params.vc_params.pw_control;
828 cpia2_do_command(cam, CPIA2_CMD_SET_PW_CONTROL, TRANSFER_WRITE,tmp_reg);
831 cpia2_do_command(cam, CPIA2_CMD_SET_PW_CONTROL, TRANSFER_WRITE,tmp_reg);
833 cpia2_do_command(cam, CPIA2_CMD_SET_DEF_JPEG_OPT, TRANSFER_WRITE, 0);
835 cpia2_do_command(cam, CPIA2_CMD_GET_USER_MODE, TRANSFER_READ, 0);
837 cam->params.vp_params.video_mode);
847 static int cpia2_set_high_power(struct camera_data *cam)
852 cpia2_do_command(cam,CPIA2_CMD_GET_SYSTEM_CTRL,TRANSFER_READ,0);
855 if(cam->params.camera_state.system_ctrl &
857 cpia2_do_command(cam, CPIA2_CMD_CLEAR_V2W_ERR,
861 cpia2_do_command(cam, CPIA2_CMD_SET_SYSTEM_CTRL,
865 cpia2_do_command(cam, CPIA2_CMD_GET_VP_SYSTEM_STATE,
867 if (cam->params.vp_params.system_state &
871 cam->params.camera_state.power_mode = LO_POWER_MODE;
878 cam->params.camera_state.power_mode = HI_POWER_MODE;
887 int cpia2_set_low_power(struct camera_data *cam)
889 cam->params.camera_state.power_mode = LO_POWER_MODE;
890 cpia2_do_command(cam, CPIA2_CMD_SET_SYSTEM_CTRL, TRANSFER_WRITE, 0);
899 static int apply_vp_patch(struct camera_data *cam)
914 cpia2_send_command(cam, &cmd);
925 static int set_default_user_mode(struct camera_data *cam)
929 int width = cam->params.roi.width;
930 int height = cam->params.roi.height;
932 switch (cam->params.version.sensor_flags) {
952 if (cam->params.pnp_id.device_type == DEVICE_STV_672)
959 cam->params.version.sensor_flags);
964 cam->params.version.sensor_flags, user_mode, frame_rate);
965 cpia2_do_command(cam, CPIA2_CMD_SET_USER_MODE, TRANSFER_WRITE,
967 if(cam->params.vp_params.frame_rate > 0 &&
968 frame_rate > cam->params.vp_params.frame_rate)
969 frame_rate = cam->params.vp_params.frame_rate;
971 cpia2_set_fps(cam, frame_rate);
973 // if (cam->params.pnp_id.device_type == DEVICE_STV_676)
974 // cpia2_do_command(cam,
1024 static int set_vw_size(struct camera_data *cam, int size)
1028 cam->params.vp_params.video_size = size;
1033 cam->params.roi.width = STV_IMAGE_VGA_COLS;
1034 cam->params.roi.height = STV_IMAGE_VGA_ROWS;
1035 cam->vw.width = STV_IMAGE_VGA_COLS;
1036 cam->vw.height = STV_IMAGE_VGA_ROWS;
1040 cam->params.roi.width = STV_IMAGE_CIF_COLS;
1041 cam->params.roi.height = STV_IMAGE_CIF_ROWS;
1042 cam->vw.width = STV_IMAGE_CIF_COLS;
1043 cam->vw.height = STV_IMAGE_CIF_ROWS;
1047 cam->params.roi.width = STV_IMAGE_QVGA_COLS;
1048 cam->params.roi.height = STV_IMAGE_QVGA_ROWS;
1049 cam->vw.width = STV_IMAGE_QVGA_COLS;
1050 cam->vw.height = STV_IMAGE_QVGA_ROWS;
1053 cam->params.roi.width = 288;
1054 cam->params.roi.height = 216;
1055 cam->vw.width = 288;
1056 cam->vw.height = 216;
1059 cam->vw.width = 256;
1060 cam->vw.height = 192;
1061 cam->params.roi.width = 256;
1062 cam->params.roi.height = 192;
1065 cam->vw.width = 224;
1066 cam->vw.height = 168;
1067 cam->params.roi.width = 224;
1068 cam->params.roi.height = 168;
1071 cam->vw.width = 192;
1072 cam->vw.height = 144;
1073 cam->params.roi.width = 192;
1074 cam->params.roi.height = 144;
1078 cam->params.roi.width = STV_IMAGE_QCIF_COLS;
1079 cam->params.roi.height = STV_IMAGE_QCIF_ROWS;
1080 cam->vw.width = STV_IMAGE_QCIF_COLS;
1081 cam->vw.height = STV_IMAGE_QCIF_ROWS;
1094 static int configure_sensor(struct camera_data *cam,
1099 switch (cam->params.version.sensor_flags) {
1104 retval = config_sensor_410(cam, req_width, req_height);
1107 retval = config_sensor_500(cam, req_width, req_height);
1121 static int config_sensor_410(struct camera_data *cam,
1144 set_vw_size(cam, image_size);
1145 width = cam->params.roi.width;
1146 height = cam->params.roi.height;
1184 if (cam->params.pnp_id.device_type == DEVICE_STV_672) {
1197 if (cam->params.pnp_id.device_type == DEVICE_STV_672) {
1247 cmd.buffer.registers[i++].value = cam->params.roi.width / 4;
1250 cmd.buffer.registers[i++].value = cam->params.roi.height / 4;
1296 cpia2_send_command(cam, &cmd);
1304 * config_sensor_500(cam)
1307 static int config_sensor_500(struct camera_data *cam,
1316 unsigned int device = cam->params.pnp_id.device_type;
1330 set_vw_size(cam, image_size);
1331 width = cam->params.roi.width;
1332 height = cam->params.roi.height;
1502 cpia2_send_command(cam, &cmd);
1512 * This sets all user changeable properties to the values in cam->params.
1514 int set_all_properties(struct camera_data *cam)
1521 cpia2_set_color_params(cam);
1523 cpia2_usb_change_streaming_alternate(cam,
1524 cam->params.camera_state.stream_mode);
1526 cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,
1527 cam->params.vp_params.user_effects);
1529 cpia2_set_flicker_mode(cam,
1530 cam->params.flicker_control.flicker_mode_req);
1532 cpia2_do_command(cam,
1534 TRANSFER_WRITE, cam->params.vp_params.gpio_direction);
1535 cpia2_do_command(cam, CPIA2_CMD_SET_VC_MP_GPIO_DATA, TRANSFER_WRITE,
1536 cam->params.vp_params.gpio_data);
1538 wake_system(cam);
1540 set_lowlight_boost(cam);
1550 void cpia2_save_camera_state(struct camera_data *cam)
1552 get_color_params(cam);
1553 cpia2_do_command(cam, CPIA2_CMD_GET_USER_EFFECTS, TRANSFER_READ, 0);
1554 cpia2_do_command(cam, CPIA2_CMD_GET_VC_MP_GPIO_DIRECTION, TRANSFER_READ,
1556 cpia2_do_command(cam, CPIA2_CMD_GET_VC_MP_GPIO_DATA, TRANSFER_READ, 0);
1565 void get_color_params(struct camera_data *cam)
1567 cpia2_do_command(cam, CPIA2_CMD_GET_VP_BRIGHTNESS, TRANSFER_READ, 0);
1568 cpia2_do_command(cam, CPIA2_CMD_GET_VP_SATURATION, TRANSFER_READ, 0);
1569 cpia2_do_command(cam, CPIA2_CMD_GET_CONTRAST, TRANSFER_READ, 0);
1577 void cpia2_set_color_params(struct camera_data *cam)
1580 cpia2_set_brightness(cam, cam->params.color_params.brightness);
1581 cpia2_set_contrast(cam, cam->params.color_params.contrast);
1582 cpia2_set_saturation(cam, cam->params.color_params.saturation);
1590 int cpia2_set_flicker_mode(struct camera_data *cam, int mode)
1595 if(cam->params.pnp_id.device_type != DEVICE_STV_672)
1599 if((err = cpia2_do_command(cam, CPIA2_CMD_GET_FLICKER_MODES,
1602 cam_reg = cam->params.flicker_control.cam_register;
1621 if((err = cpia2_do_command(cam, CPIA2_CMD_SET_FLICKER_MODES,
1626 if((err = cpia2_do_command(cam, CPIA2_CMD_GET_VP_EXP_MODES,
1629 cam_reg = cam->params.vp_params.exposure_modes;
1637 if((err = cpia2_do_command(cam, CPIA2_CMD_SET_VP_EXP_MODES,
1641 if((err = cpia2_do_command(cam, CPIA2_CMD_REHASH_VP4,
1647 cam->params.flicker_control.flicker_mode_req = mode;
1650 cam->params.flicker_control.flicker_mode_req = mode;
1651 cam->params.flicker_control.mains_frequency = 60;
1654 cam->params.flicker_control.flicker_mode_req = mode;
1655 cam->params.flicker_control.mains_frequency = 50;
1669 void cpia2_set_property_flip(struct camera_data *cam, int prop_val)
1673 cpia2_do_command(cam, CPIA2_CMD_GET_USER_EFFECTS, TRANSFER_READ, 0);
1674 cam_reg = cam->params.vp_params.user_effects;
1684 cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,
1693 void cpia2_set_property_mirror(struct camera_data *cam, int prop_val)
1697 cpia2_do_command(cam, CPIA2_CMD_GET_USER_EFFECTS, TRANSFER_READ, 0);
1698 cam_reg = cam->params.vp_params.user_effects;
1708 cpia2_do_command(cam, CPIA2_CMD_SET_USER_EFFECTS, TRANSFER_WRITE,
1716 * The new Target KB is set in cam->params.vc_params.target_kb and
1720 int cpia2_set_target_kb(struct camera_data *cam, unsigned char value)
1723 if (value != cam->params.vc_params.target_kb) {
1725 cpia2_usb_stream_pause(cam);
1728 cam->params.vc_params.target_kb = value;
1729 cpia2_reset_camera(cam);
1731 cpia2_usb_stream_resume(cam);
1742 int cpia2_set_gpio(struct camera_data *cam, unsigned char setting)
1751 ret = cpia2_do_command(cam,
1757 cam->params.vp_params.gpio_direction = 255;
1759 ret = cpia2_do_command(cam,
1765 cam->params.vp_params.gpio_data = setting;
1775 int cpia2_set_fps(struct camera_data *cam, int framerate)
1782 if(cam->params.pnp_id.device_type == DEVICE_STV_672 &&
1783 cam->params.version.sensor_flags ==
1797 if (cam->params.pnp_id.device_type == DEVICE_STV_672 &&
1801 retval = cpia2_do_command(cam,
1807 cam->params.vp_params.frame_rate = framerate;
1817 void cpia2_set_brightness(struct camera_data *cam, unsigned char value)
1823 if (cam->params.pnp_id.device_type == DEVICE_STV_672 && value == 0)
1826 cpia2_do_command(cam,CPIA2_CMD_SET_VP_BRIGHTNESS, TRANSFER_WRITE,value);
1834 void cpia2_set_contrast(struct camera_data *cam, unsigned char value)
1837 cam->params.color_params.contrast = value;
1838 cpia2_do_command(cam, CPIA2_CMD_SET_CONTRAST, TRANSFER_WRITE, value);
1846 void cpia2_set_saturation(struct camera_data *cam, unsigned char value)
1849 cam->params.color_params.saturation = value;
1850 cpia2_do_command(cam,CPIA2_CMD_SET_VP_SATURATION, TRANSFER_WRITE,value);
1858 void wake_system(struct camera_data *cam)
1860 cpia2_do_command(cam, CPIA2_CMD_SET_WAKEUP, TRANSFER_WRITE, 0);
1869 void set_lowlight_boost(struct camera_data *cam)
1873 if (cam->params.pnp_id.device_type != DEVICE_STV_672 ||
1874 cam->params.version.sensor_flags != CPIA2_VP_SENSOR_FLAGS_500)
1886 cpia2_send_command(cam, &cmd);
1888 if (cam->params.vp_params.lowlight_boost) {
1895 cpia2_send_command(cam, &cmd);
1898 cpia2_do_command(cam, CPIA2_CMD_REHASH_VP4, TRANSFER_WRITE, 1);
1907 void cpia2_set_format(struct camera_data *cam)
1909 cam->flush = true;
1911 cpia2_usb_stream_pause(cam);
1914 cpia2_set_low_power(cam);
1915 cpia2_reset_camera(cam);
1916 cam->flush = false;
1918 cpia2_dbg_dump_registers(cam);
1920 cpia2_usb_stream_resume(cam);
1928 void cpia2_dbg_dump_registers(struct camera_data *cam)
1942 cpia2_send_command(cam, &cmd);
1954 cpia2_send_command(cam, &cmd);
1966 cpia2_send_command(cam, &cmd);
1971 cpia2_send_command(cam, &cmd);
1977 cpia2_send_command(cam, &cmd);
1987 cpia2_send_command(cam, &cmd);
1993 cpia2_send_command(cam, &cmd);
2047 cpia2_send_command(cam, &cmd);
2076 if (cam->params.pnp_id.device_type == DEVICE_STV_672) {
2079 cpia2_send_command(cam, &cmd);
2101 cpia2_send_command(cam, &cmd);
2107 cpia2_send_command(cam, &cmd);
2121 cpia2_send_command(cam, &cmd);
2127 cpia2_send_command(cam, &cmd);
2146 void reset_camera_struct(struct camera_data *cam)
2151 cam->params.color_params.brightness = DEFAULT_BRIGHTNESS;
2152 cam->params.color_params.contrast = DEFAULT_CONTRAST;
2153 cam->params.color_params.saturation = DEFAULT_SATURATION;
2154 cam->params.vp_params.lowlight_boost = 0;
2157 cam->params.flicker_control.flicker_mode_req = NEVER_FLICKER;
2158 cam->params.flicker_control.mains_frequency = 60;
2161 cam->params.compression.jpeg_options = CPIA2_VC_VC_JPEG_OPT_DEFAULT;
2162 cam->params.compression.creep_period = 2;
2163 cam->params.compression.user_squeeze = 20;
2164 cam->params.compression.inhibit_htables = false;
2167 cam->params.vp_params.gpio_direction = 0; /* write, the default safe mode */
2168 cam->params.vp_params.gpio_data = 0;
2171 cam->params.vc_params.target_kb = DEFAULT_TARGET_KB;
2176 if(cam->params.pnp_id.device_type == DEVICE_STV_672) {
2177 if(cam->params.version.sensor_flags == CPIA2_VP_SENSOR_FLAGS_500)
2178 cam->params.vp_params.frame_rate = CPIA2_VP_FRAMERATE_15;
2180 cam->params.vp_params.frame_rate = CPIA2_VP_FRAMERATE_30;
2182 cam->params.vp_params.frame_rate = CPIA2_VP_FRAMERATE_30;
2189 if (cam->params.version.sensor_flags == CPIA2_VP_SENSOR_FLAGS_500) {
2190 cam->sensor_type = CPIA2_SENSOR_500;
2191 cam->video_size = VIDEOSIZE_VGA;
2192 cam->params.roi.width = STV_IMAGE_VGA_COLS;
2193 cam->params.roi.height = STV_IMAGE_VGA_ROWS;
2195 cam->sensor_type = CPIA2_SENSOR_410;
2196 cam->video_size = VIDEOSIZE_CIF;
2197 cam->params.roi.width = STV_IMAGE_CIF_COLS;
2198 cam->params.roi.height = STV_IMAGE_CIF_ROWS;
2205 cam->vp.palette = (u16) VIDEO_PALETTE_RGB24; /* Is this right? */
2206 cam->vp.brightness = (u16) cam->params.color_params.brightness * 256;
2207 cam->vp.colour = (u16) cam->params.color_params.saturation * 256;
2208 cam->vp.contrast = (u16) cam->params.color_params.contrast * 256;
2210 cam->vw.x = 0;
2211 cam->vw.y = 0;
2212 cam->vw.width = cam->params.roi.width;
2213 cam->vw.height = cam->params.roi.height;
2214 cam->vw.flags = 0;
2215 cam->vw.clipcount = 0;
2228 struct camera_data *cam;
2230 cam = kmalloc(sizeof(*cam), GFP_KERNEL);
2232 if (!cam) {
2238 memset(cam, 0, sizeof(struct camera_data));
2240 cam->present = 1;
2241 mutex_init(&cam->busy_lock);
2242 init_waitqueue_head(&cam->wq_stream);
2244 return cam;
2253 int cpia2_init_camera(struct camera_data *cam)
2257 cam->mmapped = false;
2260 cpia2_set_high_power(cam);
2261 cpia2_get_version_info(cam);
2262 if (cam->params.version.asic_id != CPIA2_ASIC_672) {
2264 cam->params.version.asic_id);
2269 cpia2_do_command(cam, CPIA2_CMD_SET_VC_MP_GPIO_DIRECTION,
2271 cpia2_do_command(cam, CPIA2_CMD_SET_VC_MP_GPIO_DATA,
2275 reset_camera_struct(cam);
2277 cpia2_set_low_power(cam);
2289 int cpia2_allocate_buffers(struct camera_data *cam)
2293 if(!cam->buffers) {
2294 u32 size = cam->num_frames*sizeof(struct framebuf);
2295 cam->buffers = kmalloc(size, GFP_KERNEL);
2296 if(!cam->buffers) {
2302 if(!cam->frame_buffer) {
2303 cam->frame_buffer = rvmalloc(cam->frame_size*cam->num_frames);
2304 if (!cam->frame_buffer) {
2306 kfree(cam->buffers);
2307 cam->buffers = NULL;
2312 for(i=0; i<cam->num_frames-1; ++i) {
2313 cam->buffers[i].next = &cam->buffers[i+1];
2314 cam->buffers[i].data = cam->frame_buffer +i*cam->frame_size;
2315 cam->buffers[i].status = FRAME_EMPTY;
2316 cam->buffers[i].length = 0;
2317 cam->buffers[i].max_length = 0;
2318 cam->buffers[i].num = i;
2320 cam->buffers[i].next = cam->buffers;
2321 cam->buffers[i].data = cam->frame_buffer +i*cam->frame_size;
2322 cam->buffers[i].status = FRAME_EMPTY;
2323 cam->buffers[i].length = 0;
2324 cam->buffers[i].max_length = 0;
2325 cam->buffers[i].num = i;
2326 cam->curbuff = cam->buffers;
2327 cam->workbuff = cam->curbuff->next;
2328 DBG("buffers=%p, curbuff=%p, workbuff=%p\n", cam->buffers, cam->curbuff,
2329 cam->workbuff);
2338 void cpia2_free_buffers(struct camera_data *cam)
2340 if(cam->buffers) {
2341 kfree(cam->buffers);
2342 cam->buffers = NULL;
2344 if(cam->frame_buffer) {
2345 rvfree(cam->frame_buffer, cam->frame_size*cam->num_frames);
2346 cam->frame_buffer = NULL;
2355 long cpia2_read(struct camera_data *cam,
2368 if (!cam) {
2374 if (mutex_lock_interruptible(&cam->busy_lock))
2377 if (!cam->present) {
2379 mutex_unlock(&cam->busy_lock);
2383 if(!cam->streaming) {
2385 cpia2_usb_stream_start(cam,
2386 cam->params.camera_state.stream_mode);
2389 /* Copy cam->curbuff in case it changes while we're processing */
2390 frame = cam->curbuff;
2392 mutex_unlock(&cam->busy_lock);
2397 mutex_unlock(&cam->busy_lock);
2398 wait_event_interruptible(cam->wq_stream,
2399 !cam->present ||
2400 (frame = cam->curbuff)->status == FRAME_READY);
2404 if (mutex_lock_interruptible(&cam->busy_lock)) {
2407 if(!cam->present) {
2408 mutex_unlock(&cam->busy_lock);
2415 mutex_unlock(&cam->busy_lock);
2419 mutex_unlock(&cam->busy_lock);
2427 mutex_unlock(&cam->busy_lock);
2436 unsigned int cpia2_poll(struct camera_data *cam, struct file *filp,
2441 if(!cam) {
2446 mutex_lock(&cam->busy_lock);
2448 if(!cam->present) {
2449 mutex_unlock(&cam->busy_lock);
2453 if(!cam->streaming) {
2455 cpia2_usb_stream_start(cam,
2456 cam->params.camera_state.stream_mode);
2459 mutex_unlock(&cam->busy_lock);
2460 poll_wait(filp, &cam->wq_stream, wait);
2461 mutex_lock(&cam->busy_lock);
2463 if(!cam->present)
2465 else if(cam->curbuff->status == FRAME_READY)
2468 mutex_unlock(&cam->busy_lock);
2477 int cpia2_remap_buffer(struct camera_data *cam, struct vm_area_struct *vma)
2485 if (!cam)
2491 if (mutex_lock_interruptible(&cam->busy_lock))
2494 if (!cam->present) {
2495 mutex_unlock(&cam->busy_lock);
2499 if (size > cam->frame_size*cam->num_frames ||
2500 (start_offset % cam->frame_size) != 0 ||
2501 (start_offset+size > cam->frame_size*cam->num_frames)) {
2502 mutex_unlock(&cam->busy_lock);
2506 pos = ((unsigned long) (cam->frame_buffer)) + start_offset;
2510 mutex_unlock(&cam->busy_lock);
2521 cam->mmapped = true;
2522 mutex_unlock(&cam->busy_lock);