Lines Matching defs:sensor

180 static struct device *ov2680_to_dev(struct ov2680_dev *sensor)
182 return &sensor->i2c_client->dev;
191 static int __ov2680_write_reg(struct ov2680_dev *sensor, u16 reg,
194 struct i2c_client *client = sensor->i2c_client;
221 static int __ov2680_read_reg(struct ov2680_dev *sensor, u16 reg,
224 struct i2c_client *client = sensor->i2c_client;
263 static int ov2680_mod_reg(struct ov2680_dev *sensor, u16 reg, u8 mask, u8 val)
268 ret = ov2680_read_reg(sensor, reg, &readval);
276 return ov2680_write_reg(sensor, reg, val);
279 static int ov2680_load_regs(struct ov2680_dev *sensor,
292 ret = ov2680_write_reg(sensor, reg_addr, val);
300 static void ov2680_power_up(struct ov2680_dev *sensor)
302 if (!sensor->reset_gpio)
305 gpiod_set_value(sensor->reset_gpio, 0);
309 static void ov2680_power_down(struct ov2680_dev *sensor)
311 if (!sensor->reset_gpio)
314 gpiod_set_value(sensor->reset_gpio, 1);
318 static void ov2680_set_bayer_order(struct ov2680_dev *sensor)
322 if (sensor->ctrls.vflip && sensor->ctrls.vflip->val)
325 if (sensor->ctrls.hflip && sensor->ctrls.hflip->val)
328 sensor->fmt.code = ov2680_hv_flip_bayer_order[hv_flip];
331 static int ov2680_set_vflip(struct ov2680_dev *sensor, s32 val)
335 if (sensor->is_streaming)
338 ret = ov2680_mod_reg(sensor, OV2680_REG_FORMAT1,
343 ov2680_set_bayer_order(sensor);
347 static int ov2680_set_hflip(struct ov2680_dev *sensor, s32 val)
351 if (sensor->is_streaming)
354 ret = ov2680_mod_reg(sensor, OV2680_REG_FORMAT2,
359 ov2680_set_bayer_order(sensor);
363 static int ov2680_test_pattern_set(struct ov2680_dev *sensor, int value)
368 return ov2680_mod_reg(sensor, OV2680_REG_ISP_CTRL00, BIT(7), 0);
370 ret = ov2680_mod_reg(sensor, OV2680_REG_ISP_CTRL00, 0x03, value - 1);
374 ret = ov2680_mod_reg(sensor, OV2680_REG_ISP_CTRL00, BIT(7), BIT(7));
381 static int ov2680_gain_set(struct ov2680_dev *sensor, u32 gain)
383 return ov2680_write_reg16(sensor, OV2680_REG_GAIN_PK, gain);
386 static int ov2680_exposure_set(struct ov2680_dev *sensor, u32 exp)
388 return ov2680_write_reg24(sensor, OV2680_REG_EXPOSURE_PK_HIGH,
392 static int ov2680_stream_enable(struct ov2680_dev *sensor)
394 return ov2680_write_reg(sensor, OV2680_REG_STREAM_CTRL, 1);
397 static int ov2680_stream_disable(struct ov2680_dev *sensor)
399 return ov2680_write_reg(sensor, OV2680_REG_STREAM_CTRL, 0);
402 static int ov2680_mode_set(struct ov2680_dev *sensor)
406 ret = ov2680_load_regs(sensor, sensor->current_mode);
411 ret = __v4l2_ctrl_handler_setup(&sensor->ctrls.handler);
415 sensor->mode_pending_changes = false;
420 static int ov2680_mode_restore(struct ov2680_dev *sensor)
424 ret = ov2680_load_regs(sensor, &ov2680_mode_init_data);
428 return ov2680_mode_set(sensor);
431 static int ov2680_power_off(struct ov2680_dev *sensor)
433 if (!sensor->is_enabled)
436 clk_disable_unprepare(sensor->xvclk);
437 ov2680_power_down(sensor);
438 regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies);
439 sensor->is_enabled = false;
444 static int ov2680_power_on(struct ov2680_dev *sensor)
446 struct device *dev = ov2680_to_dev(sensor);
449 if (sensor->is_enabled)
452 ret = regulator_bulk_enable(OV2680_NUM_SUPPLIES, sensor->supplies);
458 if (!sensor->reset_gpio) {
459 ret = ov2680_write_reg(sensor, OV2680_REG_SOFT_RESET, 0x01);
461 dev_err(dev, "sensor soft reset failed\n");
466 ov2680_power_down(sensor);
467 ov2680_power_up(sensor);
470 ret = clk_prepare_enable(sensor->xvclk);
474 sensor->is_enabled = true;
477 ov2680_stream_enable(sensor);
479 ov2680_stream_disable(sensor);
484 regulator_bulk_disable(OV2680_NUM_SUPPLIES, sensor->supplies);
490 struct ov2680_dev *sensor = to_ov2680_dev(sd);
493 mutex_lock(&sensor->lock);
496 ret = ov2680_power_on(sensor);
498 ret = ov2680_power_off(sensor);
501 ret = ov2680_mode_restore(sensor);
503 mutex_unlock(&sensor->lock);
511 struct ov2680_dev *sensor = to_ov2680_dev(sd);
513 mutex_lock(&sensor->lock);
514 fi->interval = sensor->frame_interval;
515 mutex_unlock(&sensor->lock);
522 struct ov2680_dev *sensor = to_ov2680_dev(sd);
525 mutex_lock(&sensor->lock);
527 if (sensor->is_streaming == !!enable)
530 if (enable && sensor->mode_pending_changes) {
531 ret = ov2680_mode_set(sensor);
537 ret = ov2680_stream_enable(sensor);
539 ret = ov2680_stream_disable(sensor);
541 sensor->is_streaming = !!enable;
544 mutex_unlock(&sensor->lock);
553 struct ov2680_dev *sensor = to_ov2680_dev(sd);
558 code->code = sensor->fmt.code;
567 struct ov2680_dev *sensor = to_ov2680_dev(sd);
574 mutex_lock(&sensor->lock);
578 fmt = v4l2_subdev_get_try_format(&sensor->sd, cfg, format->pad);
583 fmt = &sensor->fmt;
589 mutex_unlock(&sensor->lock);
598 struct ov2680_dev *sensor = to_ov2680_dev(sd);
609 mutex_lock(&sensor->lock);
611 if (sensor->is_streaming) {
634 fmt->code = sensor->fmt.code;
635 fmt->colorspace = sensor->fmt.colorspace;
637 sensor->current_mode = mode;
638 sensor->fmt = format->format;
639 sensor->mode_pending_changes = true;
642 mutex_unlock(&sensor->lock);
701 struct ov2680_dev *sensor = to_ov2680_dev(sd);
703 if (!sensor->is_enabled)
708 return ov2680_gain_set(sensor, ctrl->val);
710 return ov2680_exposure_set(sensor, ctrl->val);
712 return ov2680_set_vflip(sensor, ctrl->val);
714 return ov2680_set_hflip(sensor, ctrl->val);
716 return ov2680_test_pattern_set(sensor, ctrl->val);
753 static int ov2680_mode_init(struct ov2680_dev *sensor)
758 sensor->fmt.code = MEDIA_BUS_FMT_SBGGR10_1X10;
759 sensor->fmt.width = 800;
760 sensor->fmt.height = 600;
761 sensor->fmt.field = V4L2_FIELD_NONE;
762 sensor->fmt.colorspace = V4L2_COLORSPACE_SRGB;
764 sensor->frame_interval.denominator = OV2680_FRAME_RATE;
765 sensor->frame_interval.numerator = 1;
769 sensor->current_mode = init_mode;
771 sensor->mode_pending_changes = true;
776 static int ov2680_v4l2_register(struct ov2680_dev *sensor)
779 struct ov2680_ctrls *ctrls = &sensor->ctrls;
783 v4l2_i2c_subdev_init(&sensor->sd, sensor->i2c_client,
787 sensor->sd.flags = V4L2_SUBDEV_FL_HAS_DEVNODE;
789 sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
790 sensor->sd.entity.function = MEDIA_ENT_F_CAM_SENSOR;
792 ret = media_entity_pads_init(&sensor->sd.entity, 1, &sensor->pad);
798 hdl->lock = &sensor->lock;
821 sensor->sd.ctrl_handler = hdl;
823 ret = v4l2_async_register_subdev(&sensor->sd);
830 media_entity_cleanup(&sensor->sd.entity);
836 static int ov2680_get_regulators(struct ov2680_dev *sensor)
841 sensor->supplies[i].supply = ov2680_supply_name[i];
843 return devm_regulator_bulk_get(&sensor->i2c_client->dev,
845 sensor->supplies);
848 static int ov2680_check_id(struct ov2680_dev *sensor)
850 struct device *dev = ov2680_to_dev(sensor);
854 ov2680_power_on(sensor);
856 ret = ov2680_read_reg16(sensor, OV2680_REG_CHIP_ID_HIGH, &chip_id);
871 static int ov2680_parse_dt(struct ov2680_dev *sensor)
873 struct device *dev = ov2680_to_dev(sensor);
876 sensor->reset_gpio = devm_gpiod_get_optional(dev, "reset",
878 ret = PTR_ERR_OR_ZERO(sensor->reset_gpio);
884 sensor->xvclk = devm_clk_get(dev, "xvclk");
885 if (IS_ERR(sensor->xvclk)) {
887 return PTR_ERR(sensor->xvclk);
890 sensor->xvclk_freq = clk_get_rate(sensor->xvclk);
891 if (sensor->xvclk_freq != OV2680_XVCLK_VALUE) {
893 sensor->xvclk_freq, OV2680_XVCLK_VALUE);
903 struct ov2680_dev *sensor;
906 sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL);
907 if (!sensor)
910 sensor->i2c_client = client;
912 ret = ov2680_parse_dt(sensor);
916 ret = ov2680_mode_init(sensor);
920 ret = ov2680_get_regulators(sensor);
926 mutex_init(&sensor->lock);
928 ret = ov2680_check_id(sensor);
932 ret = ov2680_v4l2_register(sensor);
942 mutex_destroy(&sensor->lock);
950 struct ov2680_dev *sensor = to_ov2680_dev(sd);
952 v4l2_async_unregister_subdev(&sensor->sd);
953 mutex_destroy(&sensor->lock);
954 media_entity_cleanup(&sensor->sd.entity);
955 v4l2_ctrl_handler_free(&sensor->ctrls.handler);
964 struct ov2680_dev *sensor = to_ov2680_dev(sd);
966 if (sensor->is_streaming)
967 ov2680_stream_disable(sensor);
976 struct ov2680_dev *sensor = to_ov2680_dev(sd);
979 if (sensor->is_streaming) {
980 ret = ov2680_stream_enable(sensor);
988 ov2680_stream_disable(sensor);
989 sensor->is_streaming = false;