Lines Matching defs:hi556

107 #define to_hi556(_sd) container_of(_sd, struct hi556, sd)
478 struct hi556 {
509 static int hi556_read_reg(struct hi556 *hi556, u16 reg, u16 len, u32 *val)
511 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
539 static int hi556_write_reg(struct hi556 *hi556, u16 reg, u16 len, u32 val)
541 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
555 static int hi556_write_reg_list(struct hi556 *hi556,
558 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
563 ret = hi556_write_reg(hi556, r_list->regs[i].address,
577 static int hi556_update_digital_gain(struct hi556 *hi556, u32 d_gain)
581 ret = hi556_write_reg(hi556, HI556_REG_MWB_GR_GAIN,
586 ret = hi556_write_reg(hi556, HI556_REG_MWB_GB_GAIN,
591 ret = hi556_write_reg(hi556, HI556_REG_MWB_R_GAIN,
596 return hi556_write_reg(hi556, HI556_REG_MWB_B_GAIN,
600 static int hi556_test_pattern(struct hi556 *hi556, u32 pattern)
606 ret = hi556_read_reg(hi556, HI556_REG_ISP,
611 ret = hi556_write_reg(hi556, HI556_REG_ISP,
618 return hi556_write_reg(hi556, HI556_REG_TEST_PATTERN,
624 struct hi556 *hi556 = container_of(ctrl->handler,
625 struct hi556, ctrl_handler);
626 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
633 exposure_max = hi556->cur_mode->height + ctrl->val -
635 __v4l2_ctrl_modify_range(hi556->exposure,
636 hi556->exposure->minimum,
637 exposure_max, hi556->exposure->step,
647 ret = hi556_write_reg(hi556, HI556_REG_ANALOG_GAIN,
652 ret = hi556_update_digital_gain(hi556, ctrl->val);
656 ret = hi556_write_reg(hi556, HI556_REG_EXPOSURE,
662 ret = hi556_write_reg(hi556, HI556_REG_FLL,
664 hi556->cur_mode->height + ctrl->val);
668 ret = hi556_test_pattern(hi556, ctrl->val);
685 static int hi556_init_controls(struct hi556 *hi556)
691 ctrl_hdlr = &hi556->ctrl_handler;
696 ctrl_hdlr->lock = &hi556->mutex;
697 hi556->link_freq = v4l2_ctrl_new_int_menu(ctrl_hdlr, &hi556_ctrl_ops,
701 if (hi556->link_freq)
702 hi556->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY;
704 hi556->pixel_rate = v4l2_ctrl_new_std
710 hi556->vblank = v4l2_ctrl_new_std(ctrl_hdlr, &hi556_ctrl_ops,
712 hi556->cur_mode->fll_min -
713 hi556->cur_mode->height,
715 hi556->cur_mode->height, 1,
716 hi556->cur_mode->fll_def -
717 hi556->cur_mode->height);
719 h_blank = hi556->cur_mode->llp - hi556->cur_mode->width;
721 hi556->hblank = v4l2_ctrl_new_std(ctrl_hdlr, &hi556_ctrl_ops,
724 if (hi556->hblank)
725 hi556->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
733 exposure_max = hi556->cur_mode->fll_def - HI556_EXPOSURE_MAX_MARGIN;
734 hi556->exposure = v4l2_ctrl_new_std(ctrl_hdlr, &hi556_ctrl_ops,
746 hi556->sd.ctrl_handler = ctrl_hdlr;
760 static int hi556_start_streaming(struct hi556 *hi556)
762 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
766 link_freq_index = hi556->cur_mode->link_freq_index;
768 ret = hi556_write_reg_list(hi556, reg_list);
774 reg_list = &hi556->cur_mode->reg_list;
775 ret = hi556_write_reg_list(hi556, reg_list);
781 ret = __v4l2_ctrl_handler_setup(hi556->sd.ctrl_handler);
785 ret = hi556_write_reg(hi556, HI556_REG_MODE_SELECT,
796 static void hi556_stop_streaming(struct hi556 *hi556)
798 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
800 if (hi556_write_reg(hi556, HI556_REG_MODE_SELECT,
807 struct hi556 *hi556 = to_hi556(sd);
811 if (hi556->streaming == enable)
814 mutex_lock(&hi556->mutex);
819 mutex_unlock(&hi556->mutex);
823 ret = hi556_start_streaming(hi556);
826 hi556_stop_streaming(hi556);
830 hi556_stop_streaming(hi556);
834 hi556->streaming = enable;
835 mutex_unlock(&hi556->mutex);
844 struct hi556 *hi556 = to_hi556(sd);
846 mutex_lock(&hi556->mutex);
847 if (hi556->streaming)
848 hi556_stop_streaming(hi556);
850 mutex_unlock(&hi556->mutex);
859 struct hi556 *hi556 = to_hi556(sd);
862 mutex_lock(&hi556->mutex);
863 if (hi556->streaming) {
864 ret = hi556_start_streaming(hi556);
869 mutex_unlock(&hi556->mutex);
874 hi556_stop_streaming(hi556);
875 hi556->streaming = 0;
876 mutex_unlock(&hi556->mutex);
884 struct hi556 *hi556 = to_hi556(sd);
893 mutex_lock(&hi556->mutex);
898 hi556->cur_mode = mode;
899 __v4l2_ctrl_s_ctrl(hi556->link_freq, mode->link_freq_index);
900 __v4l2_ctrl_s_ctrl_int64(hi556->pixel_rate,
905 __v4l2_ctrl_modify_range(hi556->vblank,
909 __v4l2_ctrl_s_ctrl(hi556->vblank, vblank_def);
911 h_blank = hi556->cur_mode->llp - hi556->cur_mode->width;
913 __v4l2_ctrl_modify_range(hi556->hblank, h_blank, h_blank, 1,
917 mutex_unlock(&hi556->mutex);
926 struct hi556 *hi556 = to_hi556(sd);
928 mutex_lock(&hi556->mutex);
930 fmt->format = *v4l2_subdev_get_try_format(&hi556->sd, cfg,
933 hi556_assign_pad_format(hi556->cur_mode, &fmt->format);
935 mutex_unlock(&hi556->mutex);
972 struct hi556 *hi556 = to_hi556(sd);
974 mutex_lock(&hi556->mutex);
977 mutex_unlock(&hi556->mutex);
1006 static int hi556_identify_module(struct hi556 *hi556)
1008 struct i2c_client *client = v4l2_get_subdevdata(&hi556->sd);
1012 ret = hi556_read_reg(hi556, HI556_REG_CHIP_ID,
1097 struct hi556 *hi556 = to_hi556(sd);
1103 mutex_destroy(&hi556->mutex);
1110 struct hi556 *hi556;
1120 hi556 = devm_kzalloc(&client->dev, sizeof(*hi556), GFP_KERNEL);
1121 if (!hi556)
1124 v4l2_i2c_subdev_init(&hi556->sd, client, &hi556_subdev_ops);
1125 ret = hi556_identify_module(hi556);
1131 mutex_init(&hi556->mutex);
1132 hi556->cur_mode = &supported_modes[0];
1133 ret = hi556_init_controls(hi556);
1139 hi556->sd.internal_ops = &hi556_internal_ops;
1140 hi556->sd.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
1141 hi556->sd.entity.ops = &hi556_subdev_entity_ops;
1142 hi556->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
1143 hi556->pad.flags = MEDIA_PAD_FL_SOURCE;
1144 ret = media_entity_pads_init(&hi556->sd.entity, 1, &hi556->pad);
1150 ret = v4l2_async_register_subdev_sensor_common(&hi556->sd);
1164 media_entity_cleanup(&hi556->sd.entity);
1167 v4l2_ctrl_handler_free(hi556->sd.ctrl_handler);
1168 mutex_destroy(&hi556->mutex);
1188 .name = "hi556",