Lines Matching refs:gc5035

159 struct gc5035 {  struct
196 #define to_gc5035(sd) container_of(sd, struct gc5035, subdev) argument
491 gc5035_find_best_fit(struct gc5035 *gc5035, in gc5035_find_best_fit() argument
500 for (i = 0; i < gc5035->cfg_num; i++) { in gc5035_find_best_fit()
515 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_set_fmt() local
519 mutex_lock(&gc5035->mutex); in gc5035_set_fmt()
521 mode = gc5035_find_best_fit(gc5035, fmt); in gc5035_set_fmt()
530 mutex_unlock(&gc5035->mutex); in gc5035_set_fmt()
534 gc5035->cur_mode = mode; in gc5035_set_fmt()
536 __v4l2_ctrl_modify_range(gc5035->hblank, h_blank, in gc5035_set_fmt()
539 __v4l2_ctrl_modify_range(gc5035->vblank, vblank_def, in gc5035_set_fmt()
544 mutex_unlock(&gc5035->mutex); in gc5035_set_fmt()
553 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_get_fmt() local
554 const struct gc5035_mode *mode = gc5035->cur_mode; in gc5035_get_fmt()
556 mutex_lock(&gc5035->mutex); in gc5035_get_fmt()
561 mutex_unlock(&gc5035->mutex); in gc5035_get_fmt()
570 mutex_unlock(&gc5035->mutex); in gc5035_get_fmt()
590 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_enum_frame_sizes() local
592 if (fse->index >= gc5035->cfg_num) in gc5035_enum_frame_sizes()
609 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_g_frame_interval() local
610 const struct gc5035_mode *mode = gc5035->cur_mode; in gc5035_g_frame_interval()
617 static void gc5035_get_module_inf(struct gc5035 *gc5035, in gc5035_get_module_inf() argument
624 gc5035->module_name, in gc5035_get_module_inf()
627 gc5035->len_name, in gc5035_get_module_inf()
631 static void gc5035_set_module_inf(struct gc5035 *gc5035, in gc5035_set_module_inf() argument
634 mutex_lock(&gc5035->mutex); in gc5035_set_module_inf()
635 memcpy(&gc5035->awb_cfg, cfg, sizeof(*cfg)); in gc5035_set_module_inf()
636 mutex_unlock(&gc5035->mutex); in gc5035_set_module_inf()
641 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_ioctl() local
647 gc5035_get_module_inf(gc5035, (struct rkmodule_inf *)arg); in gc5035_ioctl()
650 gc5035_set_module_inf(gc5035, (struct rkmodule_awb_cfg *)arg); in gc5035_ioctl()
657 ret = gc5035_write_reg(gc5035->client, in gc5035_ioctl()
660 ret |= gc5035_write_reg(gc5035->client, in gc5035_ioctl()
664 ret = gc5035_write_reg(gc5035->client, in gc5035_ioctl()
667 ret |= gc5035_write_reg(gc5035->client, in gc5035_ioctl()
737 static int __gc5035_start_stream(struct gc5035 *gc5035) in __gc5035_start_stream() argument
741 ret = gc5035_write_array(gc5035->client, gc5035->cur_mode->reg_list); in __gc5035_start_stream()
746 mutex_unlock(&gc5035->mutex); in __gc5035_start_stream()
747 ret = v4l2_ctrl_handler_setup(&gc5035->ctrl_handler); in __gc5035_start_stream()
748 mutex_lock(&gc5035->mutex); in __gc5035_start_stream()
751 ret = gc5035_write_reg(gc5035->client, in __gc5035_start_stream()
754 ret |= gc5035_write_reg(gc5035->client, in __gc5035_start_stream()
760 static int __gc5035_stop_stream(struct gc5035 *gc5035) in __gc5035_stop_stream() argument
764 ret = gc5035_write_reg(gc5035->client, in __gc5035_stop_stream()
767 ret |= gc5035_write_reg(gc5035->client, in __gc5035_stop_stream()
775 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_s_stream() local
776 struct i2c_client *client = gc5035->client; in gc5035_s_stream()
779 mutex_lock(&gc5035->mutex); in gc5035_s_stream()
781 if (on == gc5035->streaming) in gc5035_s_stream()
791 ret = __gc5035_start_stream(gc5035); in gc5035_s_stream()
798 __gc5035_stop_stream(gc5035); in gc5035_s_stream()
802 gc5035->streaming = on; in gc5035_s_stream()
805 mutex_unlock(&gc5035->mutex); in gc5035_s_stream()
812 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_s_power() local
813 struct i2c_client *client = gc5035->client; in gc5035_s_power()
816 mutex_lock(&gc5035->mutex); in gc5035_s_power()
819 if (gc5035->power_on == !!on) in gc5035_s_power()
829 ret = gc5035_write_array(gc5035->client, gc5035_global_regs); in gc5035_s_power()
836 gc5035->power_on = true; in gc5035_s_power()
839 gc5035->power_on = false; in gc5035_s_power()
843 mutex_unlock(&gc5035->mutex); in gc5035_s_power()
854 static int __gc5035_power_on(struct gc5035 *gc5035) in __gc5035_power_on() argument
858 struct device *dev = &gc5035->client->dev; in __gc5035_power_on()
860 if (!IS_ERR_OR_NULL(gc5035->pins_default)) { in __gc5035_power_on()
861 ret = pinctrl_select_state(gc5035->pinctrl, in __gc5035_power_on()
862 gc5035->pins_default); in __gc5035_power_on()
866 ret = clk_set_rate(gc5035->xvclk, GC5035_XVCLK_FREQ); in __gc5035_power_on()
869 if (clk_get_rate(gc5035->xvclk) != GC5035_XVCLK_FREQ) in __gc5035_power_on()
871 ret = clk_prepare_enable(gc5035->xvclk); in __gc5035_power_on()
876 if (!IS_ERR(gc5035->reset_gpio)) in __gc5035_power_on()
877 gpiod_set_value_cansleep(gc5035->reset_gpio, 0); in __gc5035_power_on()
879 ret = regulator_bulk_enable(GC5035_NUM_SUPPLIES, gc5035->supplies); in __gc5035_power_on()
886 if (!IS_ERR(gc5035->reset_gpio)) in __gc5035_power_on()
887 gpiod_set_value_cansleep(gc5035->reset_gpio, 1); in __gc5035_power_on()
890 if (!IS_ERR(gc5035->pwdn_gpio)) in __gc5035_power_on()
891 gpiod_set_value_cansleep(gc5035->pwdn_gpio, 1); in __gc5035_power_on()
900 clk_disable_unprepare(gc5035->xvclk); in __gc5035_power_on()
905 static void __gc5035_power_off(struct gc5035 *gc5035) in __gc5035_power_off() argument
909 if (!IS_ERR(gc5035->pwdn_gpio)) in __gc5035_power_off()
910 gpiod_set_value_cansleep(gc5035->pwdn_gpio, 0); in __gc5035_power_off()
911 clk_disable_unprepare(gc5035->xvclk); in __gc5035_power_off()
912 if (!IS_ERR(gc5035->reset_gpio)) in __gc5035_power_off()
913 gpiod_set_value_cansleep(gc5035->reset_gpio, 0); in __gc5035_power_off()
914 if (!IS_ERR_OR_NULL(gc5035->pins_sleep)) { in __gc5035_power_off()
915 ret = pinctrl_select_state(gc5035->pinctrl, in __gc5035_power_off()
916 gc5035->pins_sleep); in __gc5035_power_off()
918 dev_dbg(&gc5035->client->dev, "could not set pins\n"); in __gc5035_power_off()
920 regulator_bulk_disable(GC5035_NUM_SUPPLIES, gc5035->supplies); in __gc5035_power_off()
927 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_runtime_resume() local
929 return __gc5035_power_on(gc5035); in gc5035_runtime_resume()
936 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_runtime_suspend() local
938 __gc5035_power_off(gc5035); in gc5035_runtime_suspend()
946 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_open() local
951 mutex_lock(&gc5035->mutex); in gc5035_open()
958 mutex_unlock(&gc5035->mutex); in gc5035_open()
968 struct gc5035 *sensor = to_gc5035(sd); in sensor_g_mbus_config()
989 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_enum_frame_interval() local
991 if (fie->index >= gc5035->cfg_num) in gc5035_enum_frame_interval()
1041 static int gc5035_set_test_pattern(struct gc5035 *gc5035, int value) in gc5035_set_test_pattern() argument
1045 dev_info(&gc5035->client->dev, "Test Pattern!!\n"); in gc5035_set_test_pattern()
1046 ret = gc5035_write_reg(gc5035->client, 0xfe, 0x01); in gc5035_set_test_pattern()
1047 ret |= gc5035_write_reg(gc5035->client, 0x8c, value); in gc5035_set_test_pattern()
1048 ret |= gc5035_write_reg(gc5035->client, 0xfe, 0x00); in gc5035_set_test_pattern()
1060 static int gc5035_set_exposure_reg(struct gc5035 *gc5035, u32 exposure) in gc5035_set_exposure_reg() argument
1067 gc5035->Dgain_ratio = 64 * exposure / caltime; in gc5035_set_exposure_reg()
1068 ret = gc5035_write_reg(gc5035->client, in gc5035_set_exposure_reg()
1072 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_exposure_reg()
1075 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_exposure_reg()
1102 static int gc5035_set_gain_reg(struct gc5035 *gc5035, u32 a_gain) in gc5035_set_gain_reg() argument
1104 struct device *dev = &gc5035->client->dev; in gc5035_set_gain_reg()
1118 ret = gc5035_write_reg(gc5035->client, in gc5035_set_gain_reg()
1121 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_gain_reg()
1124 temp_gain = temp_gain * gc5035->Dgain_ratio / GC5035_AGC_Param[i][0]; in gc5035_set_gain_reg()
1128 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_gain_reg()
1131 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_gain_reg()
1139 struct gc5035 *gc5035 = container_of(ctrl->handler, in gc5035_set_ctrl() local
1140 struct gc5035, ctrl_handler); in gc5035_set_ctrl()
1141 struct i2c_client *client = gc5035->client; in gc5035_set_ctrl()
1149 max = gc5035->cur_mode->height + ctrl->val - 4; in gc5035_set_ctrl()
1150 __v4l2_ctrl_modify_range(gc5035->exposure, in gc5035_set_ctrl()
1151 gc5035->exposure->minimum, max, in gc5035_set_ctrl()
1152 gc5035->exposure->step, in gc5035_set_ctrl()
1153 gc5035->exposure->default_value); in gc5035_set_ctrl()
1163 ret = gc5035_set_exposure_reg(gc5035, ctrl->val); in gc5035_set_ctrl()
1166 ret = gc5035_set_gain_reg(gc5035, ctrl->val); in gc5035_set_ctrl()
1169 ret = gc5035_write_reg(gc5035->client, in gc5035_set_ctrl()
1172 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_ctrl()
1174 ((ctrl->val + gc5035->cur_mode->height) >> 8) & 0xff); in gc5035_set_ctrl()
1175 ret |= gc5035_write_reg(gc5035->client, in gc5035_set_ctrl()
1177 (ctrl->val + gc5035->cur_mode->height) & 0xff); in gc5035_set_ctrl()
1180 ret = gc5035_set_test_pattern(gc5035, ctrl->val); in gc5035_set_ctrl()
1197 static int gc5035_initialize_controls(struct gc5035 *gc5035) in gc5035_initialize_controls() argument
1206 handler = &gc5035->ctrl_handler; in gc5035_initialize_controls()
1207 mode = gc5035->cur_mode; in gc5035_initialize_controls()
1211 handler->lock = &gc5035->mutex; in gc5035_initialize_controls()
1222 gc5035->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in gc5035_initialize_controls()
1224 if (gc5035->hblank) in gc5035_initialize_controls()
1225 gc5035->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in gc5035_initialize_controls()
1228 gc5035->vblank = v4l2_ctrl_new_std(handler, &gc5035_ctrl_ops, in gc5035_initialize_controls()
1234 gc5035->exposure = v4l2_ctrl_new_std(handler, &gc5035_ctrl_ops, in gc5035_initialize_controls()
1239 gc5035->anal_gain = v4l2_ctrl_new_std(handler, &gc5035_ctrl_ops, in gc5035_initialize_controls()
1244 gc5035->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in gc5035_initialize_controls()
1251 dev_err(&gc5035->client->dev, in gc5035_initialize_controls()
1256 gc5035->subdev.ctrl_handler = handler; in gc5035_initialize_controls()
1266 static int gc5035_check_sensor_id(struct gc5035 *gc5035, in gc5035_check_sensor_id() argument
1269 struct device *dev = &gc5035->client->dev; in gc5035_check_sensor_id()
1286 static int gc5035_configure_regulators(struct gc5035 *gc5035) in gc5035_configure_regulators() argument
1291 gc5035->supplies[i].supply = gc5035_supply_names[i]; in gc5035_configure_regulators()
1293 return devm_regulator_bulk_get(&gc5035->client->dev, in gc5035_configure_regulators()
1295 gc5035->supplies); in gc5035_configure_regulators()
1298 static void free_gpio(struct gc5035 *sensor) in free_gpio()
1317 static int gc5035_parse_of(struct gc5035 *gc5035) in gc5035_parse_of() argument
1319 struct device *dev = &gc5035->client->dev; in gc5035_parse_of()
1336 gc5035->lane_num = rval; in gc5035_parse_of()
1337 if (2 == gc5035->lane_num) { in gc5035_parse_of()
1338 gc5035->cur_mode = &supported_modes_2lane[0]; in gc5035_parse_of()
1340 gc5035->cfg_num = ARRAY_SIZE(supported_modes_2lane); in gc5035_parse_of()
1343 gc5035->pixel_rate = MIPI_FREQ * 2U * gc5035->lane_num / 10U; in gc5035_parse_of()
1345 gc5035->lane_num, gc5035->pixel_rate); in gc5035_parse_of()
1347 dev_err(dev, "unsupported lane_num(%d)\n", gc5035->lane_num); in gc5035_parse_of()
1358 struct gc5035 *gc5035; in gc5035_probe() local
1368 gc5035 = devm_kzalloc(dev, sizeof(*gc5035), GFP_KERNEL); in gc5035_probe()
1369 if (!gc5035) in gc5035_probe()
1373 &gc5035->module_index); in gc5035_probe()
1375 &gc5035->module_facing); in gc5035_probe()
1377 &gc5035->module_name); in gc5035_probe()
1379 &gc5035->len_name); in gc5035_probe()
1384 gc5035->client = client; in gc5035_probe()
1386 gc5035->xvclk = devm_clk_get(dev, "xvclk"); in gc5035_probe()
1387 if (IS_ERR(gc5035->xvclk)) { in gc5035_probe()
1392 gc5035->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in gc5035_probe()
1393 if (IS_ERR(gc5035->reset_gpio)) in gc5035_probe()
1396 gc5035->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in gc5035_probe()
1397 if (IS_ERR(gc5035->pwdn_gpio)) in gc5035_probe()
1400 ret = gc5035_configure_regulators(gc5035); in gc5035_probe()
1406 ret = gc5035_parse_of(gc5035); in gc5035_probe()
1410 gc5035->pinctrl = devm_pinctrl_get(dev); in gc5035_probe()
1411 if (!IS_ERR(gc5035->pinctrl)) { in gc5035_probe()
1412 gc5035->pins_default = in gc5035_probe()
1413 pinctrl_lookup_state(gc5035->pinctrl, in gc5035_probe()
1415 if (IS_ERR(gc5035->pins_default)) in gc5035_probe()
1418 gc5035->pins_sleep = in gc5035_probe()
1419 pinctrl_lookup_state(gc5035->pinctrl, in gc5035_probe()
1421 if (IS_ERR(gc5035->pins_sleep)) in gc5035_probe()
1425 mutex_init(&gc5035->mutex); in gc5035_probe()
1427 sd = &gc5035->subdev; in gc5035_probe()
1429 ret = gc5035_initialize_controls(gc5035); in gc5035_probe()
1433 ret = __gc5035_power_on(gc5035); in gc5035_probe()
1437 ret = gc5035_check_sensor_id(gc5035, client); in gc5035_probe()
1447 gc5035->pad.flags = MEDIA_PAD_FL_SOURCE; in gc5035_probe()
1449 ret = media_entity_pads_init(&sd->entity, 1, &gc5035->pad); in gc5035_probe()
1455 if (strcmp(gc5035->module_facing, "back") == 0) in gc5035_probe()
1461 gc5035->module_index, facing, in gc5035_probe()
1480 __gc5035_power_off(gc5035); in gc5035_probe()
1481 free_gpio(gc5035); in gc5035_probe()
1483 v4l2_ctrl_handler_free(&gc5035->ctrl_handler); in gc5035_probe()
1485 mutex_destroy(&gc5035->mutex); in gc5035_probe()
1493 struct gc5035 *gc5035 = to_gc5035(sd); in gc5035_remove() local
1499 v4l2_ctrl_handler_free(&gc5035->ctrl_handler); in gc5035_remove()
1500 mutex_destroy(&gc5035->mutex); in gc5035_remove()
1504 __gc5035_power_off(gc5035); in gc5035_remove()