Lines Matching refs:gc0403

108 struct gc0403 {  struct
132 #define to_gc0403(sd) container_of(sd, struct gc0403, subdev) argument
529 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_set_fmt() local
532 mutex_lock(&gc0403->mutex); in gc0403_set_fmt()
543 mutex_unlock(&gc0403->mutex); in gc0403_set_fmt()
547 gc0403->cur_mode = mode; in gc0403_set_fmt()
550 mutex_unlock(&gc0403->mutex); in gc0403_set_fmt()
559 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_get_fmt() local
560 const struct gc0403_mode *mode = gc0403->cur_mode; in gc0403_get_fmt()
562 mutex_lock(&gc0403->mutex); in gc0403_get_fmt()
567 mutex_unlock(&gc0403->mutex); in gc0403_get_fmt()
576 mutex_unlock(&gc0403->mutex); in gc0403_get_fmt()
614 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_g_frame_interval() local
615 const struct gc0403_mode *mode = gc0403->cur_mode; in gc0403_g_frame_interval()
622 static void gc0403_get_module_inf(struct gc0403 *gc0403, in gc0403_get_module_inf() argument
627 strlcpy(inf->base.module, gc0403->module_name, in gc0403_get_module_inf()
629 strlcpy(inf->base.lens, gc0403->len_name, sizeof(inf->base.lens)); in gc0403_get_module_inf()
634 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_ioctl() local
640 gc0403_get_module_inf(gc0403, (struct rkmodule_inf *)arg); in gc0403_ioctl()
647 ret = gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x03); in gc0403_ioctl()
648 ret |= gc0403_write_reg(gc0403->client, GC0403_REG_MIPI_EN, 0x90); in gc0403_ioctl()
649 ret |= gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x00); in gc0403_ioctl()
651 ret = gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x03); in gc0403_ioctl()
652 ret |= gc0403_write_reg(gc0403->client, GC0403_REG_MIPI_EN, 0x80); in gc0403_ioctl()
653 ret |= gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x00); in gc0403_ioctl()
720 static int __gc0403_start_stream(struct gc0403 *gc0403) in __gc0403_start_stream() argument
725 mutex_unlock(&gc0403->mutex); in __gc0403_start_stream()
726 ret = v4l2_ctrl_handler_setup(&gc0403->ctrl_handler); in __gc0403_start_stream()
727 mutex_lock(&gc0403->mutex); in __gc0403_start_stream()
730 ret = gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x03); in __gc0403_start_stream()
731 ret |= gc0403_write_reg(gc0403->client, GC0403_REG_MIPI_EN, 0x90); in __gc0403_start_stream()
732 ret |= gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x00); in __gc0403_start_stream()
737 static int __gc0403_stop_stream(struct gc0403 *gc0403) in __gc0403_stop_stream() argument
741 ret = gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x03); in __gc0403_stop_stream()
742 ret |= gc0403_write_reg(gc0403->client, GC0403_REG_MIPI_EN, 0x80); in __gc0403_stop_stream()
743 ret |= gc0403_write_reg(gc0403->client, PAGE_SELECT_REG, 0x00); in __gc0403_stop_stream()
748 static int __gc0403_power_on(struct gc0403 *gc0403);
749 static void __gc0403_power_off(struct gc0403 *gc0403);
753 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_s_power() local
756 mutex_lock(&gc0403->mutex); in gc0403_s_power()
760 ret = pm_runtime_get_sync(&gc0403->client->dev); in gc0403_s_power()
762 ret = pm_runtime_put(&gc0403->client->dev); in gc0403_s_power()
764 mutex_unlock(&gc0403->mutex); in gc0403_s_power()
771 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_s_stream() local
774 mutex_lock(&gc0403->mutex); in gc0403_s_stream()
776 if (on == gc0403->streaming) in gc0403_s_stream()
780 ret = __gc0403_start_stream(gc0403); in gc0403_s_stream()
786 __gc0403_stop_stream(gc0403); in gc0403_s_stream()
790 gc0403->streaming = on; in gc0403_s_stream()
793 mutex_unlock(&gc0403->mutex); in gc0403_s_stream()
799 static int __gc0403_power_on(struct gc0403 *gc0403) in __gc0403_power_on() argument
802 struct device *dev = &gc0403->client->dev; in __gc0403_power_on()
804 ret = clk_set_rate(gc0403->xvclk, GC0403_XVCLK_FREQ); in __gc0403_power_on()
809 if (clk_get_rate(gc0403->xvclk) != GC0403_XVCLK_FREQ) in __gc0403_power_on()
811 ret = clk_prepare_enable(gc0403->xvclk); in __gc0403_power_on()
817 ret = regulator_bulk_enable(GC0403_NUM_SUPPLIES, gc0403->supplies); in __gc0403_power_on()
823 if (!IS_ERR(gc0403->pwdn_gpio)) in __gc0403_power_on()
824 gpiod_set_value_cansleep(gc0403->pwdn_gpio, 0); in __gc0403_power_on()
828 ret = gc0403_write_array(gc0403->client, gc0403->cur_mode->reg_list); in __gc0403_power_on()
836 clk_disable_unprepare(gc0403->xvclk); in __gc0403_power_on()
841 static void __gc0403_power_off(struct gc0403 *gc0403) in __gc0403_power_off() argument
843 if (!IS_ERR(gc0403->pwdn_gpio)) in __gc0403_power_off()
844 gpiod_set_value_cansleep(gc0403->pwdn_gpio, 1); in __gc0403_power_off()
845 clk_disable_unprepare(gc0403->xvclk); in __gc0403_power_off()
846 regulator_bulk_disable(GC0403_NUM_SUPPLIES, gc0403->supplies); in __gc0403_power_off()
853 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_runtime_resume() local
856 ret = __gc0403_power_on(gc0403); in gc0403_runtime_resume()
860 if (gc0403->streaming) { in gc0403_runtime_resume()
863 __gc0403_power_off(gc0403); in gc0403_runtime_resume()
873 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_runtime_suspend() local
875 __gc0403_power_off(gc0403); in gc0403_runtime_suspend()
883 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_open() local
888 mutex_lock(&gc0403->mutex); in gc0403_open()
895 mutex_unlock(&gc0403->mutex); in gc0403_open()
971 struct gc0403 *gc0403 = container_of(ctrl->handler, in gc0403_set_ctrl() local
972 struct gc0403, ctrl_handler); in gc0403_set_ctrl()
973 struct i2c_client *client = gc0403->client; in gc0403_set_ctrl()
993 ret = gc0403_write_reg(gc0403->client, GC0403_REG_EXP_H, in gc0403_set_ctrl()
995 ret |= gc0403_write_reg(gc0403->client, GC0403_REG_EXP_L, in gc0403_set_ctrl()
1024 ret = gc0403_write_reg(gc0403->client, in gc0403_set_ctrl()
1028 ret |= gc0403_write_reg(gc0403->client, in gc0403_set_ctrl()
1032 ret |= gc0403_write_reg(gc0403->client, in gc0403_set_ctrl()
1042 ret = gc0403_write_reg(gc0403->client, GC0403_REG_VBLK_H, in gc0403_set_ctrl()
1044 ret |= gc0403_write_reg(gc0403->client, GC0403_REG_VBLK_L, in gc0403_set_ctrl()
1062 static int gc0403_initialize_controls(struct gc0403 *gc0403) in gc0403_initialize_controls() argument
1071 handler = &gc0403->ctrl_handler; in gc0403_initialize_controls()
1072 mode = gc0403->cur_mode; in gc0403_initialize_controls()
1076 handler->lock = &gc0403->mutex; in gc0403_initialize_controls()
1087 gc0403->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in gc0403_initialize_controls()
1089 if (gc0403->hblank) in gc0403_initialize_controls()
1090 gc0403->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in gc0403_initialize_controls()
1093 gc0403->vblank = v4l2_ctrl_new_std(handler, &gc0403_ctrl_ops, in gc0403_initialize_controls()
1097 gc0403->exposure = v4l2_ctrl_new_std(handler, &gc0403_ctrl_ops, in gc0403_initialize_controls()
1103 gc0403->anal_gain = v4l2_ctrl_new_std(handler, &gc0403_ctrl_ops, in gc0403_initialize_controls()
1109 gc0403->digi_gain = v4l2_ctrl_new_std(handler, &gc0403_ctrl_ops, in gc0403_initialize_controls()
1116 dev_err(&gc0403->client->dev, in gc0403_initialize_controls()
1121 gc0403->subdev.ctrl_handler = handler; in gc0403_initialize_controls()
1131 static int gc0403_check_sensor_id(struct gc0403 *gc0403, in gc0403_check_sensor_id() argument
1134 struct device *dev = &gc0403->client->dev; in gc0403_check_sensor_id()
1160 static int gc0403_configure_regulators(struct gc0403 *gc0403) in gc0403_configure_regulators() argument
1165 gc0403->supplies[i].supply = gc0403_supply_names[i]; in gc0403_configure_regulators()
1167 return devm_regulator_bulk_get(&gc0403->client->dev, in gc0403_configure_regulators()
1169 gc0403->supplies); in gc0403_configure_regulators()
1178 struct gc0403 *gc0403; in gc0403_probe() local
1189 gc0403 = devm_kzalloc(dev, sizeof(*gc0403), GFP_KERNEL); in gc0403_probe()
1190 if (!gc0403) in gc0403_probe()
1194 &gc0403->module_index); in gc0403_probe()
1196 &gc0403->module_facing); in gc0403_probe()
1198 &gc0403->module_name); in gc0403_probe()
1200 &gc0403->len_name); in gc0403_probe()
1206 gc0403->client = client; in gc0403_probe()
1207 gc0403->cur_mode = &supported_modes[1]; in gc0403_probe()
1209 gc0403->xvclk = devm_clk_get(dev, "xvclk"); in gc0403_probe()
1210 if (IS_ERR(gc0403->xvclk)) { in gc0403_probe()
1215 gc0403->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in gc0403_probe()
1216 if (IS_ERR(gc0403->pwdn_gpio)) in gc0403_probe()
1219 ret = gc0403_configure_regulators(gc0403); in gc0403_probe()
1225 mutex_init(&gc0403->mutex); in gc0403_probe()
1227 sd = &gc0403->subdev; in gc0403_probe()
1229 ret = gc0403_initialize_controls(gc0403); in gc0403_probe()
1233 ret = __gc0403_power_on(gc0403); in gc0403_probe()
1237 ret = gc0403_check_sensor_id(gc0403, client); in gc0403_probe()
1247 gc0403->pad.flags = MEDIA_PAD_FL_SOURCE; in gc0403_probe()
1249 ret = media_entity_pads_init(&sd->entity, 1, &gc0403->pad); in gc0403_probe()
1255 if (strcmp(gc0403->module_facing, "back") == 0) in gc0403_probe()
1261 gc0403->module_index, facing, in gc0403_probe()
1281 __gc0403_power_off(gc0403); in gc0403_probe()
1283 v4l2_ctrl_handler_free(&gc0403->ctrl_handler); in gc0403_probe()
1285 mutex_destroy(&gc0403->mutex); in gc0403_probe()
1293 struct gc0403 *gc0403 = to_gc0403(sd); in gc0403_remove() local
1299 v4l2_ctrl_handler_free(&gc0403->ctrl_handler); in gc0403_remove()
1300 mutex_destroy(&gc0403->mutex); in gc0403_remove()
1304 __gc0403_power_off(gc0403); in gc0403_remove()