Lines Matching full:sensor
3 * sensor driver
45 #define SENSOR_NAME "sensor"
68 struct sensor { struct
98 static struct sensor *g_sensor[RKMODULE_MAX_SENSOR_NUM]; argument
124 #define to_sensor(sd) container_of(sd, struct sensor, subdev)
128 * the same as the current output resolution of the sensor.
195 struct sensor *sensor = to_sensor(sd); in sensor_set_fmt() local
197 mutex_lock(&sensor->mutex); in sensor_set_fmt()
200 sensor->cur_mode->bus_fmt = fmt->format.code; in sensor_set_fmt()
201 sensor->cur_mode->width = fmt->format.width; in sensor_set_fmt()
202 sensor->cur_mode->height = fmt->format.height; in sensor_set_fmt()
204 mutex_unlock(&sensor->mutex); in sensor_set_fmt()
213 struct sensor *sensor = to_sensor(sd); in sensor_get_fmt() local
214 const struct sensor_mode *mode = sensor->cur_mode; in sensor_get_fmt()
217 mutex_lock(&sensor->mutex); in sensor_get_fmt()
222 mutex_unlock(&sensor->mutex); in sensor_get_fmt()
231 struct sensor *sensor = to_sensor(sd); in sensor_enum_mbus_code() local
235 code->code = sensor->cur_mode->bus_fmt; in sensor_enum_mbus_code()
258 struct sensor *sensor = to_sensor(sd); in sensor_g_frame_interval() local
259 const struct sensor_mode *mode = sensor->cur_mode; in sensor_g_frame_interval()
261 mutex_lock(&sensor->mutex); in sensor_g_frame_interval()
263 mutex_unlock(&sensor->mutex); in sensor_g_frame_interval()
271 struct sensor *sensor = to_sensor(sd); in sensor_s_frame_interval() local
272 struct sensor_mode *mode = sensor->cur_mode; in sensor_s_frame_interval()
274 mutex_lock(&sensor->mutex); in sensor_s_frame_interval()
276 mutex_unlock(&sensor->mutex); in sensor_s_frame_interval()
284 struct sensor *sensor = to_sensor(sd); in sensor_g_mbus_config() local
286 u32 lane_num = sensor->bus_config.bus.lanes; in sensor_g_mbus_config()
291 config->type = sensor->bus_config.bus.bus_type; in sensor_g_mbus_config()
297 static void sensor_get_module_inf(struct sensor *sensor, in sensor_get_module_inf() argument
301 strscpy(inf->base.sensor, SENSOR_NAME, sizeof(inf->base.sensor)); in sensor_get_module_inf()
302 strscpy(inf->base.module, sensor->module_name, in sensor_get_module_inf()
304 strscpy(inf->base.lens, sensor->len_name, sizeof(inf->base.lens)); in sensor_get_module_inf()
309 struct sensor *sensor; in rkcam_sensor_enable_mclk() local
315 sensor = g_sensor[i]; in rkcam_sensor_enable_mclk()
316 if (sensor->module_index == i2cdev) in rkcam_sensor_enable_mclk()
323 dev = &sensor->client->dev; in rkcam_sensor_enable_mclk()
325 ret = clk_set_rate(sensor->clks[mclk_index], mclk_rate); in rkcam_sensor_enable_mclk()
328 if (clk_get_rate(sensor->clks[mclk_index]) != sensor->cur_mode->mclk) in rkcam_sensor_enable_mclk()
329 dev_warn(dev, "xvclk mismatched, %lu\n", clk_get_rate(sensor->clks[mclk_index])); in rkcam_sensor_enable_mclk()
330 ret = clk_prepare_enable(sensor->clks[mclk_index]); in rkcam_sensor_enable_mclk()
335 sensor->cur_mode->mclk = clk_get_rate(sensor->clks[mclk_index]); in rkcam_sensor_enable_mclk()
342 struct sensor *sensor; in rkcam_sensor_disable_mclk() local
346 sensor = g_sensor[i]; in rkcam_sensor_disable_mclk()
347 if (sensor->module_index == i2cdev) in rkcam_sensor_disable_mclk()
354 clk_disable_unprepare(sensor->clks[mclk_index]); in rkcam_sensor_disable_mclk()
359 static int sensor_config_link_freq(struct sensor *sensor, s64 link_freq) in sensor_config_link_freq() argument
362 struct sensor_mode *mode = sensor->cur_mode; in sensor_config_link_freq()
365 __v4l2_ctrl_modify_range(sensor->link_freq, 0, 0, 1, link_freq_menu_items[0]); in sensor_config_link_freq()
368 sensor->bus_config.bus.lanes; in sensor_config_link_freq()
369 __v4l2_ctrl_modify_range(sensor->pixel_rate, pixel_rate, pixel_rate, 1, pixel_rate); in sensor_config_link_freq()
402 "sensor[%d] error bus type %d\n", sensor_id, bus_type); in rkcam_register_bus_callback()
454 struct sensor *sensor = NULL; in sensor_sync_dev_pipeline() local
461 sensor = g_sensor[i]; in sensor_sync_dev_pipeline()
462 if (!sensor) in sensor_sync_dev_pipeline()
464 if (!sensor->is_link) { in sensor_sync_dev_pipeline()
465 sensor_get_remote_dev(&sensor->subdev.entity, &vdev); in sensor_sync_dev_pipeline()
469 dev_info(&sensor->client->dev, "cam%d disconnect with isp\n", sensor->module_index); in sensor_sync_dev_pipeline()
473 if (sensor == NULL) { in sensor_sync_dev_pipeline()
476 dev_err(&sensor->client->dev, "failed to sync i2cdev, dev_num not match\n"); in sensor_sync_dev_pipeline()
482 static struct sensor *find_sensor(int index) in find_sensor()
499 struct sensor *sensor = find_sensor(sensor_infos->sensor_fmt[i].sensor_index); in sensor_set_sensor_info() local
504 if (sensor) { in sensor_set_sensor_info()
505 sensor->cur_mode->width = sensor_infos->sensor_fmt[i].sensor_width; in sensor_set_sensor_info()
506 sensor->cur_mode->height = sensor_infos->sensor_fmt[i].sensor_height; in sensor_set_sensor_info()
507 sensor->is_link = true; in sensor_set_sensor_info()
511 "not find the sensor, index %d\n", sensor_infos->sensor_fmt[i].sensor_index); in sensor_set_sensor_info()
522 struct sensor *sensor = to_sensor(sd); in sensor_ioctl() local
544 sensor_get_module_inf(sensor, (struct rkmodule_inf *)arg); in sensor_ioctl()
548 *hdr = sensor->cur_mode->hdr_cfg; in sensor_ioctl()
549 dev_info(&sensor->client->dev, in sensor_ioctl()
550 "sensor get hdr esp_mode %d, hdr_mode %d\n", in sensor_ioctl()
556 sensor->cur_mode->hdr_cfg = *hdr; in sensor_ioctl()
557 dev_info(&sensor->client->dev, in sensor_ioctl()
558 "sensor set hdr esp_mode %d, hdr_mode %d\n", in sensor_ioctl()
564 ret = sensor_config_link_freq(sensor, link_freq); in sensor_ioctl()
565 dev_info(&sensor->client->dev, in sensor_ioctl()
566 "sensor set link_freq %llu\n", in sensor_ioctl()
571 sensor->bus_config = *bus_config; in sensor_ioctl()
572 dev_info(&sensor->client->dev, in sensor_ioctl()
573 "sensor set bus config, phy_mode %d, lanes %d\n", in sensor_ioctl()
578 bus_config->bus.bus_type = sensor->bus_config.bus.bus_type; in sensor_ioctl()
579 bus_config->bus.lanes = sensor->bus_config.bus.lanes; in sensor_ioctl()
580 bus_config->bus.phy_mode = sensor->bus_config.bus.phy_mode; in sensor_ioctl()
581 dev_info(&sensor->client->dev, in sensor_ioctl()
582 "sensor get bus config, phy_mode %d, lanes %d\n", in sensor_ioctl()
588 dev_err(&sensor->client->dev, "sensor reg array num %llu\n", reg_s->num_regs); in sensor_ioctl()
592 dev_dbg(&sensor->client->dev, "sensor reg array num %llu\n", in sensor_ioctl()
638 dev_dbg(&sensor->client->dev, "sensor reg 0x%x, reg_bytes %u, val 0x%x, val_bytes %u\n", in sensor_ioctl()
640 if (g_rkcam_bus_callback[sensor->i2cdev].prkcam_write_i2c_data) { in sensor_ioctl()
641 ret = g_rkcam_bus_callback[sensor->i2cdev].prkcam_write_i2c_data(sensor->i2cdev, in sensor_ioctl()
646 dev_err(&sensor->client->dev, "failed to write sensor reg\n"); in sensor_ioctl()
648 ret = sensor_write_reg(sensor->client, in sensor_ioctl()
654 dev_err(&sensor->client->dev, "failed to write sensor by sensor_write_reg\n"); in sensor_ioctl()
664 if (g_rkcam_bus_callback[sensor->i2cdev].prkcam_s_stream) { in sensor_ioctl()
666 ret = g_rkcam_bus_callback[sensor->i2cdev].prkcam_s_stream(sensor->i2cdev, !!stream); in sensor_ioctl()
668 dev_err(&sensor->client->dev, "failed to set quick stream\n"); in sensor_ioctl()
670 dev_info(&sensor->client->dev, "success to set quick stream\n"); in sensor_ioctl()
672 dev_err(&sensor->client->dev, in sensor_ioctl()
673 "The callback function of sensor s_stream is not exist\n"); in sensor_ioctl()
677 sensor->i2cdev = *(u8 *)arg; in sensor_ioctl()
678 sensor->is_link = true; in sensor_ioctl()
679 dev_info(&sensor->client->dev, in sensor_ioctl()
680 "sensor sync i2cdev, dev_index %d\n", in sensor_ioctl()
681 sensor->i2cdev); in sensor_ioctl()
686 dev_info(&sensor->client->dev, in sensor_ioctl()
687 "sensor sync i2cdev complete, dev_num %d\n", in sensor_ioctl()
692 *sync_mode = sensor->sync_mode; in sensor_ioctl()
693 dev_info(&sensor->client->dev, in sensor_ioctl()
694 "sensor get sync_mode %d\n", in sensor_ioctl()
699 sensor->sync_mode = *sync_mode; in sensor_ioctl()
700 dev_info(&sensor->client->dev, in sensor_ioctl()
701 "sensor set sync_mode %d\n", in sensor_ioctl()
711 dev_info(&sensor->client->dev, in sensor_ioctl()
712 "sensor set mclk, enable %u, index %u, rate %u\n", in sensor_ioctl()
718 sensor->client->addr = dev_info->i2c_dev.slave_addr; in sensor_ioctl()
719 dev_info(&sensor->client->dev, in sensor_ioctl()
720 "sensor set dev info ,slave addr 0x%x\n", in sensor_ioctl()
726 sensor->dphy_param = *dphy_param; in sensor_ioctl()
727 dev_dbg(&sensor->client->dev, in sensor_ioctl()
728 "sensor set dphy param\n"); in sensor_ioctl()
732 *dphy_param = sensor->dphy_param; in sensor_ioctl()
733 dev_dbg(&sensor->client->dev, in sensor_ioctl()
734 "sensor get dphy param\n"); in sensor_ioctl()
983 static int __sensor_start_stream(struct sensor *sensor) in __sensor_start_stream() argument
985 /* user to write sensor setting or in __sensor_start_stream()
986 * may control by aiq callback to set sensor setting by customer driver in __sensor_start_stream()
991 static int __sensor_stop_stream(struct sensor *sensor) in __sensor_stop_stream() argument
993 /* user to write sensor setting or in __sensor_stop_stream()
994 * may control by aiq callback to set sensor setting by customer driver in __sensor_stop_stream()
1001 struct sensor *sensor = to_sensor(sd); in sensor_s_stream() local
1002 struct i2c_client *client = sensor->client; in sensor_s_stream()
1005 mutex_lock(&sensor->mutex); in sensor_s_stream()
1007 if (on == sensor->streaming) in sensor_s_stream()
1012 ret = __sensor_start_stream(sensor); in sensor_s_stream()
1019 __sensor_stop_stream(sensor); in sensor_s_stream()
1022 sensor->streaming = on; in sensor_s_stream()
1025 mutex_unlock(&sensor->mutex); in sensor_s_stream()
1032 struct sensor *sensor = to_sensor(sd); in sensor_s_power() local
1033 struct i2c_client *client = sensor->client; in sensor_s_power()
1036 mutex_lock(&sensor->mutex); in sensor_s_power()
1039 if (sensor->power_on == !!on) in sensor_s_power()
1049 sensor->power_on = true; in sensor_s_power()
1052 sensor->power_on = false; in sensor_s_power()
1056 mutex_unlock(&sensor->mutex); in sensor_s_power()
1061 static int __sensor_power_on(struct sensor *sensor) in __sensor_power_on() argument
1065 //call sensor power on in __sensor_power_on()
1069 static void __sensor_power_off(struct sensor *sensor) in __sensor_power_off() argument
1072 //call sensor power off in __sensor_power_off()
1079 struct sensor *sensor = to_sensor(sd); in sensor_runtime_resume() local
1081 return __sensor_power_on(sensor); in sensor_runtime_resume()
1088 struct sensor *sensor = to_sensor(sd); in sensor_runtime_suspend() local
1090 __sensor_power_off(sensor); in sensor_runtime_suspend()
1099 struct sensor *sensor = to_sensor(sd); in sensor_get_selection() local
1102 if (sensor->crop.is_enable && in sensor_get_selection()
1103 (sensor->crop.left + sensor->crop.width) <= sensor->cur_mode->width && in sensor_get_selection()
1104 (sensor->crop.top + sensor->crop.height) <= sensor->cur_mode->height) { in sensor_get_selection()
1105 sel->r.left = sensor->crop.left; in sensor_get_selection()
1106 sel->r.width = sensor->crop.width; in sensor_get_selection()
1107 sel->r.top = sensor->crop.top; in sensor_get_selection()
1108 sel->r.height = sensor->crop.height; in sensor_get_selection()
1109 dev_dbg(&sensor->client->dev, in sensor_get_selection()
1112 sensor->crop.left, sensor->crop.width, in sensor_get_selection()
1113 sensor->crop.top, sensor->crop.height); in sensor_get_selection()
1116 sel->r.width = sensor->cur_mode->width; in sensor_get_selection()
1118 sel->r.height = sensor->cur_mode->height; in sensor_get_selection()
1122 dev_err(&sensor->client->dev, in sensor_get_selection()
1131 struct sensor *sensor = to_sensor(sd); in sensor_set_selection() local
1134 sensor->crop.top = sel->r.top; in sensor_set_selection()
1135 sensor->crop.left = sel->r.left; in sensor_set_selection()
1136 sensor->crop.width = sel->r.width; in sensor_set_selection()
1137 sensor->crop.height = sel->r.height; in sensor_set_selection()
1138 sensor->crop.is_enable = true; in sensor_set_selection()
1139 dev_info(&sensor->client->dev, in sensor_set_selection()
1142 sensor->crop.left, sensor->crop.width, in sensor_set_selection()
1143 sensor->crop.top, sensor->crop.height); in sensor_set_selection()
1146 dev_err(&sensor->client->dev, in sensor_set_selection()
1154 struct sensor *sensor = to_sensor(sd); in sensor_open() local
1157 const struct sensor_mode *def_mode = sensor->cur_mode; in sensor_open()
1159 mutex_lock(&sensor->mutex); in sensor_open()
1166 mutex_unlock(&sensor->mutex); in sensor_open()
1177 struct sensor *sensor = to_sensor(sd); in sensor_enum_frame_interval() local
1182 fie->code = sensor->cur_mode->bus_fmt; in sensor_enum_frame_interval()
1183 fie->width = sensor->cur_mode->width; in sensor_enum_frame_interval()
1184 fie->height = sensor->cur_mode->height; in sensor_enum_frame_interval()
1185 fie->interval = sensor->cur_mode->max_fps; in sensor_enum_frame_interval()
1186 fie->reserved[0] = sensor->cur_mode->hdr_cfg.hdr_mode; in sensor_enum_frame_interval()
1234 struct sensor *sensor = container_of(ctrl->handler, in sensor_set_ctrl() local
1235 struct sensor, ctrl_handler); in sensor_set_ctrl()
1236 struct i2c_client *client = sensor->client; in sensor_set_ctrl()
1264 static int sensor_initialize_controls(struct sensor *sensor) in sensor_initialize_controls() argument
1273 handler = &sensor->ctrl_handler; in sensor_initialize_controls()
1274 mode = sensor->cur_mode; in sensor_initialize_controls()
1278 handler->lock = &sensor->mutex; in sensor_initialize_controls()
1280 sensor->link_freq = v4l2_ctrl_new_int_menu(handler, in sensor_initialize_controls()
1284 sensor->bus_config.bus.lanes; in sensor_initialize_controls()
1285 sensor->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in sensor_initialize_controls()
1290 sensor->hblank = v4l2_ctrl_new_std(handler, NULL, V4L2_CID_HBLANK, in sensor_initialize_controls()
1292 if (sensor->hblank) in sensor_initialize_controls()
1293 sensor->hblank->flags |= V4L2_CTRL_FLAG_READ_ONLY; in sensor_initialize_controls()
1296 sensor->vblank = v4l2_ctrl_new_std(handler, &sensor_ctrl_ops, in sensor_initialize_controls()
1306 dev_err(&sensor->client->dev, in sensor_initialize_controls()
1311 sensor->subdev.ctrl_handler = handler; in sensor_initialize_controls()
1327 struct sensor *sensor; in sensor_probe() local
1337 sensor = devm_kzalloc(dev, sizeof(*sensor), GFP_KERNEL); in sensor_probe()
1338 if (!sensor) in sensor_probe()
1340 g_sensor[cam_idx] = sensor; in sensor_probe()
1342 &sensor->module_index); in sensor_probe()
1344 &sensor->module_facing); in sensor_probe()
1346 &sensor->module_name); in sensor_probe()
1348 &sensor->len_name); in sensor_probe()
1353 sensor->client = client; in sensor_probe()
1354 sensor->cur_mode = &supported_modes[0]; in sensor_probe()
1362 sensor->clks[i] = clk; in sensor_probe()
1365 sensor->pinctrl = devm_pinctrl_get(dev); in sensor_probe()
1366 if (!IS_ERR(sensor->pinctrl)) { in sensor_probe()
1367 sensor->pins_default = in sensor_probe()
1368 pinctrl_lookup_state(sensor->pinctrl, in sensor_probe()
1370 if (IS_ERR(sensor->pins_default)) in sensor_probe()
1373 sensor->pins_sleep = in sensor_probe()
1374 pinctrl_lookup_state(sensor->pinctrl, in sensor_probe()
1376 if (IS_ERR(sensor->pins_sleep)) in sensor_probe()
1381 mutex_init(&sensor->mutex); in sensor_probe()
1382 sensor->bus_config.bus.lanes = 2; in sensor_probe()
1383 sensor->bus_config.bus.bus_type = V4L2_MBUS_CSI2_DPHY; in sensor_probe()
1384 sensor->is_link = false; in sensor_probe()
1385 sensor->sync_mode = NO_SYNC_MODE; in sensor_probe()
1386 sensor->crop.is_enable = false; in sensor_probe()
1387 sensor->dphy_param = rk3588_dcphy_param; in sensor_probe()
1388 sd = &sensor->subdev; in sensor_probe()
1390 ret = sensor_initialize_controls(sensor); in sensor_probe()
1400 sensor->pad.flags = MEDIA_PAD_FL_SOURCE; in sensor_probe()
1402 ret = media_entity_pads_init(&sd->entity, 1, &sensor->pad); in sensor_probe()
1408 if (strcmp(sensor->module_facing, "back") == 0) in sensor_probe()
1414 sensor->module_index, facing, in sensor_probe()
1440 __sensor_power_off(sensor); in sensor_probe()
1442 mutex_destroy(&sensor->mutex); in sensor_probe()
1450 struct sensor *sensor = to_sensor(sd); in sensor_remove() local
1456 v4l2_ctrl_handler_free(&sensor->ctrl_handler); in sensor_remove()
1457 mutex_destroy(&sensor->mutex); in sensor_remove()
1461 __sensor_power_off(sensor); in sensor_remove()
1469 { .compatible = "sensor,adapter" },
1476 { "sensor,adapter", 0 },
1504 MODULE_DESCRIPTION("sensor adapter driver");