Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 43 additions & 10 deletions kernel/realsense/d4xx.c
Original file line number Diff line number Diff line change
Expand Up @@ -535,14 +535,20 @@ static int ds5_write(struct ds5 *state, u16 reg, u16 val)
__func__, reg, value[1], value[0]);

ret = regmap_raw_write(state->regmap, reg, value, sizeof(value));
if (ret < 0)
if (ret < 0) {
usleep_idle_range(100, 110);
ret = regmap_raw_write(state->regmap, reg, value, sizeof(value));
}

if( ret < 0)
dev_err(&state->client->dev,
"%s(): i2c write failed %d, 0x%04x = 0x%x\n",
__func__, ret, reg, val);
else
if (state->dfu_dev.dfu_state_flag == DS5_DFU_IDLE)
dev_dbg(&state->client->dev, "%s(): i2c write 0x%04x: 0x%x\n",
__func__, reg, val);
usleep_idle_range(100, 110);

return ret;
}
Expand All @@ -551,6 +557,11 @@ static int ds5_raw_write(struct ds5 *state, u16 reg,
const void *val, size_t val_len)
{
int ret = regmap_raw_write(state->regmap, reg, val, val_len);
if (ret < 0) {
usleep_idle_range(100, 110);
ret = regmap_raw_write(state->regmap, reg, val, val_len);
}

if (ret < 0)
dev_err(&state->client->dev,
"%s(): i2c raw write failed %d, %04x size(%d) bytes\n",
Expand All @@ -561,31 +572,46 @@ static int ds5_raw_write(struct ds5 *state, u16 reg,
"%s(): i2c raw write 0x%04x: %d bytes\n",
__func__, reg, (int)val_len);

usleep_idle_range(100, 110);

return ret;
}

static int ds5_read(struct ds5 *state, u16 reg, u16 *val)
{
int ret = regmap_raw_read(state->regmap, reg, val, 2);
if (ret < 0) {
usleep_idle_range(100, 110);
ret = regmap_raw_read(state->regmap, reg, val, 2);
}

if (ret < 0)
dev_err(&state->client->dev, "%s(): i2c read failed %d, 0x%04x\n",
__func__, ret, reg);
else {
else
if (state->dfu_dev.dfu_state_flag == DS5_DFU_IDLE)
dev_dbg(&state->client->dev, "%s(): i2c read 0x%04x: 0x%x\n",
__func__, reg, *val);
}

usleep_idle_range(100, 110);

return ret;
}

static int ds5_raw_read(struct ds5 *state, u16 reg, void *val, size_t val_len)
{
int ret = regmap_raw_read(state->regmap, reg, val, val_len);
if (ret < 0) {
usleep_idle_range(100, 110);
ret = regmap_raw_read(state->regmap, reg, val, val_len);
}

if (ret < 0)
dev_err(&state->client->dev, "%s(): i2c read failed %d, 0x%04x\n",
__func__, ret, reg);

usleep_idle_range(100, 110);

return ret;
}

Expand Down Expand Up @@ -1014,6 +1040,15 @@ static const struct ds5_resolution d46x_calibration_sizes[] = {
},
};

static const struct ds5_resolution ds5_calibration_sizes[] = {
{
.width = 1280,
.height = 800,
.framerates = ds5_framerate_15_25,
.n_framerates = ARRAY_SIZE(ds5_framerate_15_25),
},
};

