Lines Matching defs:sensor

465 static int imx415_read(struct imx415 *sensor, u32 addr)
470 ret = regmap_raw_read(sensor->regmap, addr & IMX415_REG_ADDR_MASK, data,
478 static int imx415_write(struct imx415 *sensor, u32 addr, u32 value)
483 ret = regmap_raw_write(sensor->regmap, addr & IMX415_REG_ADDR_MASK,
486 dev_err_ratelimited(sensor->dev,
494 static int imx415_set_testpattern(struct imx415 *sensor, int val)
499 ret = imx415_write(sensor, IMX415_BLKLEVEL, 0x00);
502 ret = imx415_write(sensor, IMX415_TPG_EN_DUOUT, 0x01);
505 ret = imx415_write(sensor, IMX415_TPG_PATSEL_DUOUT, val - 1);
508 ret = imx415_write(sensor, IMX415_TPG_COLORWIDTH, 0x01);
511 ret = imx415_write(sensor, IMX415_TESTCLKEN_MIPI, 0x20);
514 ret = imx415_write(sensor, IMX415_DIG_CLP_MODE, 0x00);
517 ret = imx415_write(sensor, IMX415_WRJ_OPEN, 0x00);
519 ret = imx415_write(sensor, IMX415_BLKLEVEL,
523 ret = imx415_write(sensor, IMX415_TPG_EN_DUOUT, 0x00);
526 ret = imx415_write(sensor, IMX415_TESTCLKEN_MIPI, 0x00);
529 ret = imx415_write(sensor, IMX415_DIG_CLP_MODE, 0x01);
532 ret = imx415_write(sensor, IMX415_WRJ_OPEN, 0x01);
539 struct imx415 *sensor = container_of(ctrl->handler, struct imx415,
546 if (!sensor->streaming)
549 state = v4l2_subdev_get_locked_active_state(&sensor->subdev);
550 format = v4l2_subdev_get_pad_format(&sensor->subdev, state, 0);
555 vmax = format->height + sensor->vblank->cur.val;
557 return imx415_write(sensor, IMX415_SHR0, vmax - ctrl->val);
561 return imx415_write(sensor, IMX415_GAIN_PCG_0, ctrl->val);
565 flip = (sensor->hflip->val << IMX415_HREVERSE_SHIFT) |
566 (sensor->vflip->val << IMX415_VREVERSE_SHIFT);
567 return imx415_write(sensor, IMX415_REVERSE, flip);
570 return imx415_set_testpattern(sensor, ctrl->val);
581 static int imx415_ctrls_init(struct imx415 *sensor)
585 u64 pixel_rate = supported_modes[sensor->cur_mode].pixel_rate;
586 u64 lane_rate = supported_modes[sensor->cur_mode].lane_rate;
593 ret = v4l2_fwnode_device_parse(sensor->dev, &props);
597 v4l2_ctrl_handler_init(&sensor->ctrls, 10);
604 return dev_err_probe(sensor->dev, -EINVAL,
609 ctrl = v4l2_ctrl_new_int_menu(&sensor->ctrls, &imx415_ctrl_ops,
617 v4l2_ctrl_new_std(&sensor->ctrls, &imx415_ctrl_ops, V4L2_CID_EXPOSURE,
620 v4l2_ctrl_new_std(&sensor->ctrls, &imx415_ctrl_ops,
625 hblank = supported_modes[sensor->cur_mode].hmax_pix -
627 ctrl = v4l2_ctrl_new_std(&sensor->ctrls, &imx415_ctrl_ops,
632 sensor->vblank = v4l2_ctrl_new_std(&sensor->ctrls, &imx415_ctrl_ops,
637 if (sensor->vblank)
638 sensor->vblank->flags |= V4L2_CTRL_FLAG_READ_ONLY;
645 v4l2_ctrl_new_std(&sensor->ctrls, NULL, V4L2_CID_PIXEL_RATE, pixel_rate,
648 sensor->hflip = v4l2_ctrl_new_std(&sensor->ctrls, &imx415_ctrl_ops,
650 sensor->vflip = v4l2_ctrl_new_std(&sensor->ctrls, &imx415_ctrl_ops,
653 v4l2_ctrl_new_std_menu_items(&sensor->ctrls, &imx415_ctrl_ops,
658 v4l2_ctrl_new_fwnode_properties(&sensor->ctrls, &imx415_ctrl_ops,
661 if (sensor->ctrls.error) {
662 dev_err_probe(sensor->dev, sensor->ctrls.error,
664 v4l2_ctrl_handler_free(&sensor->ctrls);
665 return sensor->ctrls.error;
667 sensor->subdev.ctrl_handler = &sensor->ctrls;
672 static int imx415_set_mode(struct imx415 *sensor, int mode)
679 dev_err(sensor->dev, "Mode %d not supported\n", mode);
685 ret = imx415_write(sensor, reg->address, reg->val);
691 reg = &sensor->clk_params->regs[i];
692 ret = imx415_write(sensor, reg->address, reg->val);
700 static int imx415_setup(struct imx415 *sensor, struct v4l2_subdev_state *state)
706 ret = imx415_write(sensor, imx415_init_table[i].address,
712 return imx415_set_mode(sensor, sensor->cur_mode);
715 static int imx415_wakeup(struct imx415 *sensor)
719 ret = imx415_write(sensor, IMX415_MODE, IMX415_MODE_OPERATING);
733 static int imx415_stream_on(struct imx415 *sensor)
737 ret = imx415_wakeup(sensor);
741 return imx415_write(sensor, IMX415_XMSTA, IMX415_XMSTA_START);
744 static int imx415_stream_off(struct imx415 *sensor)
748 ret = imx415_write(sensor, IMX415_XMSTA, IMX415_XMSTA_STOP);
752 return imx415_write(sensor, IMX415_MODE, IMX415_MODE_STANDBY);
757 struct imx415 *sensor = to_imx415(sd);
764 ret = imx415_stream_off(sensor);
766 pm_runtime_mark_last_busy(sensor->dev);
767 pm_runtime_put_autosuspend(sensor->dev);
769 sensor->streaming = false;
774 ret = pm_runtime_resume_and_get(sensor->dev);
778 ret = imx415_setup(sensor, state);
787 sensor->streaming = true;
789 ret = __v4l2_ctrl_handler_setup(&sensor->ctrls);
793 ret = imx415_stream_on(sensor);
809 pm_runtime_put_sync(sensor->dev);
810 sensor->streaming = false;
927 static int imx415_subdev_init(struct imx415 *sensor)
929 struct i2c_client *client = to_i2c_client(sensor->dev);
932 v4l2_i2c_subdev_init(&sensor->subdev, client, &imx415_subdev_ops);
934 ret = imx415_ctrls_init(sensor);
938 sensor->subdev.flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
940 sensor->pad.flags = MEDIA_PAD_FL_SOURCE;
941 sensor->subdev.entity.function = MEDIA_ENT_F_CAM_SENSOR;
942 ret = media_entity_pads_init(&sensor->subdev.entity, 1, &sensor->pad);
944 v4l2_ctrl_handler_free(&sensor->ctrls);
948 sensor->subdev.state_lock = sensor->subdev.ctrl_handler->lock;
949 v4l2_subdev_init_finalize(&sensor->subdev);
954 static void imx415_subdev_cleanup(struct imx415 *sensor)
956 media_entity_cleanup(&sensor->subdev.entity);
957 v4l2_ctrl_handler_free(&sensor->ctrls);
960 static int imx415_power_on(struct imx415 *sensor)
964 ret = regulator_bulk_enable(ARRAY_SIZE(sensor->supplies),
965 sensor->supplies);
969 gpiod_set_value_cansleep(sensor->reset, 0);
973 ret = clk_prepare_enable(sensor->clk);
987 gpiod_set_value_cansleep(sensor->reset, 1);
988 regulator_bulk_disable(ARRAY_SIZE(sensor->supplies), sensor->supplies);
992 static void imx415_power_off(struct imx415 *sensor)
994 clk_disable_unprepare(sensor->clk);
995 gpiod_set_value_cansleep(sensor->reset, 1);
996 regulator_bulk_disable(ARRAY_SIZE(sensor->supplies), sensor->supplies);
999 static int imx415_identify_model(struct imx415 *sensor)
1004 * While most registers can be read when the sensor is in standby, this
1005 * is not the case of the sensor info register :-(
1007 ret = imx415_wakeup(sensor);
1009 return dev_err_probe(sensor->dev, ret,
1010 "failed to get sensor out of standby\n");
1012 ret = imx415_read(sensor, IMX415_SENSOR_INFO);
1014 dev_err_probe(sensor->dev, ret,
1015 "failed to read sensor information\n");
1023 dev_info(sensor->dev, "Detected IMX415 image sensor\n");
1026 ret = dev_err_probe(sensor->dev, -ENODEV,
1034 imx415_write(sensor, IMX415_MODE, IMX415_MODE_STANDBY);
1054 static int imx415_parse_hw_config(struct imx415 *sensor)
1065 for (i = 0; i < ARRAY_SIZE(sensor->supplies); ++i)
1066 sensor->supplies[i].supply = imx415_supply_names[i];
1068 ret = devm_regulator_bulk_get(sensor->dev, ARRAY_SIZE(sensor->supplies),
1069 sensor->supplies);
1071 return dev_err_probe(sensor->dev, ret,
1074 sensor->reset = devm_gpiod_get_optional(sensor->dev, "reset",
1076 if (IS_ERR(sensor->reset))
1077 return dev_err_probe(sensor->dev, PTR_ERR(sensor->reset),
1080 sensor->clk = devm_clk_get(sensor->dev, "inck");
1081 if (IS_ERR(sensor->clk))
1082 return dev_err_probe(sensor->dev, PTR_ERR(sensor->clk),
1085 ep = fwnode_graph_get_next_endpoint(dev_fwnode(sensor->dev), NULL);
1097 sensor->num_data_lanes = bus_cfg.bus.mipi_csi2.num_data_lanes;
1100 ret = dev_err_probe(sensor->dev, -EINVAL,
1107 ret = dev_err_probe(sensor->dev, -EINVAL,
1113 * Check if there exists a sensor mode defined for current INCK,
1116 inck = clk_get_rate(sensor->clk);
1119 dev_dbg(sensor->dev,
1126 if (sensor->num_data_lanes != supported_modes[j].lanes)
1131 sensor->cur_mode = j;
1138 ret = dev_err_probe(sensor->dev, -EINVAL,
1139 "no valid sensor mode defined\n");
1143 lane_rate = supported_modes[sensor->cur_mode].lane_rate;
1147 sensor->clk_params = &imx415_clk_params[i];
1152 ret = dev_err_probe(sensor->dev, -EINVAL,
1154 sensor->cur_mode);
1159 dev_dbg(sensor->dev, "clock: %lu Hz, lane_rate: %llu bps, lanes: %d\n",
1160 inck, lane_rate, sensor->num_data_lanes);
1170 struct imx415 *sensor;
1173 sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL);
1174 if (!sensor)
1177 sensor->dev = &client->dev;
1179 ret = imx415_parse_hw_config(sensor);
1183 sensor->regmap = devm_regmap_init_i2c(client, &imx415_regmap_config);
1184 if (IS_ERR(sensor->regmap))
1185 return PTR_ERR(sensor->regmap);
1190 * the sensor on manually here, identify it, and fully initialize it.
1192 ret = imx415_power_on(sensor);
1196 ret = imx415_identify_model(sensor);
1200 ret = imx415_subdev_init(sensor);
1208 pm_runtime_set_active(sensor->dev);
1209 pm_runtime_get_noresume(sensor->dev);
1210 pm_runtime_enable(sensor->dev);
1212 ret = v4l2_async_register_subdev_sensor(&sensor->subdev);
1221 pm_runtime_set_autosuspend_delay(sensor->dev, 1000);
1222 pm_runtime_use_autosuspend(sensor->dev);
1223 pm_runtime_put_autosuspend(sensor->dev);
1228 pm_runtime_disable(sensor->dev);
1229 pm_runtime_put_noidle(sensor->dev);
1230 imx415_subdev_cleanup(sensor);
1232 imx415_power_off(sensor);
1239 struct imx415 *sensor = to_imx415(subdev);
1243 imx415_subdev_cleanup(sensor);
1249 pm_runtime_disable(sensor->dev);
1250 if (!pm_runtime_status_suspended(sensor->dev))
1251 imx415_power_off(sensor);
1252 pm_runtime_set_suspended(sensor->dev);
1259 struct imx415 *sensor = to_imx415(subdev);
1261 return imx415_power_on(sensor);
1268 struct imx415 *sensor = to_imx415(subdev);
1270 imx415_power_off(sensor);
1297 MODULE_DESCRIPTION("Sony IMX415 image sensor driver");