Lines Matching refs:ov13850

114 struct ov13850 {  struct
145 #define to_ov13850(sd) container_of(sd, struct ov13850, subdev) argument
795 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_set_fmt() local
799 mutex_lock(&ov13850->mutex); in ov13850_set_fmt()
810 mutex_unlock(&ov13850->mutex); in ov13850_set_fmt()
814 ov13850->cur_mode = mode; in ov13850_set_fmt()
816 __v4l2_ctrl_modify_range(ov13850->hblank, h_blank, in ov13850_set_fmt()
819 __v4l2_ctrl_modify_range(ov13850->vblank, vblank_def, in ov13850_set_fmt()
824 mutex_unlock(&ov13850->mutex); in ov13850_set_fmt()
833 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_get_fmt() local
834 const struct ov13850_mode *mode = ov13850->cur_mode; in ov13850_get_fmt()
836 mutex_lock(&ov13850->mutex); in ov13850_get_fmt()
841 mutex_unlock(&ov13850->mutex); in ov13850_get_fmt()
850 mutex_unlock(&ov13850->mutex); in ov13850_get_fmt()
884 static int ov13850_enable_test_pattern(struct ov13850 *ov13850, u32 pattern) in ov13850_enable_test_pattern() argument
893 return ov13850_write_reg(ov13850->client, in ov13850_enable_test_pattern()
902 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_g_frame_interval() local
903 const struct ov13850_mode *mode = ov13850->cur_mode; in ov13850_g_frame_interval()
910 static void ov13850_get_module_inf(struct ov13850 *ov13850, in ov13850_get_module_inf() argument
915 strlcpy(inf->base.module, ov13850->module_name, in ov13850_get_module_inf()
917 strlcpy(inf->base.lens, ov13850->len_name, sizeof(inf->base.lens)); in ov13850_get_module_inf()
922 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_ioctl() local
928 ov13850_get_module_inf(ov13850, (struct rkmodule_inf *)arg); in ov13850_ioctl()
935 ret = ov13850_write_reg(ov13850->client, in ov13850_ioctl()
940 ret = ov13850_write_reg(ov13850->client, in ov13850_ioctl()
1002 static int __ov13850_start_stream(struct ov13850 *ov13850) in __ov13850_start_stream() argument
1006 ret = ov13850_write_array(ov13850->client, ov13850->cur_mode->reg_list); in __ov13850_start_stream()
1011 mutex_unlock(&ov13850->mutex); in __ov13850_start_stream()
1012 ret = v4l2_ctrl_handler_setup(&ov13850->ctrl_handler); in __ov13850_start_stream()
1013 mutex_lock(&ov13850->mutex); in __ov13850_start_stream()
1017 return ov13850_write_reg(ov13850->client, in __ov13850_start_stream()
1023 static int __ov13850_stop_stream(struct ov13850 *ov13850) in __ov13850_stop_stream() argument
1025 return ov13850_write_reg(ov13850->client, in __ov13850_stop_stream()
1033 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_s_stream() local
1034 struct i2c_client *client = ov13850->client; in ov13850_s_stream()
1037 mutex_lock(&ov13850->mutex); in ov13850_s_stream()
1039 if (on == ov13850->streaming) in ov13850_s_stream()
1049 ret = __ov13850_start_stream(ov13850); in ov13850_s_stream()
1056 __ov13850_stop_stream(ov13850); in ov13850_s_stream()
1060 ov13850->streaming = on; in ov13850_s_stream()
1063 mutex_unlock(&ov13850->mutex); in ov13850_s_stream()
1070 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_s_power() local
1071 struct i2c_client *client = ov13850->client; in ov13850_s_power()
1074 mutex_lock(&ov13850->mutex); in ov13850_s_power()
1077 if (ov13850->power_on == !!on) in ov13850_s_power()
1087 ret = ov13850_write_array(ov13850->client, ov13850_global_regs); in ov13850_s_power()
1094 ov13850->power_on = true; in ov13850_s_power()
1097 ov13850->power_on = false; in ov13850_s_power()
1101 mutex_unlock(&ov13850->mutex); in ov13850_s_power()
1112 static int __ov13850_power_on(struct ov13850 *ov13850) in __ov13850_power_on() argument
1116 struct device *dev = &ov13850->client->dev; in __ov13850_power_on()
1118 if (!IS_ERR(ov13850->power_gpio)) in __ov13850_power_on()
1119 gpiod_set_value_cansleep(ov13850->power_gpio, 1); in __ov13850_power_on()
1123 if (!IS_ERR_OR_NULL(ov13850->pins_default)) { in __ov13850_power_on()
1124 ret = pinctrl_select_state(ov13850->pinctrl, in __ov13850_power_on()
1125 ov13850->pins_default); in __ov13850_power_on()
1129 ret = clk_set_rate(ov13850->xvclk, OV13850_XVCLK_FREQ); in __ov13850_power_on()
1132 if (clk_get_rate(ov13850->xvclk) != OV13850_XVCLK_FREQ) in __ov13850_power_on()
1134 ret = clk_prepare_enable(ov13850->xvclk); in __ov13850_power_on()
1139 if (!IS_ERR(ov13850->reset_gpio)) in __ov13850_power_on()
1140 gpiod_set_value_cansleep(ov13850->reset_gpio, 0); in __ov13850_power_on()
1142 ret = regulator_bulk_enable(OV13850_NUM_SUPPLIES, ov13850->supplies); in __ov13850_power_on()
1148 if (!IS_ERR(ov13850->reset_gpio)) in __ov13850_power_on()
1149 gpiod_set_value_cansleep(ov13850->reset_gpio, 1); in __ov13850_power_on()
1152 if (!IS_ERR(ov13850->pwdn_gpio)) in __ov13850_power_on()
1153 gpiod_set_value_cansleep(ov13850->pwdn_gpio, 1); in __ov13850_power_on()
1162 clk_disable_unprepare(ov13850->xvclk); in __ov13850_power_on()
1167 static void __ov13850_power_off(struct ov13850 *ov13850) in __ov13850_power_off() argument
1170 struct device *dev = &ov13850->client->dev; in __ov13850_power_off()
1172 if (!IS_ERR(ov13850->pwdn_gpio)) in __ov13850_power_off()
1173 gpiod_set_value_cansleep(ov13850->pwdn_gpio, 0); in __ov13850_power_off()
1174 clk_disable_unprepare(ov13850->xvclk); in __ov13850_power_off()
1175 if (!IS_ERR(ov13850->reset_gpio)) in __ov13850_power_off()
1176 gpiod_set_value_cansleep(ov13850->reset_gpio, 0); in __ov13850_power_off()
1178 if (!IS_ERR_OR_NULL(ov13850->pins_sleep)) { in __ov13850_power_off()
1179 ret = pinctrl_select_state(ov13850->pinctrl, in __ov13850_power_off()
1180 ov13850->pins_sleep); in __ov13850_power_off()
1184 if (!IS_ERR(ov13850->power_gpio)) in __ov13850_power_off()
1185 gpiod_set_value_cansleep(ov13850->power_gpio, 0); in __ov13850_power_off()
1187 regulator_bulk_disable(OV13850_NUM_SUPPLIES, ov13850->supplies); in __ov13850_power_off()
1194 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_runtime_resume() local
1196 return __ov13850_power_on(ov13850); in ov13850_runtime_resume()
1203 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_runtime_suspend() local
1205 __ov13850_power_off(ov13850); in ov13850_runtime_suspend()
1213 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_open() local
1218 mutex_lock(&ov13850->mutex); in ov13850_open()
1225 mutex_unlock(&ov13850->mutex); in ov13850_open()
1301 struct ov13850 *ov13850 = container_of(ctrl->handler, in ov13850_set_ctrl() local
1302 struct ov13850, ctrl_handler); in ov13850_set_ctrl()
1303 struct i2c_client *client = ov13850->client; in ov13850_set_ctrl()
1311 max = ov13850->cur_mode->height + ctrl->val - 4; in ov13850_set_ctrl()
1312 __v4l2_ctrl_modify_range(ov13850->exposure, in ov13850_set_ctrl()
1313 ov13850->exposure->minimum, max, in ov13850_set_ctrl()
1314 ov13850->exposure->step, in ov13850_set_ctrl()
1315 ov13850->exposure->default_value); in ov13850_set_ctrl()
1325 ret = ov13850_write_reg(ov13850->client, in ov13850_set_ctrl()
1331 ret = ov13850_write_reg(ov13850->client, in ov13850_set_ctrl()
1336 ret |= ov13850_write_reg(ov13850->client, in ov13850_set_ctrl()
1342 ret = ov13850_write_reg(ov13850->client, in ov13850_set_ctrl()
1345 ctrl->val + ov13850->cur_mode->height); in ov13850_set_ctrl()
1348 ret = ov13850_enable_test_pattern(ov13850, ctrl->val); in ov13850_set_ctrl()
1365 static int ov13850_initialize_controls(struct ov13850 *ov13850) in ov13850_initialize_controls() argument
1374 handler = &ov13850->ctrl_handler; in ov13850_initialize_controls()
1375 mode = ov13850->cur_mode; in ov13850_initialize_controls()
1379 handler->lock = &ov13850->mutex; in ov13850_initialize_controls()
1390 ov13850->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov13850_initialize_controls()
1392 if (ov13850->hblank) in ov13850_initialize_controls()
1393 ov13850->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov13850_initialize_controls()
1396 ov13850->vblank = v4l2_ctrl_new_std(handler, &ov13850_ctrl_ops, in ov13850_initialize_controls()
1402 ov13850->exposure = v4l2_ctrl_new_std(handler, &ov13850_ctrl_ops, in ov13850_initialize_controls()
1407 ov13850->anal_gain = v4l2_ctrl_new_std(handler, &ov13850_ctrl_ops, in ov13850_initialize_controls()
1412 ov13850->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov13850_initialize_controls()
1419 dev_err(&ov13850->client->dev, in ov13850_initialize_controls()
1424 ov13850->subdev.ctrl_handler = handler; in ov13850_initialize_controls()
1434 static int ov13850_check_sensor_id(struct ov13850 *ov13850, in ov13850_check_sensor_id() argument
1437 struct device *dev = &ov13850->client->dev; in ov13850_check_sensor_id()
1464 static int ov13850_configure_regulators(struct ov13850 *ov13850) in ov13850_configure_regulators() argument
1469 ov13850->supplies[i].supply = ov13850_supply_names[i]; in ov13850_configure_regulators()
1471 return devm_regulator_bulk_get(&ov13850->client->dev, in ov13850_configure_regulators()
1473 ov13850->supplies); in ov13850_configure_regulators()
1481 struct ov13850 *ov13850; in ov13850_probe() local
1491 ov13850 = devm_kzalloc(dev, sizeof(*ov13850), GFP_KERNEL); in ov13850_probe()
1492 if (!ov13850) in ov13850_probe()
1496 &ov13850->module_index); in ov13850_probe()
1498 &ov13850->module_facing); in ov13850_probe()
1500 &ov13850->module_name); in ov13850_probe()
1502 &ov13850->len_name); in ov13850_probe()
1508 ov13850->client = client; in ov13850_probe()
1509 ov13850->cur_mode = &supported_modes[0]; in ov13850_probe()
1511 ov13850->xvclk = devm_clk_get(dev, "xvclk"); in ov13850_probe()
1512 if (IS_ERR(ov13850->xvclk)) { in ov13850_probe()
1517 ov13850->power_gpio = devm_gpiod_get(dev, "power", GPIOD_OUT_LOW); in ov13850_probe()
1518 if (IS_ERR(ov13850->power_gpio)) in ov13850_probe()
1521 ov13850->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov13850_probe()
1522 if (IS_ERR(ov13850->reset_gpio)) in ov13850_probe()
1525 ov13850->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov13850_probe()
1526 if (IS_ERR(ov13850->pwdn_gpio)) in ov13850_probe()
1529 ret = ov13850_configure_regulators(ov13850); in ov13850_probe()
1535 ov13850->pinctrl = devm_pinctrl_get(dev); in ov13850_probe()
1536 if (!IS_ERR(ov13850->pinctrl)) { in ov13850_probe()
1537 ov13850->pins_default = in ov13850_probe()
1538 pinctrl_lookup_state(ov13850->pinctrl, in ov13850_probe()
1540 if (IS_ERR(ov13850->pins_default)) in ov13850_probe()
1543 ov13850->pins_sleep = in ov13850_probe()
1544 pinctrl_lookup_state(ov13850->pinctrl, in ov13850_probe()
1546 if (IS_ERR(ov13850->pins_sleep)) in ov13850_probe()
1550 mutex_init(&ov13850->mutex); in ov13850_probe()
1552 sd = &ov13850->subdev; in ov13850_probe()
1554 ret = ov13850_initialize_controls(ov13850); in ov13850_probe()
1558 ret = __ov13850_power_on(ov13850); in ov13850_probe()
1562 ret = ov13850_check_sensor_id(ov13850, client); in ov13850_probe()
1571 ov13850->pad.flags = MEDIA_PAD_FL_SOURCE; in ov13850_probe()
1573 ret = media_entity_pads_init(&sd->entity, 1, &ov13850->pad); in ov13850_probe()
1579 if (strcmp(ov13850->module_facing, "back") == 0) in ov13850_probe()
1585 ov13850->module_index, facing, in ov13850_probe()
1604 __ov13850_power_off(ov13850); in ov13850_probe()
1606 v4l2_ctrl_handler_free(&ov13850->ctrl_handler); in ov13850_probe()
1608 mutex_destroy(&ov13850->mutex); in ov13850_probe()
1616 struct ov13850 *ov13850 = to_ov13850(sd); in ov13850_remove() local
1622 v4l2_ctrl_handler_free(&ov13850->ctrl_handler); in ov13850_remove()
1623 mutex_destroy(&ov13850->mutex); in ov13850_remove()
1627 __ov13850_power_off(ov13850); in ov13850_remove()