Lines Matching refs:gspca_dev

48 	struct gspca_dev gspca_dev;	/* !! must be the first item */  member
1115 static void reg_w_i(struct gspca_dev *gspca_dev, u16 reg, u8 val) in reg_w_i() argument
1117 struct usb_device *udev = gspca_dev->dev; in reg_w_i()
1120 if (gspca_dev->usb_err < 0) in reg_w_i()
1122 gspca_dev->usb_buf[0] = val; in reg_w_i()
1127 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); in reg_w_i()
1130 gspca_dev->usb_err = ret; in reg_w_i()
1134 static void reg_w(struct gspca_dev *gspca_dev, u16 reg, u8 val) in reg_w() argument
1136 gspca_dbg(gspca_dev, D_USBO, "reg_w [%04x] = %02x\n", reg, val); in reg_w()
1137 reg_w_i(gspca_dev, reg, val); in reg_w()
1140 static u8 reg_r(struct gspca_dev *gspca_dev, u16 reg) in reg_r() argument
1142 struct usb_device *udev = gspca_dev->dev; in reg_r()
1145 if (gspca_dev->usb_err < 0) in reg_r()
1151 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); in reg_r()
1152 gspca_dbg(gspca_dev, D_USBI, "reg_r [%04x] -> %02x\n", in reg_r()
1153 reg, gspca_dev->usb_buf[0]); in reg_r()
1156 gspca_dev->usb_err = ret; in reg_r()
1158 return gspca_dev->usb_buf[0]; in reg_r()
1161 static int sccb_check_status(struct gspca_dev *gspca_dev) in sccb_check_status() argument
1168 data = reg_r(gspca_dev, OV534_REG_STATUS); in sccb_check_status()
1178 gspca_dbg(gspca_dev, D_USBI|D_USBO, in sccb_check_status()
1186 static void sccb_write(struct gspca_dev *gspca_dev, u8 reg, u8 val) in sccb_write() argument
1188 gspca_dbg(gspca_dev, D_USBO, "sccb_write [%02x] = %02x\n", reg, val); in sccb_write()
1189 reg_w_i(gspca_dev, OV534_REG_SUBADDR, reg); in sccb_write()
1190 reg_w_i(gspca_dev, OV534_REG_WRITE, val); in sccb_write()
1191 reg_w_i(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_3); in sccb_write()
1193 if (!sccb_check_status(gspca_dev)) in sccb_write()
1197 static u8 sccb_read(struct gspca_dev *gspca_dev, u16 reg) in sccb_read() argument
1199 reg_w(gspca_dev, OV534_REG_SUBADDR, reg); in sccb_read()
1200 reg_w(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_2); in sccb_read()
1201 if (!sccb_check_status(gspca_dev)) in sccb_read()
1204 reg_w(gspca_dev, OV534_REG_OPERATION, OV534_OP_READ_2); in sccb_read()
1205 if (!sccb_check_status(gspca_dev)) in sccb_read()
1208 return reg_r(gspca_dev, OV534_REG_READ); in sccb_read()
1212 static void reg_w_array(struct gspca_dev *gspca_dev, in reg_w_array() argument
1216 reg_w(gspca_dev, (*data)[0], (*data)[1]); in reg_w_array()
1222 static void sccb_w_array(struct gspca_dev *gspca_dev, in sccb_w_array() argument
1227 sccb_write(gspca_dev, (*data)[0], (*data)[1]); in sccb_w_array()
1229 sccb_read(gspca_dev, (*data)[1]); in sccb_w_array()
1230 sccb_write(gspca_dev, 0xff, 0x00); in sccb_w_array()
1238 static void set_led(struct gspca_dev *gspca_dev, int status) in set_led() argument
1242 gspca_dbg(gspca_dev, D_CONF, "led status: %d\n", status); in set_led()
1244 data = reg_r(gspca_dev, 0x21); in set_led()
1246 reg_w(gspca_dev, 0x21, data); in set_led()
1248 data = reg_r(gspca_dev, 0x23); in set_led()
1254 reg_w(gspca_dev, 0x23, data); in set_led()
1257 data = reg_r(gspca_dev, 0x21); in set_led()
1259 reg_w(gspca_dev, 0x21, data); in set_led()
1263 static void setbrightness(struct gspca_dev *gspca_dev, s32 brightness) in setbrightness() argument
1265 struct sd *sd = (struct sd *) gspca_dev; in setbrightness()
1273 sccb_write(gspca_dev, 0x24, val); in setbrightness()
1276 sccb_write(gspca_dev, 0x25, val); in setbrightness()
1283 sccb_write(gspca_dev, 0x26, val); in setbrightness()
1290 sccb_write(gspca_dev, 0x55, /* brtn - brightness adjustment */ in setbrightness()
1295 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
1297 sccb_write(gspca_dev, 0x56, /* cnst1 - contrast 1 ctrl coeff */ in setcontrast()
1301 static void setautogain(struct gspca_dev *gspca_dev, s32 autogain) in setautogain() argument
1306 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setautogain()
1307 sccb_write(gspca_dev, 0xff, 0x00); in setautogain()
1312 sccb_write(gspca_dev, 0x13, val); in setautogain()
1315 static void setexposure(struct gspca_dev *gspca_dev, s32 exposure) in setexposure() argument
1320 sccb_write(gspca_dev, 0x10, expo[exposure]); /* aec[9:2] */ in setexposure()
1322 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setexposure()
1323 sccb_write(gspca_dev, 0xff, 0x00); in setexposure()
1324 sccb_write(gspca_dev, 0x13, val); in setexposure()
1326 val = sccb_read(gspca_dev, 0xa1); /* aech */ in setexposure()
1327 sccb_write(gspca_dev, 0xff, 0x00); in setexposure()
1328 sccb_write(gspca_dev, 0xa1, val & 0xe0); /* aec[15:10] = 0 */ in setexposure()
1331 static void setsharpness(struct gspca_dev *gspca_dev, s32 val) in setsharpness() argument
1334 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setsharpness()
1335 sccb_write(gspca_dev, 0xff, 0x00); in setsharpness()
1336 sccb_write(gspca_dev, 0x42, val | 0x40); in setsharpness()
1342 sccb_write(gspca_dev, 0x3f, /* edge - edge enhance. factor */ in setsharpness()
1344 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setsharpness()
1345 sccb_write(gspca_dev, 0xff, 0x00); in setsharpness()
1346 sccb_write(gspca_dev, 0x42, val & 0xbf); in setsharpness()
1349 static void setsatur(struct gspca_dev *gspca_dev, s32 val) in setsatur() argument
1363 sccb_write(gspca_dev, 0x4f, val3); /* matrix coeff */ in setsatur()
1364 sccb_write(gspca_dev, 0x50, val3); in setsatur()
1365 sccb_write(gspca_dev, 0x51, 0x00); in setsatur()
1366 sccb_write(gspca_dev, 0x52, val1); in setsatur()
1367 sccb_write(gspca_dev, 0x53, val2); in setsatur()
1368 sccb_write(gspca_dev, 0x54, val3); in setsatur()
1369 sccb_write(gspca_dev, 0x58, 0x1a); /* mtxs - coeff signs */ in setsatur()
1371 val1 = sccb_read(gspca_dev, 0x41); /* com16 */ in setsatur()
1372 sccb_write(gspca_dev, 0xff, 0x00); in setsatur()
1373 sccb_write(gspca_dev, 0x41, val1); in setsatur()
1376 static void setlightfreq(struct gspca_dev *gspca_dev, s32 freq) in setlightfreq() argument
1380 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setlightfreq()
1381 sccb_write(gspca_dev, 0xff, 0x00); in setlightfreq()
1383 sccb_write(gspca_dev, 0x13, val & 0xdf); in setlightfreq()
1386 sccb_write(gspca_dev, 0x13, val | 0x20); in setlightfreq()
1388 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setlightfreq()
1389 sccb_write(gspca_dev, 0xff, 0x00); in setlightfreq()
1394 sccb_write(gspca_dev, 0x42, val); in setlightfreq()
1398 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
1405 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
1407 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
1411 reg_w(gspca_dev, 0xe7, 0x3a); in sd_init()
1412 reg_w(gspca_dev, 0xe0, 0x08); in sd_init()
1416 reg_w(gspca_dev, OV534_REG_ADDRESS, 0x60); in sd_init()
1419 sccb_write(gspca_dev, 0x12, 0x80); in sd_init()
1423 sccb_read(gspca_dev, 0x0a); in sd_init()
1424 sensor_id = sccb_read(gspca_dev, 0x0a) << 8; in sd_init()
1425 sccb_read(gspca_dev, 0x0b); in sd_init()
1426 sensor_id |= sccb_read(gspca_dev, 0x0b); in sd_init()
1427 gspca_dbg(gspca_dev, D_PROBE, "Sensor ID: %04x\n", sensor_id); in sd_init()
1433 gspca_dev->cam.cam_mode = ov965x_mode; in sd_init()
1434 gspca_dev->cam.nmodes = ARRAY_SIZE(ov965x_mode); in sd_init()
1436 reg_w_array(gspca_dev, bridge_init, in sd_init()
1438 sccb_w_array(gspca_dev, ov965x_init, in sd_init()
1440 reg_w_array(gspca_dev, bridge_init_2, in sd_init()
1442 sccb_w_array(gspca_dev, ov965x_init_2, in sd_init()
1444 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1445 reg_w(gspca_dev, 0xe0, 0x01); in sd_init()
1446 set_led(gspca_dev, 0); in sd_init()
1447 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1454 gspca_dev->cam.cam_mode = ov971x_mode; in sd_init()
1455 gspca_dev->cam.nmodes = ARRAY_SIZE(ov971x_mode); in sd_init()
1457 gspca_dev->cam.bulk = 1; in sd_init()
1458 gspca_dev->cam.bulk_size = 16384; in sd_init()
1459 gspca_dev->cam.bulk_nurbs = 2; in sd_init()
1461 sccb_w_array(gspca_dev, ov971x_init, in sd_init()
1466 reg_w(gspca_dev, 0x1c, 0x00); in sd_init()
1468 reg_w(gspca_dev, 0x1d, 0x00); in sd_init()
1474 p = video_device_node_name(&gspca_dev->vdev); in sd_init()
1477 reg_w(gspca_dev, 0x56, 0x1f); in sd_init()
1479 reg_w(gspca_dev, 0x56, 0x17); in sd_init()
1482 gspca_dev->cam.cam_mode = ov562x_mode; in sd_init()
1483 gspca_dev->cam.nmodes = ARRAY_SIZE(ov562x_mode); in sd_init()
1485 reg_w_array(gspca_dev, ov562x_init, in sd_init()
1487 sccb_w_array(gspca_dev, ov562x_init_2, in sd_init()
1489 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1492 gspca_dev->cam.cam_mode = ov361x_mode; in sd_init()
1493 gspca_dev->cam.nmodes = ARRAY_SIZE(ov361x_mode); in sd_init()
1494 reg_w(gspca_dev, 0xe7, 0x3a); in sd_init()
1495 reg_w(gspca_dev, 0xf1, 0x60); in sd_init()
1496 sccb_write(gspca_dev, 0x12, 0x80); in sd_init()
1502 return gspca_dev->usb_err; in sd_init()
1505 static int sd_start_ov361x(struct gspca_dev *gspca_dev) in sd_start_ov361x() argument
1507 sccb_write(gspca_dev, 0x12, 0x80); in sd_start_ov361x()
1509 switch (gspca_dev->curr_mode % (ov361x_last)) { in sd_start_ov361x()
1511 reg_w_array(gspca_dev, ov361x_bridge_start_2048, in sd_start_ov361x()
1513 sccb_w_array(gspca_dev, ov361x_start_2048, in sd_start_ov361x()
1517 reg_w_array(gspca_dev, ov361x_bridge_start_1600, in sd_start_ov361x()
1519 sccb_w_array(gspca_dev, ov361x_start_1600, in sd_start_ov361x()
1523 reg_w_array(gspca_dev, ov361x_bridge_start_1024, in sd_start_ov361x()
1525 sccb_w_array(gspca_dev, ov361x_start_1024, in sd_start_ov361x()
1529 reg_w_array(gspca_dev, ov361x_bridge_start_640, in sd_start_ov361x()
1531 sccb_w_array(gspca_dev, ov361x_start_640, in sd_start_ov361x()
1535 reg_w_array(gspca_dev, ov361x_bridge_start_320, in sd_start_ov361x()
1537 sccb_w_array(gspca_dev, ov361x_start_320, in sd_start_ov361x()
1541 reg_w_array(gspca_dev, ov361x_bridge_start_160, in sd_start_ov361x()
1543 sccb_w_array(gspca_dev, ov361x_start_160, in sd_start_ov361x()
1547 reg_w(gspca_dev, 0xe0, 0x00); /* start transfer */ in sd_start_ov361x()
1549 return gspca_dev->usb_err; in sd_start_ov361x()
1552 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
1554 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
1557 return gspca_dev->usb_err; in sd_start()
1559 return gspca_dev->usb_err; in sd_start()
1561 return sd_start_ov361x(gspca_dev); in sd_start()
1563 switch (gspca_dev->curr_mode) { in sd_start()
1565 sccb_w_array(gspca_dev, ov965x_start_1_vga, in sd_start()
1567 reg_w_array(gspca_dev, bridge_start_qvga, in sd_start()
1569 sccb_w_array(gspca_dev, ov965x_start_2_qvga, in sd_start()
1573 sccb_w_array(gspca_dev, ov965x_start_1_vga, in sd_start()
1575 reg_w_array(gspca_dev, bridge_start_vga, in sd_start()
1577 sccb_w_array(gspca_dev, ov965x_start_2_vga, in sd_start()
1581 sccb_w_array(gspca_dev, ov965x_start_1_svga, in sd_start()
1583 reg_w_array(gspca_dev, bridge_start_svga, in sd_start()
1585 sccb_w_array(gspca_dev, ov965x_start_2_svga, in sd_start()
1589 sccb_w_array(gspca_dev, ov965x_start_1_xga, in sd_start()
1591 reg_w_array(gspca_dev, bridge_start_xga, in sd_start()
1593 sccb_w_array(gspca_dev, ov965x_start_2_svga, in sd_start()
1598 sccb_w_array(gspca_dev, ov965x_start_1_sxga, in sd_start()
1600 reg_w_array(gspca_dev, bridge_start_sxga, in sd_start()
1602 sccb_w_array(gspca_dev, ov965x_start_2_sxga, in sd_start()
1607 reg_w(gspca_dev, 0xe0, 0x00); in sd_start()
1608 reg_w(gspca_dev, 0xe0, 0x00); in sd_start()
1609 set_led(gspca_dev, 1); in sd_start()
1610 return gspca_dev->usb_err; in sd_start()
1613 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
1615 if (((struct sd *)gspca_dev)->sensor == SENSOR_OV361x) { in sd_stopN()
1616 reg_w(gspca_dev, 0xe0, 0x01); /* stop transfer */ in sd_stopN()
1620 reg_w(gspca_dev, 0xe0, 0x01); in sd_stopN()
1621 set_led(gspca_dev, 0); in sd_stopN()
1622 reg_w(gspca_dev, 0xe0, 0x00); in sd_stopN()
1635 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
1638 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
1644 payload_len = gspca_dev->cam.bulk ? 2048 : 2040; in sd_pkt_scan()
1655 gspca_dbg(gspca_dev, D_PACK, "bad header\n"); in sd_pkt_scan()
1661 gspca_dbg(gspca_dev, D_PACK, "payload error\n"); in sd_pkt_scan()
1667 gspca_dbg(gspca_dev, D_PACK, "PTS not present\n"); in sd_pkt_scan()
1676 if (gspca_dev->last_packet_type == INTER_PACKET) in sd_pkt_scan()
1677 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
1681 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
1686 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
1691 gspca_frame_add(gspca_dev, INTER_PACKET, in sd_pkt_scan()
1700 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
1710 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
1711 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
1713 gspca_dev->usb_err = 0; in sd_s_ctrl()
1715 if (!gspca_dev->streaming) in sd_s_ctrl()
1720 setbrightness(gspca_dev, ctrl->val); in sd_s_ctrl()
1723 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
1726 setsatur(gspca_dev, ctrl->val); in sd_s_ctrl()
1729 setlightfreq(gspca_dev, ctrl->val); in sd_s_ctrl()
1732 setsharpness(gspca_dev, ctrl->val); in sd_s_ctrl()
1736 setautogain(gspca_dev, ctrl->val); in sd_s_ctrl()
1737 if (!ctrl->val && gspca_dev->exposure->is_new) in sd_s_ctrl()
1738 setexposure(gspca_dev, gspca_dev->exposure->val); in sd_s_ctrl()
1741 return gspca_dev->usb_err; in sd_s_ctrl()
1748 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
1750 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls()
1751 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
1757 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
1772 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1774 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1779 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false); in sd_init_controls()