Lines Matching refs:ov13858

1029 struct ov13858 {  struct
1051 #define to_ov13858(_sd) container_of(_sd, struct ov13858, sd) argument
1054 static int ov13858_read_reg(struct ov13858 *ov13858, u16 reg, u32 len, in ov13858_read_reg() argument
1057 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_read_reg()
1090 static int ov13858_write_reg(struct ov13858 *ov13858, u16 reg, u32 len, in ov13858_write_reg() argument
1093 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_write_reg()
1119 static int ov13858_write_regs(struct ov13858 *ov13858, in ov13858_write_regs() argument
1122 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_write_regs()
1127 ret = ov13858_write_reg(ov13858, regs[i].address, 1, in ov13858_write_regs()
1142 static int ov13858_write_reg_list(struct ov13858 *ov13858, in ov13858_write_reg_list() argument
1145 return ov13858_write_regs(ov13858, r_list->regs, r_list->num_of_regs); in ov13858_write_reg_list()
1151 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_open() local
1156 mutex_lock(&ov13858->mutex); in ov13858_open()
1159 try_fmt->width = ov13858->cur_mode->width; in ov13858_open()
1160 try_fmt->height = ov13858->cur_mode->height; in ov13858_open()
1165 mutex_unlock(&ov13858->mutex); in ov13858_open()
1170 static int ov13858_update_digital_gain(struct ov13858 *ov13858, u32 d_gain) in ov13858_update_digital_gain() argument
1174 ret = ov13858_write_reg(ov13858, OV13858_REG_B_MWB_GAIN, in ov13858_update_digital_gain()
1179 ret = ov13858_write_reg(ov13858, OV13858_REG_G_MWB_GAIN, in ov13858_update_digital_gain()
1184 ret = ov13858_write_reg(ov13858, OV13858_REG_R_MWB_GAIN, in ov13858_update_digital_gain()
1190 static int ov13858_enable_test_pattern(struct ov13858 *ov13858, u32 pattern) in ov13858_enable_test_pattern() argument
1195 ret = ov13858_read_reg(ov13858, OV13858_REG_TEST_PATTERN, in ov13858_enable_test_pattern()
1207 return ov13858_write_reg(ov13858, OV13858_REG_TEST_PATTERN, in ov13858_enable_test_pattern()
1213 struct ov13858 *ov13858 = container_of(ctrl->handler, in ov13858_set_ctrl() local
1214 struct ov13858, ctrl_handler); in ov13858_set_ctrl()
1215 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_set_ctrl()
1223 max = ov13858->cur_mode->height + ctrl->val - 8; in ov13858_set_ctrl()
1224 __v4l2_ctrl_modify_range(ov13858->exposure, in ov13858_set_ctrl()
1225 ov13858->exposure->minimum, in ov13858_set_ctrl()
1226 max, ov13858->exposure->step, max); in ov13858_set_ctrl()
1240 ret = ov13858_write_reg(ov13858, OV13858_REG_ANALOG_GAIN, in ov13858_set_ctrl()
1244 ret = ov13858_update_digital_gain(ov13858, ctrl->val); in ov13858_set_ctrl()
1247 ret = ov13858_write_reg(ov13858, OV13858_REG_EXPOSURE, in ov13858_set_ctrl()
1253 ret = ov13858_write_reg(ov13858, OV13858_REG_VTS, in ov13858_set_ctrl()
1255 ov13858->cur_mode->height in ov13858_set_ctrl()
1259 ret = ov13858_enable_test_pattern(ov13858, ctrl->val); in ov13858_set_ctrl()
1317 static int ov13858_do_get_pad_format(struct ov13858 *ov13858, in ov13858_do_get_pad_format() argument
1322 struct v4l2_subdev *sd = &ov13858->sd; in ov13858_do_get_pad_format()
1328 ov13858_update_pad_format(ov13858->cur_mode, fmt); in ov13858_do_get_pad_format()
1338 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_get_pad_format() local
1341 mutex_lock(&ov13858->mutex); in ov13858_get_pad_format()
1342 ret = ov13858_do_get_pad_format(ov13858, cfg, fmt); in ov13858_get_pad_format()
1343 mutex_unlock(&ov13858->mutex); in ov13858_get_pad_format()
1353 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_set_pad_format() local
1362 mutex_lock(&ov13858->mutex); in ov13858_set_pad_format()
1377 ov13858->cur_mode = mode; in ov13858_set_pad_format()
1378 __v4l2_ctrl_s_ctrl(ov13858->link_freq, mode->link_freq_index); in ov13858_set_pad_format()
1381 __v4l2_ctrl_s_ctrl_int64(ov13858->pixel_rate, pixel_rate); in ov13858_set_pad_format()
1384 vblank_def = ov13858->cur_mode->vts_def - in ov13858_set_pad_format()
1385 ov13858->cur_mode->height; in ov13858_set_pad_format()
1386 vblank_min = ov13858->cur_mode->vts_min - in ov13858_set_pad_format()
1387 ov13858->cur_mode->height; in ov13858_set_pad_format()
1389 ov13858->vblank, vblank_min, in ov13858_set_pad_format()
1390 OV13858_VTS_MAX - ov13858->cur_mode->height, 1, in ov13858_set_pad_format()
1392 __v4l2_ctrl_s_ctrl(ov13858->vblank, vblank_def); in ov13858_set_pad_format()
1395 - ov13858->cur_mode->width; in ov13858_set_pad_format()
1396 __v4l2_ctrl_modify_range(ov13858->hblank, h_blank, in ov13858_set_pad_format()
1400 mutex_unlock(&ov13858->mutex); in ov13858_set_pad_format()
1413 static int ov13858_start_streaming(struct ov13858 *ov13858) in ov13858_start_streaming() argument
1415 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_start_streaming()
1420 ret = ov13858_write_reg(ov13858, OV13858_REG_SOFTWARE_RST, in ov13858_start_streaming()
1429 link_freq_index = ov13858->cur_mode->link_freq_index; in ov13858_start_streaming()
1431 ret = ov13858_write_reg_list(ov13858, reg_list); in ov13858_start_streaming()
1438 reg_list = &ov13858->cur_mode->reg_list; in ov13858_start_streaming()
1439 ret = ov13858_write_reg_list(ov13858, reg_list); in ov13858_start_streaming()
1446 ret = __v4l2_ctrl_handler_setup(ov13858->sd.ctrl_handler); in ov13858_start_streaming()
1450 return ov13858_write_reg(ov13858, OV13858_REG_MODE_SELECT, in ov13858_start_streaming()
1456 static int ov13858_stop_streaming(struct ov13858 *ov13858) in ov13858_stop_streaming() argument
1458 return ov13858_write_reg(ov13858, OV13858_REG_MODE_SELECT, in ov13858_stop_streaming()
1464 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_set_stream() local
1468 mutex_lock(&ov13858->mutex); in ov13858_set_stream()
1469 if (ov13858->streaming == enable) { in ov13858_set_stream()
1470 mutex_unlock(&ov13858->mutex); in ov13858_set_stream()
1485 ret = ov13858_start_streaming(ov13858); in ov13858_set_stream()
1489 ov13858_stop_streaming(ov13858); in ov13858_set_stream()
1493 ov13858->streaming = enable; in ov13858_set_stream()
1494 mutex_unlock(&ov13858->mutex); in ov13858_set_stream()
1501 mutex_unlock(&ov13858->mutex); in ov13858_set_stream()
1510 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_suspend() local
1512 if (ov13858->streaming) in ov13858_suspend()
1513 ov13858_stop_streaming(ov13858); in ov13858_suspend()
1522 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_resume() local
1525 if (ov13858->streaming) { in ov13858_resume()
1526 ret = ov13858_start_streaming(ov13858); in ov13858_resume()
1534 ov13858_stop_streaming(ov13858); in ov13858_resume()
1535 ov13858->streaming = false; in ov13858_resume()
1540 static int ov13858_identify_module(struct ov13858 *ov13858) in ov13858_identify_module() argument
1542 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_identify_module()
1546 ret = ov13858_read_reg(ov13858, OV13858_REG_CHIP_ID, in ov13858_identify_module()
1590 static int ov13858_init_controls(struct ov13858 *ov13858) in ov13858_init_controls() argument
1592 struct i2c_client *client = v4l2_get_subdevdata(&ov13858->sd); in ov13858_init_controls()
1604 ctrl_hdlr = &ov13858->ctrl_handler; in ov13858_init_controls()
1609 mutex_init(&ov13858->mutex); in ov13858_init_controls()
1610 ctrl_hdlr->lock = &ov13858->mutex; in ov13858_init_controls()
1611 ov13858->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, in ov13858_init_controls()
1617 if (ov13858->link_freq) in ov13858_init_controls()
1618 ov13858->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov13858_init_controls()
1623 ov13858->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov13858_ctrl_ops, in ov13858_init_controls()
1628 mode = ov13858->cur_mode; in ov13858_init_controls()
1631 ov13858->vblank = v4l2_ctrl_new_std( in ov13858_init_controls()
1638 ov13858->hblank = v4l2_ctrl_new_std( in ov13858_init_controls()
1641 if (ov13858->hblank) in ov13858_init_controls()
1642 ov13858->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov13858_init_controls()
1645 ov13858->exposure = v4l2_ctrl_new_std( in ov13858_init_controls()
1680 ov13858->sd.ctrl_handler = ctrl_hdlr; in ov13858_init_controls()
1686 mutex_destroy(&ov13858->mutex); in ov13858_init_controls()
1691 static void ov13858_free_controls(struct ov13858 *ov13858) in ov13858_free_controls() argument
1693 v4l2_ctrl_handler_free(ov13858->sd.ctrl_handler); in ov13858_free_controls()
1694 mutex_destroy(&ov13858->mutex); in ov13858_free_controls()
1700 struct ov13858 *ov13858; in ov13858_probe() local
1708 ov13858 = devm_kzalloc(&client->dev, sizeof(*ov13858), GFP_KERNEL); in ov13858_probe()
1709 if (!ov13858) in ov13858_probe()
1713 v4l2_i2c_subdev_init(&ov13858->sd, client, &ov13858_subdev_ops); in ov13858_probe()
1716 ret = ov13858_identify_module(ov13858); in ov13858_probe()
1723 ov13858->cur_mode = &supported_modes[0]; in ov13858_probe()
1725 ret = ov13858_init_controls(ov13858); in ov13858_probe()
1730 ov13858->sd.internal_ops = &ov13858_internal_ops; in ov13858_probe()
1731 ov13858->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; in ov13858_probe()
1732 ov13858->sd.entity.ops = &ov13858_subdev_entity_ops; in ov13858_probe()
1733 ov13858->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; in ov13858_probe()
1736 ov13858->pad.flags = MEDIA_PAD_FL_SOURCE; in ov13858_probe()
1737 ret = media_entity_pads_init(&ov13858->sd.entity, 1, &ov13858->pad); in ov13858_probe()
1743 ret = v4l2_async_register_subdev_sensor_common(&ov13858->sd); in ov13858_probe()
1758 media_entity_cleanup(&ov13858->sd.entity); in ov13858_probe()
1761 ov13858_free_controls(ov13858); in ov13858_probe()
1770 struct ov13858 *ov13858 = to_ov13858(sd); in ov13858_remove() local
1774 ov13858_free_controls(ov13858); in ov13858_remove()