Lines Matching refs:gspca_dev
25 struct gspca_dev gspca_dev; /* !! must be the first item */ member
46 static u8 reg_r(struct gspca_dev *gspca_dev, u16 index) in reg_r() argument
48 struct usb_device *dev = gspca_dev->dev; in reg_r()
51 if (gspca_dev->usb_err < 0) in reg_r()
58 gspca_dev->usb_buf, 1, in reg_r()
61 gspca_dbg(gspca_dev, D_USBI, "reg_r 0x%x=0x%02x\n", in reg_r()
62 index, gspca_dev->usb_buf[0]); in reg_r()
65 gspca_dev->usb_err = ret; in reg_r()
69 return gspca_dev->usb_buf[0]; in reg_r()
73 static void reg_w(struct gspca_dev *gspca_dev, u16 index, u8 val) in reg_w() argument
76 struct usb_device *dev = gspca_dev->dev; in reg_w()
78 if (gspca_dev->usb_err < 0) in reg_w()
88 gspca_dbg(gspca_dev, D_USBO, "reg_w 0x%x:=0x%02x\n", index, val); in reg_w()
91 gspca_dev->usb_err = ret; in reg_w()
95 static void reg_w_mask(struct gspca_dev *gspca_dev, u16 index, u8 val, u8 mask) in reg_w_mask() argument
97 val = (reg_r(gspca_dev, index) & ~mask) | (val & mask); in reg_w_mask()
98 reg_w(gspca_dev, index, val); in reg_w_mask()
102 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
105 gspca_dev->cam.cam_mode = stk1135_modes; in sd_config()
106 gspca_dev->cam.nmodes = ARRAY_SIZE(stk1135_modes); in sd_config()
110 static int stk1135_serial_wait_ready(struct gspca_dev *gspca_dev) in stk1135_serial_wait_ready() argument
116 val = reg_r(gspca_dev, STK1135_REG_SICTL + 1); in stk1135_serial_wait_ready()
127 static u8 sensor_read_8(struct gspca_dev *gspca_dev, u8 addr) in sensor_read_8() argument
129 reg_w(gspca_dev, STK1135_REG_SBUSR, addr); in sensor_read_8()
131 reg_w(gspca_dev, STK1135_REG_SICTL, 0x20); in sensor_read_8()
133 if (stk1135_serial_wait_ready(gspca_dev)) { in sensor_read_8()
138 return reg_r(gspca_dev, STK1135_REG_SBUSR + 1); in sensor_read_8()
141 static u16 sensor_read_16(struct gspca_dev *gspca_dev, u8 addr) in sensor_read_16() argument
143 return (sensor_read_8(gspca_dev, addr) << 8) | in sensor_read_16()
144 sensor_read_8(gspca_dev, 0xf1); in sensor_read_16()
147 static void sensor_write_8(struct gspca_dev *gspca_dev, u8 addr, u8 data) in sensor_write_8() argument
150 reg_w(gspca_dev, STK1135_REG_SBUSW, addr); in sensor_write_8()
151 reg_w(gspca_dev, STK1135_REG_SBUSW + 1, data); in sensor_write_8()
153 reg_w(gspca_dev, STK1135_REG_SICTL, 0x01); in sensor_write_8()
155 if (stk1135_serial_wait_ready(gspca_dev)) { in sensor_write_8()
161 static void sensor_write_16(struct gspca_dev *gspca_dev, u8 addr, u16 data) in sensor_write_16() argument
163 sensor_write_8(gspca_dev, addr, data >> 8); in sensor_write_16()
164 sensor_write_8(gspca_dev, 0xf1, data & 0xff); in sensor_write_16()
167 static void sensor_set_page(struct gspca_dev *gspca_dev, u8 page) in sensor_set_page() argument
169 struct sd *sd = (struct sd *) gspca_dev; in sensor_set_page()
172 sensor_write_16(gspca_dev, 0xf0, page); in sensor_set_page()
177 static u16 sensor_read(struct gspca_dev *gspca_dev, u16 reg) in sensor_read() argument
179 sensor_set_page(gspca_dev, reg >> 8); in sensor_read()
180 return sensor_read_16(gspca_dev, reg & 0xff); in sensor_read()
183 static void sensor_write(struct gspca_dev *gspca_dev, u16 reg, u16 val) in sensor_write() argument
185 sensor_set_page(gspca_dev, reg >> 8); in sensor_write()
186 sensor_write_16(gspca_dev, reg & 0xff, val); in sensor_write()
189 static void sensor_write_mask(struct gspca_dev *gspca_dev, in sensor_write_mask() argument
192 val = (sensor_read(gspca_dev, reg) & ~mask) | (val & mask); in sensor_write_mask()
193 sensor_write(gspca_dev, reg, val); in sensor_write_mask()
202 static void stk1135_configure_mt9m112(struct gspca_dev *gspca_dev) in stk1135_configure_mt9m112() argument
304 sensor_write(gspca_dev, cfg[i].reg, cfg[i].val); in stk1135_configure_mt9m112()
307 width = gspca_dev->pixfmt.width; in stk1135_configure_mt9m112()
308 height = gspca_dev->pixfmt.height; in stk1135_configure_mt9m112()
310 sensor_write(gspca_dev, 0x1a7, width); in stk1135_configure_mt9m112()
311 sensor_write(gspca_dev, 0x1aa, height); in stk1135_configure_mt9m112()
313 sensor_write(gspca_dev, 0x0c8, 0x0000); in stk1135_configure_mt9m112()
315 sensor_write(gspca_dev, 0x2c8, 0x0000); in stk1135_configure_mt9m112()
317 sensor_write(gspca_dev, 0x1a1, width); in stk1135_configure_mt9m112()
318 sensor_write(gspca_dev, 0x1a4, height); in stk1135_configure_mt9m112()
320 sensor_write(gspca_dev, 0x0c8, 0x0008); in stk1135_configure_mt9m112()
322 sensor_write(gspca_dev, 0x2c8, 0x040b); in stk1135_configure_mt9m112()
326 static void stk1135_configure_clock(struct gspca_dev *gspca_dev) in stk1135_configure_clock() argument
329 reg_w(gspca_dev, STK1135_REG_TMGEN, 0x12); in stk1135_configure_clock()
332 reg_w(gspca_dev, STK1135_REG_TCP1 + 0, 0x41); in stk1135_configure_clock()
333 reg_w(gspca_dev, STK1135_REG_TCP1 + 1, 0x00); in stk1135_configure_clock()
334 reg_w(gspca_dev, STK1135_REG_TCP1 + 2, 0x00); in stk1135_configure_clock()
335 reg_w(gspca_dev, STK1135_REG_TCP1 + 3, 0x00); in stk1135_configure_clock()
338 reg_w(gspca_dev, STK1135_REG_SENSO + 0, 0x10); in stk1135_configure_clock()
340 reg_w(gspca_dev, STK1135_REG_SENSO + 1, 0x00); in stk1135_configure_clock()
342 reg_w(gspca_dev, STK1135_REG_SENSO + 3, 0x07); in stk1135_configure_clock()
344 reg_w(gspca_dev, STK1135_REG_PLLFD, 0x06); in stk1135_configure_clock()
346 reg_w(gspca_dev, STK1135_REG_TMGEN, 0x80); in stk1135_configure_clock()
348 reg_w(gspca_dev, STK1135_REG_SENSO + 2, 0x04); in stk1135_configure_clock()
351 reg_w(gspca_dev, STK1135_REG_SICTL + 2, 0x1f); in stk1135_configure_clock()
357 static void stk1135_camera_disable(struct gspca_dev *gspca_dev) in stk1135_camera_disable() argument
360 reg_w(gspca_dev, STK1135_REG_CIEPO + 2, 0x00); in stk1135_camera_disable()
361 reg_w(gspca_dev, STK1135_REG_CIEPO + 3, 0x00); in stk1135_camera_disable()
363 reg_w_mask(gspca_dev, STK1135_REG_SCTRL, 0x00, 0x80); in stk1135_camera_disable()
366 sensor_write_mask(gspca_dev, 0x00d, 0x0004, 0x000c); in stk1135_camera_disable()
369 reg_w_mask(gspca_dev, STK1135_REG_SENSO + 2, 0x00, 0x01); in stk1135_camera_disable()
371 reg_w(gspca_dev, STK1135_REG_TMGEN, 0x00); in stk1135_camera_disable()
373 reg_w(gspca_dev, STK1135_REG_SENSO + 1, 0x20); in stk1135_camera_disable()
375 reg_w(gspca_dev, STK1135_REG_SENSO, 0x00); in stk1135_camera_disable()
378 reg_w(gspca_dev, STK1135_REG_GCTRL, 0x49); in stk1135_camera_disable()
382 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
386 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
389 reg_w(gspca_dev, STK1135_REG_GCTRL + 2, 0x78); in sd_init()
391 reg_w(gspca_dev, STK1135_REG_GCTRL, (1 << 5)); in sd_init()
393 reg_w(gspca_dev, STK1135_REG_GCTRL + 3, 0x80); in sd_init()
395 reg_w(gspca_dev, STK1135_REG_ICTRL + 1, 0x00); in sd_init()
396 reg_w(gspca_dev, STK1135_REG_ICTRL + 3, 0x03); in sd_init()
398 reg_w(gspca_dev, STK1135_REG_RMCTL + 1, 0x00); in sd_init()
399 reg_w(gspca_dev, STK1135_REG_RMCTL + 3, 0x02); in sd_init()
402 reg_w(gspca_dev, STK1135_REG_SICTL, 0x80); in sd_init()
403 reg_w(gspca_dev, STK1135_REG_SICTL, 0x00); in sd_init()
405 reg_w(gspca_dev, STK1135_REG_SICTL + 3, 0xba); in sd_init()
407 reg_w(gspca_dev, STK1135_REG_ASIC + 3, 0x00); in sd_init()
409 stk1135_configure_clock(gspca_dev); in sd_init()
413 sensor_id = sensor_read(gspca_dev, 0x000); in sd_init()
424 stk1135_camera_disable(gspca_dev); in sd_init()
426 return gspca_dev->usb_err; in sd_init()
430 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
432 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
436 reg_w(gspca_dev, STK1135_REG_GCTRL, (1 << 5)); in sd_start()
438 stk1135_configure_clock(gspca_dev); in sd_start()
441 reg_w(gspca_dev, STK1135_REG_CISPO + 0, 0x00); in sd_start()
442 reg_w(gspca_dev, STK1135_REG_CISPO + 1, 0x00); in sd_start()
443 reg_w(gspca_dev, STK1135_REG_CISPO + 2, 0x00); in sd_start()
444 reg_w(gspca_dev, STK1135_REG_CISPO + 3, 0x00); in sd_start()
447 width = gspca_dev->pixfmt.width; in sd_start()
448 height = gspca_dev->pixfmt.height; in sd_start()
449 reg_w(gspca_dev, STK1135_REG_CIEPO + 0, width & 0xff); in sd_start()
450 reg_w(gspca_dev, STK1135_REG_CIEPO + 1, width >> 8); in sd_start()
451 reg_w(gspca_dev, STK1135_REG_CIEPO + 2, height & 0xff); in sd_start()
452 reg_w(gspca_dev, STK1135_REG_CIEPO + 3, height >> 8); in sd_start()
455 reg_w(gspca_dev, STK1135_REG_SCTRL, 0x20); in sd_start()
457 stk1135_configure_mt9m112(gspca_dev); in sd_start()
460 reg_w_mask(gspca_dev, STK1135_REG_SCTRL, 0x80, 0x80); in sd_start()
462 if (gspca_dev->usb_err >= 0) in sd_start()
463 gspca_dbg(gspca_dev, D_STREAM, "camera started alt: 0x%02x\n", in sd_start()
464 gspca_dev->alt); in sd_start()
468 return gspca_dev->usb_err; in sd_start()
471 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
473 struct usb_device *dev = gspca_dev->dev; in sd_stopN()
475 usb_set_interface(dev, gspca_dev->iface, 0); in sd_stopN()
477 stk1135_camera_disable(gspca_dev); in sd_stopN()
479 gspca_dbg(gspca_dev, D_STREAM, "camera stopped\n"); in sd_stopN()
482 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
486 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
494 gspca_dbg(gspca_dev, D_PACK, "received short packet (less than 4 bytes)\n"); in sd_pkt_scan()
510 gspca_dbg(gspca_dev, D_PACK, "received out-of-sequence packet\n"); in sd_pkt_scan()
513 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
526 gspca_frame_add(gspca_dev, LAST_PACKET, data, 0); in sd_pkt_scan()
529 gspca_frame_add(gspca_dev, pkt_type, data + skip, len - skip); in sd_pkt_scan()
532 static void sethflip(struct gspca_dev *gspca_dev, s32 val) in sethflip() argument
534 struct sd *sd = (struct sd *) gspca_dev; in sethflip()
538 sensor_write_mask(gspca_dev, 0x020, val ? 0x0002 : 0x0000 , 0x0002); in sethflip()
541 static void setvflip(struct gspca_dev *gspca_dev, s32 val) in setvflip() argument
543 struct sd *sd = (struct sd *) gspca_dev; in setvflip()
547 sensor_write_mask(gspca_dev, 0x020, val ? 0x0001 : 0x0000 , 0x0001); in setvflip()
550 static void stk1135_dq_callback(struct gspca_dev *gspca_dev) in stk1135_dq_callback() argument
552 struct sd *sd = (struct sd *) gspca_dev; in stk1135_dq_callback()
556 sethflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->hflip)); in stk1135_dq_callback()
557 setvflip(gspca_dev, v4l2_ctrl_g_ctrl(sd->vflip)); in stk1135_dq_callback()
563 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
564 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
566 gspca_dev->usb_err = 0; in sd_s_ctrl()
568 if (!gspca_dev->streaming) in sd_s_ctrl()
573 sethflip(gspca_dev, ctrl->val); in sd_s_ctrl()
576 setvflip(gspca_dev, ctrl->val); in sd_s_ctrl()
580 return gspca_dev->usb_err; in sd_s_ctrl()
587 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
589 struct sd *sd = (struct sd *) gspca_dev; in sd_init_controls()
590 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
592 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
606 static void stk1135_try_fmt(struct gspca_dev *gspca_dev, struct v4l2_format *fmt) in stk1135_try_fmt() argument
618 static int stk1135_enum_framesizes(struct gspca_dev *gspca_dev, in stk1135_enum_framesizes() argument