1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * s2255drv.c - a driver for the Sensoray 2255 USB video capture device 4 * 5 * Copyright (C) 2007-2014 by Sensoray Company Inc. 6 * Dean Anderson 7 * 8 * Some video buffer code based on vivi driver: 9 * 10 * Sensoray 2255 device supports 4 simultaneous channels. 11 * The channels are not "crossbar" inputs, they are physically 12 * attached to separate video decoders. 13 * 14 * Because of USB2.0 bandwidth limitations. There is only a 15 * certain amount of data which may be transferred at one time. 16 * 17 * Example maximum bandwidth utilization: 18 * 19 * -full size, color mode YUYV or YUV422P: 2 channels at once 20 * -full or half size Grey scale: all 4 channels at once 21 * -half size, color mode YUYV or YUV422P: all 4 channels at once 22 * -full size, color mode YUYV or YUV422P 1/2 frame rate: all 4 channels 23 * at once. 24 */ 25 26 #include <linux/module.h> 27 #include <linux/firmware.h> 28 #include <linux/kernel.h> 29 #include <linux/mutex.h> 30 #include <linux/slab.h> 31 #include <linux/videodev2.h> 32 #include <linux/mm.h> 33 #include <linux/vmalloc.h> 34 #include <linux/usb.h> 35 #include <media/videobuf2-v4l2.h> 36 #include <media/videobuf2-vmalloc.h> 37 #include <media/v4l2-common.h> 38 #include <media/v4l2-device.h> 39 #include <media/v4l2-ioctl.h> 40 #include <media/v4l2-ctrls.h> 41 #include <media/v4l2-event.h> 42 43 #define S2255_VERSION "1.25.1" 44 #define FIRMWARE_FILE_NAME "f2255usb.bin" 45 46 /* default JPEG quality */ 47 #define S2255_DEF_JPEG_QUAL 50 48 /* vendor request in */ 49 #define S2255_VR_IN 0 50 /* vendor request out */ 51 #define S2255_VR_OUT 1 52 /* firmware query */ 53 #define S2255_VR_FW 0x30 54 /* USB endpoint number for configuring the device */ 55 #define S2255_CONFIG_EP 2 56 /* maximum time for DSP to start responding after last FW word loaded(ms) */ 57 #define S2255_DSP_BOOTTIME 800 58 /* maximum time to wait for firmware to load (ms) */ 59 #define S2255_LOAD_TIMEOUT (5000 + S2255_DSP_BOOTTIME) 60 #define S2255_MIN_BUFS 2 61 #define S2255_SETMODE_TIMEOUT 500 62 #define S2255_VIDSTATUS_TIMEOUT 350 63 #define S2255_MARKER_FRAME cpu_to_le32(0x2255DA4AL) 64 #define S2255_MARKER_RESPONSE cpu_to_le32(0x2255ACACL) 65 #define S2255_RESPONSE_SETMODE cpu_to_le32(0x01) 66 #define S2255_RESPONSE_FW cpu_to_le32(0x10) 67 #define S2255_RESPONSE_STATUS cpu_to_le32(0x20) 68 #define S2255_USB_XFER_SIZE (16 * 1024) 69 #define MAX_CHANNELS 4 70 #define SYS_FRAMES 4 71 /* maximum size is PAL full size plus room for the marker header(s) */ 72 #define SYS_FRAMES_MAXSIZE (720*288*2*2 + 4096) 73 #define DEF_USB_BLOCK S2255_USB_XFER_SIZE 74 #define LINE_SZ_4CIFS_NTSC 640 75 #define LINE_SZ_2CIFS_NTSC 640 76 #define LINE_SZ_1CIFS_NTSC 320 77 #define LINE_SZ_4CIFS_PAL 704 78 #define LINE_SZ_2CIFS_PAL 704 79 #define LINE_SZ_1CIFS_PAL 352 80 #define NUM_LINES_4CIFS_NTSC 240 81 #define NUM_LINES_2CIFS_NTSC 240 82 #define NUM_LINES_1CIFS_NTSC 240 83 #define NUM_LINES_4CIFS_PAL 288 84 #define NUM_LINES_2CIFS_PAL 288 85 #define NUM_LINES_1CIFS_PAL 288 86 #define LINE_SZ_DEF 640 87 #define NUM_LINES_DEF 240 88 89 90 /* predefined settings */ 91 #define FORMAT_NTSC 1 92 #define FORMAT_PAL 2 93 94 #define SCALE_4CIFS 1 /* 640x480(NTSC) or 704x576(PAL) */ 95 #define SCALE_2CIFS 2 /* 640x240(NTSC) or 704x288(PAL) */ 96 #define SCALE_1CIFS 3 /* 320x240(NTSC) or 352x288(PAL) */ 97 /* SCALE_4CIFSI is the 2 fields interpolated into one */ 98 #define SCALE_4CIFSI 4 /* 640x480(NTSC) or 704x576(PAL) high quality */ 99 100 #define COLOR_YUVPL 1 /* YUV planar */ 101 #define COLOR_YUVPK 2 /* YUV packed */ 102 #define COLOR_Y8 4 /* monochrome */ 103 #define COLOR_JPG 5 /* JPEG */ 104 105 #define MASK_COLOR 0x000000ff 106 #define MASK_JPG_QUALITY 0x0000ff00 107 #define MASK_INPUT_TYPE 0x000f0000 108 /* frame decimation. */ 109 #define FDEC_1 1 /* capture every frame. default */ 110 #define FDEC_2 2 /* capture every 2nd frame */ 111 #define FDEC_3 3 /* capture every 3rd frame */ 112 #define FDEC_5 5 /* capture every 5th frame */ 113 114 /*------------------------------------------------------- 115 * Default mode parameters. 116 *-------------------------------------------------------*/ 117 #define DEF_SCALE SCALE_4CIFS 118 #define DEF_COLOR COLOR_YUVPL 119 #define DEF_FDEC FDEC_1 120 #define DEF_BRIGHT 0 121 #define DEF_CONTRAST 0x5c 122 #define DEF_SATURATION 0x80 123 #define DEF_HUE 0 124 125 /* usb config commands */ 126 #define IN_DATA_TOKEN cpu_to_le32(0x2255c0de) 127 #define CMD_2255 0xc2255000 128 #define CMD_SET_MODE cpu_to_le32((CMD_2255 | 0x10)) 129 #define CMD_START cpu_to_le32((CMD_2255 | 0x20)) 130 #define CMD_STOP cpu_to_le32((CMD_2255 | 0x30)) 131 #define CMD_STATUS cpu_to_le32((CMD_2255 | 0x40)) 132 133 struct s2255_mode { 134 u32 format; /* input video format (NTSC, PAL) */ 135 u32 scale; /* output video scale */ 136 u32 color; /* output video color format */ 137 u32 fdec; /* frame decimation */ 138 u32 bright; /* brightness */ 139 u32 contrast; /* contrast */ 140 u32 saturation; /* saturation */ 141 u32 hue; /* hue (NTSC only)*/ 142 u32 single; /* capture 1 frame at a time (!=0), continuously (==0)*/ 143 u32 usb_block; /* block size. should be 4096 of DEF_USB_BLOCK */ 144 u32 restart; /* if DSP requires restart */ 145 }; 146 147 148 #define S2255_READ_IDLE 0 149 #define S2255_READ_FRAME 1 150 151 /* frame structure */ 152 struct s2255_framei { 153 unsigned long size; 154 unsigned long ulState; /* ulState:S2255_READ_IDLE, S2255_READ_FRAME*/ 155 void *lpvbits; /* image data */ 156 unsigned long cur_size; /* current data copied to it */ 157 }; 158 159 /* image buffer structure */ 160 struct s2255_bufferi { 161 unsigned long dwFrames; /* number of frames in buffer */ 162 struct s2255_framei frame[SYS_FRAMES]; /* array of FRAME structures */ 163 }; 164 165 #define DEF_MODEI_NTSC_CONT {FORMAT_NTSC, DEF_SCALE, DEF_COLOR, \ 166 DEF_FDEC, DEF_BRIGHT, DEF_CONTRAST, DEF_SATURATION, \ 167 DEF_HUE, 0, DEF_USB_BLOCK, 0} 168 169 /* for firmware loading, fw_state */ 170 #define S2255_FW_NOTLOADED 0 171 #define S2255_FW_LOADED_DSPWAIT 1 172 #define S2255_FW_SUCCESS 2 173 #define S2255_FW_FAILED 3 174 #define S2255_FW_DISCONNECTING 4 175 #define S2255_FW_MARKER cpu_to_le32(0x22552f2f) 176 /* 2255 read states */ 177 #define S2255_READ_IDLE 0 178 #define S2255_READ_FRAME 1 179 struct s2255_fw { 180 int fw_loaded; 181 int fw_size; 182 struct urb *fw_urb; 183 atomic_t fw_state; 184 void *pfw_data; 185 wait_queue_head_t wait_fw; 186 const struct firmware *fw; 187 }; 188 189 struct s2255_pipeinfo { 190 u32 max_transfer_size; 191 u32 cur_transfer_size; 192 u8 *transfer_buffer; 193 u32 state; 194 void *stream_urb; 195 void *dev; /* back pointer to s2255_dev struct*/ 196 u32 err_count; 197 u32 idx; 198 }; 199 200 struct s2255_fmt; /*forward declaration */ 201 struct s2255_dev; 202 203 /* 2255 video channel */ 204 struct s2255_vc { 205 struct s2255_dev *dev; 206 struct video_device vdev; 207 struct v4l2_ctrl_handler hdl; 208 struct v4l2_ctrl *jpegqual_ctrl; 209 int resources; 210 struct list_head buf_list; 211 struct s2255_bufferi buffer; 212 struct s2255_mode mode; 213 v4l2_std_id std; 214 /* jpeg compression */ 215 unsigned jpegqual; 216 /* capture parameters (for high quality mode full size) */ 217 struct v4l2_captureparm cap_parm; 218 int cur_frame; 219 int last_frame; 220 /* allocated image size */ 221 unsigned long req_image_size; 222 /* received packet size */ 223 unsigned long pkt_size; 224 int bad_payload; 225 unsigned long frame_count; 226 /* if JPEG image */ 227 int jpg_size; 228 /* if channel configured to default state */ 229 int configured; 230 wait_queue_head_t wait_setmode; 231 int setmode_ready; 232 /* video status items */ 233 int vidstatus; 234 wait_queue_head_t wait_vidstatus; 235 int vidstatus_ready; 236 unsigned int width; 237 unsigned int height; 238 enum v4l2_field field; 239 const struct s2255_fmt *fmt; 240 int idx; /* channel number on device, 0-3 */ 241 struct vb2_queue vb_vidq; 242 struct mutex vb_lock; /* streaming lock */ 243 spinlock_t qlock; 244 }; 245 246 247 struct s2255_dev { 248 struct s2255_vc vc[MAX_CHANNELS]; 249 struct v4l2_device v4l2_dev; 250 refcount_t num_channels; 251 int frames; 252 struct mutex lock; /* channels[].vdev.lock */ 253 struct mutex cmdlock; /* protects cmdbuf */ 254 struct usb_device *udev; 255 struct usb_interface *interface; 256 u8 read_endpoint; 257 struct timer_list timer; 258 struct s2255_fw *fw_data; 259 struct s2255_pipeinfo pipe; 260 u32 cc; /* current channel */ 261 int frame_ready; 262 int chn_ready; 263 /* dsp firmware version (f2255usb.bin) */ 264 int dsp_fw_ver; 265 u16 pid; /* product id */ 266 #define S2255_CMDBUF_SIZE 512 267 __le32 *cmdbuf; 268 }; 269 270 static inline struct s2255_dev *to_s2255_dev(struct v4l2_device *v4l2_dev) 271 { 272 return container_of(v4l2_dev, struct s2255_dev, v4l2_dev); 273 } 274 275 struct s2255_fmt { 276 u32 fourcc; 277 int depth; 278 }; 279 280 /* buffer for one video frame */ 281 struct s2255_buffer { 282 /* common v4l buffer stuff -- must be first */ 283 struct vb2_v4l2_buffer vb; 284 struct list_head list; 285 }; 286 287 288 /* current cypress EEPROM firmware version */ 289 #define S2255_CUR_USB_FWVER ((3 << 8) | 12) 290 /* current DSP FW version */ 291 #define S2255_CUR_DSP_FWVER 10104 292 /* Need DSP version 5+ for video status feature */ 293 #define S2255_MIN_DSP_STATUS 5 294 #define S2255_MIN_DSP_COLORFILTER 8 295 #define S2255_NORMS (V4L2_STD_ALL) 296 297 /* private V4L2 controls */ 298 299 /* 300 * The following chart displays how COLORFILTER should be set 301 * ========================================================= 302 * = fourcc = COLORFILTER = 303 * = =============================== 304 * = = 0 = 1 = 305 * ========================================================= 306 * = V4L2_PIX_FMT_GREY(Y8) = monochrome from = monochrome= 307 * = = s-video or = composite = 308 * = = B/W camera = input = 309 * ========================================================= 310 * = other = color, svideo = color, = 311 * = = = composite = 312 * ========================================================= 313 * 314 * Notes: 315 * channels 0-3 on 2255 are composite 316 * channels 0-1 on 2257 are composite, 2-3 are s-video 317 * If COLORFILTER is 0 with a composite color camera connected, 318 * the output will appear monochrome but hatching 319 * will occur. 320 * COLORFILTER is different from "color killer" and "color effects" 321 * for reasons above. 322 */ 323 #define S2255_V4L2_YC_ON 1 324 #define S2255_V4L2_YC_OFF 0 325 #define V4L2_CID_S2255_COLORFILTER (V4L2_CID_USER_S2255_BASE + 0) 326 327 /* frame prefix size (sent once every frame) */ 328 #define PREFIX_SIZE 512 329 330 /* Channels on box are in reverse order */ 331 static unsigned long G_chnmap[MAX_CHANNELS] = {3, 2, 1, 0}; 332 333 static int debug; 334 335 static int s2255_start_readpipe(struct s2255_dev *dev); 336 static void s2255_stop_readpipe(struct s2255_dev *dev); 337 static int s2255_start_acquire(struct s2255_vc *vc); 338 static int s2255_stop_acquire(struct s2255_vc *vc); 339 static void s2255_fillbuff(struct s2255_vc *vc, struct s2255_buffer *buf, 340 int jpgsize); 341 static int s2255_set_mode(struct s2255_vc *vc, struct s2255_mode *mode); 342 static int s2255_board_shutdown(struct s2255_dev *dev); 343 static void s2255_fwload_start(struct s2255_dev *dev); 344 static void s2255_destroy(struct s2255_dev *dev); 345 static long s2255_vendor_req(struct s2255_dev *dev, unsigned char req, 346 u16 index, u16 value, void *buf, 347 s32 buf_len, int bOut); 348 349 /* dev_err macro with driver name */ 350 #define S2255_DRIVER_NAME "s2255" 351 #define s2255_dev_err(dev, fmt, arg...) \ 352 dev_err(dev, S2255_DRIVER_NAME " - " fmt, ##arg) 353 354 #define dprintk(dev, level, fmt, arg...) \ 355 v4l2_dbg(level, debug, &dev->v4l2_dev, fmt, ## arg) 356 357 static struct usb_driver s2255_driver; 358 359 /* start video number */ 360 static int video_nr = -1; /* /dev/videoN, -1 for autodetect */ 361 362 /* Enable jpeg capture. */ 363 static int jpeg_enable = 1; 364 365 module_param(debug, int, 0644); 366 MODULE_PARM_DESC(debug, "Debug level(0-100) default 0"); 367 module_param(video_nr, int, 0644); 368 MODULE_PARM_DESC(video_nr, "start video minor(-1 default autodetect)"); 369 module_param(jpeg_enable, int, 0644); 370 MODULE_PARM_DESC(jpeg_enable, "Jpeg enable(1-on 0-off) default 1"); 371 372 /* USB device table */ 373 #define USB_SENSORAY_VID 0x1943 374 static const struct usb_device_id s2255_table[] = { 375 {USB_DEVICE(USB_SENSORAY_VID, 0x2255)}, 376 {USB_DEVICE(USB_SENSORAY_VID, 0x2257)}, /*same family as 2255*/ 377 { } /* Terminating entry */ 378 }; 379 MODULE_DEVICE_TABLE(usb, s2255_table); 380 381 #define BUFFER_TIMEOUT msecs_to_jiffies(400) 382 383 /* image formats. */ 384 /* JPEG formats must be defined last to support jpeg_enable parameter */ 385 static const struct s2255_fmt formats[] = { 386 { 387 .fourcc = V4L2_PIX_FMT_YUYV, 388 .depth = 16 389 390 }, { 391 .fourcc = V4L2_PIX_FMT_UYVY, 392 .depth = 16 393 }, { 394 .fourcc = V4L2_PIX_FMT_YUV422P, 395 .depth = 16 396 397 }, { 398 .fourcc = V4L2_PIX_FMT_GREY, 399 .depth = 8 400 }, { 401 .fourcc = V4L2_PIX_FMT_JPEG, 402 .depth = 24 403 }, { 404 .fourcc = V4L2_PIX_FMT_MJPEG, 405 .depth = 24 406 } 407 }; 408 409 static int norm_maxw(struct s2255_vc *vc) 410 { 411 return (vc->std & V4L2_STD_525_60) ? 412 LINE_SZ_4CIFS_NTSC : LINE_SZ_4CIFS_PAL; 413 } 414 415 static int norm_maxh(struct s2255_vc *vc) 416 { 417 return (vc->std & V4L2_STD_525_60) ? 418 (NUM_LINES_1CIFS_NTSC * 2) : (NUM_LINES_1CIFS_PAL * 2); 419 } 420 421 static int norm_minw(struct s2255_vc *vc) 422 { 423 return (vc->std & V4L2_STD_525_60) ? 424 LINE_SZ_1CIFS_NTSC : LINE_SZ_1CIFS_PAL; 425 } 426 427 static int norm_minh(struct s2255_vc *vc) 428 { 429 return (vc->std & V4L2_STD_525_60) ? 430 (NUM_LINES_1CIFS_NTSC) : (NUM_LINES_1CIFS_PAL); 431 } 432 433 434 /* 435 * TODO: fixme: move YUV reordering to hardware 436 * converts 2255 planar format to yuyv or uyvy 437 */ 438 static void planar422p_to_yuv_packed(const unsigned char *in, 439 unsigned char *out, 440 int width, int height, 441 int fmt) 442 { 443 unsigned char *pY; 444 unsigned char *pCb; 445 unsigned char *pCr; 446 unsigned long size = height * width; 447 unsigned int i; 448 pY = (unsigned char *)in; 449 pCr = (unsigned char *)in + height * width; 450 pCb = (unsigned char *)in + height * width + (height * width / 2); 451 for (i = 0; i < size * 2; i += 4) { 452 out[i] = (fmt == V4L2_PIX_FMT_YUYV) ? *pY++ : *pCr++; 453 out[i + 1] = (fmt == V4L2_PIX_FMT_YUYV) ? *pCr++ : *pY++; 454 out[i + 2] = (fmt == V4L2_PIX_FMT_YUYV) ? *pY++ : *pCb++; 455 out[i + 3] = (fmt == V4L2_PIX_FMT_YUYV) ? *pCb++ : *pY++; 456 } 457 return; 458 } 459 460 static void s2255_reset_dsppower(struct s2255_dev *dev) 461 { 462 s2255_vendor_req(dev, 0x40, 0x0000, 0x0001, NULL, 0, 1); 463 msleep(50); 464 s2255_vendor_req(dev, 0x50, 0x0000, 0x0000, NULL, 0, 1); 465 msleep(600); 466 s2255_vendor_req(dev, 0x10, 0x0000, 0x0000, NULL, 0, 1); 467 return; 468 } 469 470 /* kickstarts the firmware loading. from probe 471 */ 472 static void s2255_timer(struct timer_list *t) 473 { 474 struct s2255_dev *dev = from_timer(dev, t, timer); 475 struct s2255_fw *data = dev->fw_data; 476 if (usb_submit_urb(data->fw_urb, GFP_ATOMIC) < 0) { 477 pr_err("s2255: can't submit urb\n"); 478 atomic_set(&data->fw_state, S2255_FW_FAILED); 479 /* wake up anything waiting for the firmware */ 480 wake_up(&data->wait_fw); 481 return; 482 } 483 } 484 485 486 /* this loads the firmware asynchronously. 487 Originally this was done synchronously in probe. 488 But it is better to load it asynchronously here than block 489 inside the probe function. Blocking inside probe affects boot time. 490 FW loading is triggered by the timer in the probe function 491 */ 492 static void s2255_fwchunk_complete(struct urb *urb) 493 { 494 struct s2255_fw *data = urb->context; 495 struct usb_device *udev = urb->dev; 496 int len; 497 if (urb->status) { 498 dev_err(&udev->dev, "URB failed with status %d\n", urb->status); 499 atomic_set(&data->fw_state, S2255_FW_FAILED); 500 /* wake up anything waiting for the firmware */ 501 wake_up(&data->wait_fw); 502 return; 503 } 504 if (data->fw_urb == NULL) { 505 s2255_dev_err(&udev->dev, "disconnected\n"); 506 atomic_set(&data->fw_state, S2255_FW_FAILED); 507 /* wake up anything waiting for the firmware */ 508 wake_up(&data->wait_fw); 509 return; 510 } 511 #define CHUNK_SIZE 512 512 /* all USB transfers must be done with continuous kernel memory. 513 can't allocate more than 128k in current linux kernel, so 514 upload the firmware in chunks 515 */ 516 if (data->fw_loaded < data->fw_size) { 517 len = (data->fw_loaded + CHUNK_SIZE) > data->fw_size ? 518 data->fw_size % CHUNK_SIZE : CHUNK_SIZE; 519 520 if (len < CHUNK_SIZE) 521 memset(data->pfw_data, 0, CHUNK_SIZE); 522 523 memcpy(data->pfw_data, 524 (char *) data->fw->data + data->fw_loaded, len); 525 526 usb_fill_bulk_urb(data->fw_urb, udev, usb_sndbulkpipe(udev, 2), 527 data->pfw_data, CHUNK_SIZE, 528 s2255_fwchunk_complete, data); 529 if (usb_submit_urb(data->fw_urb, GFP_ATOMIC) < 0) { 530 dev_err(&udev->dev, "failed submit URB\n"); 531 atomic_set(&data->fw_state, S2255_FW_FAILED); 532 /* wake up anything waiting for the firmware */ 533 wake_up(&data->wait_fw); 534 return; 535 } 536 data->fw_loaded += len; 537 } else 538 atomic_set(&data->fw_state, S2255_FW_LOADED_DSPWAIT); 539 return; 540 541 } 542 543 static void s2255_got_frame(struct s2255_vc *vc, int jpgsize) 544 { 545 struct s2255_buffer *buf; 546 struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev); 547 unsigned long flags = 0; 548 549 spin_lock_irqsave(&vc->qlock, flags); 550 if (list_empty(&vc->buf_list)) { 551 dprintk(dev, 1, "No active queue to serve\n"); 552 spin_unlock_irqrestore(&vc->qlock, flags); 553 return; 554 } 555 buf = list_entry(vc->buf_list.next, 556 struct s2255_buffer, list); 557 list_del(&buf->list); 558 buf->vb.vb2_buf.timestamp = ktime_get_ns(); 559 buf->vb.field = vc->field; 560 buf->vb.sequence = vc->frame_count; 561 spin_unlock_irqrestore(&vc->qlock, flags); 562 563 s2255_fillbuff(vc, buf, jpgsize); 564 /* tell v4l buffer was filled */ 565 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_DONE); 566 dprintk(dev, 2, "%s: [buf] [%p]\n", __func__, buf); 567 } 568 569 static const struct s2255_fmt *format_by_fourcc(int fourcc) 570 { 571 unsigned int i; 572 for (i = 0; i < ARRAY_SIZE(formats); i++) { 573 if (-1 == formats[i].fourcc) 574 continue; 575 if (!jpeg_enable && ((formats[i].fourcc == V4L2_PIX_FMT_JPEG) || 576 (formats[i].fourcc == V4L2_PIX_FMT_MJPEG))) 577 continue; 578 if (formats[i].fourcc == fourcc) 579 return formats + i; 580 } 581 return NULL; 582 } 583 584 /* video buffer vmalloc implementation based partly on VIVI driver which is 585 * Copyright (c) 2006 by 586 * Mauro Carvalho Chehab <mchehab--a.t--infradead.org> 587 * Ted Walther <ted--a.t--enumera.com> 588 * John Sokol <sokol--a.t--videotechnology.com> 589 * http://v4l.videotechnology.com/ 590 * 591 */ 592 static void s2255_fillbuff(struct s2255_vc *vc, 593 struct s2255_buffer *buf, int jpgsize) 594 { 595 int pos = 0; 596 const char *tmpbuf; 597 char *vbuf = vb2_plane_vaddr(&buf->vb.vb2_buf, 0); 598 unsigned long last_frame; 599 struct s2255_dev *dev = vc->dev; 600 601 if (!vbuf) 602 return; 603 last_frame = vc->last_frame; 604 if (last_frame != -1) { 605 tmpbuf = 606 (const char *)vc->buffer.frame[last_frame].lpvbits; 607 switch (vc->fmt->fourcc) { 608 case V4L2_PIX_FMT_YUYV: 609 case V4L2_PIX_FMT_UYVY: 610 planar422p_to_yuv_packed((const unsigned char *)tmpbuf, 611 vbuf, vc->width, 612 vc->height, 613 vc->fmt->fourcc); 614 break; 615 case V4L2_PIX_FMT_GREY: 616 memcpy(vbuf, tmpbuf, vc->width * vc->height); 617 break; 618 case V4L2_PIX_FMT_JPEG: 619 case V4L2_PIX_FMT_MJPEG: 620 vb2_set_plane_payload(&buf->vb.vb2_buf, 0, jpgsize); 621 memcpy(vbuf, tmpbuf, jpgsize); 622 break; 623 case V4L2_PIX_FMT_YUV422P: 624 memcpy(vbuf, tmpbuf, 625 vc->width * vc->height * 2); 626 break; 627 default: 628 pr_info("s2255: unknown format?\n"); 629 } 630 vc->last_frame = -1; 631 } else { 632 pr_err("s2255: =======no frame\n"); 633 return; 634 } 635 dprintk(dev, 2, "s2255fill at : Buffer %p size= %d\n", 636 vbuf, pos); 637 } 638 639 640 /* ------------------------------------------------------------------ 641 Videobuf operations 642 ------------------------------------------------------------------*/ 643 644 static int queue_setup(struct vb2_queue *vq, 645 unsigned int *nbuffers, unsigned int *nplanes, 646 unsigned int sizes[], struct device *alloc_devs[]) 647 { 648 struct s2255_vc *vc = vb2_get_drv_priv(vq); 649 if (*nbuffers < S2255_MIN_BUFS) 650 *nbuffers = S2255_MIN_BUFS; 651 *nplanes = 1; 652 sizes[0] = vc->width * vc->height * (vc->fmt->depth >> 3); 653 return 0; 654 } 655 656 static int buffer_prepare(struct vb2_buffer *vb) 657 { 658 struct s2255_vc *vc = vb2_get_drv_priv(vb->vb2_queue); 659 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 660 struct s2255_buffer *buf = container_of(vbuf, struct s2255_buffer, vb); 661 int w = vc->width; 662 int h = vc->height; 663 unsigned long size; 664 665 dprintk(vc->dev, 4, "%s\n", __func__); 666 if (vc->fmt == NULL) 667 return -EINVAL; 668 669 if ((w < norm_minw(vc)) || 670 (w > norm_maxw(vc)) || 671 (h < norm_minh(vc)) || 672 (h > norm_maxh(vc))) { 673 dprintk(vc->dev, 4, "invalid buffer prepare\n"); 674 return -EINVAL; 675 } 676 size = w * h * (vc->fmt->depth >> 3); 677 if (vb2_plane_size(vb, 0) < size) { 678 dprintk(vc->dev, 4, "invalid buffer prepare\n"); 679 return -EINVAL; 680 } 681 682 vb2_set_plane_payload(&buf->vb.vb2_buf, 0, size); 683 return 0; 684 } 685 686 static void buffer_queue(struct vb2_buffer *vb) 687 { 688 struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb); 689 struct s2255_buffer *buf = container_of(vbuf, struct s2255_buffer, vb); 690 struct s2255_vc *vc = vb2_get_drv_priv(vb->vb2_queue); 691 unsigned long flags = 0; 692 dprintk(vc->dev, 1, "%s\n", __func__); 693 spin_lock_irqsave(&vc->qlock, flags); 694 list_add_tail(&buf->list, &vc->buf_list); 695 spin_unlock_irqrestore(&vc->qlock, flags); 696 } 697 698 static int start_streaming(struct vb2_queue *vq, unsigned int count); 699 static void stop_streaming(struct vb2_queue *vq); 700 701 static const struct vb2_ops s2255_video_qops = { 702 .queue_setup = queue_setup, 703 .buf_prepare = buffer_prepare, 704 .buf_queue = buffer_queue, 705 .start_streaming = start_streaming, 706 .stop_streaming = stop_streaming, 707 }; 708 709 static int vidioc_querycap(struct file *file, void *priv, 710 struct v4l2_capability *cap) 711 { 712 struct s2255_vc *vc = video_drvdata(file); 713 struct s2255_dev *dev = vc->dev; 714 715 strscpy(cap->driver, "s2255", sizeof(cap->driver)); 716 strscpy(cap->card, "s2255", sizeof(cap->card)); 717 usb_make_path(dev->udev, cap->bus_info, sizeof(cap->bus_info)); 718 return 0; 719 } 720 721 static int vidioc_enum_fmt_vid_cap(struct file *file, void *priv, 722 struct v4l2_fmtdesc *f) 723 { 724 int index = f->index; 725 726 if (index >= ARRAY_SIZE(formats)) 727 return -EINVAL; 728 if (!jpeg_enable && ((formats[index].fourcc == V4L2_PIX_FMT_JPEG) || 729 (formats[index].fourcc == V4L2_PIX_FMT_MJPEG))) 730 return -EINVAL; 731 f->pixelformat = formats[index].fourcc; 732 return 0; 733 } 734 735 static int vidioc_g_fmt_vid_cap(struct file *file, void *priv, 736 struct v4l2_format *f) 737 { 738 struct s2255_vc *vc = video_drvdata(file); 739 int is_ntsc = vc->std & V4L2_STD_525_60; 740 741 f->fmt.pix.width = vc->width; 742 f->fmt.pix.height = vc->height; 743 if (f->fmt.pix.height >= 744 (is_ntsc ? NUM_LINES_1CIFS_NTSC : NUM_LINES_1CIFS_PAL) * 2) 745 f->fmt.pix.field = V4L2_FIELD_INTERLACED; 746 else 747 f->fmt.pix.field = V4L2_FIELD_TOP; 748 f->fmt.pix.pixelformat = vc->fmt->fourcc; 749 f->fmt.pix.bytesperline = f->fmt.pix.width * (vc->fmt->depth >> 3); 750 f->fmt.pix.sizeimage = f->fmt.pix.height * f->fmt.pix.bytesperline; 751 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 752 return 0; 753 } 754 755 static int vidioc_try_fmt_vid_cap(struct file *file, void *priv, 756 struct v4l2_format *f) 757 { 758 const struct s2255_fmt *fmt; 759 enum v4l2_field field; 760 struct s2255_vc *vc = video_drvdata(file); 761 int is_ntsc = vc->std & V4L2_STD_525_60; 762 763 fmt = format_by_fourcc(f->fmt.pix.pixelformat); 764 765 if (fmt == NULL) 766 return -EINVAL; 767 768 dprintk(vc->dev, 50, "%s NTSC: %d suggested width: %d, height: %d\n", 769 __func__, is_ntsc, f->fmt.pix.width, f->fmt.pix.height); 770 if (is_ntsc) { 771 /* NTSC */ 772 if (f->fmt.pix.height >= NUM_LINES_1CIFS_NTSC * 2) { 773 f->fmt.pix.height = NUM_LINES_1CIFS_NTSC * 2; 774 field = V4L2_FIELD_INTERLACED; 775 } else { 776 f->fmt.pix.height = NUM_LINES_1CIFS_NTSC; 777 field = V4L2_FIELD_TOP; 778 } 779 if (f->fmt.pix.width >= LINE_SZ_4CIFS_NTSC) 780 f->fmt.pix.width = LINE_SZ_4CIFS_NTSC; 781 else 782 f->fmt.pix.width = LINE_SZ_1CIFS_NTSC; 783 } else { 784 /* PAL */ 785 if (f->fmt.pix.height >= NUM_LINES_1CIFS_PAL * 2) { 786 f->fmt.pix.height = NUM_LINES_1CIFS_PAL * 2; 787 field = V4L2_FIELD_INTERLACED; 788 } else { 789 f->fmt.pix.height = NUM_LINES_1CIFS_PAL; 790 field = V4L2_FIELD_TOP; 791 } 792 if (f->fmt.pix.width >= LINE_SZ_4CIFS_PAL) 793 f->fmt.pix.width = LINE_SZ_4CIFS_PAL; 794 else 795 f->fmt.pix.width = LINE_SZ_1CIFS_PAL; 796 } 797 f->fmt.pix.field = field; 798 f->fmt.pix.bytesperline = (f->fmt.pix.width * fmt->depth) >> 3; 799 f->fmt.pix.sizeimage = f->fmt.pix.height * f->fmt.pix.bytesperline; 800 f->fmt.pix.colorspace = V4L2_COLORSPACE_SMPTE170M; 801 dprintk(vc->dev, 50, "%s: set width %d height %d field %d\n", __func__, 802 f->fmt.pix.width, f->fmt.pix.height, f->fmt.pix.field); 803 return 0; 804 } 805 806 static int vidioc_s_fmt_vid_cap(struct file *file, void *priv, 807 struct v4l2_format *f) 808 { 809 struct s2255_vc *vc = video_drvdata(file); 810 const struct s2255_fmt *fmt; 811 struct vb2_queue *q = &vc->vb_vidq; 812 struct s2255_mode mode; 813 int ret; 814 815 ret = vidioc_try_fmt_vid_cap(file, vc, f); 816 817 if (ret < 0) 818 return ret; 819 820 fmt = format_by_fourcc(f->fmt.pix.pixelformat); 821 822 if (fmt == NULL) 823 return -EINVAL; 824 825 if (vb2_is_busy(q)) { 826 dprintk(vc->dev, 1, "queue busy\n"); 827 return -EBUSY; 828 } 829 830 mode = vc->mode; 831 vc->fmt = fmt; 832 vc->width = f->fmt.pix.width; 833 vc->height = f->fmt.pix.height; 834 vc->field = f->fmt.pix.field; 835 if (vc->width > norm_minw(vc)) { 836 if (vc->height > norm_minh(vc)) { 837 if (vc->cap_parm.capturemode & 838 V4L2_MODE_HIGHQUALITY) 839 mode.scale = SCALE_4CIFSI; 840 else 841 mode.scale = SCALE_4CIFS; 842 } else 843 mode.scale = SCALE_2CIFS; 844 845 } else { 846 mode.scale = SCALE_1CIFS; 847 } 848 /* color mode */ 849 switch (vc->fmt->fourcc) { 850 case V4L2_PIX_FMT_GREY: 851 mode.color &= ~MASK_COLOR; 852 mode.color |= COLOR_Y8; 853 break; 854 case V4L2_PIX_FMT_JPEG: 855 case V4L2_PIX_FMT_MJPEG: 856 mode.color &= ~MASK_COLOR; 857 mode.color |= COLOR_JPG; 858 mode.color |= (vc->jpegqual << 8); 859 break; 860 case V4L2_PIX_FMT_YUV422P: 861 mode.color &= ~MASK_COLOR; 862 mode.color |= COLOR_YUVPL; 863 break; 864 case V4L2_PIX_FMT_YUYV: 865 case V4L2_PIX_FMT_UYVY: 866 default: 867 mode.color &= ~MASK_COLOR; 868 mode.color |= COLOR_YUVPK; 869 break; 870 } 871 if ((mode.color & MASK_COLOR) != (vc->mode.color & MASK_COLOR)) 872 mode.restart = 1; 873 else if (mode.scale != vc->mode.scale) 874 mode.restart = 1; 875 else if (mode.format != vc->mode.format) 876 mode.restart = 1; 877 vc->mode = mode; 878 (void) s2255_set_mode(vc, &mode); 879 return 0; 880 } 881 882 883 /* write to the configuration pipe, synchronously */ 884 static int s2255_write_config(struct usb_device *udev, unsigned char *pbuf, 885 int size) 886 { 887 int pipe; 888 int done; 889 long retval = -1; 890 if (udev) { 891 pipe = usb_sndbulkpipe(udev, S2255_CONFIG_EP); 892 retval = usb_bulk_msg(udev, pipe, pbuf, size, &done, 500); 893 } 894 return retval; 895 } 896 897 static u32 get_transfer_size(struct s2255_mode *mode) 898 { 899 int linesPerFrame = LINE_SZ_DEF; 900 int pixelsPerLine = NUM_LINES_DEF; 901 u32 outImageSize; 902 u32 usbInSize; 903 unsigned int mask_mult; 904 905 if (mode == NULL) 906 return 0; 907 908 if (mode->format == FORMAT_NTSC) { 909 switch (mode->scale) { 910 case SCALE_4CIFS: 911 case SCALE_4CIFSI: 912 linesPerFrame = NUM_LINES_4CIFS_NTSC * 2; 913 pixelsPerLine = LINE_SZ_4CIFS_NTSC; 914 break; 915 case SCALE_2CIFS: 916 linesPerFrame = NUM_LINES_2CIFS_NTSC; 917 pixelsPerLine = LINE_SZ_2CIFS_NTSC; 918 break; 919 case SCALE_1CIFS: 920 linesPerFrame = NUM_LINES_1CIFS_NTSC; 921 pixelsPerLine = LINE_SZ_1CIFS_NTSC; 922 break; 923 default: 924 break; 925 } 926 } else if (mode->format == FORMAT_PAL) { 927 switch (mode->scale) { 928 case SCALE_4CIFS: 929 case SCALE_4CIFSI: 930 linesPerFrame = NUM_LINES_4CIFS_PAL * 2; 931 pixelsPerLine = LINE_SZ_4CIFS_PAL; 932 break; 933 case SCALE_2CIFS: 934 linesPerFrame = NUM_LINES_2CIFS_PAL; 935 pixelsPerLine = LINE_SZ_2CIFS_PAL; 936 break; 937 case SCALE_1CIFS: 938 linesPerFrame = NUM_LINES_1CIFS_PAL; 939 pixelsPerLine = LINE_SZ_1CIFS_PAL; 940 break; 941 default: 942 break; 943 } 944 } 945 outImageSize = linesPerFrame * pixelsPerLine; 946 if ((mode->color & MASK_COLOR) != COLOR_Y8) { 947 /* 2 bytes/pixel if not monochrome */ 948 outImageSize *= 2; 949 } 950 951 /* total bytes to send including prefix and 4K padding; 952 must be a multiple of USB_READ_SIZE */ 953 usbInSize = outImageSize + PREFIX_SIZE; /* always send prefix */ 954 mask_mult = 0xffffffffUL - DEF_USB_BLOCK + 1; 955 /* if size not a multiple of USB_READ_SIZE */ 956 if (usbInSize & ~mask_mult) 957 usbInSize = (usbInSize & mask_mult) + (DEF_USB_BLOCK); 958 return usbInSize; 959 } 960 961 static void s2255_print_cfg(struct s2255_dev *sdev, struct s2255_mode *mode) 962 { 963 struct device *dev = &sdev->udev->dev; 964 dev_info(dev, "------------------------------------------------\n"); 965 dev_info(dev, "format: %d\nscale %d\n", mode->format, mode->scale); 966 dev_info(dev, "fdec: %d\ncolor %d\n", mode->fdec, mode->color); 967 dev_info(dev, "bright: 0x%x\n", mode->bright); 968 dev_info(dev, "------------------------------------------------\n"); 969 } 970 971 /* 972 * set mode is the function which controls the DSP. 973 * the restart parameter in struct s2255_mode should be set whenever 974 * the image size could change via color format, video system or image 975 * size. 976 * When the restart parameter is set, we sleep for ONE frame to allow the 977 * DSP time to get the new frame 978 */ 979 static int s2255_set_mode(struct s2255_vc *vc, 980 struct s2255_mode *mode) 981 { 982 int res; 983 unsigned long chn_rev; 984 struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev); 985 int i; 986 __le32 *buffer = dev->cmdbuf; 987 988 mutex_lock(&dev->cmdlock); 989 chn_rev = G_chnmap[vc->idx]; 990 dprintk(dev, 3, "%s channel: %d\n", __func__, vc->idx); 991 /* if JPEG, set the quality */ 992 if ((mode->color & MASK_COLOR) == COLOR_JPG) { 993 mode->color &= ~MASK_COLOR; 994 mode->color |= COLOR_JPG; 995 mode->color &= ~MASK_JPG_QUALITY; 996 mode->color |= (vc->jpegqual << 8); 997 } 998 /* save the mode */ 999 vc->mode = *mode; 1000 vc->req_image_size = get_transfer_size(mode); 1001 dprintk(dev, 1, "%s: reqsize %ld\n", __func__, vc->req_image_size); 1002 /* set the mode */ 1003 buffer[0] = IN_DATA_TOKEN; 1004 buffer[1] = (__le32) cpu_to_le32(chn_rev); 1005 buffer[2] = CMD_SET_MODE; 1006 for (i = 0; i < sizeof(struct s2255_mode) / sizeof(u32); i++) 1007 buffer[3 + i] = cpu_to_le32(((u32 *)&vc->mode)[i]); 1008 vc->setmode_ready = 0; 1009 res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); 1010 if (debug) 1011 s2255_print_cfg(dev, mode); 1012 /* wait at least 3 frames before continuing */ 1013 if (mode->restart) { 1014 wait_event_timeout(vc->wait_setmode, 1015 (vc->setmode_ready != 0), 1016 msecs_to_jiffies(S2255_SETMODE_TIMEOUT)); 1017 if (vc->setmode_ready != 1) { 1018 dprintk(dev, 0, "s2255: no set mode response\n"); 1019 res = -EFAULT; 1020 } 1021 } 1022 /* clear the restart flag */ 1023 vc->mode.restart = 0; 1024 dprintk(dev, 1, "%s chn %d, result: %d\n", __func__, vc->idx, res); 1025 mutex_unlock(&dev->cmdlock); 1026 return res; 1027 } 1028 1029 static int s2255_cmd_status(struct s2255_vc *vc, u32 *pstatus) 1030 { 1031 int res; 1032 u32 chn_rev; 1033 struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev); 1034 __le32 *buffer = dev->cmdbuf; 1035 1036 mutex_lock(&dev->cmdlock); 1037 chn_rev = G_chnmap[vc->idx]; 1038 dprintk(dev, 4, "%s chan %d\n", __func__, vc->idx); 1039 /* form the get vid status command */ 1040 buffer[0] = IN_DATA_TOKEN; 1041 buffer[1] = (__le32) cpu_to_le32(chn_rev); 1042 buffer[2] = CMD_STATUS; 1043 *pstatus = 0; 1044 vc->vidstatus_ready = 0; 1045 res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); 1046 wait_event_timeout(vc->wait_vidstatus, 1047 (vc->vidstatus_ready != 0), 1048 msecs_to_jiffies(S2255_VIDSTATUS_TIMEOUT)); 1049 if (vc->vidstatus_ready != 1) { 1050 dprintk(dev, 0, "s2255: no vidstatus response\n"); 1051 res = -EFAULT; 1052 } 1053 *pstatus = vc->vidstatus; 1054 dprintk(dev, 4, "%s, vid status %d\n", __func__, *pstatus); 1055 mutex_unlock(&dev->cmdlock); 1056 return res; 1057 } 1058 1059 static int start_streaming(struct vb2_queue *vq, unsigned int count) 1060 { 1061 struct s2255_vc *vc = vb2_get_drv_priv(vq); 1062 int j; 1063 1064 vc->last_frame = -1; 1065 vc->bad_payload = 0; 1066 vc->cur_frame = 0; 1067 vc->frame_count = 0; 1068 for (j = 0; j < SYS_FRAMES; j++) { 1069 vc->buffer.frame[j].ulState = S2255_READ_IDLE; 1070 vc->buffer.frame[j].cur_size = 0; 1071 } 1072 return s2255_start_acquire(vc); 1073 } 1074 1075 /* abort streaming and wait for last buffer */ 1076 static void stop_streaming(struct vb2_queue *vq) 1077 { 1078 struct s2255_vc *vc = vb2_get_drv_priv(vq); 1079 struct s2255_buffer *buf, *node; 1080 unsigned long flags; 1081 (void) s2255_stop_acquire(vc); 1082 spin_lock_irqsave(&vc->qlock, flags); 1083 list_for_each_entry_safe(buf, node, &vc->buf_list, list) { 1084 list_del(&buf->list); 1085 vb2_buffer_done(&buf->vb.vb2_buf, VB2_BUF_STATE_ERROR); 1086 dprintk(vc->dev, 2, "[%p/%d] done\n", 1087 buf, buf->vb.vb2_buf.index); 1088 } 1089 spin_unlock_irqrestore(&vc->qlock, flags); 1090 } 1091 1092 static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id i) 1093 { 1094 struct s2255_vc *vc = video_drvdata(file); 1095 struct s2255_mode mode; 1096 struct vb2_queue *q = &vc->vb_vidq; 1097 1098 /* 1099 * Changing the standard implies a format change, which is not allowed 1100 * while buffers for use with streaming have already been allocated. 1101 */ 1102 if (vb2_is_busy(q)) 1103 return -EBUSY; 1104 1105 mode = vc->mode; 1106 if (i & V4L2_STD_525_60) { 1107 dprintk(vc->dev, 4, "%s 60 Hz\n", __func__); 1108 /* if changing format, reset frame decimation/intervals */ 1109 if (mode.format != FORMAT_NTSC) { 1110 mode.restart = 1; 1111 mode.format = FORMAT_NTSC; 1112 mode.fdec = FDEC_1; 1113 vc->width = LINE_SZ_4CIFS_NTSC; 1114 vc->height = NUM_LINES_4CIFS_NTSC * 2; 1115 } 1116 } else if (i & V4L2_STD_625_50) { 1117 dprintk(vc->dev, 4, "%s 50 Hz\n", __func__); 1118 if (mode.format != FORMAT_PAL) { 1119 mode.restart = 1; 1120 mode.format = FORMAT_PAL; 1121 mode.fdec = FDEC_1; 1122 vc->width = LINE_SZ_4CIFS_PAL; 1123 vc->height = NUM_LINES_4CIFS_PAL * 2; 1124 } 1125 } else 1126 return -EINVAL; 1127 vc->std = i; 1128 if (mode.restart) 1129 s2255_set_mode(vc, &mode); 1130 return 0; 1131 } 1132 1133 static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *i) 1134 { 1135 struct s2255_vc *vc = video_drvdata(file); 1136 1137 *i = vc->std; 1138 return 0; 1139 } 1140 1141 /* Sensoray 2255 is a multiple channel capture device. 1142 It does not have a "crossbar" of inputs. 1143 We use one V4L device per channel. The user must 1144 be aware that certain combinations are not allowed. 1145 For instance, you cannot do full FPS on more than 2 channels(2 videodevs) 1146 at once in color(you can do full fps on 4 channels with greyscale. 1147 */ 1148 static int vidioc_enum_input(struct file *file, void *priv, 1149 struct v4l2_input *inp) 1150 { 1151 struct s2255_vc *vc = video_drvdata(file); 1152 struct s2255_dev *dev = vc->dev; 1153 u32 status = 0; 1154 1155 if (inp->index != 0) 1156 return -EINVAL; 1157 inp->type = V4L2_INPUT_TYPE_CAMERA; 1158 inp->std = S2255_NORMS; 1159 inp->status = 0; 1160 if (dev->dsp_fw_ver >= S2255_MIN_DSP_STATUS) { 1161 int rc; 1162 rc = s2255_cmd_status(vc, &status); 1163 dprintk(dev, 4, "s2255_cmd_status rc: %d status %x\n", 1164 rc, status); 1165 if (rc == 0) 1166 inp->status = (status & 0x01) ? 0 1167 : V4L2_IN_ST_NO_SIGNAL; 1168 } 1169 switch (dev->pid) { 1170 case 0x2255: 1171 default: 1172 strscpy(inp->name, "Composite", sizeof(inp->name)); 1173 break; 1174 case 0x2257: 1175 strscpy(inp->name, (vc->idx < 2) ? "Composite" : "S-Video", 1176 sizeof(inp->name)); 1177 break; 1178 } 1179 return 0; 1180 } 1181 1182 static int vidioc_g_input(struct file *file, void *priv, unsigned int *i) 1183 { 1184 *i = 0; 1185 return 0; 1186 } 1187 static int vidioc_s_input(struct file *file, void *priv, unsigned int i) 1188 { 1189 if (i > 0) 1190 return -EINVAL; 1191 return 0; 1192 } 1193 1194 static int s2255_s_ctrl(struct v4l2_ctrl *ctrl) 1195 { 1196 struct s2255_vc *vc = 1197 container_of(ctrl->handler, struct s2255_vc, hdl); 1198 struct s2255_mode mode; 1199 mode = vc->mode; 1200 /* update the mode to the corresponding value */ 1201 switch (ctrl->id) { 1202 case V4L2_CID_BRIGHTNESS: 1203 mode.bright = ctrl->val; 1204 break; 1205 case V4L2_CID_CONTRAST: 1206 mode.contrast = ctrl->val; 1207 break; 1208 case V4L2_CID_HUE: 1209 mode.hue = ctrl->val; 1210 break; 1211 case V4L2_CID_SATURATION: 1212 mode.saturation = ctrl->val; 1213 break; 1214 case V4L2_CID_S2255_COLORFILTER: 1215 mode.color &= ~MASK_INPUT_TYPE; 1216 mode.color |= !ctrl->val << 16; 1217 break; 1218 case V4L2_CID_JPEG_COMPRESSION_QUALITY: 1219 vc->jpegqual = ctrl->val; 1220 return 0; 1221 default: 1222 return -EINVAL; 1223 } 1224 mode.restart = 0; 1225 /* set mode here. Note: stream does not need restarted. 1226 some V4L programs restart stream unnecessarily 1227 after a s_crtl. 1228 */ 1229 s2255_set_mode(vc, &mode); 1230 return 0; 1231 } 1232 1233 static int vidioc_g_jpegcomp(struct file *file, void *priv, 1234 struct v4l2_jpegcompression *jc) 1235 { 1236 struct s2255_vc *vc = video_drvdata(file); 1237 1238 memset(jc, 0, sizeof(*jc)); 1239 jc->quality = vc->jpegqual; 1240 dprintk(vc->dev, 2, "%s: quality %d\n", __func__, jc->quality); 1241 return 0; 1242 } 1243 1244 static int vidioc_s_jpegcomp(struct file *file, void *priv, 1245 const struct v4l2_jpegcompression *jc) 1246 { 1247 struct s2255_vc *vc = video_drvdata(file); 1248 1249 if (jc->quality < 0 || jc->quality > 100) 1250 return -EINVAL; 1251 v4l2_ctrl_s_ctrl(vc->jpegqual_ctrl, jc->quality); 1252 dprintk(vc->dev, 2, "%s: quality %d\n", __func__, jc->quality); 1253 return 0; 1254 } 1255 1256 static int vidioc_g_parm(struct file *file, void *priv, 1257 struct v4l2_streamparm *sp) 1258 { 1259 __u32 def_num, def_dem; 1260 struct s2255_vc *vc = video_drvdata(file); 1261 1262 if (sp->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 1263 return -EINVAL; 1264 sp->parm.capture.capability = V4L2_CAP_TIMEPERFRAME; 1265 sp->parm.capture.capturemode = vc->cap_parm.capturemode; 1266 sp->parm.capture.readbuffers = S2255_MIN_BUFS; 1267 def_num = (vc->mode.format == FORMAT_NTSC) ? 1001 : 1000; 1268 def_dem = (vc->mode.format == FORMAT_NTSC) ? 30000 : 25000; 1269 sp->parm.capture.timeperframe.denominator = def_dem; 1270 switch (vc->mode.fdec) { 1271 default: 1272 case FDEC_1: 1273 sp->parm.capture.timeperframe.numerator = def_num; 1274 break; 1275 case FDEC_2: 1276 sp->parm.capture.timeperframe.numerator = def_num * 2; 1277 break; 1278 case FDEC_3: 1279 sp->parm.capture.timeperframe.numerator = def_num * 3; 1280 break; 1281 case FDEC_5: 1282 sp->parm.capture.timeperframe.numerator = def_num * 5; 1283 break; 1284 } 1285 dprintk(vc->dev, 4, "%s capture mode, %d timeperframe %d/%d\n", 1286 __func__, 1287 sp->parm.capture.capturemode, 1288 sp->parm.capture.timeperframe.numerator, 1289 sp->parm.capture.timeperframe.denominator); 1290 return 0; 1291 } 1292 1293 static int vidioc_s_parm(struct file *file, void *priv, 1294 struct v4l2_streamparm *sp) 1295 { 1296 struct s2255_vc *vc = video_drvdata(file); 1297 struct s2255_mode mode; 1298 int fdec = FDEC_1; 1299 __u32 def_num, def_dem; 1300 if (sp->type != V4L2_BUF_TYPE_VIDEO_CAPTURE) 1301 return -EINVAL; 1302 mode = vc->mode; 1303 /* high quality capture mode requires a stream restart */ 1304 if ((vc->cap_parm.capturemode != sp->parm.capture.capturemode) 1305 && vb2_is_streaming(&vc->vb_vidq)) 1306 return -EBUSY; 1307 def_num = (mode.format == FORMAT_NTSC) ? 1001 : 1000; 1308 def_dem = (mode.format == FORMAT_NTSC) ? 30000 : 25000; 1309 if (def_dem != sp->parm.capture.timeperframe.denominator) 1310 sp->parm.capture.timeperframe.numerator = def_num; 1311 else if (sp->parm.capture.timeperframe.numerator <= def_num) 1312 sp->parm.capture.timeperframe.numerator = def_num; 1313 else if (sp->parm.capture.timeperframe.numerator <= (def_num * 2)) { 1314 sp->parm.capture.timeperframe.numerator = def_num * 2; 1315 fdec = FDEC_2; 1316 } else if (sp->parm.capture.timeperframe.numerator <= (def_num * 3)) { 1317 sp->parm.capture.timeperframe.numerator = def_num * 3; 1318 fdec = FDEC_3; 1319 } else { 1320 sp->parm.capture.timeperframe.numerator = def_num * 5; 1321 fdec = FDEC_5; 1322 } 1323 mode.fdec = fdec; 1324 sp->parm.capture.timeperframe.denominator = def_dem; 1325 sp->parm.capture.readbuffers = S2255_MIN_BUFS; 1326 s2255_set_mode(vc, &mode); 1327 dprintk(vc->dev, 4, "%s capture mode, %d timeperframe %d/%d, fdec %d\n", 1328 __func__, 1329 sp->parm.capture.capturemode, 1330 sp->parm.capture.timeperframe.numerator, 1331 sp->parm.capture.timeperframe.denominator, fdec); 1332 return 0; 1333 } 1334 1335 #define NUM_SIZE_ENUMS 3 1336 static const struct v4l2_frmsize_discrete ntsc_sizes[] = { 1337 { 640, 480 }, 1338 { 640, 240 }, 1339 { 320, 240 }, 1340 }; 1341 static const struct v4l2_frmsize_discrete pal_sizes[] = { 1342 { 704, 576 }, 1343 { 704, 288 }, 1344 { 352, 288 }, 1345 }; 1346 1347 static int vidioc_enum_framesizes(struct file *file, void *priv, 1348 struct v4l2_frmsizeenum *fe) 1349 { 1350 struct s2255_vc *vc = video_drvdata(file); 1351 int is_ntsc = vc->std & V4L2_STD_525_60; 1352 const struct s2255_fmt *fmt; 1353 1354 if (fe->index >= NUM_SIZE_ENUMS) 1355 return -EINVAL; 1356 1357 fmt = format_by_fourcc(fe->pixel_format); 1358 if (fmt == NULL) 1359 return -EINVAL; 1360 fe->type = V4L2_FRMSIZE_TYPE_DISCRETE; 1361 fe->discrete = is_ntsc ? ntsc_sizes[fe->index] : pal_sizes[fe->index]; 1362 return 0; 1363 } 1364 1365 static int vidioc_enum_frameintervals(struct file *file, void *priv, 1366 struct v4l2_frmivalenum *fe) 1367 { 1368 struct s2255_vc *vc = video_drvdata(file); 1369 const struct s2255_fmt *fmt; 1370 const struct v4l2_frmsize_discrete *sizes; 1371 int is_ntsc = vc->std & V4L2_STD_525_60; 1372 #define NUM_FRAME_ENUMS 4 1373 int frm_dec[NUM_FRAME_ENUMS] = {1, 2, 3, 5}; 1374 int i; 1375 1376 if (fe->index >= NUM_FRAME_ENUMS) 1377 return -EINVAL; 1378 1379 fmt = format_by_fourcc(fe->pixel_format); 1380 if (fmt == NULL) 1381 return -EINVAL; 1382 1383 sizes = is_ntsc ? ntsc_sizes : pal_sizes; 1384 for (i = 0; i < NUM_SIZE_ENUMS; i++, sizes++) 1385 if (fe->width == sizes->width && 1386 fe->height == sizes->height) 1387 break; 1388 if (i == NUM_SIZE_ENUMS) 1389 return -EINVAL; 1390 1391 fe->type = V4L2_FRMIVAL_TYPE_DISCRETE; 1392 fe->discrete.denominator = is_ntsc ? 30000 : 25000; 1393 fe->discrete.numerator = (is_ntsc ? 1001 : 1000) * frm_dec[fe->index]; 1394 dprintk(vc->dev, 4, "%s discrete %d/%d\n", __func__, 1395 fe->discrete.numerator, 1396 fe->discrete.denominator); 1397 return 0; 1398 } 1399 1400 static int s2255_open(struct file *file) 1401 { 1402 struct s2255_vc *vc = video_drvdata(file); 1403 struct s2255_dev *dev = vc->dev; 1404 int state; 1405 int rc = 0; 1406 1407 rc = v4l2_fh_open(file); 1408 if (rc != 0) 1409 return rc; 1410 1411 dprintk(dev, 1, "s2255: %s\n", __func__); 1412 state = atomic_read(&dev->fw_data->fw_state); 1413 switch (state) { 1414 case S2255_FW_DISCONNECTING: 1415 return -ENODEV; 1416 case S2255_FW_FAILED: 1417 s2255_dev_err(&dev->udev->dev, 1418 "firmware load failed. retrying.\n"); 1419 s2255_fwload_start(dev); 1420 wait_event_timeout(dev->fw_data->wait_fw, 1421 ((atomic_read(&dev->fw_data->fw_state) 1422 == S2255_FW_SUCCESS) || 1423 (atomic_read(&dev->fw_data->fw_state) 1424 == S2255_FW_DISCONNECTING)), 1425 msecs_to_jiffies(S2255_LOAD_TIMEOUT)); 1426 /* state may have changed, re-read */ 1427 state = atomic_read(&dev->fw_data->fw_state); 1428 break; 1429 case S2255_FW_NOTLOADED: 1430 case S2255_FW_LOADED_DSPWAIT: 1431 /* give S2255_LOAD_TIMEOUT time for firmware to load in case 1432 driver loaded and then device immediately opened */ 1433 pr_info("%s waiting for firmware load\n", __func__); 1434 wait_event_timeout(dev->fw_data->wait_fw, 1435 ((atomic_read(&dev->fw_data->fw_state) 1436 == S2255_FW_SUCCESS) || 1437 (atomic_read(&dev->fw_data->fw_state) 1438 == S2255_FW_DISCONNECTING)), 1439 msecs_to_jiffies(S2255_LOAD_TIMEOUT)); 1440 /* state may have changed, re-read */ 1441 state = atomic_read(&dev->fw_data->fw_state); 1442 break; 1443 case S2255_FW_SUCCESS: 1444 default: 1445 break; 1446 } 1447 /* state may have changed in above switch statement */ 1448 switch (state) { 1449 case S2255_FW_SUCCESS: 1450 break; 1451 case S2255_FW_FAILED: 1452 pr_info("2255 firmware load failed.\n"); 1453 return -ENODEV; 1454 case S2255_FW_DISCONNECTING: 1455 pr_info("%s: disconnecting\n", __func__); 1456 return -ENODEV; 1457 case S2255_FW_LOADED_DSPWAIT: 1458 case S2255_FW_NOTLOADED: 1459 pr_info("%s: firmware not loaded, please retry\n", 1460 __func__); 1461 /* 1462 * Timeout on firmware load means device unusable. 1463 * Set firmware failure state. 1464 * On next s2255_open the firmware will be reloaded. 1465 */ 1466 atomic_set(&dev->fw_data->fw_state, 1467 S2255_FW_FAILED); 1468 return -EAGAIN; 1469 default: 1470 pr_info("%s: unknown state\n", __func__); 1471 return -EFAULT; 1472 } 1473 if (!vc->configured) { 1474 /* configure channel to default state */ 1475 vc->fmt = &formats[0]; 1476 s2255_set_mode(vc, &vc->mode); 1477 vc->configured = 1; 1478 } 1479 return 0; 1480 } 1481 1482 static void s2255_destroy(struct s2255_dev *dev) 1483 { 1484 dprintk(dev, 1, "%s", __func__); 1485 /* board shutdown stops the read pipe if it is running */ 1486 s2255_board_shutdown(dev); 1487 /* make sure firmware still not trying to load */ 1488 timer_shutdown_sync(&dev->timer); /* only started in .probe and .open */ 1489 if (dev->fw_data->fw_urb) { 1490 usb_kill_urb(dev->fw_data->fw_urb); 1491 usb_free_urb(dev->fw_data->fw_urb); 1492 dev->fw_data->fw_urb = NULL; 1493 } 1494 release_firmware(dev->fw_data->fw); 1495 kfree(dev->fw_data->pfw_data); 1496 kfree(dev->fw_data); 1497 /* reset the DSP so firmware can be reloaded next time */ 1498 s2255_reset_dsppower(dev); 1499 mutex_destroy(&dev->lock); 1500 usb_put_dev(dev->udev); 1501 v4l2_device_unregister(&dev->v4l2_dev); 1502 kfree(dev->cmdbuf); 1503 kfree(dev); 1504 } 1505 1506 static const struct v4l2_file_operations s2255_fops_v4l = { 1507 .owner = THIS_MODULE, 1508 .open = s2255_open, 1509 .release = vb2_fop_release, 1510 .poll = vb2_fop_poll, 1511 .unlocked_ioctl = video_ioctl2, /* V4L2 ioctl handler */ 1512 .mmap = vb2_fop_mmap, 1513 .read = vb2_fop_read, 1514 }; 1515 1516 static const struct v4l2_ioctl_ops s2255_ioctl_ops = { 1517 .vidioc_querycap = vidioc_querycap, 1518 .vidioc_enum_fmt_vid_cap = vidioc_enum_fmt_vid_cap, 1519 .vidioc_g_fmt_vid_cap = vidioc_g_fmt_vid_cap, 1520 .vidioc_try_fmt_vid_cap = vidioc_try_fmt_vid_cap, 1521 .vidioc_s_fmt_vid_cap = vidioc_s_fmt_vid_cap, 1522 .vidioc_reqbufs = vb2_ioctl_reqbufs, 1523 .vidioc_querybuf = vb2_ioctl_querybuf, 1524 .vidioc_qbuf = vb2_ioctl_qbuf, 1525 .vidioc_dqbuf = vb2_ioctl_dqbuf, 1526 .vidioc_s_std = vidioc_s_std, 1527 .vidioc_g_std = vidioc_g_std, 1528 .vidioc_enum_input = vidioc_enum_input, 1529 .vidioc_g_input = vidioc_g_input, 1530 .vidioc_s_input = vidioc_s_input, 1531 .vidioc_streamon = vb2_ioctl_streamon, 1532 .vidioc_streamoff = vb2_ioctl_streamoff, 1533 .vidioc_s_jpegcomp = vidioc_s_jpegcomp, 1534 .vidioc_g_jpegcomp = vidioc_g_jpegcomp, 1535 .vidioc_s_parm = vidioc_s_parm, 1536 .vidioc_g_parm = vidioc_g_parm, 1537 .vidioc_enum_framesizes = vidioc_enum_framesizes, 1538 .vidioc_enum_frameintervals = vidioc_enum_frameintervals, 1539 .vidioc_log_status = v4l2_ctrl_log_status, 1540 .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, 1541 .vidioc_unsubscribe_event = v4l2_event_unsubscribe, 1542 }; 1543 1544 static void s2255_video_device_release(struct video_device *vdev) 1545 { 1546 struct s2255_dev *dev = to_s2255_dev(vdev->v4l2_dev); 1547 struct s2255_vc *vc = 1548 container_of(vdev, struct s2255_vc, vdev); 1549 1550 dprintk(dev, 4, "%s, chnls: %d\n", __func__, 1551 refcount_read(&dev->num_channels)); 1552 1553 v4l2_ctrl_handler_free(&vc->hdl); 1554 1555 if (refcount_dec_and_test(&dev->num_channels)) 1556 s2255_destroy(dev); 1557 return; 1558 } 1559 1560 static const struct video_device template = { 1561 .name = "s2255v", 1562 .fops = &s2255_fops_v4l, 1563 .ioctl_ops = &s2255_ioctl_ops, 1564 .release = s2255_video_device_release, 1565 .tvnorms = S2255_NORMS, 1566 }; 1567 1568 static const struct v4l2_ctrl_ops s2255_ctrl_ops = { 1569 .s_ctrl = s2255_s_ctrl, 1570 }; 1571 1572 static const struct v4l2_ctrl_config color_filter_ctrl = { 1573 .ops = &s2255_ctrl_ops, 1574 .name = "Color Filter", 1575 .id = V4L2_CID_S2255_COLORFILTER, 1576 .type = V4L2_CTRL_TYPE_BOOLEAN, 1577 .max = 1, 1578 .step = 1, 1579 .def = 1, 1580 }; 1581 1582 static int s2255_probe_v4l(struct s2255_dev *dev) 1583 { 1584 int ret; 1585 int i; 1586 int cur_nr = video_nr; 1587 struct s2255_vc *vc; 1588 struct vb2_queue *q; 1589 1590 ret = v4l2_device_register(&dev->interface->dev, &dev->v4l2_dev); 1591 if (ret) 1592 return ret; 1593 /* initialize all video 4 linux */ 1594 /* register 4 video devices */ 1595 for (i = 0; i < MAX_CHANNELS; i++) { 1596 vc = &dev->vc[i]; 1597 INIT_LIST_HEAD(&vc->buf_list); 1598 1599 v4l2_ctrl_handler_init(&vc->hdl, 6); 1600 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops, 1601 V4L2_CID_BRIGHTNESS, -127, 127, 1, DEF_BRIGHT); 1602 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops, 1603 V4L2_CID_CONTRAST, 0, 255, 1, DEF_CONTRAST); 1604 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops, 1605 V4L2_CID_SATURATION, 0, 255, 1, DEF_SATURATION); 1606 v4l2_ctrl_new_std(&vc->hdl, &s2255_ctrl_ops, 1607 V4L2_CID_HUE, 0, 255, 1, DEF_HUE); 1608 vc->jpegqual_ctrl = v4l2_ctrl_new_std(&vc->hdl, 1609 &s2255_ctrl_ops, 1610 V4L2_CID_JPEG_COMPRESSION_QUALITY, 1611 0, 100, 1, S2255_DEF_JPEG_QUAL); 1612 if (dev->dsp_fw_ver >= S2255_MIN_DSP_COLORFILTER && 1613 (dev->pid != 0x2257 || vc->idx <= 1)) 1614 v4l2_ctrl_new_custom(&vc->hdl, &color_filter_ctrl, 1615 NULL); 1616 if (vc->hdl.error) { 1617 ret = vc->hdl.error; 1618 v4l2_ctrl_handler_free(&vc->hdl); 1619 dev_err(&dev->udev->dev, "couldn't register control\n"); 1620 break; 1621 } 1622 q = &vc->vb_vidq; 1623 q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE; 1624 q->io_modes = VB2_MMAP | VB2_READ | VB2_USERPTR; 1625 q->drv_priv = vc; 1626 q->lock = &vc->vb_lock; 1627 q->buf_struct_size = sizeof(struct s2255_buffer); 1628 q->mem_ops = &vb2_vmalloc_memops; 1629 q->ops = &s2255_video_qops; 1630 q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC; 1631 ret = vb2_queue_init(q); 1632 if (ret != 0) { 1633 dev_err(&dev->udev->dev, 1634 "%s vb2_queue_init 0x%x\n", __func__, ret); 1635 break; 1636 } 1637 /* register video devices */ 1638 vc->vdev = template; 1639 vc->vdev.queue = q; 1640 vc->vdev.ctrl_handler = &vc->hdl; 1641 vc->vdev.lock = &dev->lock; 1642 vc->vdev.v4l2_dev = &dev->v4l2_dev; 1643 vc->vdev.device_caps = V4L2_CAP_VIDEO_CAPTURE | 1644 V4L2_CAP_STREAMING | V4L2_CAP_READWRITE; 1645 video_set_drvdata(&vc->vdev, vc); 1646 if (video_nr == -1) 1647 ret = video_register_device(&vc->vdev, 1648 VFL_TYPE_VIDEO, 1649 video_nr); 1650 else 1651 ret = video_register_device(&vc->vdev, 1652 VFL_TYPE_VIDEO, 1653 cur_nr + i); 1654 1655 if (ret) { 1656 dev_err(&dev->udev->dev, 1657 "failed to register video device!\n"); 1658 break; 1659 } 1660 refcount_inc(&dev->num_channels); 1661 v4l2_info(&dev->v4l2_dev, "V4L2 device registered as %s\n", 1662 video_device_node_name(&vc->vdev)); 1663 1664 } 1665 pr_info("Sensoray 2255 V4L driver Revision: %s\n", 1666 S2255_VERSION); 1667 /* if no channels registered, return error and probe will fail*/ 1668 if (refcount_read(&dev->num_channels) == 0) { 1669 v4l2_device_unregister(&dev->v4l2_dev); 1670 return ret; 1671 } 1672 if (refcount_read(&dev->num_channels) != MAX_CHANNELS) 1673 pr_warn("s2255: Not all channels available.\n"); 1674 return 0; 1675 } 1676 1677 /* this function moves the usb stream read pipe data 1678 * into the system buffers. 1679 * returns 0 on success, EAGAIN if more data to process( call this 1680 * function again). 1681 * 1682 * Received frame structure: 1683 * bytes 0-3: marker : 0x2255DA4AL (S2255_MARKER_FRAME) 1684 * bytes 4-7: channel: 0-3 1685 * bytes 8-11: payload size: size of the frame 1686 * bytes 12-payloadsize+12: frame data 1687 */ 1688 static int save_frame(struct s2255_dev *dev, struct s2255_pipeinfo *pipe_info) 1689 { 1690 char *pdest; 1691 u32 offset = 0; 1692 int bframe = 0; 1693 char *psrc; 1694 unsigned long copy_size; 1695 unsigned long size; 1696 s32 idx = -1; 1697 struct s2255_framei *frm; 1698 unsigned char *pdata; 1699 struct s2255_vc *vc; 1700 dprintk(dev, 100, "buffer to user\n"); 1701 vc = &dev->vc[dev->cc]; 1702 idx = vc->cur_frame; 1703 frm = &vc->buffer.frame[idx]; 1704 if (frm->ulState == S2255_READ_IDLE) { 1705 int jj; 1706 unsigned int cc; 1707 __le32 *pdword; /*data from dsp is little endian */ 1708 int payload; 1709 /* search for marker codes */ 1710 pdata = (unsigned char *)pipe_info->transfer_buffer; 1711 pdword = (__le32 *)pdata; 1712 for (jj = 0; jj < (pipe_info->cur_transfer_size - 12); jj++) { 1713 switch (*pdword) { 1714 case S2255_MARKER_FRAME: 1715 dprintk(dev, 4, "marker @ offset: %d [%x %x]\n", 1716 jj, pdata[0], pdata[1]); 1717 offset = jj + PREFIX_SIZE; 1718 bframe = 1; 1719 cc = le32_to_cpu(pdword[1]); 1720 if (cc >= MAX_CHANNELS) { 1721 dprintk(dev, 0, 1722 "bad channel\n"); 1723 return -EINVAL; 1724 } 1725 /* reverse it */ 1726 dev->cc = G_chnmap[cc]; 1727 vc = &dev->vc[dev->cc]; 1728 payload = le32_to_cpu(pdword[3]); 1729 if (payload > vc->req_image_size) { 1730 vc->bad_payload++; 1731 /* discard the bad frame */ 1732 return -EINVAL; 1733 } 1734 vc->pkt_size = payload; 1735 vc->jpg_size = le32_to_cpu(pdword[4]); 1736 break; 1737 case S2255_MARKER_RESPONSE: 1738 1739 pdata += DEF_USB_BLOCK; 1740 jj += DEF_USB_BLOCK; 1741 if (le32_to_cpu(pdword[1]) >= MAX_CHANNELS) 1742 break; 1743 cc = G_chnmap[le32_to_cpu(pdword[1])]; 1744 if (cc >= MAX_CHANNELS) 1745 break; 1746 vc = &dev->vc[cc]; 1747 switch (pdword[2]) { 1748 case S2255_RESPONSE_SETMODE: 1749 /* check if channel valid */ 1750 /* set mode ready */ 1751 vc->setmode_ready = 1; 1752 wake_up(&vc->wait_setmode); 1753 dprintk(dev, 5, "setmode rdy %d\n", cc); 1754 break; 1755 case S2255_RESPONSE_FW: 1756 dev->chn_ready |= (1 << cc); 1757 if ((dev->chn_ready & 0x0f) != 0x0f) 1758 break; 1759 /* all channels ready */ 1760 pr_info("s2255: fw loaded\n"); 1761 atomic_set(&dev->fw_data->fw_state, 1762 S2255_FW_SUCCESS); 1763 wake_up(&dev->fw_data->wait_fw); 1764 break; 1765 case S2255_RESPONSE_STATUS: 1766 vc->vidstatus = le32_to_cpu(pdword[3]); 1767 vc->vidstatus_ready = 1; 1768 wake_up(&vc->wait_vidstatus); 1769 dprintk(dev, 5, "vstat %x chan %d\n", 1770 le32_to_cpu(pdword[3]), cc); 1771 break; 1772 default: 1773 pr_info("s2255 unknown resp\n"); 1774 } 1775 pdata++; 1776 break; 1777 default: 1778 pdata++; 1779 break; 1780 } 1781 if (bframe) 1782 break; 1783 } /* for */ 1784 if (!bframe) 1785 return -EINVAL; 1786 } 1787 vc = &dev->vc[dev->cc]; 1788 idx = vc->cur_frame; 1789 frm = &vc->buffer.frame[idx]; 1790 /* search done. now find out if should be acquiring on this channel */ 1791 if (!vb2_is_streaming(&vc->vb_vidq)) { 1792 /* we found a frame, but this channel is turned off */ 1793 frm->ulState = S2255_READ_IDLE; 1794 return -EINVAL; 1795 } 1796 1797 if (frm->ulState == S2255_READ_IDLE) { 1798 frm->ulState = S2255_READ_FRAME; 1799 frm->cur_size = 0; 1800 } 1801 1802 /* skip the marker 512 bytes (and offset if out of sync) */ 1803 psrc = (u8 *)pipe_info->transfer_buffer + offset; 1804 1805 1806 if (frm->lpvbits == NULL) { 1807 dprintk(dev, 1, "s2255 frame buffer == NULL.%p %p %d %d", 1808 frm, dev, dev->cc, idx); 1809 return -ENOMEM; 1810 } 1811 1812 pdest = frm->lpvbits + frm->cur_size; 1813 1814 copy_size = (pipe_info->cur_transfer_size - offset); 1815 1816 size = vc->pkt_size - PREFIX_SIZE; 1817 1818 /* sanity check on pdest */ 1819 if ((copy_size + frm->cur_size) < vc->req_image_size) 1820 memcpy(pdest, psrc, copy_size); 1821 1822 frm->cur_size += copy_size; 1823 dprintk(dev, 4, "cur_size: %lu, size: %lu\n", frm->cur_size, size); 1824 1825 if (frm->cur_size >= size) { 1826 dprintk(dev, 2, "******[%d]Buffer[%d]full*******\n", 1827 dev->cc, idx); 1828 vc->last_frame = vc->cur_frame; 1829 vc->cur_frame++; 1830 /* end of system frame ring buffer, start at zero */ 1831 if ((vc->cur_frame == SYS_FRAMES) || 1832 (vc->cur_frame == vc->buffer.dwFrames)) 1833 vc->cur_frame = 0; 1834 /* frame ready */ 1835 if (vb2_is_streaming(&vc->vb_vidq)) 1836 s2255_got_frame(vc, vc->jpg_size); 1837 vc->frame_count++; 1838 frm->ulState = S2255_READ_IDLE; 1839 frm->cur_size = 0; 1840 1841 } 1842 /* done successfully */ 1843 return 0; 1844 } 1845 1846 static void s2255_read_video_callback(struct s2255_dev *dev, 1847 struct s2255_pipeinfo *pipe_info) 1848 { 1849 int res; 1850 dprintk(dev, 50, "callback read video\n"); 1851 1852 if (dev->cc >= MAX_CHANNELS) { 1853 dev->cc = 0; 1854 dev_err(&dev->udev->dev, "invalid channel\n"); 1855 return; 1856 } 1857 /* otherwise copy to the system buffers */ 1858 res = save_frame(dev, pipe_info); 1859 if (res != 0) 1860 dprintk(dev, 4, "s2255: read callback failed\n"); 1861 1862 dprintk(dev, 50, "callback read video done\n"); 1863 return; 1864 } 1865 1866 static long s2255_vendor_req(struct s2255_dev *dev, unsigned char Request, 1867 u16 Index, u16 Value, void *TransferBuffer, 1868 s32 TransferBufferLength, int bOut) 1869 { 1870 int r; 1871 unsigned char *buf; 1872 1873 buf = kmalloc(TransferBufferLength, GFP_KERNEL); 1874 if (!buf) 1875 return -ENOMEM; 1876 1877 if (!bOut) { 1878 r = usb_control_msg(dev->udev, usb_rcvctrlpipe(dev->udev, 0), 1879 Request, 1880 USB_TYPE_VENDOR | USB_RECIP_DEVICE | 1881 USB_DIR_IN, 1882 Value, Index, buf, 1883 TransferBufferLength, USB_CTRL_SET_TIMEOUT); 1884 1885 if (r >= 0) 1886 memcpy(TransferBuffer, buf, TransferBufferLength); 1887 } else { 1888 memcpy(buf, TransferBuffer, TransferBufferLength); 1889 r = usb_control_msg(dev->udev, usb_sndctrlpipe(dev->udev, 0), 1890 Request, USB_TYPE_VENDOR | USB_RECIP_DEVICE, 1891 Value, Index, buf, 1892 TransferBufferLength, USB_CTRL_SET_TIMEOUT); 1893 } 1894 kfree(buf); 1895 return r; 1896 } 1897 1898 /* 1899 * retrieve FX2 firmware version. future use. 1900 * @param dev pointer to device extension 1901 * @return -1 for fail, else returns firmware version as an int(16 bits) 1902 */ 1903 static int s2255_get_fx2fw(struct s2255_dev *dev) 1904 { 1905 int fw; 1906 int ret; 1907 u8 transBuffer[2] = {}; 1908 1909 ret = s2255_vendor_req(dev, S2255_VR_FW, 0, 0, transBuffer, 1910 sizeof(transBuffer), S2255_VR_IN); 1911 if (ret < 0) 1912 dprintk(dev, 2, "get fw error: %x\n", ret); 1913 fw = transBuffer[0] + (transBuffer[1] << 8); 1914 dprintk(dev, 2, "Get FW %x %x\n", transBuffer[0], transBuffer[1]); 1915 return fw; 1916 } 1917 1918 /* 1919 * Create the system ring buffer to copy frames into from the 1920 * usb read pipe. 1921 */ 1922 static int s2255_create_sys_buffers(struct s2255_vc *vc) 1923 { 1924 unsigned long i; 1925 unsigned long reqsize; 1926 vc->buffer.dwFrames = SYS_FRAMES; 1927 /* always allocate maximum size(PAL) for system buffers */ 1928 reqsize = SYS_FRAMES_MAXSIZE; 1929 1930 if (reqsize > SYS_FRAMES_MAXSIZE) 1931 reqsize = SYS_FRAMES_MAXSIZE; 1932 1933 for (i = 0; i < SYS_FRAMES; i++) { 1934 /* allocate the frames */ 1935 vc->buffer.frame[i].lpvbits = vmalloc(reqsize); 1936 vc->buffer.frame[i].size = reqsize; 1937 if (vc->buffer.frame[i].lpvbits == NULL) { 1938 pr_info("out of memory. using less frames\n"); 1939 vc->buffer.dwFrames = i; 1940 break; 1941 } 1942 } 1943 1944 /* make sure internal states are set */ 1945 for (i = 0; i < SYS_FRAMES; i++) { 1946 vc->buffer.frame[i].ulState = 0; 1947 vc->buffer.frame[i].cur_size = 0; 1948 } 1949 1950 vc->cur_frame = 0; 1951 vc->last_frame = -1; 1952 return 0; 1953 } 1954 1955 static int s2255_release_sys_buffers(struct s2255_vc *vc) 1956 { 1957 unsigned long i; 1958 for (i = 0; i < SYS_FRAMES; i++) { 1959 vfree(vc->buffer.frame[i].lpvbits); 1960 vc->buffer.frame[i].lpvbits = NULL; 1961 } 1962 return 0; 1963 } 1964 1965 static int s2255_board_init(struct s2255_dev *dev) 1966 { 1967 struct s2255_mode mode_def = DEF_MODEI_NTSC_CONT; 1968 int fw_ver; 1969 int j; 1970 struct s2255_pipeinfo *pipe = &dev->pipe; 1971 dprintk(dev, 4, "board init: %p", dev); 1972 memset(pipe, 0, sizeof(*pipe)); 1973 pipe->dev = dev; 1974 pipe->cur_transfer_size = S2255_USB_XFER_SIZE; 1975 pipe->max_transfer_size = S2255_USB_XFER_SIZE; 1976 1977 pipe->transfer_buffer = kzalloc(pipe->max_transfer_size, 1978 GFP_KERNEL); 1979 if (pipe->transfer_buffer == NULL) { 1980 dprintk(dev, 1, "out of memory!\n"); 1981 return -ENOMEM; 1982 } 1983 /* query the firmware */ 1984 fw_ver = s2255_get_fx2fw(dev); 1985 1986 pr_info("s2255: usb firmware version %d.%d\n", 1987 (fw_ver >> 8) & 0xff, 1988 fw_ver & 0xff); 1989 1990 if (fw_ver < S2255_CUR_USB_FWVER) 1991 pr_info("s2255: newer USB firmware available\n"); 1992 1993 for (j = 0; j < MAX_CHANNELS; j++) { 1994 struct s2255_vc *vc = &dev->vc[j]; 1995 vc->mode = mode_def; 1996 if (dev->pid == 0x2257 && j > 1) 1997 vc->mode.color |= (1 << 16); 1998 vc->jpegqual = S2255_DEF_JPEG_QUAL; 1999 vc->width = LINE_SZ_4CIFS_NTSC; 2000 vc->height = NUM_LINES_4CIFS_NTSC * 2; 2001 vc->std = V4L2_STD_NTSC_M; 2002 vc->fmt = &formats[0]; 2003 vc->mode.restart = 1; 2004 vc->req_image_size = get_transfer_size(&mode_def); 2005 vc->frame_count = 0; 2006 /* create the system buffers */ 2007 s2255_create_sys_buffers(vc); 2008 } 2009 /* start read pipe */ 2010 s2255_start_readpipe(dev); 2011 dprintk(dev, 1, "%s: success\n", __func__); 2012 return 0; 2013 } 2014 2015 static int s2255_board_shutdown(struct s2255_dev *dev) 2016 { 2017 u32 i; 2018 dprintk(dev, 1, "%s: dev: %p", __func__, dev); 2019 2020 for (i = 0; i < MAX_CHANNELS; i++) { 2021 if (vb2_is_streaming(&dev->vc[i].vb_vidq)) 2022 s2255_stop_acquire(&dev->vc[i]); 2023 } 2024 s2255_stop_readpipe(dev); 2025 for (i = 0; i < MAX_CHANNELS; i++) 2026 s2255_release_sys_buffers(&dev->vc[i]); 2027 /* release transfer buffer */ 2028 kfree(dev->pipe.transfer_buffer); 2029 return 0; 2030 } 2031 2032 static void read_pipe_completion(struct urb *purb) 2033 { 2034 struct s2255_pipeinfo *pipe_info; 2035 struct s2255_dev *dev; 2036 int status; 2037 int pipe; 2038 pipe_info = purb->context; 2039 if (pipe_info == NULL) { 2040 dev_err(&purb->dev->dev, "no context!\n"); 2041 return; 2042 } 2043 dev = pipe_info->dev; 2044 if (dev == NULL) { 2045 dev_err(&purb->dev->dev, "no context!\n"); 2046 return; 2047 } 2048 status = purb->status; 2049 /* if shutting down, do not resubmit, exit immediately */ 2050 if (status == -ESHUTDOWN) { 2051 dprintk(dev, 2, "%s: err shutdown\n", __func__); 2052 pipe_info->err_count++; 2053 return; 2054 } 2055 2056 if (pipe_info->state == 0) { 2057 dprintk(dev, 2, "%s: exiting USB pipe", __func__); 2058 return; 2059 } 2060 2061 if (status == 0) 2062 s2255_read_video_callback(dev, pipe_info); 2063 else { 2064 pipe_info->err_count++; 2065 dprintk(dev, 1, "%s: failed URB %d\n", __func__, status); 2066 } 2067 2068 pipe = usb_rcvbulkpipe(dev->udev, dev->read_endpoint); 2069 /* reuse urb */ 2070 usb_fill_bulk_urb(pipe_info->stream_urb, dev->udev, 2071 pipe, 2072 pipe_info->transfer_buffer, 2073 pipe_info->cur_transfer_size, 2074 read_pipe_completion, pipe_info); 2075 2076 if (pipe_info->state != 0) { 2077 if (usb_submit_urb(pipe_info->stream_urb, GFP_ATOMIC)) 2078 dev_err(&dev->udev->dev, "error submitting urb\n"); 2079 } else { 2080 dprintk(dev, 2, "%s :complete state 0\n", __func__); 2081 } 2082 return; 2083 } 2084 2085 static int s2255_start_readpipe(struct s2255_dev *dev) 2086 { 2087 int pipe; 2088 int retval; 2089 struct s2255_pipeinfo *pipe_info = &dev->pipe; 2090 pipe = usb_rcvbulkpipe(dev->udev, dev->read_endpoint); 2091 dprintk(dev, 2, "%s: IN %d\n", __func__, dev->read_endpoint); 2092 pipe_info->state = 1; 2093 pipe_info->err_count = 0; 2094 pipe_info->stream_urb = usb_alloc_urb(0, GFP_KERNEL); 2095 if (!pipe_info->stream_urb) 2096 return -ENOMEM; 2097 /* transfer buffer allocated in board_init */ 2098 usb_fill_bulk_urb(pipe_info->stream_urb, dev->udev, 2099 pipe, 2100 pipe_info->transfer_buffer, 2101 pipe_info->cur_transfer_size, 2102 read_pipe_completion, pipe_info); 2103 retval = usb_submit_urb(pipe_info->stream_urb, GFP_KERNEL); 2104 if (retval) { 2105 pr_err("s2255: start read pipe failed\n"); 2106 return retval; 2107 } 2108 return 0; 2109 } 2110 2111 /* starts acquisition process */ 2112 static int s2255_start_acquire(struct s2255_vc *vc) 2113 { 2114 int res; 2115 unsigned long chn_rev; 2116 int j; 2117 struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev); 2118 __le32 *buffer = dev->cmdbuf; 2119 2120 mutex_lock(&dev->cmdlock); 2121 chn_rev = G_chnmap[vc->idx]; 2122 vc->last_frame = -1; 2123 vc->bad_payload = 0; 2124 vc->cur_frame = 0; 2125 for (j = 0; j < SYS_FRAMES; j++) { 2126 vc->buffer.frame[j].ulState = 0; 2127 vc->buffer.frame[j].cur_size = 0; 2128 } 2129 2130 /* send the start command */ 2131 buffer[0] = IN_DATA_TOKEN; 2132 buffer[1] = (__le32) cpu_to_le32(chn_rev); 2133 buffer[2] = CMD_START; 2134 res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); 2135 if (res != 0) 2136 dev_err(&dev->udev->dev, "CMD_START error\n"); 2137 2138 dprintk(dev, 2, "start acquire exit[%d] %d\n", vc->idx, res); 2139 mutex_unlock(&dev->cmdlock); 2140 return res; 2141 } 2142 2143 static int s2255_stop_acquire(struct s2255_vc *vc) 2144 { 2145 int res; 2146 unsigned long chn_rev; 2147 struct s2255_dev *dev = to_s2255_dev(vc->vdev.v4l2_dev); 2148 __le32 *buffer = dev->cmdbuf; 2149 2150 mutex_lock(&dev->cmdlock); 2151 chn_rev = G_chnmap[vc->idx]; 2152 /* send the stop command */ 2153 buffer[0] = IN_DATA_TOKEN; 2154 buffer[1] = (__le32) cpu_to_le32(chn_rev); 2155 buffer[2] = CMD_STOP; 2156 2157 res = s2255_write_config(dev->udev, (unsigned char *)buffer, 512); 2158 if (res != 0) 2159 dev_err(&dev->udev->dev, "CMD_STOP error\n"); 2160 2161 dprintk(dev, 4, "%s: chn %d, res %d\n", __func__, vc->idx, res); 2162 mutex_unlock(&dev->cmdlock); 2163 return res; 2164 } 2165 2166 static void s2255_stop_readpipe(struct s2255_dev *dev) 2167 { 2168 struct s2255_pipeinfo *pipe = &dev->pipe; 2169 2170 pipe->state = 0; 2171 if (pipe->stream_urb) { 2172 /* cancel urb */ 2173 usb_kill_urb(pipe->stream_urb); 2174 usb_free_urb(pipe->stream_urb); 2175 pipe->stream_urb = NULL; 2176 } 2177 dprintk(dev, 4, "%s", __func__); 2178 return; 2179 } 2180 2181 static void s2255_fwload_start(struct s2255_dev *dev) 2182 { 2183 s2255_reset_dsppower(dev); 2184 dev->fw_data->fw_size = dev->fw_data->fw->size; 2185 atomic_set(&dev->fw_data->fw_state, S2255_FW_NOTLOADED); 2186 memcpy(dev->fw_data->pfw_data, 2187 dev->fw_data->fw->data, CHUNK_SIZE); 2188 dev->fw_data->fw_loaded = CHUNK_SIZE; 2189 usb_fill_bulk_urb(dev->fw_data->fw_urb, dev->udev, 2190 usb_sndbulkpipe(dev->udev, 2), 2191 dev->fw_data->pfw_data, 2192 CHUNK_SIZE, s2255_fwchunk_complete, 2193 dev->fw_data); 2194 mod_timer(&dev->timer, jiffies + HZ); 2195 } 2196 2197 /* standard usb probe function */ 2198 static int s2255_probe(struct usb_interface *interface, 2199 const struct usb_device_id *id) 2200 { 2201 struct s2255_dev *dev = NULL; 2202 struct usb_host_interface *iface_desc; 2203 struct usb_endpoint_descriptor *endpoint; 2204 int i; 2205 int retval = -ENOMEM; 2206 __le32 *pdata; 2207 int fw_size; 2208 2209 /* allocate memory for our device state and initialize it to zero */ 2210 dev = kzalloc(sizeof(struct s2255_dev), GFP_KERNEL); 2211 if (dev == NULL) { 2212 s2255_dev_err(&interface->dev, "out of memory\n"); 2213 return -ENOMEM; 2214 } 2215 2216 dev->cmdbuf = kzalloc(S2255_CMDBUF_SIZE, GFP_KERNEL); 2217 if (dev->cmdbuf == NULL) { 2218 s2255_dev_err(&interface->dev, "out of memory\n"); 2219 goto errorFWDATA1; 2220 } 2221 2222 refcount_set(&dev->num_channels, 0); 2223 dev->pid = id->idProduct; 2224 dev->fw_data = kzalloc(sizeof(struct s2255_fw), GFP_KERNEL); 2225 if (!dev->fw_data) 2226 goto errorFWDATA1; 2227 mutex_init(&dev->lock); 2228 mutex_init(&dev->cmdlock); 2229 /* grab usb_device and save it */ 2230 dev->udev = usb_get_dev(interface_to_usbdev(interface)); 2231 if (dev->udev == NULL) { 2232 dev_err(&interface->dev, "null usb device\n"); 2233 retval = -ENODEV; 2234 goto errorUDEV; 2235 } 2236 dev_dbg(&interface->dev, "dev: %p, udev %p interface %p\n", 2237 dev, dev->udev, interface); 2238 dev->interface = interface; 2239 /* set up the endpoint information */ 2240 iface_desc = interface->cur_altsetting; 2241 dev_dbg(&interface->dev, "num EP: %d\n", 2242 iface_desc->desc.bNumEndpoints); 2243 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) { 2244 endpoint = &iface_desc->endpoint[i].desc; 2245 if (!dev->read_endpoint && usb_endpoint_is_bulk_in(endpoint)) { 2246 /* we found the bulk in endpoint */ 2247 dev->read_endpoint = endpoint->bEndpointAddress; 2248 } 2249 } 2250 2251 if (!dev->read_endpoint) { 2252 dev_err(&interface->dev, "Could not find bulk-in endpoint\n"); 2253 goto errorEP; 2254 } 2255 timer_setup(&dev->timer, s2255_timer, 0); 2256 init_waitqueue_head(&dev->fw_data->wait_fw); 2257 for (i = 0; i < MAX_CHANNELS; i++) { 2258 struct s2255_vc *vc = &dev->vc[i]; 2259 vc->idx = i; 2260 vc->dev = dev; 2261 init_waitqueue_head(&vc->wait_setmode); 2262 init_waitqueue_head(&vc->wait_vidstatus); 2263 spin_lock_init(&vc->qlock); 2264 mutex_init(&vc->vb_lock); 2265 } 2266 2267 dev->fw_data->fw_urb = usb_alloc_urb(0, GFP_KERNEL); 2268 if (!dev->fw_data->fw_urb) 2269 goto errorFWURB; 2270 2271 dev->fw_data->pfw_data = kzalloc(CHUNK_SIZE, GFP_KERNEL); 2272 if (!dev->fw_data->pfw_data) { 2273 dev_err(&interface->dev, "out of memory!\n"); 2274 goto errorFWDATA2; 2275 } 2276 /* load the first chunk */ 2277 if (request_firmware(&dev->fw_data->fw, 2278 FIRMWARE_FILE_NAME, &dev->udev->dev)) { 2279 dev_err(&interface->dev, "sensoray 2255 failed to get firmware\n"); 2280 goto errorREQFW; 2281 } 2282 /* check the firmware is valid */ 2283 fw_size = dev->fw_data->fw->size; 2284 pdata = (__le32 *) &dev->fw_data->fw->data[fw_size - 8]; 2285 2286 if (*pdata != S2255_FW_MARKER) { 2287 dev_err(&interface->dev, "Firmware invalid.\n"); 2288 retval = -ENODEV; 2289 goto errorFWMARKER; 2290 } else { 2291 /* make sure firmware is the latest */ 2292 __le32 *pRel; 2293 pRel = (__le32 *) &dev->fw_data->fw->data[fw_size - 4]; 2294 pr_info("s2255 dsp fw version %x\n", le32_to_cpu(*pRel)); 2295 dev->dsp_fw_ver = le32_to_cpu(*pRel); 2296 if (dev->dsp_fw_ver < S2255_CUR_DSP_FWVER) 2297 pr_info("s2255: f2255usb.bin out of date.\n"); 2298 if (dev->pid == 0x2257 && 2299 dev->dsp_fw_ver < S2255_MIN_DSP_COLORFILTER) 2300 pr_warn("2257 needs firmware %d or above.\n", 2301 S2255_MIN_DSP_COLORFILTER); 2302 } 2303 usb_reset_device(dev->udev); 2304 /* load 2255 board specific */ 2305 retval = s2255_board_init(dev); 2306 if (retval) 2307 goto errorBOARDINIT; 2308 s2255_fwload_start(dev); 2309 /* loads v4l specific */ 2310 retval = s2255_probe_v4l(dev); 2311 if (retval) 2312 goto errorBOARDINIT; 2313 dev_info(&interface->dev, "Sensoray 2255 detected\n"); 2314 return 0; 2315 errorBOARDINIT: 2316 s2255_board_shutdown(dev); 2317 errorFWMARKER: 2318 release_firmware(dev->fw_data->fw); 2319 errorREQFW: 2320 kfree(dev->fw_data->pfw_data); 2321 errorFWDATA2: 2322 usb_free_urb(dev->fw_data->fw_urb); 2323 errorFWURB: 2324 timer_shutdown_sync(&dev->timer); 2325 errorEP: 2326 usb_put_dev(dev->udev); 2327 errorUDEV: 2328 kfree(dev->fw_data); 2329 mutex_destroy(&dev->lock); 2330 errorFWDATA1: 2331 kfree(dev->cmdbuf); 2332 kfree(dev); 2333 pr_warn("Sensoray 2255 driver load failed: 0x%x\n", retval); 2334 return retval; 2335 } 2336 2337 /* disconnect routine. when board is removed physically or with rmmod */ 2338 static void s2255_disconnect(struct usb_interface *interface) 2339 { 2340 struct s2255_dev *dev = to_s2255_dev(usb_get_intfdata(interface)); 2341 int i; 2342 int channels = refcount_read(&dev->num_channels); 2343 mutex_lock(&dev->lock); 2344 v4l2_device_disconnect(&dev->v4l2_dev); 2345 mutex_unlock(&dev->lock); 2346 /*see comments in the uvc_driver.c usb disconnect function */ 2347 refcount_inc(&dev->num_channels); 2348 /* unregister each video device. */ 2349 for (i = 0; i < channels; i++) 2350 video_unregister_device(&dev->vc[i].vdev); 2351 /* wake up any of our timers */ 2352 atomic_set(&dev->fw_data->fw_state, S2255_FW_DISCONNECTING); 2353 wake_up(&dev->fw_data->wait_fw); 2354 for (i = 0; i < MAX_CHANNELS; i++) { 2355 dev->vc[i].setmode_ready = 1; 2356 wake_up(&dev->vc[i].wait_setmode); 2357 dev->vc[i].vidstatus_ready = 1; 2358 wake_up(&dev->vc[i].wait_vidstatus); 2359 } 2360 if (refcount_dec_and_test(&dev->num_channels)) 2361 s2255_destroy(dev); 2362 dev_info(&interface->dev, "%s\n", __func__); 2363 } 2364 2365 static struct usb_driver s2255_driver = { 2366 .name = S2255_DRIVER_NAME, 2367 .probe = s2255_probe, 2368 .disconnect = s2255_disconnect, 2369 .id_table = s2255_table, 2370 }; 2371 2372 module_usb_driver(s2255_driver); 2373 2374 MODULE_DESCRIPTION("Sensoray 2255 Video for Linux driver"); 2375 MODULE_AUTHOR("Dean Anderson (Sensoray Company Inc.)"); 2376 MODULE_LICENSE("GPL"); 2377 MODULE_VERSION(S2255_VERSION); 2378 MODULE_FIRMWARE(FIRMWARE_FILE_NAME); 2379