ov5675 66 drivers/media/i2c/ov5675.c #define to_ov5675(_sd) container_of(_sd, struct ov5675, sd) ov5675 512 drivers/media/i2c/ov5675.c static int ov5675_read_reg(struct ov5675 *ov5675, u16 reg, u16 len, u32 *val) ov5675 514 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 542 drivers/media/i2c/ov5675.c static int ov5675_write_reg(struct ov5675 *ov5675, u16 reg, u16 len, u32 val) ov5675 544 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 558 drivers/media/i2c/ov5675.c static int ov5675_write_reg_list(struct ov5675 *ov5675, ov5675 561 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 566 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, r_list->regs[i].address, 1, ov5675 579 drivers/media/i2c/ov5675.c static int ov5675_update_digital_gain(struct ov5675 *ov5675, u32 d_gain) ov5675 583 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, OV5675_REG_MWB_R_GAIN, ov5675 588 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, OV5675_REG_MWB_G_GAIN, ov5675 593 drivers/media/i2c/ov5675.c return ov5675_write_reg(ov5675, OV5675_REG_MWB_B_GAIN, ov5675 597 drivers/media/i2c/ov5675.c static int ov5675_test_pattern(struct ov5675 *ov5675, u32 pattern) ov5675 603 drivers/media/i2c/ov5675.c return ov5675_write_reg(ov5675, OV5675_REG_TEST_PATTERN, ov5675 609 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = container_of(ctrl->handler, ov5675 610 drivers/media/i2c/ov5675.c struct ov5675, ctrl_handler); ov5675 611 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 618 drivers/media/i2c/ov5675.c exposure_max = (ov5675->cur_mode->height + ctrl->val - ov5675 620 drivers/media/i2c/ov5675.c __v4l2_ctrl_modify_range(ov5675->exposure, ov5675 621 drivers/media/i2c/ov5675.c ov5675->exposure->minimum, ov5675 622 drivers/media/i2c/ov5675.c exposure_max, ov5675->exposure->step, ov5675 632 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, OV5675_REG_ANALOG_GAIN, ov5675 637 drivers/media/i2c/ov5675.c ret = ov5675_update_digital_gain(ov5675, ctrl->val); ov5675 642 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, OV5675_REG_EXPOSURE, ov5675 647 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, OV5675_REG_VTS, ov5675 649 drivers/media/i2c/ov5675.c ov5675->cur_mode->height + ctrl->val + ov5675 654 drivers/media/i2c/ov5675.c ret = ov5675_test_pattern(ov5675, ctrl->val); ov5675 671 drivers/media/i2c/ov5675.c static int ov5675_init_controls(struct ov5675 *ov5675) ov5675 677 drivers/media/i2c/ov5675.c ctrl_hdlr = &ov5675->ctrl_handler; ov5675 682 drivers/media/i2c/ov5675.c ctrl_hdlr->lock = &ov5675->mutex; ov5675 683 drivers/media/i2c/ov5675.c ov5675->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, &ov5675_ctrl_ops, ov5675 687 drivers/media/i2c/ov5675.c if (ov5675->link_freq) ov5675 688 drivers/media/i2c/ov5675.c ov5675->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY; ov5675 690 drivers/media/i2c/ov5675.c ov5675->pixel_rate = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops, ov5675 695 drivers/media/i2c/ov5675.c ov5675->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops, ov5675 697 drivers/media/i2c/ov5675.c ov5675->cur_mode->vts_min - ov5675->cur_mode->height, ov5675 698 drivers/media/i2c/ov5675.c OV5675_VTS_MAX - ov5675->cur_mode->height, 1, ov5675 699 drivers/media/i2c/ov5675.c ov5675->cur_mode->vts_def - ov5675->cur_mode->height); ov5675 700 drivers/media/i2c/ov5675.c h_blank = to_pixels_per_line(ov5675->cur_mode->hts, ov5675 701 drivers/media/i2c/ov5675.c ov5675->cur_mode->link_freq_index) - ov5675->cur_mode->width; ov5675 702 drivers/media/i2c/ov5675.c ov5675->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops, ov5675 705 drivers/media/i2c/ov5675.c if (ov5675->hblank) ov5675 706 drivers/media/i2c/ov5675.c ov5675->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; ov5675 714 drivers/media/i2c/ov5675.c exposure_max = (ov5675->cur_mode->vts_def - ov5675 716 drivers/media/i2c/ov5675.c ov5675->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &ov5675_ctrl_ops, ov5675 728 drivers/media/i2c/ov5675.c ov5675->sd.ctrl_handler = ctrl_hdlr; ov5675 742 drivers/media/i2c/ov5675.c static int ov5675_start_streaming(struct ov5675 *ov5675) ov5675 744 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 748 drivers/media/i2c/ov5675.c link_freq_index = ov5675->cur_mode->link_freq_index; ov5675 750 drivers/media/i2c/ov5675.c ret = ov5675_write_reg_list(ov5675, reg_list); ov5675 756 drivers/media/i2c/ov5675.c reg_list = &ov5675->cur_mode->reg_list; ov5675 757 drivers/media/i2c/ov5675.c ret = ov5675_write_reg_list(ov5675, reg_list); ov5675 763 drivers/media/i2c/ov5675.c ret = __v4l2_ctrl_handler_setup(ov5675->sd.ctrl_handler); ov5675 767 drivers/media/i2c/ov5675.c ret = ov5675_write_reg(ov5675, OV5675_REG_MODE_SELECT, ov5675 777 drivers/media/i2c/ov5675.c static void ov5675_stop_streaming(struct ov5675 *ov5675) ov5675 779 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 781 drivers/media/i2c/ov5675.c if (ov5675_write_reg(ov5675, OV5675_REG_MODE_SELECT, ov5675 788 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 792 drivers/media/i2c/ov5675.c if (ov5675->streaming == enable) ov5675 795 drivers/media/i2c/ov5675.c mutex_lock(&ov5675->mutex); ov5675 800 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 804 drivers/media/i2c/ov5675.c ret = ov5675_start_streaming(ov5675); ov5675 807 drivers/media/i2c/ov5675.c ov5675_stop_streaming(ov5675); ov5675 811 drivers/media/i2c/ov5675.c ov5675_stop_streaming(ov5675); ov5675 815 drivers/media/i2c/ov5675.c ov5675->streaming = enable; ov5675 816 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 825 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 827 drivers/media/i2c/ov5675.c mutex_lock(&ov5675->mutex); ov5675 828 drivers/media/i2c/ov5675.c if (ov5675->streaming) ov5675 829 drivers/media/i2c/ov5675.c ov5675_stop_streaming(ov5675); ov5675 831 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 840 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 843 drivers/media/i2c/ov5675.c mutex_lock(&ov5675->mutex); ov5675 844 drivers/media/i2c/ov5675.c if (ov5675->streaming) { ov5675 845 drivers/media/i2c/ov5675.c ret = ov5675_start_streaming(ov5675); ov5675 847 drivers/media/i2c/ov5675.c ov5675->streaming = false; ov5675 848 drivers/media/i2c/ov5675.c ov5675_stop_streaming(ov5675); ov5675 849 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 854 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 863 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 872 drivers/media/i2c/ov5675.c mutex_lock(&ov5675->mutex); ov5675 877 drivers/media/i2c/ov5675.c ov5675->cur_mode = mode; ov5675 878 drivers/media/i2c/ov5675.c __v4l2_ctrl_s_ctrl(ov5675->link_freq, mode->link_freq_index); ov5675 879 drivers/media/i2c/ov5675.c __v4l2_ctrl_s_ctrl_int64(ov5675->pixel_rate, ov5675 884 drivers/media/i2c/ov5675.c __v4l2_ctrl_modify_range(ov5675->vblank, ov5675 888 drivers/media/i2c/ov5675.c __v4l2_ctrl_s_ctrl(ov5675->vblank, vblank_def); ov5675 891 drivers/media/i2c/ov5675.c __v4l2_ctrl_modify_range(ov5675->hblank, h_blank, h_blank, 1, ov5675 895 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 904 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 906 drivers/media/i2c/ov5675.c mutex_lock(&ov5675->mutex); ov5675 908 drivers/media/i2c/ov5675.c fmt->format = *v4l2_subdev_get_try_format(&ov5675->sd, cfg, ov5675 911 drivers/media/i2c/ov5675.c ov5675_update_pad_format(ov5675->cur_mode, &fmt->format); ov5675 913 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 950 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 952 drivers/media/i2c/ov5675.c mutex_lock(&ov5675->mutex); ov5675 955 drivers/media/i2c/ov5675.c mutex_unlock(&ov5675->mutex); ov5675 984 drivers/media/i2c/ov5675.c static int ov5675_identify_module(struct ov5675 *ov5675) ov5675 986 drivers/media/i2c/ov5675.c struct i2c_client *client = v4l2_get_subdevdata(&ov5675->sd); ov5675 990 drivers/media/i2c/ov5675.c ret = ov5675_read_reg(ov5675, OV5675_REG_CHIP_ID, ov5675 1076 drivers/media/i2c/ov5675.c struct ov5675 *ov5675 = to_ov5675(sd); ov5675 1082 drivers/media/i2c/ov5675.c mutex_destroy(&ov5675->mutex); ov5675 1089 drivers/media/i2c/ov5675.c struct ov5675 *ov5675; ov5675 1099 drivers/media/i2c/ov5675.c ov5675 = devm_kzalloc(&client->dev, sizeof(*ov5675), GFP_KERNEL); ov5675 1100 drivers/media/i2c/ov5675.c if (!ov5675) ov5675 1103 drivers/media/i2c/ov5675.c v4l2_i2c_subdev_init(&ov5675->sd, client, &ov5675_subdev_ops); ov5675 1104 drivers/media/i2c/ov5675.c ret = ov5675_identify_module(ov5675); ov5675 1110 drivers/media/i2c/ov5675.c mutex_init(&ov5675->mutex); ov5675 1111 drivers/media/i2c/ov5675.c ov5675->cur_mode = &supported_modes[0]; ov5675 1112 drivers/media/i2c/ov5675.c ret = ov5675_init_controls(ov5675); ov5675 1118 drivers/media/i2c/ov5675.c ov5675->sd.internal_ops = &ov5675_internal_ops; ov5675 1119 drivers/media/i2c/ov5675.c ov5675->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE; ov5675 1120 drivers/media/i2c/ov5675.c ov5675->sd.entity.ops = &ov5675_subdev_entity_ops; ov5675 1121 drivers/media/i2c/ov5675.c ov5675->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR; ov5675 1122 drivers/media/i2c/ov5675.c ov5675->pad.flags = MEDIA_PAD_FL_SOURCE; ov5675 1123 drivers/media/i2c/ov5675.c ret = media_entity_pads_init(&ov5675->sd.entity, 1, &ov5675->pad); ov5675 1129 drivers/media/i2c/ov5675.c ret = v4l2_async_register_subdev_sensor_common(&ov5675->sd); ov5675 1147 drivers/media/i2c/ov5675.c media_entity_cleanup(&ov5675->sd.entity); ov5675 1150 drivers/media/i2c/ov5675.c v4l2_ctrl_handler_free(ov5675->sd.ctrl_handler); ov5675 1151 drivers/media/i2c/ov5675.c mutex_destroy(&ov5675->mutex);