Lines Matching refs:gspca_dev
38 struct gspca_dev gspca_dev; /* !! must be the first item */ member
59 static u8 reg_r(struct gspca_dev *gspca_dev, u16 index) in reg_r() argument
61 struct usb_device *dev = gspca_dev->dev; in reg_r()
64 if (gspca_dev->usb_err < 0) in reg_r()
71 gspca_dev->usb_buf, 1, in reg_r()
74 PDEBUG(D_USBI, "reg_r 0x%x=0x%02x", index, gspca_dev->usb_buf[0]); in reg_r()
77 gspca_dev->usb_err = ret; in reg_r()
81 return gspca_dev->usb_buf[0]; in reg_r()
85 static void reg_w(struct gspca_dev *gspca_dev, u16 index, u8 val) in reg_w() argument
88 struct usb_device *dev = gspca_dev->dev; in reg_w()
90 if (gspca_dev->usb_err < 0) in reg_w()
103 gspca_dev->usb_err = ret; in reg_w()
107 static void reg_w_mask(struct gspca_dev *gspca_dev, u16 index, u8 val, u8 mask) in reg_w_mask() argument
109 val = (reg_r(gspca_dev, index) & ~mask) | (val & mask); in reg_w_mask()
110 reg_w(gspca_dev, index, val); in reg_w_mask()
114 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
117 gspca_dev->cam.cam_mode = stk1135_modes; in sd_config()
118 gspca_dev->cam.nmodes = ARRAY_SIZE(stk1135_modes); in sd_config()
122 static int stk1135_serial_wait_ready(struct gspca_dev *gspca_dev) in stk1135_serial_wait_ready() argument
128 val = reg_r(gspca_dev, STK1135_REG_SICTL + 1); in stk1135_serial_wait_ready()
139 static u8 sensor_read_8(struct gspca_dev *gspca_dev, u8 addr) in sensor_read_8() argument
141 reg_w(gspca_dev, STK1135_REG_SBUSR, addr); in sensor_read_8()
143 reg_w(gspca_dev, STK1135_REG_SICTL, 0x20); in sensor_read_8()
145 if (stk1135_serial_wait_ready(gspca_dev)) { in sensor_read_8()
150 return reg_r(gspca_dev, STK1135_REG_SBUSR + 1); in sensor_read_8()
153 static u16 sensor_read_16(struct gspca_dev *gspca_dev, u8 addr) in sensor_read_16() argument
155 return (sensor_read_8(gspca_dev, addr) << 8) | in sensor_read_16()
156 sensor_read_8(gspca_dev, 0xf1); in sensor_read_16()
159 static void sensor_write_8(struct gspca_dev *gspca_dev, u8 addr, u8 data) in sensor_write_8() argument
162 reg_w(gspca_dev, STK1135_REG_SBUSW, addr); in sensor_write_8()
163 reg_w(gspca_dev, STK1135_REG_SBUSW + 1, data); in sensor_write_8()
165 reg_w(gspca_dev, STK1135_REG_SICTL, 0x01); in sensor_write_8()
167 if (stk1135_serial_wait_ready(gspca_dev)) { in sensor_write_8()
173 static void sensor_write_16(struct gspca_dev *gspca_dev, u8 addr, u16 data) in sensor_write_16() argument
175 sensor_write_8(gspca_dev, addr, data >> 8); in sensor_write_16()
176 sensor_write_8(gspca_dev, 0xf1, data & 0xff); in sensor_write_16()
179 static void sensor_set_page(struct gspca_dev *gspca_dev, u8 page) in sensor_set_page() argument
181 struct sd *sd = (struct sd *) gspca_dev; in sensor_set_page()
184 sensor_write_16(gspca_dev, 0xf0, page); in sensor_set_page()
189 static u16 sensor_read(struct gspca_dev *gspca_dev, u16 reg) in sensor_read() argument
191 sensor_set_page(gspca_dev, reg >> 8); in sensor_read()
192 return sensor_read_16(gspca_dev, reg & 0xff); in sensor_read()
195 static void sensor_write(struct gspca_dev *gspca_dev, u16 reg, u16 val) in sensor_write() argument
197 sensor_set_page(gspca_dev, reg >> 8); in sensor_write()
198 sensor_write_16(gspca_dev, reg & 0xff, val); in sensor_write()
201 static void sensor_write_mask(struct gspca_dev *gspca_dev, in sensor_write_mask() argument
204 val = (sensor_read(gspca_dev, reg) & ~mask) | (val & mask); in sensor_write_mask()
205 sensor_write(gspca_dev, reg, val); in sensor_write_mask()
214 static void stk1135_configure_mt9m112(struct gspca_dev *gspca_dev) in stk1135_configure_mt9m112() argument
316 sensor_write(gspca_dev, cfg[i].reg, cfg[i].val); in stk1135_configure_mt9m112()
319 width = gspca_dev->pixfmt.width; in stk1135_configure_mt9m112()
320 height = gspca_dev->pixfmt.height; in stk1135_configure_mt9m112()
322 sensor_write(gspca_dev, 0x1a7, width); in stk1135_configure_mt9m112()
323 sensor_write(gspca_dev, 0x1aa, height); in stk1135_configure_mt9m112()
325 sensor_write(gspca_dev, 0x0c8, 0x0000); in stk1135_configure_mt9m112()
327 sensor_write(gspca_dev, 0x2c8, 0x0000); in stk1135_configure_mt9m112()
329 sensor_write(gspca_dev, 0x1a1, width); in stk1135_configure_mt9m112()
330 sensor_write(gspca_dev, 0x1a4, height); in stk1135_configure_mt9m112()
332 sensor_write(gspca_dev, 0x0c8, 0x0008); in stk1135_configure_mt9m112()
334 sensor_write(gspca_dev, 0x2c8, 0x040b); in stk1135_configure_mt9m112()
338 static void stk1135_configure_clock(struct gspca_dev *gspca_dev) in stk1135_configure_clock() argument
341 reg_w(gspca_dev, STK1135_REG_TMGEN, 0x12); in stk1135_configure_clock()
344 reg_w(gspca_dev, STK1135_REG_TCP1 + 0, 0x41); in stk1135_configure_clock()
345 reg_w(gspca_dev, STK1135_REG_TCP1 + 1, 0x00); in stk1135_configure_clock()
346 reg_w(gspca_dev, STK1135_REG_TCP1 + 2, 0x00); in stk1135_configure_clock()
347 reg_w(gspca_dev, STK1135_REG_TCP1 + 3, 0x00); in stk1135_configure_clock()
350 reg_w(gspca_dev, STK1135_REG_SENSO + 0, 0x10); in stk1135_configure_clock()
352 reg_w(gspca_dev, STK1135_REG_SENSO + 1, 0x00); in stk1135_configure_clock()
354 reg_w(gspca_dev, STK1135_REG_SENSO + 3, 0x07); in stk1135_configure_clock()
356 reg_w(gspca_dev, STK1135_REG_PLLFD, 0x06); in stk1135_configure_clock()
358 reg_w(gspca_dev, STK1135_REG_TMGEN, 0x80); in stk1135_configure_clock()
360 reg_w(gspca_dev, STK1135_REG_SENSO + 2, 0x04); in stk1135_configure_clock()
363 reg_w(gspca_dev, STK1135_REG_SICTL + 2, 0x1f); in stk1135_configure_clock()
369 static void stk1135_camera_disable(struct gspca_dev *gspca_dev) in stk1135_camera_disable() argument
372 reg_w(gspca_dev, STK1135_REG_CIEPO + 2, 0x00); in stk1135_camera_disable()
373 reg_w(gspca_dev, STK1135_REG_CIEPO + 3, 0x00); in stk1135_camera_disable()
375 reg_w_mask(gspca_dev, STK1135_REG_SCTRL, 0x00, 0x80); in stk1135_camera_disable()
378 sensor_write_mask(gspca_dev, 0x00d, 0x0004, 0x000c); in stk1135_camera_disable()
381 reg_w_mask(gspca_dev, STK1135_REG_SENSO + 2, 0x00, 0x01); in stk1135_camera_disable()
383 reg_w(gspca_dev, STK1135_REG_TMGEN, 0x00); in stk1135_camera_disable()
385 reg_w(gspca_dev, STK1135_REG_SENSO + 1, 0x20); in stk1135_camera_disable()
387 reg_w(gspca_dev, STK1135_REG_SENSO, 0x00); in stk1135_camera_disable()
390 reg_w(gspca_dev, STK1135_REG_GCTRL, 0x49); in stk1135_camera_disable()
394 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
398 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
401 reg_w(gspca_dev, STK1135_REG_GCTRL + 2, 0x78); in sd_init()
403 reg_w(gspca_dev, STK1135_REG_GCTRL, (1 << 5)); in sd_init()
405 reg_w(gspca_dev, STK1135_REG_GCTRL + 3, 0x80); in sd_init()
407 reg_w(gspca_dev, STK1135_REG_ICTRL + 1, 0x00); in sd_init()
408 reg_w(gspca_dev, STK1135_REG_ICTRL + 3, 0x03); in sd_init()
410 reg_w(gspca_dev, STK1135_REG_RMCTL + 1, 0x00); in sd_init()
411 reg_w(gspca_dev, STK1135_REG_RMCTL + 3, 0x02); in sd_init()
414 reg_w(gspca_dev, STK1135_REG_SICTL, 0x80); in sd_init()
415 reg_w(gspca_dev, STK1135_REG_SICTL, 0x00); in sd_init()
417 reg_w(gspca_dev, STK1135_REG_SICTL + 3, 0xba); in sd_init()
419 reg_w(gspca_dev, STK1135_REG_ASIC + 3, 0x00); in sd_init()
421 stk1135_configure_clock(gspca_dev); in sd_init()
425 sensor_id = sensor_read(gspca_dev, 0x000); in sd_init()
436 stk1135_camera_disable(gspca_dev); in sd_init()
438 return gspca_dev->usb_err; in sd_init()
442 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
444 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
448 reg_w(gspca_dev, STK1135_REG_GCTRL, (1 << 5)); in sd_start()
450 stk1135_configure_clock(gspca_dev); in sd_start()
453 reg_w(gspca_dev, STK1135_REG_CISPO + 0, 0x00); in sd_start()
454 reg_w(gspca_dev, STK1135_REG_CISPO + 1, 0x00); in sd_start()
455 reg_w(gspca_dev, STK1135_REG_CISPO + 2, 0x00); in sd_start()
456 reg_w(gspca_dev, STK1135_REG_CISPO + 3, 0x00); in sd_start()
459 width = gspca_dev->pixfmt.width; in sd_start()
460 height = gspca_dev->pixfmt.height; in sd_start()
461 reg_w(gspca_dev, STK1135_REG_CIEPO + 0, width & 0xff); in sd_start()
462 reg_w(gspca_dev, STK1135_REG_CIEPO + 1, width >> 8); in sd_start()
463 reg_w(gspca_dev, STK1135_REG_CIEPO + 2, height & 0xff); in sd_start()
464 reg_w(gspca_dev, STK1135_REG_CIEPO + 3, height >> 8); in sd_start()
467 reg_w(gspca_dev, STK1135_REG_SCTRL, 0x20); in sd_start()
469 stk1135_configure_mt9m112(gspca_dev); in sd_start()
472 reg_w_mask(gspca_dev, STK1135_REG_SCTRL, 0x80, 0x80); in sd_start()
474 if (gspca_dev->usb_err >= 0) in sd_start()
476 gspca_dev->alt); in sd_start()
480 return gspca_dev->usb_err; in sd_start()
483 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
485 struct usb_device *dev = gspca_dev->dev; in sd_stopN()
487 usb_set_interface(dev, gspca_dev->iface, 0); in sd_stopN()
489 stk1135_camera_disable(gspca_dev); in sd_stopN()
494 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
498 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
525 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
538 gspca_frame_add(gspca_dev, LAST_PACKET, data, 0); in sd_pkt_scan()
541 gspca_frame_add(gspca_dev, pkt_type, data + skip, len - skip); in sd_pkt_scan()
544 static void sethflip(struct gspca_dev *gspca_dev, s32 val) in sethflip() argument
546 struct sd *sd = (struct sd *) gspca_dev; in sethflip()
550 sensor_write_mask(gspca_dev, 0x020, val ? 0x0002 : 0x0000 , 0x0002); in sethflip()
553 static void setvflip(struct gspca_dev *gspca_dev, s32 val) in setvflip() argument
555 struct sd *sd = (struct sd *) gspca_dev; in setvflip()
559 sensor_write_mask(gspca_dev, 0x020, val ? 0x0001 : 0x0000 , 0x0001); in setvflip()
562 static void stk1135_dq_callback(struct gspca_dev *gspca_dev) in stk1135_dq_callback() argument
564 struct sd *sd = (struct sd *) gspca_dev; in stk1135_dq_callback()
568 sethflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip)); in stk1135_dq_callback()
569 setvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->vflip)); in stk1135_dq_callback()
575 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
576 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
578 gspca_dev->usb_err = 0; in sd_s_ctrl()
580 if (!gspca_dev->streaming) in sd_s_ctrl()
585 sethflip(gspca_dev, ctrl->val); in sd_s_ctrl()
588 setvflip(gspca_dev, ctrl->val); in sd_s_ctrl()
592 return gspca_dev->usb_err; in sd_s_ctrl()
599 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
601 struct sd *sd = (struct sd *) gspca_dev; in sd_init_controls()
602 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
604 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
618 static void stk1135_try_fmt(struct gspca_dev *gspca_dev, struct v4l2_format *fmt) in stk1135_try_fmt() argument
630 static int stk1135_enum_framesizes(struct gspca_dev *gspca_dev, in stk1135_enum_framesizes() argument