Lines Matching defs:ov2685
3 * ov2685 driver
83 struct ov2685 {
103 #define to_ov2685(sd) container_of(sd, struct ov2685, subdev)
334 struct ov2685 *ov2685 = to_ov2685(sd);
338 ov2685_fill_fmt(ov2685->cur_mode, mbus_fmt);
347 struct ov2685 *ov2685 = to_ov2685(sd);
350 ov2685_fill_fmt(ov2685->cur_mode, mbus_fmt);
392 static int __ov2685_power_on(struct ov2685 *ov2685)
396 struct device *dev = &ov2685->client->dev;
398 ret = clk_prepare_enable(ov2685->xvclk);
404 gpiod_set_value_cansleep(ov2685->reset_gpio, 1);
406 ret = regulator_bulk_enable(OV2685_NUM_SUPPLIES, ov2685->supplies);
413 gpiod_set_value_cansleep(ov2685->reset_gpio, 0);
418 /* HACK: ov2685 would output messy data after reset(R0103),
421 ret = ov2685_write_array(ov2685->client, ov2685->cur_mode->reg_list);
428 regulator_bulk_disable(OV2685_NUM_SUPPLIES, ov2685->supplies);
430 clk_disable_unprepare(ov2685->xvclk);
435 static void __ov2685_power_off(struct ov2685 *ov2685)
441 clk_disable_unprepare(ov2685->xvclk);
442 gpiod_set_value_cansleep(ov2685->reset_gpio, 1);
443 regulator_bulk_disable(OV2685_NUM_SUPPLIES, ov2685->supplies);
448 struct ov2685 *ov2685 = to_ov2685(sd);
449 struct i2c_client *client = ov2685->client;
452 mutex_lock(&ov2685->mutex);
455 if (on == ov2685->streaming)
459 ret = pm_runtime_get_sync(&ov2685->client->dev);
464 ret = __v4l2_ctrl_handler_setup(&ov2685->ctrl_handler);
478 pm_runtime_put(&ov2685->client->dev);
481 ov2685->streaming = on;
484 mutex_unlock(&ov2685->mutex);
492 struct ov2685 *ov2685 = to_ov2685(sd);
495 mutex_lock(&ov2685->mutex);
501 mutex_unlock(&ov2685->mutex);
511 struct ov2685 *ov2685 = to_ov2685(sd);
513 return __ov2685_power_on(ov2685);
520 struct ov2685 *ov2685 = to_ov2685(sd);
522 __ov2685_power_off(ov2685);
534 struct ov2685 *ov2685 = container_of(ctrl->handler,
535 struct ov2685, ctrl_handler);
536 struct i2c_client *client = ov2685->client;
544 max_expo = ov2685->cur_mode->height + ctrl->val - 4;
545 __v4l2_ctrl_modify_range(ov2685->exposure,
546 ov2685->exposure->minimum, max_expo,
547 ov2685->exposure->step,
548 ov2685->exposure->default_value);
557 ret = ov2685_write_reg(ov2685->client, OV2685_REG_EXPOSURE,
561 ret = ov2685_write_reg(ov2685->client, OV2685_REG_GAIN,
565 ret = ov2685_write_reg(ov2685->client, OV2685_REG_VTS,
567 ctrl->val + ov2685->cur_mode->height);
570 ret = ov2685_write_reg(ov2685->client, OV2685_REG_TEST_PATTERN,
612 static int ov2685_initialize_controls(struct ov2685 *ov2685)
621 handler = &ov2685->ctrl_handler;
622 mode = ov2685->cur_mode;
626 handler->lock = &ov2685->mutex;
639 ov2685->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK,
641 if (ov2685->hblank)
642 ov2685->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
644 ov2685->vblank = v4l2_ctrl_new_std(handler, &ov2685_ctrl_ops,
650 ov2685->exposure = v4l2_ctrl_new_std(handler, &ov2685_ctrl_ops,
655 ov2685->anal_gain = v4l2_ctrl_new_std(handler, &ov2685_ctrl_ops,
660 ov2685->test_pattern = v4l2_ctrl_new_std_menu_items(handler,
667 dev_err(&ov2685->client->dev,
672 ov2685->subdev.ctrl_handler = handler;
682 static int ov2685_check_sensor_id(struct ov2685 *ov2685,
685 struct device *dev = &ov2685->client->dev;
701 static int ov2685_configure_regulators(struct ov2685 *ov2685)
706 ov2685->supplies[i].supply = ov2685_supply_names[i];
708 return devm_regulator_bulk_get(&ov2685->client->dev,
710 ov2685->supplies);
717 struct ov2685 *ov2685;
720 ov2685 = devm_kzalloc(dev, sizeof(*ov2685), GFP_KERNEL);
721 if (!ov2685)
724 ov2685->client = client;
725 ov2685->cur_mode = &supported_modes[0];
727 ov2685->xvclk = devm_clk_get(dev, "xvclk");
728 if (IS_ERR(ov2685->xvclk)) {
732 ret = clk_set_rate(ov2685->xvclk, OV2685_XVCLK_FREQ);
737 if (clk_get_rate(ov2685->xvclk) != OV2685_XVCLK_FREQ)
740 ov2685->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
741 if (IS_ERR(ov2685->reset_gpio)) {
746 ret = ov2685_configure_regulators(ov2685);
752 mutex_init(&ov2685->mutex);
753 v4l2_i2c_subdev_init(&ov2685->subdev, client, &ov2685_subdev_ops);
754 ret = ov2685_initialize_controls(ov2685);
758 ret = __ov2685_power_on(ov2685);
762 ret = ov2685_check_sensor_id(ov2685, client);
767 ov2685->subdev.internal_ops = &ov2685_internal_ops;
768 ov2685->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE;
771 ov2685->pad.flags = MEDIA_PAD_FL_SOURCE;
772 ov2685->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
773 ret = media_entity_pads_init(&ov2685->subdev.entity, 1, &ov2685->pad);
778 ret = v4l2_async_register_subdev(&ov2685->subdev);
792 media_entity_cleanup(&ov2685->subdev.entity);
795 __ov2685_power_off(ov2685);
797 v4l2_ctrl_handler_free(&ov2685->ctrl_handler);
799 mutex_destroy(&ov2685->mutex);
807 struct ov2685 *ov2685 = to_ov2685(sd);
813 v4l2_ctrl_handler_free(&ov2685->ctrl_handler);
814 mutex_destroy(&ov2685->mutex);
818 __ov2685_power_off(ov2685);
826 { .compatible = "ovti,ov2685" },
834 .name = "ov2685",
844 MODULE_DESCRIPTION("OmniVision ov2685 sensor driver");