Lines Matching refs:ov7251
114 struct ov7251 { struct
146 #define to_ov7251(sd) container_of(sd, struct ov7251, subdev) argument
860 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_set_fmt() local
864 mutex_lock(&ov7251->mutex); in ov7251_set_fmt()
875 mutex_unlock(&ov7251->mutex); in ov7251_set_fmt()
879 ov7251->cur_mode = mode; in ov7251_set_fmt()
881 __v4l2_ctrl_modify_range(ov7251->hblank, h_blank, in ov7251_set_fmt()
884 __v4l2_ctrl_modify_range(ov7251->vblank, vblank_def, in ov7251_set_fmt()
887 ov7251->cur_fps = mode->max_fps; in ov7251_set_fmt()
890 mutex_unlock(&ov7251->mutex); in ov7251_set_fmt()
899 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_get_fmt() local
900 const struct ov7251_mode *mode = ov7251->cur_mode; in ov7251_get_fmt()
902 mutex_lock(&ov7251->mutex); in ov7251_get_fmt()
907 mutex_unlock(&ov7251->mutex); in ov7251_get_fmt()
921 mutex_unlock(&ov7251->mutex); in ov7251_get_fmt()
930 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_enum_mbus_code() local
934 code->code = ov7251->cur_mode->bus_fmt; in ov7251_enum_mbus_code()
957 static int ov7251_enable_test_pattern(struct ov7251 *ov7251, u32 pattern) in ov7251_enable_test_pattern() argument
966 return ov7251_write_reg(ov7251->client, OV7251_REG_TEST_PATTERN, in ov7251_enable_test_pattern()
973 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_g_frame_interval() local
974 const struct ov7251_mode *mode = ov7251->cur_mode; in ov7251_g_frame_interval()
976 if (ov7251->streaming) in ov7251_g_frame_interval()
977 fi->interval = ov7251->cur_fps; in ov7251_g_frame_interval()
988 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_g_mbus_config() local
989 const struct ov7251_mode *mode = ov7251->cur_mode; in ov7251_g_mbus_config()
1005 static void ov7251_get_module_inf(struct ov7251 *ov7251, in ov7251_get_module_inf() argument
1010 strscpy(inf->base.module, ov7251->module_name, in ov7251_get_module_inf()
1012 strscpy(inf->base.lens, ov7251->len_name, sizeof(inf->base.lens)); in ov7251_get_module_inf()
1017 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_ioctl() local
1025 ov7251_get_module_inf(ov7251, (struct rkmodule_inf *)arg); in ov7251_ioctl()
1030 hdr->hdr_mode = ov7251->cur_mode->hdr_mode; in ov7251_ioctl()
1034 w = ov7251->cur_mode->width; in ov7251_ioctl()
1035 h = ov7251->cur_mode->height; in ov7251_ioctl()
1040 ov7251->cur_mode = &supported_modes[i]; in ov7251_ioctl()
1045 dev_err(&ov7251->client->dev, in ov7251_ioctl()
1050 w = ov7251->cur_mode->hts_def - ov7251->cur_mode->width; in ov7251_ioctl()
1051 h = ov7251->cur_mode->vts_def - ov7251->cur_mode->height; in ov7251_ioctl()
1052 __v4l2_ctrl_modify_range(ov7251->hblank, w, w, 1, w); in ov7251_ioctl()
1053 __v4l2_ctrl_modify_range(ov7251->vblank, h, in ov7251_ioctl()
1054 OV7251_VTS_MAX - ov7251->cur_mode->height, 1, h); in ov7251_ioctl()
1064 ret = ov7251_write_reg(ov7251->client, OV7251_REG_CTRL_MODE, in ov7251_ioctl()
1067 ret = ov7251_write_reg(ov7251->client, OV7251_REG_CTRL_MODE, in ov7251_ioctl()
1162 static int __ov7251_start_stream(struct ov7251 *ov7251) in __ov7251_start_stream() argument
1166 ret = ov7251_write_array(ov7251->client, ov7251->cur_mode->reg_list); in __ov7251_start_stream()
1171 ret = __v4l2_ctrl_handler_setup(&ov7251->ctrl_handler); in __ov7251_start_stream()
1175 return ov7251_write_reg(ov7251->client, OV7251_REG_CTRL_MODE, in __ov7251_start_stream()
1179 static int __ov7251_stop_stream(struct ov7251 *ov7251) in __ov7251_stop_stream() argument
1181 return ov7251_write_reg(ov7251->client, OV7251_REG_CTRL_MODE, in __ov7251_stop_stream()
1187 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_s_stream() local
1188 struct i2c_client *client = ov7251->client; in ov7251_s_stream()
1191 mutex_lock(&ov7251->mutex); in ov7251_s_stream()
1193 if (on == ov7251->streaming) in ov7251_s_stream()
1203 ret = __ov7251_start_stream(ov7251); in ov7251_s_stream()
1211 __ov7251_stop_stream(ov7251); in ov7251_s_stream()
1215 ov7251->streaming = on; in ov7251_s_stream()
1218 mutex_unlock(&ov7251->mutex); in ov7251_s_stream()
1225 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_s_power() local
1226 struct i2c_client *client = ov7251->client; in ov7251_s_power()
1229 mutex_lock(&ov7251->mutex); in ov7251_s_power()
1232 if (ov7251->power_on == !!on) in ov7251_s_power()
1242 ret = ov7251_write_array(ov7251->client, ov7251_global_regs); in ov7251_s_power()
1249 ov7251->power_on = true; in ov7251_s_power()
1252 ov7251->power_on = false; in ov7251_s_power()
1256 mutex_unlock(&ov7251->mutex); in ov7251_s_power()
1267 static int __ov7251_power_on(struct ov7251 *ov7251) in __ov7251_power_on() argument
1271 struct device *dev = &ov7251->client->dev; in __ov7251_power_on()
1273 if (!IS_ERR_OR_NULL(ov7251->pins_default)) { in __ov7251_power_on()
1274 ret = pinctrl_select_state(ov7251->pinctrl, in __ov7251_power_on()
1275 ov7251->pins_default); in __ov7251_power_on()
1279 ret = clk_set_rate(ov7251->xvclk, OV7251_XVCLK_FREQ); in __ov7251_power_on()
1282 if (clk_get_rate(ov7251->xvclk) != OV7251_XVCLK_FREQ) in __ov7251_power_on()
1284 ret = clk_prepare_enable(ov7251->xvclk); in __ov7251_power_on()
1290 if (!IS_ERR(ov7251->reset_gpio)) in __ov7251_power_on()
1291 gpiod_set_value_cansleep(ov7251->reset_gpio, 0); in __ov7251_power_on()
1293 ret = regulator_bulk_enable(OV7251_NUM_SUPPLIES, ov7251->supplies); in __ov7251_power_on()
1300 if (!IS_ERR(ov7251->reset_gpio)) in __ov7251_power_on()
1301 gpiod_set_value_cansleep(ov7251->reset_gpio, 1); in __ov7251_power_on()
1304 if (!IS_ERR(ov7251->pwdn_gpio)) in __ov7251_power_on()
1305 gpiod_set_value_cansleep(ov7251->pwdn_gpio, 1); in __ov7251_power_on()
1307 if (!IS_ERR(ov7251->reset_gpio)) in __ov7251_power_on()
1319 clk_disable_unprepare(ov7251->xvclk); in __ov7251_power_on()
1324 static void __ov7251_power_off(struct ov7251 *ov7251) in __ov7251_power_off() argument
1327 struct device *dev = &ov7251->client->dev; in __ov7251_power_off()
1329 if (!IS_ERR(ov7251->pwdn_gpio)) in __ov7251_power_off()
1330 gpiod_set_value_cansleep(ov7251->pwdn_gpio, 0); in __ov7251_power_off()
1331 clk_disable_unprepare(ov7251->xvclk); in __ov7251_power_off()
1332 if (!IS_ERR(ov7251->reset_gpio)) in __ov7251_power_off()
1333 gpiod_set_value_cansleep(ov7251->reset_gpio, 0); in __ov7251_power_off()
1334 if (!IS_ERR_OR_NULL(ov7251->pins_sleep)) { in __ov7251_power_off()
1335 ret = pinctrl_select_state(ov7251->pinctrl, in __ov7251_power_off()
1336 ov7251->pins_sleep); in __ov7251_power_off()
1340 regulator_bulk_disable(OV7251_NUM_SUPPLIES, ov7251->supplies); in __ov7251_power_off()
1347 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_runtime_resume() local
1349 return __ov7251_power_on(ov7251); in ov7251_runtime_resume()
1356 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_runtime_suspend() local
1358 __ov7251_power_off(ov7251); in ov7251_runtime_suspend()
1366 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_open() local
1371 mutex_lock(&ov7251->mutex); in ov7251_open()
1378 mutex_unlock(&ov7251->mutex); in ov7251_open()
1441 struct ov7251 *ov7251 = container_of(ctrl->handler, in ov7251_set_ctrl() local
1442 struct ov7251, ctrl_handler); in ov7251_set_ctrl()
1443 struct i2c_client *client = ov7251->client; in ov7251_set_ctrl()
1452 max = ov7251->cur_mode->height + ctrl->val - 20; in ov7251_set_ctrl()
1453 __v4l2_ctrl_modify_range(ov7251->exposure, in ov7251_set_ctrl()
1454 ov7251->exposure->minimum, max, in ov7251_set_ctrl()
1455 ov7251->exposure->step, in ov7251_set_ctrl()
1456 ov7251->exposure->default_value); in ov7251_set_ctrl()
1466 ret = ov7251_write_reg(ov7251->client, OV7251_REG_EXPOSURE, in ov7251_set_ctrl()
1470 ret = ov7251_write_reg(ov7251->client, OV7251_REG_ANALOG_GAIN, in ov7251_set_ctrl()
1475 ret = ov7251_write_reg(ov7251->client, OV7251_REG_VTS, in ov7251_set_ctrl()
1477 ctrl->val + ov7251->cur_mode->height); in ov7251_set_ctrl()
1480 ret = ov7251_enable_test_pattern(ov7251, ctrl->val); in ov7251_set_ctrl()
1483 ret = ov7251_read_reg(ov7251->client, OV7251_MIRROR_REG, in ov7251_set_ctrl()
1485 ret |= ov7251_write_reg(ov7251->client, OV7251_MIRROR_REG, in ov7251_set_ctrl()
1490 ret = ov7251_read_reg(ov7251->client, OV7251_FLIP_REG, in ov7251_set_ctrl()
1492 ret |= ov7251_write_reg(ov7251->client, OV7251_FLIP_REG, in ov7251_set_ctrl()
1512 static int ov7251_initialize_controls(struct ov7251 *ov7251) in ov7251_initialize_controls() argument
1521 handler = &ov7251->ctrl_handler; in ov7251_initialize_controls()
1522 mode = ov7251->cur_mode; in ov7251_initialize_controls()
1526 handler->lock = &ov7251->mutex; in ov7251_initialize_controls()
1537 ov7251->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in ov7251_initialize_controls()
1539 if (ov7251->hblank) in ov7251_initialize_controls()
1540 ov7251->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in ov7251_initialize_controls()
1542 ov7251->vblank = v4l2_ctrl_new_std(handler, &ov7251_ctrl_ops, in ov7251_initialize_controls()
1546 ov7251->cur_fps = mode->max_fps; in ov7251_initialize_controls()
1548 ov7251->exposure = v4l2_ctrl_new_std(handler, &ov7251_ctrl_ops, in ov7251_initialize_controls()
1552 ov7251->anal_gain = v4l2_ctrl_new_std(handler, &ov7251_ctrl_ops, in ov7251_initialize_controls()
1557 ov7251->test_pattern = v4l2_ctrl_new_std_menu_items(handler, in ov7251_initialize_controls()
1568 dev_err(&ov7251->client->dev, in ov7251_initialize_controls()
1573 ov7251->subdev.ctrl_handler = handler; in ov7251_initialize_controls()
1583 static int ov7251_check_sensor_id(struct ov7251 *ov7251, in ov7251_check_sensor_id() argument
1586 struct device *dev = &ov7251->client->dev; in ov7251_check_sensor_id()
1602 static int ov7251_configure_regulators(struct ov7251 *ov7251) in ov7251_configure_regulators() argument
1607 ov7251->supplies[i].supply = ov7251_supply_names[i]; in ov7251_configure_regulators()
1609 return devm_regulator_bulk_get(&ov7251->client->dev, in ov7251_configure_regulators()
1611 ov7251->supplies); in ov7251_configure_regulators()
1619 struct ov7251 *ov7251; in ov7251_probe() local
1629 ov7251 = devm_kzalloc(dev, sizeof(*ov7251), GFP_KERNEL); in ov7251_probe()
1630 if (!ov7251) in ov7251_probe()
1634 &ov7251->module_index); in ov7251_probe()
1636 &ov7251->module_facing); in ov7251_probe()
1638 &ov7251->module_name); in ov7251_probe()
1640 &ov7251->len_name); in ov7251_probe()
1646 ov7251->client = client; in ov7251_probe()
1647 ov7251->cur_mode = &supported_modes[0]; in ov7251_probe()
1649 ov7251->xvclk = devm_clk_get(dev, "xvclk"); in ov7251_probe()
1650 if (IS_ERR(ov7251->xvclk)) { in ov7251_probe()
1655 ov7251->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in ov7251_probe()
1656 if (IS_ERR(ov7251->reset_gpio)) in ov7251_probe()
1659 ov7251->pwdn_gpio = devm_gpiod_get(dev, "pwdn", GPIOD_OUT_LOW); in ov7251_probe()
1660 if (IS_ERR(ov7251->pwdn_gpio)) in ov7251_probe()
1663 ov7251->pinctrl = devm_pinctrl_get(dev); in ov7251_probe()
1664 if (!IS_ERR(ov7251->pinctrl)) { in ov7251_probe()
1665 ov7251->pins_default = in ov7251_probe()
1666 pinctrl_lookup_state(ov7251->pinctrl, in ov7251_probe()
1668 if (IS_ERR(ov7251->pins_default)) in ov7251_probe()
1671 ov7251->pins_sleep = in ov7251_probe()
1672 pinctrl_lookup_state(ov7251->pinctrl, in ov7251_probe()
1674 if (IS_ERR(ov7251->pins_sleep)) in ov7251_probe()
1680 ret = ov7251_configure_regulators(ov7251); in ov7251_probe()
1686 mutex_init(&ov7251->mutex); in ov7251_probe()
1688 sd = &ov7251->subdev; in ov7251_probe()
1690 ret = ov7251_initialize_controls(ov7251); in ov7251_probe()
1694 ret = __ov7251_power_on(ov7251); in ov7251_probe()
1698 ret = ov7251_check_sensor_id(ov7251, client); in ov7251_probe()
1708 ov7251->pad.flags = MEDIA_PAD_FL_SOURCE; in ov7251_probe()
1710 ret = media_entity_pads_init(&sd->entity, 1, &ov7251->pad); in ov7251_probe()
1716 if (strcmp(ov7251->module_facing, "back") == 0) in ov7251_probe()
1722 ov7251->module_index, facing, in ov7251_probe()
1741 __ov7251_power_off(ov7251); in ov7251_probe()
1743 v4l2_ctrl_handler_free(&ov7251->ctrl_handler); in ov7251_probe()
1745 mutex_destroy(&ov7251->mutex); in ov7251_probe()
1753 struct ov7251 *ov7251 = to_ov7251(sd); in ov7251_remove() local
1759 v4l2_ctrl_handler_free(&ov7251->ctrl_handler); in ov7251_remove()
1760 mutex_destroy(&ov7251->mutex); in ov7251_remove()
1764 __ov7251_power_off(ov7251); in ov7251_remove()