Lines Matching refs:gspca_dev
52 struct gspca_dev gspca_dev; /* !! must be the first item */ member
1119 static void reg_w_i(struct gspca_dev *gspca_dev, u16 reg, u8 val) in reg_w_i() argument
1121 struct usb_device *udev = gspca_dev->dev; in reg_w_i()
1124 if (gspca_dev->usb_err < 0) in reg_w_i()
1126 gspca_dev->usb_buf[0] = val; in reg_w_i()
1131 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); in reg_w_i()
1134 gspca_dev->usb_err = ret; in reg_w_i()
1138 static void reg_w(struct gspca_dev *gspca_dev, u16 reg, u8 val) in reg_w() argument
1141 reg_w_i(gspca_dev, reg, val); in reg_w()
1144 static u8 reg_r(struct gspca_dev *gspca_dev, u16 reg) in reg_r() argument
1146 struct usb_device *udev = gspca_dev->dev; in reg_r()
1149 if (gspca_dev->usb_err < 0) in reg_r()
1155 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); in reg_r()
1156 PDEBUG(D_USBI, "reg_r [%04x] -> %02x", reg, gspca_dev->usb_buf[0]); in reg_r()
1159 gspca_dev->usb_err = ret; in reg_r()
1161 return gspca_dev->usb_buf[0]; in reg_r()
1164 static int sccb_check_status(struct gspca_dev *gspca_dev) in sccb_check_status() argument
1171 data = reg_r(gspca_dev, OV534_REG_STATUS); in sccb_check_status()
1189 static void sccb_write(struct gspca_dev *gspca_dev, u8 reg, u8 val) in sccb_write() argument
1192 reg_w_i(gspca_dev, OV534_REG_SUBADDR, reg); in sccb_write()
1193 reg_w_i(gspca_dev, OV534_REG_WRITE, val); in sccb_write()
1194 reg_w_i(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_3); in sccb_write()
1196 if (!sccb_check_status(gspca_dev)) in sccb_write()
1200 static u8 sccb_read(struct gspca_dev *gspca_dev, u16 reg) in sccb_read() argument
1202 reg_w(gspca_dev, OV534_REG_SUBADDR, reg); in sccb_read()
1203 reg_w(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_2); in sccb_read()
1204 if (!sccb_check_status(gspca_dev)) in sccb_read()
1207 reg_w(gspca_dev, OV534_REG_OPERATION, OV534_OP_READ_2); in sccb_read()
1208 if (!sccb_check_status(gspca_dev)) in sccb_read()
1211 return reg_r(gspca_dev, OV534_REG_READ); in sccb_read()
1215 static void reg_w_array(struct gspca_dev *gspca_dev, in reg_w_array() argument
1219 reg_w(gspca_dev, (*data)[0], (*data)[1]); in reg_w_array()
1225 static void sccb_w_array(struct gspca_dev *gspca_dev, in sccb_w_array() argument
1230 sccb_write(gspca_dev, (*data)[0], (*data)[1]); in sccb_w_array()
1232 sccb_read(gspca_dev, (*data)[1]); in sccb_w_array()
1233 sccb_write(gspca_dev, 0xff, 0x00); in sccb_w_array()
1241 static void set_led(struct gspca_dev *gspca_dev, int status) in set_led() argument
1247 data = reg_r(gspca_dev, 0x21); in set_led()
1249 reg_w(gspca_dev, 0x21, data); in set_led()
1251 data = reg_r(gspca_dev, 0x23); in set_led()
1257 reg_w(gspca_dev, 0x23, data); in set_led()
1260 data = reg_r(gspca_dev, 0x21); in set_led()
1262 reg_w(gspca_dev, 0x21, data); in set_led()
1266 static void setbrightness(struct gspca_dev *gspca_dev, s32 brightness) in setbrightness() argument
1268 struct sd *sd = (struct sd *) gspca_dev; in setbrightness()
1276 sccb_write(gspca_dev, 0x24, val); in setbrightness()
1279 sccb_write(gspca_dev, 0x25, val); in setbrightness()
1286 sccb_write(gspca_dev, 0x26, val); in setbrightness()
1293 sccb_write(gspca_dev, 0x55, /* brtn - brightness adjustment */ in setbrightness()
1298 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
1300 sccb_write(gspca_dev, 0x56, /* cnst1 - contrast 1 ctrl coeff */ in setcontrast()
1304 static void setautogain(struct gspca_dev *gspca_dev, s32 autogain) in setautogain() argument
1309 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setautogain()
1310 sccb_write(gspca_dev, 0xff, 0x00); in setautogain()
1315 sccb_write(gspca_dev, 0x13, val); in setautogain()
1318 static void setexposure(struct gspca_dev *gspca_dev, s32 exposure) in setexposure() argument
1323 sccb_write(gspca_dev, 0x10, expo[exposure]); /* aec[9:2] */ in setexposure()
1325 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setexposure()
1326 sccb_write(gspca_dev, 0xff, 0x00); in setexposure()
1327 sccb_write(gspca_dev, 0x13, val); in setexposure()
1329 val = sccb_read(gspca_dev, 0xa1); /* aech */ in setexposure()
1330 sccb_write(gspca_dev, 0xff, 0x00); in setexposure()
1331 sccb_write(gspca_dev, 0xa1, val & 0xe0); /* aec[15:10] = 0 */ in setexposure()
1334 static void setsharpness(struct gspca_dev *gspca_dev, s32 val) in setsharpness() argument
1337 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setsharpness()
1338 sccb_write(gspca_dev, 0xff, 0x00); in setsharpness()
1339 sccb_write(gspca_dev, 0x42, val | 0x40); in setsharpness()
1345 sccb_write(gspca_dev, 0x3f, /* edge - edge enhance. factor */ in setsharpness()
1347 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setsharpness()
1348 sccb_write(gspca_dev, 0xff, 0x00); in setsharpness()
1349 sccb_write(gspca_dev, 0x42, val & 0xbf); in setsharpness()
1352 static void setsatur(struct gspca_dev *gspca_dev, s32 val) in setsatur() argument
1366 sccb_write(gspca_dev, 0x4f, val3); /* matrix coeff */ in setsatur()
1367 sccb_write(gspca_dev, 0x50, val3); in setsatur()
1368 sccb_write(gspca_dev, 0x51, 0x00); in setsatur()
1369 sccb_write(gspca_dev, 0x52, val1); in setsatur()
1370 sccb_write(gspca_dev, 0x53, val2); in setsatur()
1371 sccb_write(gspca_dev, 0x54, val3); in setsatur()
1372 sccb_write(gspca_dev, 0x58, 0x1a); /* mtxs - coeff signs */ in setsatur()
1374 val1 = sccb_read(gspca_dev, 0x41); /* com16 */ in setsatur()
1375 sccb_write(gspca_dev, 0xff, 0x00); in setsatur()
1376 sccb_write(gspca_dev, 0x41, val1); in setsatur()
1379 static void setlightfreq(struct gspca_dev *gspca_dev, s32 freq) in setlightfreq() argument
1383 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setlightfreq()
1384 sccb_write(gspca_dev, 0xff, 0x00); in setlightfreq()
1386 sccb_write(gspca_dev, 0x13, val & 0xdf); in setlightfreq()
1389 sccb_write(gspca_dev, 0x13, val | 0x20); in setlightfreq()
1391 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setlightfreq()
1392 sccb_write(gspca_dev, 0xff, 0x00); in setlightfreq()
1397 sccb_write(gspca_dev, 0x42, val); in setlightfreq()
1401 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
1408 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
1410 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
1414 reg_w(gspca_dev, 0xe7, 0x3a); in sd_init()
1415 reg_w(gspca_dev, 0xe0, 0x08); in sd_init()
1419 reg_w(gspca_dev, OV534_REG_ADDRESS, 0x60); in sd_init()
1422 sccb_write(gspca_dev, 0x12, 0x80); in sd_init()
1426 sccb_read(gspca_dev, 0x0a); in sd_init()
1427 sensor_id = sccb_read(gspca_dev, 0x0a) << 8; in sd_init()
1428 sccb_read(gspca_dev, 0x0b); in sd_init()
1429 sensor_id |= sccb_read(gspca_dev, 0x0b); in sd_init()
1436 gspca_dev->cam.cam_mode = ov965x_mode; in sd_init()
1437 gspca_dev->cam.nmodes = ARRAY_SIZE(ov965x_mode); in sd_init()
1439 reg_w_array(gspca_dev, bridge_init, in sd_init()
1441 sccb_w_array(gspca_dev, ov965x_init, in sd_init()
1443 reg_w_array(gspca_dev, bridge_init_2, in sd_init()
1445 sccb_w_array(gspca_dev, ov965x_init_2, in sd_init()
1447 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1448 reg_w(gspca_dev, 0xe0, 0x01); in sd_init()
1449 set_led(gspca_dev, 0); in sd_init()
1450 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1457 gspca_dev->cam.cam_mode = ov971x_mode; in sd_init()
1458 gspca_dev->cam.nmodes = ARRAY_SIZE(ov971x_mode); in sd_init()
1460 gspca_dev->cam.bulk = 1; in sd_init()
1461 gspca_dev->cam.bulk_size = 16384; in sd_init()
1462 gspca_dev->cam.bulk_nurbs = 2; in sd_init()
1464 sccb_w_array(gspca_dev, ov971x_init, in sd_init()
1469 reg_w(gspca_dev, 0x1c, 0x00); in sd_init()
1471 reg_w(gspca_dev, 0x1d, 0x00); in sd_init()
1477 p = video_device_node_name(&gspca_dev->vdev); in sd_init()
1480 reg_w(gspca_dev, 0x56, 0x1f); in sd_init()
1482 reg_w(gspca_dev, 0x56, 0x17); in sd_init()
1485 gspca_dev->cam.cam_mode = ov562x_mode; in sd_init()
1486 gspca_dev->cam.nmodes = ARRAY_SIZE(ov562x_mode); in sd_init()
1488 reg_w_array(gspca_dev, ov562x_init, in sd_init()
1490 sccb_w_array(gspca_dev, ov562x_init_2, in sd_init()
1492 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1495 gspca_dev->cam.cam_mode = ov361x_mode; in sd_init()
1496 gspca_dev->cam.nmodes = ARRAY_SIZE(ov361x_mode); in sd_init()
1497 reg_w(gspca_dev, 0xe7, 0x3a); in sd_init()
1498 reg_w(gspca_dev, 0xf1, 0x60); in sd_init()
1499 sccb_write(gspca_dev, 0x12, 0x80); in sd_init()
1505 return gspca_dev->usb_err; in sd_init()
1508 static int sd_start_ov361x(struct gspca_dev *gspca_dev) in sd_start_ov361x() argument
1510 sccb_write(gspca_dev, 0x12, 0x80); in sd_start_ov361x()
1512 switch (gspca_dev->curr_mode % (ov361x_last)) { in sd_start_ov361x()
1514 reg_w_array(gspca_dev, ov361x_bridge_start_2048, in sd_start_ov361x()
1516 sccb_w_array(gspca_dev, ov361x_start_2048, in sd_start_ov361x()
1520 reg_w_array(gspca_dev, ov361x_bridge_start_1600, in sd_start_ov361x()
1522 sccb_w_array(gspca_dev, ov361x_start_1600, in sd_start_ov361x()
1526 reg_w_array(gspca_dev, ov361x_bridge_start_1024, in sd_start_ov361x()
1528 sccb_w_array(gspca_dev, ov361x_start_1024, in sd_start_ov361x()
1532 reg_w_array(gspca_dev, ov361x_bridge_start_640, in sd_start_ov361x()
1534 sccb_w_array(gspca_dev, ov361x_start_640, in sd_start_ov361x()
1538 reg_w_array(gspca_dev, ov361x_bridge_start_320, in sd_start_ov361x()
1540 sccb_w_array(gspca_dev, ov361x_start_320, in sd_start_ov361x()
1544 reg_w_array(gspca_dev, ov361x_bridge_start_160, in sd_start_ov361x()
1546 sccb_w_array(gspca_dev, ov361x_start_160, in sd_start_ov361x()
1550 reg_w(gspca_dev, 0xe0, 0x00); /* start transfer */ in sd_start_ov361x()
1552 return gspca_dev->usb_err; in sd_start_ov361x()
1555 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
1557 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
1560 return gspca_dev->usb_err; in sd_start()
1562 return gspca_dev->usb_err; in sd_start()
1564 return sd_start_ov361x(gspca_dev); in sd_start()
1566 switch (gspca_dev->curr_mode) { in sd_start()
1568 sccb_w_array(gspca_dev, ov965x_start_1_vga, in sd_start()
1570 reg_w_array(gspca_dev, bridge_start_qvga, in sd_start()
1572 sccb_w_array(gspca_dev, ov965x_start_2_qvga, in sd_start()
1576 sccb_w_array(gspca_dev, ov965x_start_1_vga, in sd_start()
1578 reg_w_array(gspca_dev, bridge_start_vga, in sd_start()
1580 sccb_w_array(gspca_dev, ov965x_start_2_vga, in sd_start()
1584 sccb_w_array(gspca_dev, ov965x_start_1_svga, in sd_start()
1586 reg_w_array(gspca_dev, bridge_start_svga, in sd_start()
1588 sccb_w_array(gspca_dev, ov965x_start_2_svga, in sd_start()
1592 sccb_w_array(gspca_dev, ov965x_start_1_xga, in sd_start()
1594 reg_w_array(gspca_dev, bridge_start_xga, in sd_start()
1596 sccb_w_array(gspca_dev, ov965x_start_2_svga, in sd_start()
1601 sccb_w_array(gspca_dev, ov965x_start_1_sxga, in sd_start()
1603 reg_w_array(gspca_dev, bridge_start_sxga, in sd_start()
1605 sccb_w_array(gspca_dev, ov965x_start_2_sxga, in sd_start()
1610 reg_w(gspca_dev, 0xe0, 0x00); in sd_start()
1611 reg_w(gspca_dev, 0xe0, 0x00); in sd_start()
1612 set_led(gspca_dev, 1); in sd_start()
1613 return gspca_dev->usb_err; in sd_start()
1616 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
1618 if (((struct sd *)gspca_dev)->sensor == SENSOR_OV361x) { in sd_stopN()
1619 reg_w(gspca_dev, 0xe0, 0x01); /* stop transfer */ in sd_stopN()
1623 reg_w(gspca_dev, 0xe0, 0x01); in sd_stopN()
1624 set_led(gspca_dev, 0); in sd_stopN()
1625 reg_w(gspca_dev, 0xe0, 0x00); in sd_stopN()
1638 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
1641 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
1647 payload_len = gspca_dev->cam.bulk ? 2048 : 2040; in sd_pkt_scan()
1679 if (gspca_dev->last_packet_type == INTER_PACKET) in sd_pkt_scan()
1680 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
1684 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
1689 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
1694 gspca_frame_add(gspca_dev, INTER_PACKET, in sd_pkt_scan()
1703 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
1713 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
1714 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
1716 gspca_dev->usb_err = 0; in sd_s_ctrl()
1718 if (!gspca_dev->streaming) in sd_s_ctrl()
1723 setbrightness(gspca_dev, ctrl->val); in sd_s_ctrl()
1726 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
1729 setsatur(gspca_dev, ctrl->val); in sd_s_ctrl()
1732 setlightfreq(gspca_dev, ctrl->val); in sd_s_ctrl()
1735 setsharpness(gspca_dev, ctrl->val); in sd_s_ctrl()
1739 setautogain(gspca_dev, ctrl->val); in sd_s_ctrl()
1740 if (!ctrl->val && gspca_dev->exposure->is_new) in sd_s_ctrl()
1741 setexposure(gspca_dev, gspca_dev->exposure->val); in sd_s_ctrl()
1744 return gspca_dev->usb_err; in sd_s_ctrl()
1751 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
1753 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls()
1754 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
1760 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
1775 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1777 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1782 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false); in sd_init_controls()