Lines Matching refs:sd
64 struct sd { struct
2037 static void reg_w(struct sd *sd, u16 index, u16 value) in reg_w() argument
2039 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in reg_w()
2042 if (sd->gspca_dev.usb_err < 0) in reg_w()
2045 switch (sd->bridge) { in reg_w()
2056 ret = usb_control_msg(sd->gspca_dev.dev, in reg_w()
2057 usb_sndctrlpipe(sd->gspca_dev.dev, 0), in reg_w()
2068 sd->gspca_dev.usb_buf[0] = value; in reg_w()
2069 ret = usb_control_msg(sd->gspca_dev.dev, in reg_w()
2070 usb_sndctrlpipe(sd->gspca_dev.dev, 0), in reg_w()
2074 sd->gspca_dev.usb_buf, 1, 500); in reg_w()
2078 sd->gspca_dev.usb_err = ret; in reg_w()
2085 static int reg_r(struct sd *sd, u16 index) in reg_r() argument
2087 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in reg_r()
2091 if (sd->gspca_dev.usb_err < 0) in reg_r()
2094 switch (sd->bridge) { in reg_r()
2106 ret = usb_control_msg(sd->gspca_dev.dev, in reg_r()
2107 usb_rcvctrlpipe(sd->gspca_dev.dev, 0), in reg_r()
2110 0, index, sd->gspca_dev.usb_buf, 1, 500); in reg_r()
2113 ret = sd->gspca_dev.usb_buf[0]; in reg_r()
2118 sd->gspca_dev.usb_err = ret; in reg_r()
2125 static int reg_r8(struct sd *sd, in reg_r8() argument
2128 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in reg_r8()
2131 if (sd->gspca_dev.usb_err < 0) in reg_r8()
2134 ret = usb_control_msg(sd->gspca_dev.dev, in reg_r8()
2135 usb_rcvctrlpipe(sd->gspca_dev.dev, 0), in reg_r8()
2138 0, index, sd->gspca_dev.usb_buf, 8, 500); in reg_r8()
2141 ret = sd->gspca_dev.usb_buf[0]; in reg_r8()
2144 sd->gspca_dev.usb_err = ret; in reg_r8()
2156 static void reg_w_mask(struct sd *sd, in reg_w_mask() argument
2166 ret = reg_r(sd, index); in reg_w_mask()
2173 reg_w(sd, index, value); in reg_w_mask()
2180 static void ov518_reg_w32(struct sd *sd, u16 index, u32 value, int n) in ov518_reg_w32() argument
2182 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov518_reg_w32()
2185 if (sd->gspca_dev.usb_err < 0) in ov518_reg_w32()
2188 *((__le32 *) sd->gspca_dev.usb_buf) = __cpu_to_le32(value); in ov518_reg_w32()
2190 ret = usb_control_msg(sd->gspca_dev.dev, in ov518_reg_w32()
2191 usb_sndctrlpipe(sd->gspca_dev.dev, 0), in ov518_reg_w32()
2195 sd->gspca_dev.usb_buf, n, 500); in ov518_reg_w32()
2198 sd->gspca_dev.usb_err = ret; in ov518_reg_w32()
2202 static void ov511_i2c_w(struct sd *sd, u8 reg, u8 value) in ov511_i2c_w() argument
2204 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov511_i2c_w()
2212 reg_w(sd, R51x_I2C_SADDR_3, reg); in ov511_i2c_w()
2215 reg_w(sd, R51x_I2C_DATA, value); in ov511_i2c_w()
2218 reg_w(sd, R511_I2C_CTL, 0x01); in ov511_i2c_w()
2221 rc = reg_r(sd, R511_I2C_CTL); in ov511_i2c_w()
2236 static int ov511_i2c_r(struct sd *sd, u8 reg) in ov511_i2c_r() argument
2238 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov511_i2c_r()
2244 reg_w(sd, R51x_I2C_SADDR_2, reg); in ov511_i2c_r()
2247 reg_w(sd, R511_I2C_CTL, 0x03); in ov511_i2c_r()
2250 rc = reg_r(sd, R511_I2C_CTL); in ov511_i2c_r()
2260 reg_w(sd, R511_I2C_CTL, 0x10); in ov511_i2c_r()
2271 reg_w(sd, R511_I2C_CTL, 0x05); in ov511_i2c_r()
2274 rc = reg_r(sd, R511_I2C_CTL); in ov511_i2c_r()
2284 reg_w(sd, R511_I2C_CTL, 0x10); in ov511_i2c_r()
2292 value = reg_r(sd, R51x_I2C_DATA); in ov511_i2c_r()
2297 reg_w(sd, R511_I2C_CTL, 0x05); in ov511_i2c_r()
2307 static void ov518_i2c_w(struct sd *sd, in ov518_i2c_w() argument
2311 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov518_i2c_w()
2316 reg_w(sd, R51x_I2C_SADDR_3, reg); in ov518_i2c_w()
2319 reg_w(sd, R51x_I2C_DATA, value); in ov518_i2c_w()
2322 reg_w(sd, R518_I2C_CTL, 0x01); in ov518_i2c_w()
2326 reg_r8(sd, R518_I2C_CTL); in ov518_i2c_w()
2336 static int ov518_i2c_r(struct sd *sd, u8 reg) in ov518_i2c_r() argument
2338 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov518_i2c_r()
2342 reg_w(sd, R51x_I2C_SADDR_2, reg); in ov518_i2c_r()
2345 reg_w(sd, R518_I2C_CTL, 0x03); in ov518_i2c_r()
2346 reg_r8(sd, R518_I2C_CTL); in ov518_i2c_r()
2349 reg_w(sd, R518_I2C_CTL, 0x05); in ov518_i2c_r()
2350 reg_r8(sd, R518_I2C_CTL); in ov518_i2c_r()
2352 value = reg_r(sd, R51x_I2C_DATA); in ov518_i2c_r()
2357 static void ovfx2_i2c_w(struct sd *sd, u8 reg, u8 value) in ovfx2_i2c_w() argument
2359 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ovfx2_i2c_w()
2362 if (sd->gspca_dev.usb_err < 0) in ovfx2_i2c_w()
2365 ret = usb_control_msg(sd->gspca_dev.dev, in ovfx2_i2c_w()
2366 usb_sndctrlpipe(sd->gspca_dev.dev, 0), in ovfx2_i2c_w()
2373 sd->gspca_dev.usb_err = ret; in ovfx2_i2c_w()
2379 static int ovfx2_i2c_r(struct sd *sd, u8 reg) in ovfx2_i2c_r() argument
2381 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ovfx2_i2c_r()
2384 if (sd->gspca_dev.usb_err < 0) in ovfx2_i2c_r()
2387 ret = usb_control_msg(sd->gspca_dev.dev, in ovfx2_i2c_r()
2388 usb_rcvctrlpipe(sd->gspca_dev.dev, 0), in ovfx2_i2c_r()
2391 0, (u16) reg, sd->gspca_dev.usb_buf, 1, 500); in ovfx2_i2c_r()
2394 ret = sd->gspca_dev.usb_buf[0]; in ovfx2_i2c_r()
2398 sd->gspca_dev.usb_err = ret; in ovfx2_i2c_r()
2404 static void i2c_w(struct sd *sd, u8 reg, u8 value) in i2c_w() argument
2406 if (sd->sensor_reg_cache[reg] == value) in i2c_w()
2409 switch (sd->bridge) { in i2c_w()
2412 ov511_i2c_w(sd, reg, value); in i2c_w()
2417 ov518_i2c_w(sd, reg, value); in i2c_w()
2420 ovfx2_i2c_w(sd, reg, value); in i2c_w()
2423 w9968cf_i2c_w(sd, reg, value); in i2c_w()
2427 if (sd->gspca_dev.usb_err >= 0) { in i2c_w()
2430 memset(sd->sensor_reg_cache, -1, in i2c_w()
2431 sizeof(sd->sensor_reg_cache)); in i2c_w()
2433 sd->sensor_reg_cache[reg] = value; in i2c_w()
2437 static int i2c_r(struct sd *sd, u8 reg) in i2c_r() argument
2441 if (sd->sensor_reg_cache[reg] != -1) in i2c_r()
2442 return sd->sensor_reg_cache[reg]; in i2c_r()
2444 switch (sd->bridge) { in i2c_r()
2447 ret = ov511_i2c_r(sd, reg); in i2c_r()
2452 ret = ov518_i2c_r(sd, reg); in i2c_r()
2455 ret = ovfx2_i2c_r(sd, reg); in i2c_r()
2458 ret = w9968cf_i2c_r(sd, reg); in i2c_r()
2463 sd->sensor_reg_cache[reg] = ret; in i2c_r()
2473 static void i2c_w_mask(struct sd *sd, in i2c_w_mask() argument
2482 rc = i2c_r(sd, reg); in i2c_w_mask()
2487 i2c_w(sd, reg, value); in i2c_w_mask()
2492 static inline void ov51x_stop(struct sd *sd) in ov51x_stop() argument
2494 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov51x_stop()
2497 sd->stopped = 1; in ov51x_stop()
2498 switch (sd->bridge) { in ov51x_stop()
2501 reg_w(sd, R51x_SYS_RESET, 0x3d); in ov51x_stop()
2505 reg_w_mask(sd, R51x_SYS_RESET, 0x3a, 0x3a); in ov51x_stop()
2508 reg_w(sd, OV519_R51_RESET1, 0x0f); in ov51x_stop()
2509 reg_w(sd, OV519_R51_RESET1, 0x00); in ov51x_stop()
2510 reg_w(sd, 0x22, 0x00); /* FRAR */ in ov51x_stop()
2513 reg_w_mask(sd, 0x0f, 0x00, 0x02); in ov51x_stop()
2516 reg_w(sd, 0x3c, 0x0a05); /* stop USB transfer */ in ov51x_stop()
2523 static inline void ov51x_restart(struct sd *sd) in ov51x_restart() argument
2525 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov51x_restart()
2528 if (!sd->stopped) in ov51x_restart()
2530 sd->stopped = 0; in ov51x_restart()
2533 switch (sd->bridge) { in ov51x_restart()
2536 reg_w(sd, R51x_SYS_RESET, 0x00); in ov51x_restart()
2540 reg_w(sd, 0x2f, 0x80); in ov51x_restart()
2541 reg_w(sd, R51x_SYS_RESET, 0x00); in ov51x_restart()
2544 reg_w(sd, OV519_R51_RESET1, 0x0f); in ov51x_restart()
2545 reg_w(sd, OV519_R51_RESET1, 0x00); in ov51x_restart()
2546 reg_w(sd, 0x22, 0x1d); /* FRAR */ in ov51x_restart()
2549 reg_w_mask(sd, 0x0f, 0x02, 0x02); in ov51x_restart()
2552 reg_w(sd, 0x3c, 0x8a05); /* USB FIFO enable */ in ov51x_restart()
2557 static void ov51x_set_slave_ids(struct sd *sd, u8 slave);
2562 static int init_ov_sensor(struct sd *sd, u8 slave) in init_ov_sensor() argument
2565 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in init_ov_sensor()
2567 ov51x_set_slave_ids(sd, slave); in init_ov_sensor()
2570 i2c_w(sd, 0x12, 0x80); in init_ov_sensor()
2576 if (i2c_r(sd, OV7610_REG_ID_HIGH) == 0x7f && in init_ov_sensor()
2577 i2c_r(sd, OV7610_REG_ID_LOW) == 0xa2) { in init_ov_sensor()
2583 i2c_w(sd, 0x12, 0x80); in init_ov_sensor()
2589 if (i2c_r(sd, 0x00) < 0) in init_ov_sensor()
2600 static void ov51x_set_slave_ids(struct sd *sd, in ov51x_set_slave_ids() argument
2603 switch (sd->bridge) { in ov51x_set_slave_ids()
2605 reg_w(sd, OVFX2_I2C_ADDR, slave); in ov51x_set_slave_ids()
2608 sd->sensor_addr = slave; in ov51x_set_slave_ids()
2612 reg_w(sd, R51x_I2C_W_SID, slave); in ov51x_set_slave_ids()
2613 reg_w(sd, R51x_I2C_R_SID, slave + 1); in ov51x_set_slave_ids()
2616 static void write_regvals(struct sd *sd, in write_regvals() argument
2621 reg_w(sd, regvals->reg, regvals->val); in write_regvals()
2626 static void write_i2c_regvals(struct sd *sd, in write_i2c_regvals() argument
2631 i2c_w(sd, regvals->reg, regvals->val); in write_i2c_regvals()
2643 static void ov_hires_configure(struct sd *sd) in ov_hires_configure() argument
2645 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov_hires_configure()
2648 if (sd->bridge != BRIDGE_OVFX2) { in ov_hires_configure()
2656 high = i2c_r(sd, 0x0a); in ov_hires_configure()
2657 low = i2c_r(sd, 0x0b); in ov_hires_configure()
2664 sd->sensor = SEN_OV2610; in ov_hires_configure()
2668 sd->sensor = SEN_OV2610AE; in ov_hires_configure()
2672 sd->sensor = SEN_OV9600; in ov_hires_configure()
2679 sd->sensor = SEN_OV3610; in ov_hires_configure()
2690 static void ov8xx0_configure(struct sd *sd) in ov8xx0_configure() argument
2692 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov8xx0_configure()
2698 rc = i2c_r(sd, OV7610_REG_COM_I); in ov8xx0_configure()
2704 sd->sensor = SEN_OV8610; in ov8xx0_configure()
2712 static void ov7xx0_configure(struct sd *sd) in ov7xx0_configure() argument
2714 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov7xx0_configure()
2720 rc = i2c_r(sd, OV7610_REG_COM_I); in ov7xx0_configure()
2730 high = i2c_r(sd, 0x0a); in ov7xx0_configure()
2731 low = i2c_r(sd, 0x0b); in ov7xx0_configure()
2735 sd->sensor = SEN_OV7670; in ov7xx0_configure()
2738 sd->sensor = SEN_OV7610; in ov7xx0_configure()
2742 if (i2c_r(sd, 0x15) & 1) { in ov7xx0_configure()
2744 sd->sensor = SEN_OV7620AE; in ov7xx0_configure()
2747 sd->sensor = SEN_OV76BE; in ov7xx0_configure()
2751 high = i2c_r(sd, 0x0a); in ov7xx0_configure()
2756 low = i2c_r(sd, 0x0b); in ov7xx0_configure()
2769 sd->sensor = SEN_OV7640; /* FIXME */ in ov7xx0_configure()
2773 sd->sensor = SEN_OV7640; /* FIXME */ in ov7xx0_configure()
2777 sd->sensor = SEN_OV7648; in ov7xx0_configure()
2781 sd->sensor = SEN_OV7660; in ov7xx0_configure()
2789 sd->sensor = SEN_OV7620; in ov7xx0_configure()
2797 static void ov6xx0_configure(struct sd *sd) in ov6xx0_configure() argument
2799 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov6xx0_configure()
2805 rc = i2c_r(sd, OV7610_REG_COM_I); in ov6xx0_configure()
2816 sd->sensor = SEN_OV6630; in ov6xx0_configure()
2820 sd->sensor = SEN_OV6620; in ov6xx0_configure()
2824 sd->sensor = SEN_OV6630; in ov6xx0_configure()
2828 sd->sensor = SEN_OV66308AF; in ov6xx0_configure()
2832 sd->sensor = SEN_OV6630; in ov6xx0_configure()
2841 sd->sif = 1; in ov6xx0_configure()
2845 static void ov51x_led_control(struct sd *sd, int on) in ov51x_led_control() argument
2847 if (sd->invert_led) in ov51x_led_control()
2850 switch (sd->bridge) { in ov51x_led_control()
2853 reg_w(sd, R511_SYS_LED_CTL, on); in ov51x_led_control()
2857 reg_w_mask(sd, R518_GPIO_OUT, 0x02 * on, 0x02); in ov51x_led_control()
2860 reg_w_mask(sd, OV519_GPIO_DATA_OUT0, on, 1); in ov51x_led_control()
2867 struct sd *sd = (struct sd *) gspca_dev; in sd_reset_snapshot() local
2869 if (!sd->snapshot_needs_reset) in sd_reset_snapshot()
2875 sd->snapshot_needs_reset = 0; in sd_reset_snapshot()
2877 switch (sd->bridge) { in sd_reset_snapshot()
2880 reg_w(sd, R51x_SYS_SNAP, 0x02); in sd_reset_snapshot()
2881 reg_w(sd, R51x_SYS_SNAP, 0x00); in sd_reset_snapshot()
2885 reg_w(sd, R51x_SYS_SNAP, 0x02); /* Reset */ in sd_reset_snapshot()
2886 reg_w(sd, R51x_SYS_SNAP, 0x01); /* Enable */ in sd_reset_snapshot()
2889 reg_w(sd, R51x_SYS_RESET, 0x40); in sd_reset_snapshot()
2890 reg_w(sd, R51x_SYS_RESET, 0x00); in sd_reset_snapshot()
2895 static void ov51x_upload_quan_tables(struct sd *sd) in ov51x_upload_quan_tables() argument
2933 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov51x_upload_quan_tables()
2940 if (sd->bridge == BRIDGE_OV511 || sd->bridge == BRIDGE_OV511PLUS) { in ov51x_upload_quan_tables()
2956 reg_w(sd, reg, val0); in ov51x_upload_quan_tables()
2963 reg_w(sd, reg + size, val0); in ov51x_upload_quan_tables()
2972 struct sd *sd = (struct sd *) gspca_dev; in ov511_configure() local
3016 PDEBUG(D_PROBE, "Device custom id %x", reg_r(sd, R51x_SYS_CUST_ID)); in ov511_configure()
3018 write_regvals(sd, init_511, ARRAY_SIZE(init_511)); in ov511_configure()
3020 switch (sd->bridge) { in ov511_configure()
3022 write_regvals(sd, norm_511, ARRAY_SIZE(norm_511)); in ov511_configure()
3025 write_regvals(sd, norm_511_p, ARRAY_SIZE(norm_511_p)); in ov511_configure()
3030 write_regvals(sd, compress_511, ARRAY_SIZE(compress_511)); in ov511_configure()
3032 ov51x_upload_quan_tables(sd); in ov511_configure()
3038 struct sd *sd = (struct sd *) gspca_dev; in ov518_configure() local
3085 sd->revision = reg_r(sd, R51x_SYS_CUST_ID) & 0x1f; in ov518_configure()
3086 PDEBUG(D_PROBE, "Device revision %d", sd->revision); in ov518_configure()
3088 write_regvals(sd, init_518, ARRAY_SIZE(init_518)); in ov518_configure()
3091 reg_w_mask(sd, R518_GPIO_CTL, 0x00, 0x02); in ov518_configure()
3093 switch (sd->bridge) { in ov518_configure()
3095 write_regvals(sd, norm_518, ARRAY_SIZE(norm_518)); in ov518_configure()
3098 write_regvals(sd, norm_518_p, ARRAY_SIZE(norm_518_p)); in ov518_configure()
3102 ov51x_upload_quan_tables(sd); in ov518_configure()
3104 reg_w(sd, 0x2f, 0x80); in ov518_configure()
3107 static void ov519_configure(struct sd *sd) in ov519_configure() argument
3125 write_regvals(sd, init_519, ARRAY_SIZE(init_519)); in ov519_configure()
3128 static void ovfx2_configure(struct sd *sd) in ovfx2_configure() argument
3140 sd->stopped = 1; in ovfx2_configure()
3142 write_regvals(sd, init_fx2, ARRAY_SIZE(init_fx2)); in ovfx2_configure()
3147 static void ov519_set_mode(struct sd *sd) in ov519_set_mode() argument
3174 write_regvals(sd, bridge_ov7660[sd->gspca_dev.curr_mode], in ov519_set_mode()
3176 write_i2c_regvals(sd, sensor_ov7660[sd->gspca_dev.curr_mode], in ov519_set_mode()
3178 write_i2c_regvals(sd, sensor_ov7660_2, in ov519_set_mode()
3184 static void ov519_set_fr(struct sd *sd) in ov519_set_fr() argument
3209 sd->frame_rate = frame_rate; in ov519_set_fr()
3210 if (sd->frame_rate >= 30) in ov519_set_fr()
3212 else if (sd->frame_rate >= 25) in ov519_set_fr()
3214 else if (sd->frame_rate >= 20) in ov519_set_fr()
3216 else if (sd->frame_rate >= 15) in ov519_set_fr()
3218 else if (sd->frame_rate >= 10) in ov519_set_fr()
3222 reg_w(sd, 0xa4, fr_tb[sd->gspca_dev.curr_mode][fr][0]); in ov519_set_fr()
3223 reg_w(sd, 0x23, fr_tb[sd->gspca_dev.curr_mode][fr][1]); in ov519_set_fr()
3224 clock = fr_tb[sd->gspca_dev.curr_mode][fr][2]; in ov519_set_fr()
3225 if (sd->sensor == SEN_OV7660) in ov519_set_fr()
3227 ov518_i2c_w(sd, OV7670_R11_CLKRC, clock); in ov519_set_fr()
3232 struct sd *sd = (struct sd *) gspca_dev; in setautogain() local
3234 i2c_w_mask(sd, 0x13, val ? 0x05 : 0x00, 0x05); in setautogain()
3241 struct sd *sd = (struct sd *) gspca_dev; in sd_config() local
3244 sd->bridge = id->driver_info & BRIDGE_MASK; in sd_config()
3245 sd->invert_led = (id->driver_info & BRIDGE_INVERT_LED) != 0; in sd_config()
3247 switch (sd->bridge) { in sd_config()
3275 sd->frame_rate = 15; in sd_config()
3283 struct sd *sd = (struct sd *) gspca_dev; in sd_init() local
3286 switch (sd->bridge) { in sd_init()
3296 ov519_configure(sd); in sd_init()
3299 ovfx2_configure(sd); in sd_init()
3302 w9968cf_configure(sd); in sd_init()
3309 sd->sensor = -1; in sd_init()
3312 if (init_ov_sensor(sd, OV7xx0_SID) >= 0) { in sd_init()
3313 ov7xx0_configure(sd); in sd_init()
3316 } else if (init_ov_sensor(sd, OV6xx0_SID) >= 0) { in sd_init()
3317 ov6xx0_configure(sd); in sd_init()
3320 } else if (init_ov_sensor(sd, OV8xx0_SID) >= 0) { in sd_init()
3321 ov8xx0_configure(sd); in sd_init()
3324 } else if (init_ov_sensor(sd, OV_HIRES_SID) >= 0) { in sd_init()
3325 ov_hires_configure(sd); in sd_init()
3331 if (sd->sensor < 0) in sd_init()
3334 ov51x_led_control(sd, 0); /* turn LED off */ in sd_init()
3336 switch (sd->bridge) { in sd_init()
3339 if (sd->sif) { in sd_init()
3346 if (sd->sif) { in sd_init()
3352 if (sd->sif) { in sd_init()
3358 switch (sd->sensor) { in sd_init()
3373 if (sd->sif) { in sd_init()
3381 if (sd->sif) in sd_init()
3385 w9968cf_init(sd); in sd_init()
3390 switch (sd->sensor) { in sd_init()
3392 write_i2c_regvals(sd, norm_2610, ARRAY_SIZE(norm_2610)); in sd_init()
3395 i2c_w_mask(sd, 0x13, 0x27, 0x27); in sd_init()
3398 write_i2c_regvals(sd, norm_2610ae, ARRAY_SIZE(norm_2610ae)); in sd_init()
3401 i2c_w_mask(sd, 0x13, 0x05, 0x05); in sd_init()
3404 write_i2c_regvals(sd, norm_3620b, ARRAY_SIZE(norm_3620b)); in sd_init()
3407 i2c_w_mask(sd, 0x13, 0x27, 0x27); in sd_init()
3410 write_i2c_regvals(sd, norm_6x20, ARRAY_SIZE(norm_6x20)); in sd_init()
3414 write_i2c_regvals(sd, norm_6x30, ARRAY_SIZE(norm_6x30)); in sd_init()
3419 write_i2c_regvals(sd, norm_7610, ARRAY_SIZE(norm_7610)); in sd_init()
3420 i2c_w_mask(sd, 0x0e, 0x00, 0x40); in sd_init()
3424 write_i2c_regvals(sd, norm_7620, ARRAY_SIZE(norm_7620)); in sd_init()
3428 write_i2c_regvals(sd, norm_7640, ARRAY_SIZE(norm_7640)); in sd_init()
3431 i2c_w(sd, OV7670_R12_COM7, OV7670_COM7_RESET); in sd_init()
3433 reg_w(sd, OV519_R57_SNAPSHOT, 0x23); in sd_init()
3434 write_regvals(sd, init_519_ov7660, in sd_init()
3436 write_i2c_regvals(sd, norm_7660, ARRAY_SIZE(norm_7660)); in sd_init()
3437 sd->gspca_dev.curr_mode = 1; /* 640x480 */ in sd_init()
3438 ov519_set_mode(sd); in sd_init()
3439 ov519_set_fr(sd); in sd_init()
3441 ov51x_restart(sd); in sd_init()
3442 ov51x_stop(sd); /* not in win traces */ in sd_init()
3443 ov51x_led_control(sd, 0); in sd_init()
3446 write_i2c_regvals(sd, norm_7670, ARRAY_SIZE(norm_7670)); in sd_init()
3449 write_i2c_regvals(sd, norm_8610, ARRAY_SIZE(norm_8610)); in sd_init()
3452 write_i2c_regvals(sd, norm_9600, ARRAY_SIZE(norm_9600)); in sd_init()
3467 struct sd *sd = (struct sd *) gspca_dev; in sd_isoc_init() local
3469 switch (sd->bridge) { in sd_isoc_init()
3484 static void ov511_mode_init_regs(struct sd *sd) in ov511_mode_init_regs() argument
3486 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov511_mode_init_regs()
3492 intf = usb_ifnum_to_if(sd->gspca_dev.dev, sd->gspca_dev.iface); in ov511_mode_init_regs()
3493 alt = usb_altnum_to_altsetting(intf, sd->gspca_dev.alt); in ov511_mode_init_regs()
3496 sd->gspca_dev.usb_err = -EIO; in ov511_mode_init_regs()
3501 reg_w(sd, R51x_FIFO_PSIZE, packet_size >> 5); in ov511_mode_init_regs()
3503 reg_w(sd, R511_CAM_UV_EN, 0x01); in ov511_mode_init_regs()
3504 reg_w(sd, R511_SNAP_UV_EN, 0x01); in ov511_mode_init_regs()
3505 reg_w(sd, R511_SNAP_OPTS, 0x03); in ov511_mode_init_regs()
3510 hsegs = (sd->gspca_dev.pixfmt.width >> 3) - 1; in ov511_mode_init_regs()
3511 vsegs = (sd->gspca_dev.pixfmt.height >> 3) - 1; in ov511_mode_init_regs()
3513 reg_w(sd, R511_CAM_PXCNT, hsegs); in ov511_mode_init_regs()
3514 reg_w(sd, R511_CAM_LNCNT, vsegs); in ov511_mode_init_regs()
3515 reg_w(sd, R511_CAM_PXDIV, 0x00); in ov511_mode_init_regs()
3516 reg_w(sd, R511_CAM_LNDIV, 0x00); in ov511_mode_init_regs()
3519 reg_w(sd, R511_CAM_OPTS, 0x03); in ov511_mode_init_regs()
3522 reg_w(sd, R511_SNAP_PXCNT, hsegs); in ov511_mode_init_regs()
3523 reg_w(sd, R511_SNAP_LNCNT, vsegs); in ov511_mode_init_regs()
3524 reg_w(sd, R511_SNAP_PXDIV, 0x00); in ov511_mode_init_regs()
3525 reg_w(sd, R511_SNAP_LNDIV, 0x00); in ov511_mode_init_regs()
3529 sd->frame_rate = frame_rate; in ov511_mode_init_regs()
3531 switch (sd->sensor) { in ov511_mode_init_regs()
3534 sd->clockdiv = 3; in ov511_mode_init_regs()
3544 if (sd->gspca_dev.pixfmt.width == 320) in ov511_mode_init_regs()
3550 switch (sd->frame_rate) { in ov511_mode_init_regs()
3554 if (sd->gspca_dev.pixfmt.width != 640) { in ov511_mode_init_regs()
3555 sd->clockdiv = 0; in ov511_mode_init_regs()
3562 sd->clockdiv = 1; in ov511_mode_init_regs()
3565 sd->clockdiv = 2; in ov511_mode_init_regs()
3568 sd->clockdiv = 5; in ov511_mode_init_regs()
3572 sd->clockdiv = (sd->clockdiv + 1) * 2 - 1; in ov511_mode_init_regs()
3574 if (sd->clockdiv > 10) in ov511_mode_init_regs()
3575 sd->clockdiv = 10; in ov511_mode_init_regs()
3581 sd->clockdiv = 0; in ov511_mode_init_regs()
3586 fps = (interlaced ? 60 : 30) / (sd->clockdiv + 1) + 1; in ov511_mode_init_regs()
3587 needed = fps * sd->gspca_dev.pixfmt.width * in ov511_mode_init_regs()
3588 sd->gspca_dev.pixfmt.height * 3 / 2; in ov511_mode_init_regs()
3592 reg_w(sd, R511_COMP_EN, 0x07); in ov511_mode_init_regs()
3593 reg_w(sd, R511_COMP_LUT_EN, 0x03); in ov511_mode_init_regs()
3595 reg_w(sd, R511_COMP_EN, 0x06); in ov511_mode_init_regs()
3596 reg_w(sd, R511_COMP_LUT_EN, 0x00); in ov511_mode_init_regs()
3599 reg_w(sd, R51x_SYS_RESET, OV511_RESET_OMNICE); in ov511_mode_init_regs()
3600 reg_w(sd, R51x_SYS_RESET, 0); in ov511_mode_init_regs()
3610 static void ov518_mode_init_regs(struct sd *sd) in ov518_mode_init_regs() argument
3612 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov518_mode_init_regs()
3617 intf = usb_ifnum_to_if(sd->gspca_dev.dev, sd->gspca_dev.iface); in ov518_mode_init_regs()
3618 alt = usb_altnum_to_altsetting(intf, sd->gspca_dev.alt); in ov518_mode_init_regs()
3621 sd->gspca_dev.usb_err = -EIO; in ov518_mode_init_regs()
3626 ov518_reg_w32(sd, R51x_FIFO_PSIZE, packet_size & ~7, 2); in ov518_mode_init_regs()
3629 reg_w(sd, 0x2b, 0); in ov518_mode_init_regs()
3630 reg_w(sd, 0x2c, 0); in ov518_mode_init_regs()
3631 reg_w(sd, 0x2d, 0); in ov518_mode_init_regs()
3632 reg_w(sd, 0x2e, 0); in ov518_mode_init_regs()
3633 reg_w(sd, 0x3b, 0); in ov518_mode_init_regs()
3634 reg_w(sd, 0x3c, 0); in ov518_mode_init_regs()
3635 reg_w(sd, 0x3d, 0); in ov518_mode_init_regs()
3636 reg_w(sd, 0x3e, 0); in ov518_mode_init_regs()
3638 if (sd->bridge == BRIDGE_OV518) { in ov518_mode_init_regs()
3640 reg_w_mask(sd, 0x20, 0x08, 0x08); in ov518_mode_init_regs()
3643 reg_w_mask(sd, 0x28, 0x80, 0xf0); in ov518_mode_init_regs()
3644 reg_w_mask(sd, 0x38, 0x80, 0xf0); in ov518_mode_init_regs()
3646 reg_w(sd, 0x28, 0x80); in ov518_mode_init_regs()
3647 reg_w(sd, 0x38, 0x80); in ov518_mode_init_regs()
3650 hsegs = sd->gspca_dev.pixfmt.width / 16; in ov518_mode_init_regs()
3651 vsegs = sd->gspca_dev.pixfmt.height / 4; in ov518_mode_init_regs()
3653 reg_w(sd, 0x29, hsegs); in ov518_mode_init_regs()
3654 reg_w(sd, 0x2a, vsegs); in ov518_mode_init_regs()
3656 reg_w(sd, 0x39, hsegs); in ov518_mode_init_regs()
3657 reg_w(sd, 0x3a, vsegs); in ov518_mode_init_regs()
3660 reg_w(sd, 0x2f, 0x80); in ov518_mode_init_regs()
3663 if (sd->bridge == BRIDGE_OV518PLUS && sd->revision == 0 && in ov518_mode_init_regs()
3664 sd->sensor == SEN_OV7620AE) in ov518_mode_init_regs()
3665 sd->clockdiv = 0; in ov518_mode_init_regs()
3667 sd->clockdiv = 1; in ov518_mode_init_regs()
3671 reg_w(sd, 0x51, 0x04); in ov518_mode_init_regs()
3672 reg_w(sd, 0x22, 0x18); in ov518_mode_init_regs()
3673 reg_w(sd, 0x23, 0xff); in ov518_mode_init_regs()
3675 if (sd->bridge == BRIDGE_OV518PLUS) { in ov518_mode_init_regs()
3676 switch (sd->sensor) { in ov518_mode_init_regs()
3690 if (sd->revision > 0 && in ov518_mode_init_regs()
3691 sd->gspca_dev.pixfmt.width == 640) { in ov518_mode_init_regs()
3692 reg_w(sd, 0x20, 0x60); in ov518_mode_init_regs()
3693 reg_w(sd, 0x21, 0x1f); in ov518_mode_init_regs()
3695 reg_w(sd, 0x20, 0x00); in ov518_mode_init_regs()
3696 reg_w(sd, 0x21, 0x19); in ov518_mode_init_regs()
3700 reg_w(sd, 0x20, 0x00); in ov518_mode_init_regs()
3701 reg_w(sd, 0x21, 0x19); in ov518_mode_init_regs()
3704 reg_w(sd, 0x21, 0x19); in ov518_mode_init_regs()
3707 reg_w(sd, 0x71, 0x17); /* Compression-related? */ in ov518_mode_init_regs()
3711 i2c_w(sd, 0x54, 0x23); in ov518_mode_init_regs()
3713 reg_w(sd, 0x2f, 0x80); in ov518_mode_init_regs()
3715 if (sd->bridge == BRIDGE_OV518PLUS) { in ov518_mode_init_regs()
3716 reg_w(sd, 0x24, 0x94); in ov518_mode_init_regs()
3717 reg_w(sd, 0x25, 0x90); in ov518_mode_init_regs()
3718 ov518_reg_w32(sd, 0xc4, 400, 2); /* 190h */ in ov518_mode_init_regs()
3719 ov518_reg_w32(sd, 0xc6, 540, 2); /* 21ch */ in ov518_mode_init_regs()
3720 ov518_reg_w32(sd, 0xc7, 540, 2); /* 21ch */ in ov518_mode_init_regs()
3721 ov518_reg_w32(sd, 0xc8, 108, 2); /* 6ch */ in ov518_mode_init_regs()
3722 ov518_reg_w32(sd, 0xca, 131098, 3); /* 2001ah */ in ov518_mode_init_regs()
3723 ov518_reg_w32(sd, 0xcb, 532, 2); /* 214h */ in ov518_mode_init_regs()
3724 ov518_reg_w32(sd, 0xcc, 2400, 2); /* 960h */ in ov518_mode_init_regs()
3725 ov518_reg_w32(sd, 0xcd, 32, 2); /* 20h */ in ov518_mode_init_regs()
3726 ov518_reg_w32(sd, 0xce, 608, 2); /* 260h */ in ov518_mode_init_regs()
3728 reg_w(sd, 0x24, 0x9f); in ov518_mode_init_regs()
3729 reg_w(sd, 0x25, 0x90); in ov518_mode_init_regs()
3730 ov518_reg_w32(sd, 0xc4, 400, 2); /* 190h */ in ov518_mode_init_regs()
3731 ov518_reg_w32(sd, 0xc6, 381, 2); /* 17dh */ in ov518_mode_init_regs()
3732 ov518_reg_w32(sd, 0xc7, 381, 2); /* 17dh */ in ov518_mode_init_regs()
3733 ov518_reg_w32(sd, 0xc8, 128, 2); /* 80h */ in ov518_mode_init_regs()
3734 ov518_reg_w32(sd, 0xca, 183331, 3); /* 2cc23h */ in ov518_mode_init_regs()
3735 ov518_reg_w32(sd, 0xcb, 746, 2); /* 2eah */ in ov518_mode_init_regs()
3736 ov518_reg_w32(sd, 0xcc, 1750, 2); /* 6d6h */ in ov518_mode_init_regs()
3737 ov518_reg_w32(sd, 0xcd, 45, 2); /* 2dh */ in ov518_mode_init_regs()
3738 ov518_reg_w32(sd, 0xce, 851, 2); /* 353h */ in ov518_mode_init_regs()
3741 reg_w(sd, 0x2f, 0x80); in ov518_mode_init_regs()
3751 static void ov519_mode_init_regs(struct sd *sd) in ov519_mode_init_regs() argument
3797 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in ov519_mode_init_regs()
3800 switch (sd->sensor) { in ov519_mode_init_regs()
3802 write_regvals(sd, mode_init_519, ARRAY_SIZE(mode_init_519)); in ov519_mode_init_regs()
3803 if (sd->sensor == SEN_OV7640 || in ov519_mode_init_regs()
3804 sd->sensor == SEN_OV7648) { in ov519_mode_init_regs()
3806 reg_w_mask(sd, OV519_R20_DFR, 0x10, 0x10); in ov519_mode_init_regs()
3812 write_regvals(sd, mode_init_519_ov7670, in ov519_mode_init_regs()
3817 reg_w(sd, OV519_R10_H_SIZE, sd->gspca_dev.pixfmt.width >> 4); in ov519_mode_init_regs()
3818 reg_w(sd, OV519_R11_V_SIZE, sd->gspca_dev.pixfmt.height >> 3); in ov519_mode_init_regs()
3819 if (sd->sensor == SEN_OV7670 && in ov519_mode_init_regs()
3820 sd->gspca_dev.cam.cam_mode[sd->gspca_dev.curr_mode].priv) in ov519_mode_init_regs()
3821 reg_w(sd, OV519_R12_X_OFFSETL, 0x04); in ov519_mode_init_regs()
3822 else if (sd->sensor == SEN_OV7648 && in ov519_mode_init_regs()
3823 sd->gspca_dev.cam.cam_mode[sd->gspca_dev.curr_mode].priv) in ov519_mode_init_regs()
3824 reg_w(sd, OV519_R12_X_OFFSETL, 0x01); in ov519_mode_init_regs()
3826 reg_w(sd, OV519_R12_X_OFFSETL, 0x00); in ov519_mode_init_regs()
3827 reg_w(sd, OV519_R13_X_OFFSETH, 0x00); in ov519_mode_init_regs()
3828 reg_w(sd, OV519_R14_Y_OFFSETL, 0x00); in ov519_mode_init_regs()
3829 reg_w(sd, OV519_R15_Y_OFFSETH, 0x00); in ov519_mode_init_regs()
3830 reg_w(sd, OV519_R16_DIVIDER, 0x00); in ov519_mode_init_regs()
3831 reg_w(sd, OV519_R25_FORMAT, 0x03); /* YUV422 */ in ov519_mode_init_regs()
3832 reg_w(sd, 0x26, 0x00); /* Undocumented */ in ov519_mode_init_regs()
3836 sd->frame_rate = frame_rate; in ov519_mode_init_regs()
3839 sd->clockdiv = 0; in ov519_mode_init_regs()
3840 switch (sd->sensor) { in ov519_mode_init_regs()
3843 switch (sd->frame_rate) { in ov519_mode_init_regs()
3846 reg_w(sd, 0xa4, 0x0c); in ov519_mode_init_regs()
3847 reg_w(sd, 0x23, 0xff); in ov519_mode_init_regs()
3850 reg_w(sd, 0xa4, 0x0c); in ov519_mode_init_regs()
3851 reg_w(sd, 0x23, 0x1f); in ov519_mode_init_regs()
3854 reg_w(sd, 0xa4, 0x0c); in ov519_mode_init_regs()
3855 reg_w(sd, 0x23, 0x1b); in ov519_mode_init_regs()
3858 reg_w(sd, 0xa4, 0x04); in ov519_mode_init_regs()
3859 reg_w(sd, 0x23, 0xff); in ov519_mode_init_regs()
3860 sd->clockdiv = 1; in ov519_mode_init_regs()
3863 reg_w(sd, 0xa4, 0x04); in ov519_mode_init_regs()
3864 reg_w(sd, 0x23, 0x1f); in ov519_mode_init_regs()
3865 sd->clockdiv = 1; in ov519_mode_init_regs()
3868 reg_w(sd, 0xa4, 0x04); in ov519_mode_init_regs()
3869 reg_w(sd, 0x23, 0x1b); in ov519_mode_init_regs()
3870 sd->clockdiv = 1; in ov519_mode_init_regs()
3875 switch (sd->frame_rate) { in ov519_mode_init_regs()
3878 reg_w(sd, 0xa4, 0x06); in ov519_mode_init_regs()
3879 reg_w(sd, 0x23, 0xff); in ov519_mode_init_regs()
3882 reg_w(sd, 0xa4, 0x06); in ov519_mode_init_regs()
3883 reg_w(sd, 0x23, 0x1f); in ov519_mode_init_regs()
3886 reg_w(sd, 0xa4, 0x06); in ov519_mode_init_regs()
3887 reg_w(sd, 0x23, 0x1b); in ov519_mode_init_regs()
3893 (sd->frame_rate == 0) ? 15 : sd->frame_rate); in ov519_mode_init_regs()
3894 reg_w(sd, 0xa4, 0x10); in ov519_mode_init_regs()
3895 switch (sd->frame_rate) { in ov519_mode_init_regs()
3897 reg_w(sd, 0x23, 0xff); in ov519_mode_init_regs()
3900 reg_w(sd, 0x23, 0x1b); in ov519_mode_init_regs()
3904 reg_w(sd, 0x23, 0xff); in ov519_mode_init_regs()
3905 sd->clockdiv = 1; in ov519_mode_init_regs()
3912 static void mode_init_ov_sensor_regs(struct sd *sd) in mode_init_ov_sensor_regs() argument
3914 struct gspca_dev *gspca_dev = (struct gspca_dev *)sd; in mode_init_ov_sensor_regs()
3921 switch (sd->sensor) { in mode_init_ov_sensor_regs()
3923 i2c_w_mask(sd, 0x14, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
3924 i2c_w_mask(sd, 0x28, qvga ? 0x00 : 0x20, 0x20); in mode_init_ov_sensor_regs()
3925 i2c_w(sd, 0x24, qvga ? 0x20 : 0x3a); in mode_init_ov_sensor_regs()
3926 i2c_w(sd, 0x25, qvga ? 0x30 : 0x60); in mode_init_ov_sensor_regs()
3927 i2c_w_mask(sd, 0x2d, qvga ? 0x40 : 0x00, 0x40); in mode_init_ov_sensor_regs()
3928 i2c_w_mask(sd, 0x67, qvga ? 0xf0 : 0x90, 0xf0); in mode_init_ov_sensor_regs()
3929 i2c_w_mask(sd, 0x74, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
3940 if (sd->frame_rate < 25) in mode_init_ov_sensor_regs()
3943 if (sd->frame_rate < 10) in mode_init_ov_sensor_regs()
3946 i2c_w(sd, 0x11, v); in mode_init_ov_sensor_regs()
3947 i2c_w(sd, 0x12, qvga ? 0x60 : 0x20); in mode_init_ov_sensor_regs()
3964 i2c_w_mask(sd, 0x12, qvga ? 0x40 : 0x00, 0xf0); in mode_init_ov_sensor_regs()
3965 i2c_w_mask(sd, 0x32, in mode_init_ov_sensor_regs()
3968 i2c_w_mask(sd, 0x03, in mode_init_ov_sensor_regs()
3971 i2c_w(sd, 0x17, xstart >> 4); in mode_init_ov_sensor_regs()
3972 i2c_w(sd, 0x18, xend >> 4); in mode_init_ov_sensor_regs()
3973 i2c_w(sd, 0x19, ystart >> 3); in mode_init_ov_sensor_regs()
3974 i2c_w(sd, 0x1a, yend >> 3); in mode_init_ov_sensor_regs()
3978 i2c_w_mask(sd, OV7610_REG_COM_C, qvga ? (1 << 5) : 0, 1 << 5); in mode_init_ov_sensor_regs()
3979 i2c_w_mask(sd, 0x13, 0x00, 0x20); /* Select 16 bit data bus */ in mode_init_ov_sensor_regs()
3980 i2c_w_mask(sd, 0x12, 0x04, 0x06); /* AWB: 1 Test pattern: 0 */ in mode_init_ov_sensor_regs()
3981 i2c_w_mask(sd, 0x2d, 0x00, 0x40); /* from windrv 090403 */ in mode_init_ov_sensor_regs()
3982 i2c_w_mask(sd, 0x28, 0x20, 0x20); /* progressive mode on */ in mode_init_ov_sensor_regs()
3985 i2c_w_mask(sd, 0x14, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
3986 i2c_w(sd, 0x35, qvga ? 0x1e : 0x9e); in mode_init_ov_sensor_regs()
3987 i2c_w_mask(sd, 0x13, 0x00, 0x20); /* Select 16 bit data bus */ in mode_init_ov_sensor_regs()
3988 i2c_w_mask(sd, 0x12, 0x04, 0x06); /* AWB: 1 Test pattern: 0 */ in mode_init_ov_sensor_regs()
3993 i2c_w_mask(sd, 0x14, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
3994 i2c_w_mask(sd, 0x28, qvga ? 0x00 : 0x20, 0x20); in mode_init_ov_sensor_regs()
3995 i2c_w(sd, 0x24, qvga ? 0x20 : 0x3a); in mode_init_ov_sensor_regs()
3996 i2c_w(sd, 0x25, qvga ? 0x30 : 0x60); in mode_init_ov_sensor_regs()
3997 i2c_w_mask(sd, 0x2d, qvga ? 0x40 : 0x00, 0x40); in mode_init_ov_sensor_regs()
3998 i2c_w_mask(sd, 0x67, qvga ? 0xb0 : 0x90, 0xf0); in mode_init_ov_sensor_regs()
3999 i2c_w_mask(sd, 0x74, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
4000 i2c_w_mask(sd, 0x13, 0x00, 0x20); /* Select 16 bit data bus */ in mode_init_ov_sensor_regs()
4001 i2c_w_mask(sd, 0x12, 0x04, 0x06); /* AWB: 1 Test pattern: 0 */ in mode_init_ov_sensor_regs()
4002 if (sd->sensor == SEN_OV76BE) in mode_init_ov_sensor_regs()
4003 i2c_w(sd, 0x35, qvga ? 0x1e : 0x9e); in mode_init_ov_sensor_regs()
4007 i2c_w_mask(sd, 0x14, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
4008 i2c_w_mask(sd, 0x28, qvga ? 0x00 : 0x20, 0x20); in mode_init_ov_sensor_regs()
4011 i2c_w_mask(sd, 0x2d, qvga ? 0x40 : 0x00, 0x40); in mode_init_ov_sensor_regs()
4013 i2c_w_mask(sd, 0x67, qvga ? 0xf0 : 0x90, 0xf0); in mode_init_ov_sensor_regs()
4015 i2c_w_mask(sd, 0x74, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
4016 i2c_w_mask(sd, 0x12, 0x04, 0x04); /* AWB: 1 */ in mode_init_ov_sensor_regs()
4022 i2c_w_mask(sd, OV7670_R12_COM7, in mode_init_ov_sensor_regs()
4025 i2c_w_mask(sd, 0x13, 0x00, 0x20); /* Select 16 bit data bus */ in mode_init_ov_sensor_regs()
4026 i2c_w_mask(sd, OV7670_R13_COM8, OV7670_COM8_AWB, in mode_init_ov_sensor_regs()
4042 i2c_w(sd, OV7670_R17_HSTART, xstart >> 3); in mode_init_ov_sensor_regs()
4043 i2c_w(sd, OV7670_R18_HSTOP, xend >> 3); in mode_init_ov_sensor_regs()
4044 v = i2c_r(sd, OV7670_R32_HREF); in mode_init_ov_sensor_regs()
4048 i2c_w(sd, OV7670_R32_HREF, v); in mode_init_ov_sensor_regs()
4050 i2c_w(sd, OV7670_R19_VSTART, ystart >> 2); in mode_init_ov_sensor_regs()
4051 i2c_w(sd, OV7670_R1A_VSTOP, yend >> 2); in mode_init_ov_sensor_regs()
4052 v = i2c_r(sd, OV7670_R03_VREF); in mode_init_ov_sensor_regs()
4056 i2c_w(sd, OV7670_R03_VREF, v); in mode_init_ov_sensor_regs()
4059 i2c_w_mask(sd, 0x14, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
4060 i2c_w_mask(sd, 0x13, 0x00, 0x20); /* Select 16 bit data bus */ in mode_init_ov_sensor_regs()
4061 i2c_w_mask(sd, 0x12, 0x04, 0x06); /* AWB: 1 Test pattern: 0 */ in mode_init_ov_sensor_regs()
4065 i2c_w_mask(sd, 0x14, qvga ? 0x20 : 0x00, 0x20); in mode_init_ov_sensor_regs()
4066 i2c_w_mask(sd, 0x12, 0x04, 0x06); /* AWB: 1 Test pattern: 0 */ in mode_init_ov_sensor_regs()
4087 i2c_w_mask(sd, 0x12, qvga ? 0x40 : 0x00, 0x40); in mode_init_ov_sensor_regs()
4089 vals = sd->frame_rate < 30 ? vga_15 : vga_30; in mode_init_ov_sensor_regs()
4091 vals = sd->frame_rate < 15 ? sxga_7_5 : sxga_15; in mode_init_ov_sensor_regs()
4092 write_i2c_regvals(sd, vals, ARRAY_SIZE(sxga_15)); in mode_init_ov_sensor_regs()
4100 i2c_w(sd, 0x11, sd->clockdiv); in mode_init_ov_sensor_regs()
4106 struct sd *sd = (struct sd *) gspca_dev; in sethvflip() local
4108 if (sd->gspca_dev.streaming) in sethvflip()
4109 reg_w(sd, OV519_R51_RESET1, 0x0f); /* block stream */ in sethvflip()
4110 i2c_w_mask(sd, OV7670_R1E_MVFP, in sethvflip()
4113 if (sd->gspca_dev.streaming) in sethvflip()
4114 reg_w(sd, OV519_R51_RESET1, 0x00); /* restart stream */ in sethvflip()
4117 static void set_ov_sensor_window(struct sd *sd) in set_ov_sensor_window() argument
4124 switch (sd->sensor) { in set_ov_sensor_window()
4130 mode_init_ov_sensor_regs(sd); in set_ov_sensor_window()
4133 ov519_set_mode(sd); in set_ov_sensor_window()
4134 ov519_set_fr(sd); in set_ov_sensor_window()
4138 gspca_dev = &sd->gspca_dev; in set_ov_sensor_window()
4144 switch (sd->sensor) { in set_ov_sensor_window()
4164 if (sd->sensor == SEN_OV66308AF && qvga) in set_ov_sensor_window()
4190 switch (sd->sensor) { in set_ov_sensor_window()
4222 mode_init_ov_sensor_regs(sd); in set_ov_sensor_window()
4224 i2c_w(sd, 0x17, hwsbase); in set_ov_sensor_window()
4225 i2c_w(sd, 0x18, hwebase + (sd->sensor_width >> hwscale)); in set_ov_sensor_window()
4226 i2c_w(sd, 0x19, vwsbase); in set_ov_sensor_window()
4227 i2c_w(sd, 0x1a, vwebase + (sd->sensor_height >> vwscale)); in set_ov_sensor_window()
4233 struct sd *sd = (struct sd *) gspca_dev; in sd_start() local
4236 sd->sensor_width = sd->gspca_dev.pixfmt.width; in sd_start()
4237 sd->sensor_height = sd->gspca_dev.pixfmt.height; in sd_start()
4239 switch (sd->bridge) { in sd_start()
4242 ov511_mode_init_regs(sd); in sd_start()
4246 ov518_mode_init_regs(sd); in sd_start()
4249 ov519_mode_init_regs(sd); in sd_start()
4253 w9968cf_mode_init_regs(sd); in sd_start()
4257 set_ov_sensor_window(sd); in sd_start()
4261 sd->snapshot_needs_reset = 1; in sd_start()
4264 sd->first_frame = 3; in sd_start()
4266 ov51x_restart(sd); in sd_start()
4267 ov51x_led_control(sd, 1); in sd_start()
4273 struct sd *sd = (struct sd *) gspca_dev; in sd_stopN() local
4275 ov51x_stop(sd); in sd_stopN()
4276 ov51x_led_control(sd, 0); in sd_stopN()
4281 struct sd *sd = (struct sd *) gspca_dev; in sd_stop0() local
4283 if (!sd->gspca_dev.present) in sd_stop0()
4285 if (sd->bridge == BRIDGE_W9968CF) in sd_stop0()
4286 w9968cf_stop0(sd); in sd_stop0()
4290 if (sd->snapshot_pressed) { in sd_stop0()
4293 sd->snapshot_pressed = 0; in sd_stop0()
4296 if (sd->bridge == BRIDGE_OV519) in sd_stop0()
4297 reg_w(sd, OV519_R57_SNAPSHOT, 0x23); in sd_stop0()
4302 struct sd *sd = (struct sd *) gspca_dev; in ov51x_handle_button() local
4304 if (sd->snapshot_pressed != state) { in ov51x_handle_button()
4310 sd->snapshot_needs_reset = 1; in ov51x_handle_button()
4312 sd->snapshot_pressed = state; in ov51x_handle_button()
4317 switch (sd->bridge) { in ov51x_handle_button()
4322 sd->snapshot_needs_reset = 1; in ov51x_handle_button()
4332 struct sd *sd = (struct sd *) gspca_dev; in ov511_pkt_scan() local
4368 sd->packet_nr = 0; in ov511_pkt_scan()
4383 struct sd *sd = (struct sd *) gspca_dev; in ov518_pkt_scan() local
4391 sd->packet_nr = 0; in ov518_pkt_scan()
4400 if (sd->packet_nr == data[len]) in ov518_pkt_scan()
4401 sd->packet_nr++; in ov518_pkt_scan()
4405 else if (sd->packet_nr == 0 || data[len]) { in ov518_pkt_scan()
4407 (int)data[len], (int)sd->packet_nr); in ov518_pkt_scan()
4467 struct sd *sd = (struct sd *) gspca_dev; in ovfx2_pkt_scan() local
4475 if (sd->first_frame) { in ovfx2_pkt_scan()
4476 sd->first_frame--; in ovfx2_pkt_scan()
4478 sd->gspca_dev.pixfmt.width * in ovfx2_pkt_scan()
4479 sd->gspca_dev.pixfmt.height) in ovfx2_pkt_scan()
4491 struct sd *sd = (struct sd *) gspca_dev; in sd_pkt_scan() local
4493 switch (sd->bridge) { in sd_pkt_scan()
4518 struct sd *sd = (struct sd *) gspca_dev; in setbrightness() local
4536 switch (sd->sensor) { in setbrightness()
4545 i2c_w(sd, OV7610_REG_BRT, val); in setbrightness()
4549 i2c_w(sd, OV7610_REG_BRT, val); in setbrightness()
4552 write_i2c_regvals(sd, brit_7660[val], in setbrightness()
4558 i2c_w(sd, OV7670_R55_BRIGHT, ov7670_abs_to_sm(val)); in setbrightness()
4565 struct sd *sd = (struct sd *) gspca_dev; in setcontrast() local
4625 switch (sd->sensor) { in setcontrast()
4628 i2c_w(sd, OV7610_REG_CNT, val); in setcontrast()
4632 i2c_w_mask(sd, OV7610_REG_CNT, val >> 4, 0x0f); in setcontrast()
4640 i2c_w(sd, 0x64, ctab[val >> 5]); in setcontrast()
4651 i2c_w(sd, 0x64, ctab[val >> 4]); in setcontrast()
4655 write_i2c_regvals(sd, contrast_7660[val], in setcontrast()
4660 i2c_w(sd, OV7670_R56_CONTRAS, val >> 1); in setcontrast()
4667 struct sd *sd = (struct sd *) gspca_dev; in setexposure() local
4669 i2c_w(sd, 0x10, val); in setexposure()
4674 struct sd *sd = (struct sd *) gspca_dev; in setcolors() local
4688 switch (sd->sensor) { in setcolors()
4695 i2c_w(sd, OV7610_REG_SAT, val); in setcolors()
4703 i2c_w(sd, OV7610_REG_SAT, val); in setcolors()
4707 i2c_w(sd, OV7610_REG_SAT, val & 0xf0); in setcolors()
4710 write_i2c_regvals(sd, colors_7660[val], in setcolors()
4723 struct sd *sd = (struct sd *) gspca_dev; in setautobright() local
4725 i2c_w_mask(sd, 0x2d, val ? 0x10 : 0x00, 0x10); in setautobright()
4728 static void setfreq_i(struct sd *sd, s32 val) in setfreq_i() argument
4730 if (sd->sensor == SEN_OV7660 in setfreq_i()
4731 || sd->sensor == SEN_OV7670) { in setfreq_i()
4734 i2c_w_mask(sd, OV7670_R13_COM8, 0, OV7670_COM8_BFILT); in setfreq_i()
4737 i2c_w_mask(sd, OV7670_R13_COM8, OV7670_COM8_BFILT, in setfreq_i()
4739 i2c_w_mask(sd, OV7670_R3B_COM11, 0x08, 0x18); in setfreq_i()
4742 i2c_w_mask(sd, OV7670_R13_COM8, OV7670_COM8_BFILT, in setfreq_i()
4744 i2c_w_mask(sd, OV7670_R3B_COM11, 0x00, 0x18); in setfreq_i()
4747 i2c_w_mask(sd, OV7670_R13_COM8, OV7670_COM8_BFILT, in setfreq_i()
4749 i2c_w_mask(sd, OV7670_R3B_COM11, OV7670_COM11_HZAUTO, in setfreq_i()
4756 i2c_w_mask(sd, 0x2d, 0x00, 0x04); in setfreq_i()
4757 i2c_w_mask(sd, 0x2a, 0x00, 0x80); in setfreq_i()
4760 i2c_w_mask(sd, 0x2d, 0x04, 0x04); in setfreq_i()
4761 i2c_w_mask(sd, 0x2a, 0x80, 0x80); in setfreq_i()
4763 if (sd->sensor == SEN_OV6620 || in setfreq_i()
4764 sd->sensor == SEN_OV6630 || in setfreq_i()
4765 sd->sensor == SEN_OV66308AF) in setfreq_i()
4766 i2c_w(sd, 0x2b, 0x5e); in setfreq_i()
4768 i2c_w(sd, 0x2b, 0xac); in setfreq_i()
4771 i2c_w_mask(sd, 0x2d, 0x04, 0x04); in setfreq_i()
4772 if (sd->sensor == SEN_OV6620 || in setfreq_i()
4773 sd->sensor == SEN_OV6630 || in setfreq_i()
4774 sd->sensor == SEN_OV66308AF) { in setfreq_i()
4776 i2c_w_mask(sd, 0x2a, 0x80, 0x80); in setfreq_i()
4777 i2c_w(sd, 0x2b, 0xa8); in setfreq_i()
4780 i2c_w_mask(sd, 0x2a, 0x00, 0x80); in setfreq_i()
4789 struct sd *sd = (struct sd *) gspca_dev; in setfreq() local
4791 setfreq_i(sd, val); in setfreq()
4794 if (sd->bridge == BRIDGE_W9968CF) in setfreq()
4795 w9968cf_set_crop_window(sd); in setfreq()
4801 struct sd *sd = (struct sd *) gspca_dev; in sd_get_jcomp() local
4803 if (sd->bridge != BRIDGE_W9968CF) in sd_get_jcomp()
4807 jcomp->quality = v4l2_ctrl_g_ctrl(sd->jpegqual); in sd_get_jcomp()
4816 struct sd *sd = (struct sd *) gspca_dev; in sd_set_jcomp() local
4818 if (sd->bridge != BRIDGE_W9968CF) in sd_set_jcomp()
4821 v4l2_ctrl_s_ctrl(sd->jpegqual, jcomp->quality); in sd_set_jcomp()
4829 struct sd *sd = (struct sd *)gspca_dev; in sd_g_volatile_ctrl() local
4835 gspca_dev->exposure->val = i2c_r(sd, 0x10); in sd_g_volatile_ctrl()
4845 struct sd *sd = (struct sd *)gspca_dev; in sd_s_ctrl() local
4865 if (!ctrl->val && sd->brightness->is_new) in sd_s_ctrl()
4866 setbrightness(gspca_dev, sd->brightness->val); in sd_s_ctrl()
4872 sethvflip(gspca_dev, ctrl->val, sd->vflip->val); in sd_s_ctrl()
4893 struct sd *sd = (struct sd *)gspca_dev; in sd_init_controls() local
4898 if (valid_controls[sd->sensor].has_brightness) in sd_init_controls()
4899 sd->brightness = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
4901 sd->sensor == SEN_OV7660 ? 6 : 255, 1, in sd_init_controls()
4902 sd->sensor == SEN_OV7660 ? 3 : 127); in sd_init_controls()
4903 if (valid_controls[sd->sensor].has_contrast) { in sd_init_controls()
4904 if (sd->sensor == SEN_OV7660) in sd_init_controls()
4910 (sd->sensor == SEN_OV6630 || in sd_init_controls()
4911 sd->sensor == SEN_OV66308AF) ? 200 : 127); in sd_init_controls()
4913 if (valid_controls[sd->sensor].has_sat) in sd_init_controls()
4916 sd->sensor == SEN_OV7660 ? 4 : 255, 1, in sd_init_controls()
4917 sd->sensor == SEN_OV7660 ? 2 : 127); in sd_init_controls()
4918 if (valid_controls[sd->sensor].has_exposure) in sd_init_controls()
4921 if (valid_controls[sd->sensor].has_hvflip) { in sd_init_controls()
4922 sd->hflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
4924 sd->vflip = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
4927 if (valid_controls[sd->sensor].has_autobright) in sd_init_controls()
4928 sd->autobright = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
4930 if (valid_controls[sd->sensor].has_autogain) in sd_init_controls()
4933 if (valid_controls[sd->sensor].has_freq) { in sd_init_controls()
4934 if (sd->sensor == SEN_OV7670) in sd_init_controls()
4935 sd->freq = v4l2_ctrl_new_std_menu(hdl, &sd_ctrl_ops, in sd_init_controls()
4940 sd->freq = v4l2_ctrl_new_std_menu(hdl, &sd_ctrl_ops, in sd_init_controls()
4944 if (sd->bridge == BRIDGE_W9968CF) in sd_init_controls()
4945 sd->jpegqual = v4l2_ctrl_new_std(hdl, &sd_ctrl_ops, in sd_init_controls()
4955 if (sd->autobright) in sd_init_controls()
4956 v4l2_ctrl_auto_cluster(2, &sd->autobright, 0, false); in sd_init_controls()
4957 if (sd->hflip) in sd_init_controls()
4958 v4l2_ctrl_cluster(2, &sd->hflip); in sd_init_controls()
5021 return gspca_dev_probe(intf, id, &sd_desc, sizeof(struct sd), in sd_probe()