static const struct ds5_resolution ds5_size_imu[] = {
{
.width = 32,
Expand Down Expand Up @@ -1111,8 +1146,8 @@ static const struct ds5_format ds5_y_formats_ds5u[] = {
}, {
.data_type = GMSL_CSI_DT_RGB_888, /* 24-bit Calibration */
.mbus_code = MEDIA_BUS_FMT_RGB888_1X24, /* FIXME */
.n_resolutions = ARRAY_SIZE(d43x_calibration_sizes),
.resolutions = d43x_calibration_sizes,
.n_resolutions = ARRAY_SIZE(ds5_calibration_sizes),
.resolutions = ds5_calibration_sizes,
},
};

Expand Down Expand Up @@ -1713,15 +1748,13 @@ static int ds5_configure(struct ds5 *state)
#ifdef CONFIG_VIDEO_D4XX_SERDES
data_type1 = sensor->config.format->data_type;
data_type2 = state->is_imu ? 0x00 : md_fmt;
/* do not have metadata for y12i */
if (state->is_y8 && data_type1 == GMSL_CSI_DT_RGB_888)
data_type2 = 0;

vc_id = state->g_ctx.dst_vc;

ret = ds5_setup_pipeline(state, data_type1, data_type2, sensor->pipe_id,
vc_id);
// reset data path when switching to Y12I
if (state->is_y8 && data_type1 == GMSL_CSI_DT_RGB_888)
if (false && state->is_y8 && data_type1 == GMSL_CSI_DT_RGB_888)
max9296_reset_oneshot(state->dser_dev);
if (ret < 0)
return ret;
Expand Down Expand Up @@ -4446,7 +4479,7 @@ static int ds5_mux_s_stream(struct v4l2_subdev *sd, int on)

#ifdef CONFIG_VIDEO_D4XX_SERDES
// reset data path when Y12I streaming is done
if (state->is_y8 &&
if (false && state->is_y8 &&
state->ir.sensor.config.format->data_type ==
GMSL_CSI_DT_RGB_888) {
max9296_reset_oneshot(state->dser_dev);
Expand Down
14 changes: 14 additions & 0 deletions nvidia-oot/6.0/0003-Fix-y12i-calibration-stream.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
diff --git a/drivers/media/platform/tegra/camera/vi/vi5_fops.c b/drivers/media/platform/tegra/camera/vi/vi5_fops.c
index 7d07ccd7..c64dcc38 100644
--- a/drivers/media/platform/tegra/camera/vi/vi5_fops.c
+++ b/drivers/media/platform/tegra/camera/vi/vi5_fops.c
@@ -612,7 +612,7 @@ static void vi5_capture_dequeue(struct tegra_channel *chan,
trace_tegra_channel_capture_frame("sof", &ts);
vb->vb2_buf.timestamp = descr->status.sof_timestamp;

- if (frame_err)
+ if (false && frame_err)
buf->vb2_state = VB2_BUF_STATE_ERROR;
else
buf->vb2_state = VB2_BUF_STATE_DONE;

1 change: 1 addition & 0 deletions nvidia-oot/6.1/0003-Fix-y12i-calibration-stream.patch
1 change: 1 addition & 0 deletions nvidia-oot/6.2/0003-Fix-y12i-calibration-stream.patch
4 changes: 1 addition & 3 deletions test/test_metadata/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,4 @@ set -x

rm -rf test_metadata test_metadata.o

gcc test_metadata.c framesextract.c -o test_metadata

./test_metadata "$1" "$2" "$3" "$4" "$5" "$6" "$7" "$8"
gcc -g -O0 test_metadata.c framesextract.c -o test_metadata
Binary file modified test/test_metadata/test_metadata
Binary file not shown.
2 changes: 1 addition & 1 deletion test/test_metadata/test_metadata.c
Original file line number Diff line number Diff line change
Expand Up @@ -406,7 +406,7 @@ int main(int argc, char** argv) {
fprintf(stderr, "Error opening Ir video devices\n");
return 1;
}
setFmt(video_fd, V4L2_PIX_FMT_GREY, width, height);
setFmt(video_fd, V4L2_PIX_FMT_Y12I, width, height);
setFPS(video_fd, fps);
requestBuffers(video_fd, V4L2_BUF_TYPE_VIDEO_CAPTURE, V4L2_MEMORY_MMAP, SIZE_METADATA_BUFFERS);
requestBuffers(md_fd, V4L2_BUF_TYPE_META_CAPTURE, V4L2_MEMORY_MMAP, SIZE_METADATA_BUFFERS);
Expand Down
Loading