Lines Matching refs:gspca_dev
39 struct gspca_dev gspca_dev; /* !! must be the first item */ member
1106 static void reg_w_i(struct gspca_dev *gspca_dev, u16 reg, u8 val) in reg_w_i() argument
1108 struct usb_device *udev = gspca_dev->dev; in reg_w_i()
1111 if (gspca_dev->usb_err < 0) in reg_w_i()
1113 gspca_dev->usb_buf[0] = val; in reg_w_i()
1118 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); in reg_w_i()
1121 gspca_dev->usb_err = ret; in reg_w_i()
1125 static void reg_w(struct gspca_dev *gspca_dev, u16 reg, u8 val) in reg_w() argument
1127 gspca_dbg(gspca_dev, D_USBO, "reg_w [%04x] = %02x\n", reg, val); in reg_w()
1128 reg_w_i(gspca_dev, reg, val); in reg_w()
1131 static u8 reg_r(struct gspca_dev *gspca_dev, u16 reg) in reg_r() argument
1133 struct usb_device *udev = gspca_dev->dev; in reg_r()
1136 if (gspca_dev->usb_err < 0) in reg_r()
1142 0x00, reg, gspca_dev->usb_buf, 1, CTRL_TIMEOUT); in reg_r()
1143 gspca_dbg(gspca_dev, D_USBI, "reg_r [%04x] -> %02x\n", in reg_r()
1144 reg, gspca_dev->usb_buf[0]); in reg_r()
1147 gspca_dev->usb_err = ret; in reg_r()
1150 return gspca_dev->usb_buf[0]; in reg_r()
1153 static int sccb_check_status(struct gspca_dev *gspca_dev) in sccb_check_status() argument
1160 data = reg_r(gspca_dev, OV534_REG_STATUS); in sccb_check_status()
1170 gspca_dbg(gspca_dev, D_USBI|D_USBO, in sccb_check_status()
1178 static void sccb_write(struct gspca_dev *gspca_dev, u8 reg, u8 val) in sccb_write() argument
1180 gspca_dbg(gspca_dev, D_USBO, "sccb_write [%02x] = %02x\n", reg, val); in sccb_write()
1181 reg_w_i(gspca_dev, OV534_REG_SUBADDR, reg); in sccb_write()
1182 reg_w_i(gspca_dev, OV534_REG_WRITE, val); in sccb_write()
1183 reg_w_i(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_3); in sccb_write()
1185 if (!sccb_check_status(gspca_dev)) in sccb_write()
1189 static u8 sccb_read(struct gspca_dev *gspca_dev, u16 reg) in sccb_read() argument
1191 reg_w(gspca_dev, OV534_REG_SUBADDR, reg); in sccb_read()
1192 reg_w(gspca_dev, OV534_REG_OPERATION, OV534_OP_WRITE_2); in sccb_read()
1193 if (!sccb_check_status(gspca_dev)) in sccb_read()
1196 reg_w(gspca_dev, OV534_REG_OPERATION, OV534_OP_READ_2); in sccb_read()
1197 if (!sccb_check_status(gspca_dev)) in sccb_read()
1200 return reg_r(gspca_dev, OV534_REG_READ); in sccb_read()
1204 static void reg_w_array(struct gspca_dev *gspca_dev, in reg_w_array() argument
1208 reg_w(gspca_dev, (*data)[0], (*data)[1]); in reg_w_array()
1214 static void sccb_w_array(struct gspca_dev *gspca_dev, in sccb_w_array() argument
1219 sccb_write(gspca_dev, (*data)[0], (*data)[1]); in sccb_w_array()
1221 sccb_read(gspca_dev, (*data)[1]); in sccb_w_array()
1222 sccb_write(gspca_dev, 0xff, 0x00); in sccb_w_array()
1230 static void set_led(struct gspca_dev *gspca_dev, int status) in set_led() argument
1234 gspca_dbg(gspca_dev, D_CONF, "led status: %d\n", status); in set_led()
1236 data = reg_r(gspca_dev, 0x21); in set_led()
1238 reg_w(gspca_dev, 0x21, data); in set_led()
1240 data = reg_r(gspca_dev, 0x23); in set_led()
1246 reg_w(gspca_dev, 0x23, data); in set_led()
1249 data = reg_r(gspca_dev, 0x21); in set_led()
1251 reg_w(gspca_dev, 0x21, data); in set_led()
1255 static void setbrightness(struct gspca_dev *gspca_dev, s32 brightness) in setbrightness() argument
1257 struct sd *sd = (struct sd *) gspca_dev; in setbrightness()
1265 sccb_write(gspca_dev, 0x24, val); in setbrightness()
1268 sccb_write(gspca_dev, 0x25, val); in setbrightness()
1275 sccb_write(gspca_dev, 0x26, val); in setbrightness()
1282 sccb_write(gspca_dev, 0x55, /* brtn - brightness adjustment */ in setbrightness()
1287 static void setcontrast(struct gspca_dev *gspca_dev, s32 val) in setcontrast() argument
1289 sccb_write(gspca_dev, 0x56, /* cnst1 - contrast 1 ctrl coeff */ in setcontrast()
1293 static void setautogain(struct gspca_dev *gspca_dev, s32 autogain) in setautogain() argument
1298 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setautogain()
1299 sccb_write(gspca_dev, 0xff, 0x00); in setautogain()
1304 sccb_write(gspca_dev, 0x13, val); in setautogain()
1307 static void setexposure(struct gspca_dev *gspca_dev, s32 exposure) in setexposure() argument
1312 sccb_write(gspca_dev, 0x10, expo[exposure]); /* aec[9:2] */ in setexposure()
1314 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setexposure()
1315 sccb_write(gspca_dev, 0xff, 0x00); in setexposure()
1316 sccb_write(gspca_dev, 0x13, val); in setexposure()
1318 val = sccb_read(gspca_dev, 0xa1); /* aech */ in setexposure()
1319 sccb_write(gspca_dev, 0xff, 0x00); in setexposure()
1320 sccb_write(gspca_dev, 0xa1, val & 0xe0); /* aec[15:10] = 0 */ in setexposure()
1323 static void setsharpness(struct gspca_dev *gspca_dev, s32 val) in setsharpness() argument
1326 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setsharpness()
1327 sccb_write(gspca_dev, 0xff, 0x00); in setsharpness()
1328 sccb_write(gspca_dev, 0x42, val | 0x40); in setsharpness()
1334 sccb_write(gspca_dev, 0x3f, /* edge - edge enhance. factor */ in setsharpness()
1336 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setsharpness()
1337 sccb_write(gspca_dev, 0xff, 0x00); in setsharpness()
1338 sccb_write(gspca_dev, 0x42, val & 0xbf); in setsharpness()
1341 static void setsatur(struct gspca_dev *gspca_dev, s32 val) in setsatur() argument
1355 sccb_write(gspca_dev, 0x4f, val3); /* matrix coeff */ in setsatur()
1356 sccb_write(gspca_dev, 0x50, val3); in setsatur()
1357 sccb_write(gspca_dev, 0x51, 0x00); in setsatur()
1358 sccb_write(gspca_dev, 0x52, val1); in setsatur()
1359 sccb_write(gspca_dev, 0x53, val2); in setsatur()
1360 sccb_write(gspca_dev, 0x54, val3); in setsatur()
1361 sccb_write(gspca_dev, 0x58, 0x1a); /* mtxs - coeff signs */ in setsatur()
1363 val1 = sccb_read(gspca_dev, 0x41); /* com16 */ in setsatur()
1364 sccb_write(gspca_dev, 0xff, 0x00); in setsatur()
1365 sccb_write(gspca_dev, 0x41, val1); in setsatur()
1368 static void setlightfreq(struct gspca_dev *gspca_dev, s32 freq) in setlightfreq() argument
1372 val = sccb_read(gspca_dev, 0x13); /* com8 */ in setlightfreq()
1373 sccb_write(gspca_dev, 0xff, 0x00); in setlightfreq()
1375 sccb_write(gspca_dev, 0x13, val & 0xdf); in setlightfreq()
1378 sccb_write(gspca_dev, 0x13, val | 0x20); in setlightfreq()
1380 val = sccb_read(gspca_dev, 0x42); /* com17 */ in setlightfreq()
1381 sccb_write(gspca_dev, 0xff, 0x00); in setlightfreq()
1386 sccb_write(gspca_dev, 0x42, val); in setlightfreq()
1390 static int sd_config(struct gspca_dev *gspca_dev, in sd_config() argument
1397 static int sd_init(struct gspca_dev *gspca_dev) in sd_init() argument
1399 struct sd *sd = (struct sd *) gspca_dev; in sd_init()
1403 reg_w(gspca_dev, 0xe7, 0x3a); in sd_init()
1404 reg_w(gspca_dev, 0xe0, 0x08); in sd_init()
1408 reg_w(gspca_dev, OV534_REG_ADDRESS, 0x60); in sd_init()
1411 sccb_write(gspca_dev, 0x12, 0x80); in sd_init()
1415 sccb_read(gspca_dev, 0x0a); in sd_init()
1416 sensor_id = sccb_read(gspca_dev, 0x0a) << 8; in sd_init()
1417 sccb_read(gspca_dev, 0x0b); in sd_init()
1418 sensor_id |= sccb_read(gspca_dev, 0x0b); in sd_init()
1419 gspca_dbg(gspca_dev, D_PROBE, "Sensor ID: %04x\n", sensor_id); in sd_init()
1425 gspca_dev->cam.cam_mode = ov965x_mode; in sd_init()
1426 gspca_dev->cam.nmodes = ARRAY_SIZE(ov965x_mode); in sd_init()
1428 reg_w_array(gspca_dev, bridge_init, in sd_init()
1430 sccb_w_array(gspca_dev, ov965x_init, in sd_init()
1432 reg_w_array(gspca_dev, bridge_init_2, in sd_init()
1434 sccb_w_array(gspca_dev, ov965x_init_2, in sd_init()
1436 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1437 reg_w(gspca_dev, 0xe0, 0x01); in sd_init()
1438 set_led(gspca_dev, 0); in sd_init()
1439 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1446 gspca_dev->cam.cam_mode = ov971x_mode; in sd_init()
1447 gspca_dev->cam.nmodes = ARRAY_SIZE(ov971x_mode); in sd_init()
1449 gspca_dev->cam.bulk = 1; in sd_init()
1450 gspca_dev->cam.bulk_size = 16384; in sd_init()
1451 gspca_dev->cam.bulk_nurbs = 2; in sd_init()
1453 sccb_w_array(gspca_dev, ov971x_init, in sd_init()
1458 reg_w(gspca_dev, 0x1c, 0x00); in sd_init()
1460 reg_w(gspca_dev, 0x1d, 0x00); in sd_init()
1466 p = video_device_node_name(&gspca_dev->vdev); in sd_init()
1469 reg_w(gspca_dev, 0x56, 0x1f); in sd_init()
1471 reg_w(gspca_dev, 0x56, 0x17); in sd_init()
1474 gspca_dev->cam.cam_mode = ov562x_mode; in sd_init()
1475 gspca_dev->cam.nmodes = ARRAY_SIZE(ov562x_mode); in sd_init()
1477 reg_w_array(gspca_dev, ov562x_init, in sd_init()
1479 sccb_w_array(gspca_dev, ov562x_init_2, in sd_init()
1481 reg_w(gspca_dev, 0xe0, 0x00); in sd_init()
1484 gspca_dev->cam.cam_mode = ov361x_mode; in sd_init()
1485 gspca_dev->cam.nmodes = ARRAY_SIZE(ov361x_mode); in sd_init()
1486 reg_w(gspca_dev, 0xe7, 0x3a); in sd_init()
1487 reg_w(gspca_dev, 0xf1, 0x60); in sd_init()
1488 sccb_write(gspca_dev, 0x12, 0x80); in sd_init()
1494 return gspca_dev->usb_err; in sd_init()
1497 static int sd_start_ov361x(struct gspca_dev *gspca_dev) in sd_start_ov361x() argument
1499 sccb_write(gspca_dev, 0x12, 0x80); in sd_start_ov361x()
1501 switch (gspca_dev->curr_mode % (ov361x_last)) { in sd_start_ov361x()
1503 reg_w_array(gspca_dev, ov361x_bridge_start_2048, in sd_start_ov361x()
1505 sccb_w_array(gspca_dev, ov361x_start_2048, in sd_start_ov361x()
1509 reg_w_array(gspca_dev, ov361x_bridge_start_1600, in sd_start_ov361x()
1511 sccb_w_array(gspca_dev, ov361x_start_1600, in sd_start_ov361x()
1515 reg_w_array(gspca_dev, ov361x_bridge_start_1024, in sd_start_ov361x()
1517 sccb_w_array(gspca_dev, ov361x_start_1024, in sd_start_ov361x()
1521 reg_w_array(gspca_dev, ov361x_bridge_start_640, in sd_start_ov361x()
1523 sccb_w_array(gspca_dev, ov361x_start_640, in sd_start_ov361x()
1527 reg_w_array(gspca_dev, ov361x_bridge_start_320, in sd_start_ov361x()
1529 sccb_w_array(gspca_dev, ov361x_start_320, in sd_start_ov361x()
1533 reg_w_array(gspca_dev, ov361x_bridge_start_160, in sd_start_ov361x()
1535 sccb_w_array(gspca_dev, ov361x_start_160, in sd_start_ov361x()
1539 reg_w(gspca_dev, 0xe0, 0x00); /* start transfer */ in sd_start_ov361x()
1541 return gspca_dev->usb_err; in sd_start_ov361x()
1544 static int sd_start(struct gspca_dev *gspca_dev) in sd_start() argument
1546 struct sd *sd = (struct sd *) gspca_dev; in sd_start()
1549 return gspca_dev->usb_err; in sd_start()
1551 return gspca_dev->usb_err; in sd_start()
1553 return sd_start_ov361x(gspca_dev); in sd_start()
1555 switch (gspca_dev->curr_mode) { in sd_start()
1557 sccb_w_array(gspca_dev, ov965x_start_1_vga, in sd_start()
1559 reg_w_array(gspca_dev, bridge_start_qvga, in sd_start()
1561 sccb_w_array(gspca_dev, ov965x_start_2_qvga, in sd_start()
1565 sccb_w_array(gspca_dev, ov965x_start_1_vga, in sd_start()
1567 reg_w_array(gspca_dev, bridge_start_vga, in sd_start()
1569 sccb_w_array(gspca_dev, ov965x_start_2_vga, in sd_start()
1573 sccb_w_array(gspca_dev, ov965x_start_1_svga, in sd_start()
1575 reg_w_array(gspca_dev, bridge_start_svga, in sd_start()
1577 sccb_w_array(gspca_dev, ov965x_start_2_svga, in sd_start()
1581 sccb_w_array(gspca_dev, ov965x_start_1_xga, in sd_start()
1583 reg_w_array(gspca_dev, bridge_start_xga, in sd_start()
1585 sccb_w_array(gspca_dev, ov965x_start_2_svga, in sd_start()
1590 sccb_w_array(gspca_dev, ov965x_start_1_sxga, in sd_start()
1592 reg_w_array(gspca_dev, bridge_start_sxga, in sd_start()
1594 sccb_w_array(gspca_dev, ov965x_start_2_sxga, in sd_start()
1599 reg_w(gspca_dev, 0xe0, 0x00); in sd_start()
1600 reg_w(gspca_dev, 0xe0, 0x00); in sd_start()
1601 set_led(gspca_dev, 1); in sd_start()
1602 return gspca_dev->usb_err; in sd_start()
1605 static void sd_stopN(struct gspca_dev *gspca_dev) in sd_stopN() argument
1607 if (((struct sd *)gspca_dev)->sensor == SENSOR_OV361x) { in sd_stopN()
1608 reg_w(gspca_dev, 0xe0, 0x01); /* stop transfer */ in sd_stopN()
1612 reg_w(gspca_dev, 0xe0, 0x01); in sd_stopN()
1613 set_led(gspca_dev, 0); in sd_stopN()
1614 reg_w(gspca_dev, 0xe0, 0x00); in sd_stopN()
1627 static void sd_pkt_scan(struct gspca_dev *gspca_dev, in sd_pkt_scan() argument
1630 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan()
1636 payload_len = gspca_dev->cam.bulk ? 2048 : 2040; in sd_pkt_scan()
1647 gspca_dbg(gspca_dev, D_PACK, "bad header\n"); in sd_pkt_scan()
1653 gspca_dbg(gspca_dev, D_PACK, "payload error\n"); in sd_pkt_scan()
1659 gspca_dbg(gspca_dev, D_PACK, "PTS not present\n"); in sd_pkt_scan()
1668 if (gspca_dev->last_packet_type == INTER_PACKET) in sd_pkt_scan()
1669 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
1673 gspca_frame_add(gspca_dev, FIRST_PACKET, in sd_pkt_scan()
1678 gspca_frame_add(gspca_dev, LAST_PACKET, in sd_pkt_scan()
1683 gspca_frame_add(gspca_dev, INTER_PACKET, in sd_pkt_scan()
1692 gspca_dev->last_packet_type = DISCARD_PACKET; in sd_pkt_scan()
1702 struct gspca_dev *gspca_dev = in sd_s_ctrl() local
1703 container_of(ctrl->handler, struct gspca_dev, ctrl_handler); in sd_s_ctrl()
1705 gspca_dev->usb_err = 0; in sd_s_ctrl()
1707 if (!gspca_dev->streaming) in sd_s_ctrl()
1712 setbrightness(gspca_dev, ctrl->val); in sd_s_ctrl()
1715 setcontrast(gspca_dev, ctrl->val); in sd_s_ctrl()
1718 setsatur(gspca_dev, ctrl->val); in sd_s_ctrl()
1721 setlightfreq(gspca_dev, ctrl->val); in sd_s_ctrl()
1724 setsharpness(gspca_dev, ctrl->val); in sd_s_ctrl()
1728 setautogain(gspca_dev, ctrl->val); in sd_s_ctrl()
1729 if (!ctrl->val && gspca_dev->exposure->is_new) in sd_s_ctrl()
1730 setexposure(gspca_dev, gspca_dev->exposure->val); in sd_s_ctrl()
1733 return gspca_dev->usb_err; in sd_s_ctrl()
1740 static int sd_init_controls(struct gspca_dev *gspca_dev) in sd_init_controls() argument
1742 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls()
1743 struct v4l2_ctrl_handler *hdl = &gspca_dev->ctrl_handler; in sd_init_controls()
1749 gspca_dev->vdev.ctrl_handler = hdl; in sd_init_controls()
1764 gspca_dev->autogain = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1766 gspca_dev->exposure = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
1771 v4l2_ctrl_auto_cluster(3, &gspca_dev->autogain, 0, false); in sd_init_controls()