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