Lines Matching refs:jx_k17

118 struct jx_k17 {  struct
147 #define to_jx_k17(sd) container_of(sd, struct jx_k17, subdev) argument
418 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_set_fmt() local
422 mutex_lock(&jx_k17->mutex); in jx_k17_set_fmt()
433 mutex_unlock(&jx_k17->mutex); in jx_k17_set_fmt()
437 jx_k17->cur_mode = mode; in jx_k17_set_fmt()
439 __v4l2_ctrl_modify_range(jx_k17->hblank, h_blank, in jx_k17_set_fmt()
442 __v4l2_ctrl_modify_range(jx_k17->vblank, vblank_def, in jx_k17_set_fmt()
447 mutex_unlock(&jx_k17->mutex); in jx_k17_set_fmt()
456 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_get_fmt() local
457 const struct jx_k17_mode *mode = jx_k17->cur_mode; in jx_k17_get_fmt()
459 mutex_lock(&jx_k17->mutex); in jx_k17_get_fmt()
464 mutex_unlock(&jx_k17->mutex); in jx_k17_get_fmt()
477 mutex_unlock(&jx_k17->mutex); in jx_k17_get_fmt()
486 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_enum_mbus_code() local
490 code->code = jx_k17->cur_mode->bus_fmt; in jx_k17_enum_mbus_code()
513 static int jx_k17_enable_test_pattern(struct jx_k17 *jx_k17, u32 pattern) in jx_k17_enable_test_pattern() argument
517 jx_k17_read_reg(jx_k17->client, JX_K17_REG_TEST_PATTERN, &val); in jx_k17_enable_test_pattern()
523 return jx_k17_write_reg(jx_k17->client, JX_K17_REG_TEST_PATTERN, val); in jx_k17_enable_test_pattern()
529 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_g_frame_interval() local
530 const struct jx_k17_mode *mode = jx_k17->cur_mode; in jx_k17_g_frame_interval()
532 mutex_lock(&jx_k17->mutex); in jx_k17_g_frame_interval()
534 mutex_unlock(&jx_k17->mutex); in jx_k17_g_frame_interval()
543 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_g_mbus_config() local
544 const struct jx_k17_mode *mode = jx_k17->cur_mode; in jx_k17_g_mbus_config()
562 static void jx_k17_get_module_inf(struct jx_k17 *jx_k17, in jx_k17_get_module_inf() argument
567 strscpy(inf->base.module, jx_k17->module_name, in jx_k17_get_module_inf()
569 strscpy(inf->base.lens, jx_k17->len_name, sizeof(inf->base.lens)); in jx_k17_get_module_inf()
574 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_ioctl() local
582 jx_k17_get_module_inf(jx_k17, (struct rkmodule_inf *)arg); in jx_k17_ioctl()
587 hdr->hdr_mode = jx_k17->cur_mode->hdr_mode; in jx_k17_ioctl()
591 w = jx_k17->cur_mode->width; in jx_k17_ioctl()
592 h = jx_k17->cur_mode->height; in jx_k17_ioctl()
597 jx_k17->cur_mode = &supported_modes[i]; in jx_k17_ioctl()
602 dev_err(&jx_k17->client->dev, in jx_k17_ioctl()
607 w = jx_k17->cur_mode->hts_def - jx_k17->cur_mode->width; in jx_k17_ioctl()
608 h = jx_k17->cur_mode->vts_def - jx_k17->cur_mode->height; in jx_k17_ioctl()
609 __v4l2_ctrl_modify_range(jx_k17->hblank, w, w, 1, w); in jx_k17_ioctl()
610 __v4l2_ctrl_modify_range(jx_k17->vblank, h, in jx_k17_ioctl()
611 JX_K17_VTS_MAX - jx_k17->cur_mode->height, 1, h); in jx_k17_ioctl()
621 ret = jx_k17_write_reg(jx_k17->client, JX_K17_REG_CTRL_MODE, in jx_k17_ioctl()
624 ret = jx_k17_write_reg(jx_k17->client, JX_K17_REG_CTRL_MODE, in jx_k17_ioctl()
722 static int __jx_k17_start_stream(struct jx_k17 *jx_k17) in __jx_k17_start_stream() argument
726 ret = jx_k17_write_array(jx_k17->client, jx_k17->cur_mode->reg_list); in __jx_k17_start_stream()
731 ret = __v4l2_ctrl_handler_setup(&jx_k17->ctrl_handler); in __jx_k17_start_stream()
735 ret = jx_k17_write_reg(jx_k17->client, JX_K17_REG_CTRL_MODE, in __jx_k17_start_stream()
740 static int __jx_k17_stop_stream(struct jx_k17 *jx_k17) in __jx_k17_stop_stream() argument
742 return jx_k17_write_reg(jx_k17->client, JX_K17_REG_CTRL_MODE, in __jx_k17_stop_stream()
748 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_s_stream() local
749 struct i2c_client *client = jx_k17->client; in jx_k17_s_stream()
752 mutex_lock(&jx_k17->mutex); in jx_k17_s_stream()
754 if (on == jx_k17->streaming) in jx_k17_s_stream()
764 ret = __jx_k17_start_stream(jx_k17); in jx_k17_s_stream()
771 __jx_k17_stop_stream(jx_k17); in jx_k17_s_stream()
775 jx_k17->streaming = on; in jx_k17_s_stream()
778 mutex_unlock(&jx_k17->mutex); in jx_k17_s_stream()
785 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_s_power() local
786 struct i2c_client *client = jx_k17->client; in jx_k17_s_power()
789 mutex_lock(&jx_k17->mutex); in jx_k17_s_power()
792 if (jx_k17->power_on == !!on) in jx_k17_s_power()
802 ret = jx_k17_write_array(jx_k17->client, in jx_k17_s_power()
810 jx_k17->power_on = true; in jx_k17_s_power()
813 jx_k17->power_on = false; in jx_k17_s_power()
817 mutex_unlock(&jx_k17->mutex); in jx_k17_s_power()
822 static int __jx_k17_power_on(struct jx_k17 *jx_k17) in __jx_k17_power_on() argument
826 struct device *dev = &jx_k17->client->dev; in __jx_k17_power_on()
828 if (!IS_ERR_OR_NULL(jx_k17->pins_default)) { in __jx_k17_power_on()
829 ret = pinctrl_select_state(jx_k17->pinctrl, in __jx_k17_power_on()
830 jx_k17->pins_default); in __jx_k17_power_on()
835 ret = clk_set_rate(jx_k17->xvclk, JX_K17_XVCLK_FREQ); in __jx_k17_power_on()
840 if (clk_get_rate(jx_k17->xvclk) != JX_K17_XVCLK_FREQ) in __jx_k17_power_on()
842 ret = clk_prepare_enable(jx_k17->xvclk); in __jx_k17_power_on()
848 if (!IS_ERR(jx_k17->pwdn_gpio)) in __jx_k17_power_on()
849 gpiod_set_value_cansleep(jx_k17->pwdn_gpio, 1); in __jx_k17_power_on()
850 if (!IS_ERR(jx_k17->reset_gpio)) in __jx_k17_power_on()
851 gpiod_set_value_cansleep(jx_k17->reset_gpio, 1); in __jx_k17_power_on()
853 if (!IS_ERR(jx_k17->reset_gpio)) in __jx_k17_power_on()
854 gpiod_set_value_cansleep(jx_k17->reset_gpio, 0); in __jx_k17_power_on()
856 ret = regulator_bulk_enable(JX_K17_NUM_SUPPLIES, jx_k17->supplies); in __jx_k17_power_on()
865 if (!IS_ERR(jx_k17->reset_gpio)) in __jx_k17_power_on()
866 gpiod_set_value_cansleep(jx_k17->reset_gpio, 1); in __jx_k17_power_on()
869 if (!IS_ERR(jx_k17->pwdn_gpio)) in __jx_k17_power_on()
870 gpiod_set_value_cansleep(jx_k17->pwdn_gpio, 0); in __jx_k17_power_on()
872 if (!IS_ERR(jx_k17->reset_gpio)) in __jx_k17_power_on()
884 clk_disable_unprepare(jx_k17->xvclk); in __jx_k17_power_on()
889 static void __jx_k17_power_off(struct jx_k17 *jx_k17) in __jx_k17_power_off() argument
892 struct device *dev = &jx_k17->client->dev; in __jx_k17_power_off()
894 if (!IS_ERR(jx_k17->pwdn_gpio)) in __jx_k17_power_off()
895 gpiod_set_value_cansleep(jx_k17->pwdn_gpio, 1); in __jx_k17_power_off()
896 clk_disable_unprepare(jx_k17->xvclk); in __jx_k17_power_off()
897 if (!IS_ERR(jx_k17->reset_gpio)) in __jx_k17_power_off()
898 gpiod_set_value_cansleep(jx_k17->reset_gpio, 0); in __jx_k17_power_off()
899 if (!IS_ERR_OR_NULL(jx_k17->pins_sleep)) { in __jx_k17_power_off()
900 ret = pinctrl_select_state(jx_k17->pinctrl, in __jx_k17_power_off()
901 jx_k17->pins_sleep); in __jx_k17_power_off()
905 regulator_bulk_disable(JX_K17_NUM_SUPPLIES, jx_k17->supplies); in __jx_k17_power_off()
912 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_runtime_resume() local
914 return __jx_k17_power_on(jx_k17); in jx_k17_runtime_resume()
921 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_runtime_suspend() local
923 __jx_k17_power_off(jx_k17); in jx_k17_runtime_suspend()
931 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_open() local
936 mutex_lock(&jx_k17->mutex); in jx_k17_open()
943 mutex_unlock(&jx_k17->mutex); in jx_k17_open()
1006 struct jx_k17 *jx_k17 = container_of(ctrl->handler, in jx_k17_set_ctrl() local
1007 struct jx_k17, ctrl_handler); in jx_k17_set_ctrl()
1008 struct i2c_client *client = jx_k17->client; in jx_k17_set_ctrl()
1016 max = jx_k17->cur_mode->height + ctrl->val - 9; in jx_k17_set_ctrl()
1017 __v4l2_ctrl_modify_range(jx_k17->exposure, in jx_k17_set_ctrl()
1018 jx_k17->exposure->minimum, max, in jx_k17_set_ctrl()
1019 jx_k17->exposure->step, in jx_k17_set_ctrl()
1020 jx_k17->exposure->default_value); in jx_k17_set_ctrl()
1031 ret = jx_k17_write_reg(jx_k17->client, in jx_k17_set_ctrl()
1034 ret |= jx_k17_write_reg(jx_k17->client, in jx_k17_set_ctrl()
1040 ret |= jx_k17_write_reg(jx_k17->client, in jx_k17_set_ctrl()
1045 ret |= jx_k17_write_reg(jx_k17->client, JX_K17_REG_HIGH_VTS, in jx_k17_set_ctrl()
1046 JX_K17_FETCH_HIGH_BYTE_VTS((ctrl->val + jx_k17->cur_mode->height))); in jx_k17_set_ctrl()
1047 ret |= jx_k17_write_reg(jx_k17->client, JX_K17_REG_LOW_VTS, in jx_k17_set_ctrl()
1048 JX_K17_FETCH_LOW_BYTE_VTS((ctrl->val + jx_k17->cur_mode->height))); in jx_k17_set_ctrl()
1051 ret = jx_k17_enable_test_pattern(jx_k17, ctrl->val); in jx_k17_set_ctrl()
1068 static int jx_k17_initialize_controls(struct jx_k17 *jx_k17) in jx_k17_initialize_controls() argument
1077 handler = &jx_k17->ctrl_handler; in jx_k17_initialize_controls()
1078 mode = jx_k17->cur_mode; in jx_k17_initialize_controls()
1082 handler->lock = &jx_k17->mutex; in jx_k17_initialize_controls()
1093 jx_k17->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in jx_k17_initialize_controls()
1095 if (jx_k17->hblank) in jx_k17_initialize_controls()
1096 jx_k17->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in jx_k17_initialize_controls()
1099 jx_k17->vblank = v4l2_ctrl_new_std(handler, &jx_k17_ctrl_ops, in jx_k17_initialize_controls()
1105 jx_k17->exposure = v4l2_ctrl_new_std(handler, &jx_k17_ctrl_ops, in jx_k17_initialize_controls()
1110 jx_k17->anal_gain = v4l2_ctrl_new_std(handler, &jx_k17_ctrl_ops, in jx_k17_initialize_controls()
1115 jx_k17->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in jx_k17_initialize_controls()
1122 dev_err(&jx_k17->client->dev, in jx_k17_initialize_controls()
1127 jx_k17->subdev.ctrl_handler = handler; in jx_k17_initialize_controls()
1137 static int jx_k17_check_sensor_id(struct jx_k17 *jx_k17, in jx_k17_check_sensor_id() argument
1140 struct device *dev = &jx_k17->client->dev; in jx_k17_check_sensor_id()
1159 static int jx_k17_configure_regulators(struct jx_k17 *jx_k17) in jx_k17_configure_regulators() argument
1164 jx_k17->supplies[i].supply = jx_k17_supply_names[i]; in jx_k17_configure_regulators()
1166 return devm_regulator_bulk_get(&jx_k17->client->dev, in jx_k17_configure_regulators()
1168 jx_k17->supplies); in jx_k17_configure_regulators()
1176 struct jx_k17 *jx_k17; in jx_k17_probe() local
1186 jx_k17 = devm_kzalloc(dev, sizeof(*jx_k17), GFP_KERNEL); in jx_k17_probe()
1187 if (!jx_k17) in jx_k17_probe()
1191 &jx_k17->module_index); in jx_k17_probe()
1193 &jx_k17->module_facing); in jx_k17_probe()
1195 &jx_k17->module_name); in jx_k17_probe()
1197 &jx_k17->len_name); in jx_k17_probe()
1203 jx_k17->client = client; in jx_k17_probe()
1204 jx_k17->cur_mode = &supported_modes[0]; in jx_k17_probe()
1206 jx_k17->xvclk = devm_clk_get(dev, "xvclk"); in jx_k17_probe()
1207 if (IS_ERR(jx_k17->xvclk)) { in jx_k17_probe()
1212 jx_k17->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in jx_k17_probe()
1213 if (IS_ERR(jx_k17->reset_gpio)) in jx_k17_probe()
1216 jx_k17->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in jx_k17_probe()
1217 if (IS_ERR(jx_k17->pwdn_gpio)) in jx_k17_probe()
1220 jx_k17->pinctrl = devm_pinctrl_get(dev); in jx_k17_probe()
1221 if (!IS_ERR(jx_k17->pinctrl)) { in jx_k17_probe()
1222 jx_k17->pins_default = in jx_k17_probe()
1223 pinctrl_lookup_state(jx_k17->pinctrl, in jx_k17_probe()
1225 if (IS_ERR(jx_k17->pins_default)) in jx_k17_probe()
1228 jx_k17->pins_sleep = in jx_k17_probe()
1229 pinctrl_lookup_state(jx_k17->pinctrl, in jx_k17_probe()
1231 if (IS_ERR(jx_k17->pins_sleep)) in jx_k17_probe()
1236 ret = jx_k17_configure_regulators(jx_k17); in jx_k17_probe()
1242 mutex_init(&jx_k17->mutex); in jx_k17_probe()
1244 sd = &jx_k17->subdev; in jx_k17_probe()
1246 ret = jx_k17_initialize_controls(jx_k17); in jx_k17_probe()
1250 ret = __jx_k17_power_on(jx_k17); in jx_k17_probe()
1254 ret = jx_k17_check_sensor_id(jx_k17, client); in jx_k17_probe()
1264 jx_k17->pad.flags = MEDIA_PAD_FL_SOURCE; in jx_k17_probe()
1266 ret = media_entity_pads_init(&sd->entity, 1, &jx_k17->pad); in jx_k17_probe()
1272 if (strcmp(jx_k17->module_facing, "back") == 0) in jx_k17_probe()
1278 jx_k17->module_index, facing, in jx_k17_probe()
1298 __jx_k17_power_off(jx_k17); in jx_k17_probe()
1300 v4l2_ctrl_handler_free(&jx_k17->ctrl_handler); in jx_k17_probe()
1302 mutex_destroy(&jx_k17->mutex); in jx_k17_probe()
1310 struct jx_k17 *jx_k17 = to_jx_k17(sd); in jx_k17_remove() local
1316 v4l2_ctrl_handler_free(&jx_k17->ctrl_handler); in jx_k17_remove()
1317 mutex_destroy(&jx_k17->mutex); in jx_k17_remove()
1321 __jx_k17_power_off(jx_k17); in jx_k17_remove()