This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SK-AM62A-LP: debug about csi2rx

Part Number: SK-AM62A-LP
Other Parts Discussed in Thread: TIDA-01413

We have an imx390 sensor with an internal isp. Connect to imx390-- >ds90ub953-- >ds90ub954--> am62a processor, I used name_overlays= k3-am62a7-fpdlink-sk-funition. dtbo k3-J721e-fpdlink-imx390-rcm-0-dtbo, but I couldn't debug it. Is there any changes I need to make?

media-ctl -p as follow:

  • Hello Zhangpeng,

    The IMX390 driver in AM62A Linux SDK supports the raw IMX390 sensor. It won't work with your IMX390 which has an internal ISP.

    Regards,

    Jianzhong

  • You'll need to add the driver for that specific sensor you have. For how to add a new sensor driver on top of the SDK, please refer to this guide (scroll  down to "Enable A New CSI-2 Sensor").

    Regards,

    Jianzhong

    • This internal isp sensor does not require a driver

  • Now I have changed a raw imx390 sensor, but I still can't get the picture

  • I changed a couple of things in the device tree

  • Now I've got a raw imx390 sensor

    but the outflow failed

  • Hello,

    Can you provide "v4l2-ctl --list-devices" and "media-ctl -p" output?

    Thanks,

    Jianzhong

  • now csi-bridge do not connect to ticsi2rx ,  have no video2,   i  do not  know  why

  • We have time difference, so it's inefficient to solve problems

  • Now I have debug the raw imx390 sensor successful,could get the frame

    return to the internal isp imx390 sensor,it does not require a driver,The sensor is configured automatically by the build-in ISP in the camera

  • Can you deal with it as soon as possible? It's been delayed for two weeks

  • Now I have debug the raw imx390 sensor successful,could get the frame

    Thanks for the update. This is good to know. 

    return to the internal isp imx390 sensor,it does not require a driver,The sensor is configured automatically by the build-in ISP in the camera

    This is a different sensor than the one supported by the SDK. The IMX390 driver in our SDK only supports raw image format, but your sensor has built-in ISP and most likely outputs YUV/RGB images. There may be other differences. Would you mind sharing more information about this sensor? A web link of the sensor would be helpful.

  • I saw the same sensor I came across on the forum, but with a different processor. Maybe it helps:

    e2e.ti.com/.../tda4vm-some-errors-when-using-imx390-from-otobrite-on-linux

  • Thanks for sharing this information. If you're using the same sensor as mentioned in the other inquiry, the solution posted by that inquiry should apply to you. 

  • I did this step  as: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1162037/tda4vm-some-errors-when-using-imx390-from-otobrite-on-linux

    but the following error occurs:

    do i need modify imx390_dummy.c?  and how i modify?

    the following is imx390_dummy.c co

    // SPDX-License-Identifier: GPL-2.0
    /*
     * Dummy driver for IMX390 self streaming cameras
     *
     */
    
    #include <linux/i2c.h>
    #include <linux/module.h>
    #include <linux/of.h>
    #include <linux/v4l2-mediabus.h>
    #include <linux/videodev2.h>
    #include <media/v4l2-subdev.h>
    
    struct imx390_dummy {
    	struct device *dev;
    	struct i2c_client *client;
    	struct v4l2_subdev subdev;
    	struct media_pad pad;
    };
    
    static inline struct imx390_dummy *to_imx390(struct v4l2_subdev *sd)
    {
    	return container_of(sd, struct imx390_dummy, subdev);
    }
    
    static void imx390_dummy_init_formats(struct v4l2_subdev_state *state)
    {
    	struct v4l2_mbus_framefmt *format;
    
    	format = v4l2_state_get_stream_format(state, 0, 0);
    	format->code = MEDIA_BUS_FMT_SRGGB12_1X12;
    	//format->code = MEDIA_BUS_FMT_UYVY8_2X8;
    	format->width = 1936;
    	format->height = 1100;
    	//format->width = 1920;
    	//format->height = 1080;
    	format->field = V4L2_FIELD_NONE;
    	format->colorspace = V4L2_COLORSPACE_SMPTE170M;
    }
    
    static int _imx390_dummy_set_routing(struct v4l2_subdev *sd,
    			       struct v4l2_subdev_state *state)
    {
    	struct v4l2_subdev_route routes[] = {
    		{
    			.source_pad = 0,
    			.source_stream = 0,
    			.flags = V4L2_SUBDEV_ROUTE_FL_IMMUTABLE |
    				 V4L2_SUBDEV_ROUTE_FL_SOURCE |
    				 V4L2_SUBDEV_ROUTE_FL_ACTIVE,
    		},
    		{
    			.source_pad = 0,
    			.source_stream = 1,
    			.flags = V4L2_SUBDEV_ROUTE_FL_IMMUTABLE |
    				 V4L2_SUBDEV_ROUTE_FL_SOURCE,
    		}
    	};
    
    	struct v4l2_subdev_krouting routing = {
    		.num_routes = ARRAY_SIZE(routes),
    		.routes = routes,
    	};
    
    	int ret;
    
    	ret = v4l2_subdev_set_routing(sd, state, &routing);
    	if (ret < 0)
    		return ret;
    
    	imx390_dummy_init_formats(state);
    
    	return 0;
    }
    
    static int imx390_dummy_init_cfg(struct v4l2_subdev *sd,
    			   struct v4l2_subdev_state *state)
    {
    	int ret;
    
    	v4l2_subdev_lock_state(state);
    
    	ret = _imx390_dummy_set_routing(sd, state);
    
    	v4l2_subdev_unlock_state(state);
    
    	return ret;
    }
    
    static int imx390_dummy_enum_mbus_code(struct v4l2_subdev *sd,
    				 struct v4l2_subdev_state *state,
    				 struct v4l2_subdev_mbus_code_enum *code)
    {
    	code->code = MEDIA_BUS_FMT_SRGGB12_1X12;
    	//code->code = MEDIA_BUS_FMT_UYVY8_2X8;
    
    	return 0;
    }
    
    static int imx390_dummy_enum_frame_sizes(struct v4l2_subdev *sd,
    				   struct v4l2_subdev_state *state,
    				   struct v4l2_subdev_frame_size_enum *fse)
    {
    	fse->min_width = 1936;
    	//fse->min_width = 1920;
    	fse->max_width = fse->min_width;
    	fse->max_height = 1100;
    	//fse->max_height = 1080;
    	fse->min_height = fse->max_height;
    
    	return 0;
    }
    
    static int imx390_dummy_set_fmt(struct v4l2_subdev *sd,
    			  struct v4l2_subdev_state *state,
    			  struct v4l2_subdev_format *fmt)
    {
    	struct v4l2_mbus_framefmt *format;
    	u32 code;
    	int ret = 0;
    
    	code = MEDIA_BUS_FMT_SRGGB12_1X12;
    	//code = MEDIA_BUS_FMT_UYVY8_2X8;
    
    	v4l2_subdev_lock_state(state);
    
    	/* Update the stored format and return it. */
    	format = v4l2_state_get_stream_format(state, fmt->pad, fmt->stream);
    
    	format->code = code;
    	format->width = 1936;
    	format->height = 1100;
    	//format->width = 1920;
    	//format->height = 1080;
    
    	fmt->format = *format;
    
    	v4l2_subdev_unlock_state(state);
    
    	return ret;
    }
    
    static int imx390_dummy_get_frame_desc(struct v4l2_subdev *sd, unsigned int pad,
    				 struct v4l2_mbus_frame_desc *fd)
    {
    	struct v4l2_subdev_state *state;
    	struct v4l2_mbus_framefmt *fmt;
    	u32 bpp;
    	int ret = 0;
    
    	if (pad != 0)
    		return -EINVAL;
    
    	state = v4l2_subdev_lock_active_state(sd);
    
    	fmt = v4l2_state_get_stream_format(state, 0, 0);
    	if (!fmt) {
    		ret = -EPIPE;
    		goto out;
    	}
    
    	memset(fd, 0, sizeof(*fd));
    
    	fd->type = V4L2_MBUS_FRAME_DESC_TYPE_CSI2;
    
    	/* pixel stream */
    
    	bpp = 12;
    
    	fd->entry[fd->num_entries].stream = 0;
    
    	fd->entry[fd->num_entries].flags = V4L2_MBUS_FRAME_DESC_FL_LEN_MAX;
    	fd->entry[fd->num_entries].length = fmt->width * fmt->height * bpp / 8;
    	fd->entry[fd->num_entries].pixelcode = fmt->code;
    	fd->entry[fd->num_entries].bus.csi2.vc = 0;
    	fd->entry[fd->num_entries].bus.csi2.dt = 0x2c; /* SRGGB12 */
    
    	fd->num_entries++;
    
    out:
    	v4l2_subdev_unlock_state(state);
    
    	return ret;
    }
    
    static int imx390_dummy_set_routing(struct v4l2_subdev *sd,
    			      struct v4l2_subdev_state *state,
    			      enum v4l2_subdev_format_whence which,
    			      struct v4l2_subdev_krouting *routing)
    {
    	int ret;
    
    	if (routing->num_routes == 0 || routing->num_routes > 1)
    		return -EINVAL;
    
    	v4l2_subdev_lock_state(state);
    
    	ret = _imx390_dummy_set_routing(sd, state);
    
    	v4l2_subdev_unlock_state(state);
    
    	return ret;
    }
    
    static int imx390_dummy_get_frame_interval(struct v4l2_subdev *sd,
    				     struct v4l2_subdev_frame_interval *fi)
    {
    	fi->interval.numerator = 1;
    	fi->interval.denominator = 30;
    	return 0;
    }
    
    static int imx390_dummy_set_frame_interval(struct v4l2_subdev *sd,
    				     struct v4l2_subdev_frame_interval *fi)
    {
    	int ret = 0;
    
    	fi->interval.numerator = 1;
    	fi->interval.denominator = 30;
    
    	return ret;
    }
    
    static int imx390_dummy_set_stream(struct v4l2_subdev *sd, int enable)
    {
    	return 0;
    }
    
    static const struct v4l2_subdev_video_ops imx390_dummy_subdev_video_ops = {
    	.g_frame_interval = imx390_dummy_get_frame_interval,
    	.s_frame_interval = imx390_dummy_set_frame_interval,
    	.s_stream = imx390_dummy_set_stream,
    };
    
    static const struct v4l2_subdev_pad_ops imx390_dummy_subdev_pad_ops = {
    	.init_cfg = imx390_dummy_init_cfg,
    	.enum_mbus_code	= imx390_dummy_enum_mbus_code,
    	.enum_frame_size = imx390_dummy_enum_frame_sizes,
    	.get_fmt = v4l2_subdev_get_fmt,
    	.set_fmt = imx390_dummy_set_fmt,
    	.set_routing = imx390_dummy_set_routing,
    	.get_frame_desc	= imx390_dummy_get_frame_desc,
    };
    
    static const struct v4l2_subdev_ops imx390_dummy_subdev_ops = {
    	.video	= &imx390_dummy_subdev_video_ops,
    	.pad	= &imx390_dummy_subdev_pad_ops,
    };
    
    static int imx390_dummy_probe(struct i2c_client *client)
    {
    	struct imx390_dummy *imx390;
    	struct v4l2_subdev *sd;
    	int ret;
    
    	imx390 = devm_kzalloc(&client->dev, sizeof(*imx390), GFP_KERNEL);
    	if (!imx390)
    		return -ENOMEM;
    
    	imx390->dev = &client->dev;
    
    	/* Initialize the subdev and its controls. */
    	sd = &imx390->subdev;
    	v4l2_i2c_subdev_init(sd, client, &imx390_dummy_subdev_ops);
    
    	sd->flags |= V4L2_SUBDEV_FL_HAS_DEVNODE |
    		     V4L2_SUBDEV_FL_HAS_EVENTS |
    		     V4L2_SUBDEV_FL_MULTIPLEXED;
    
    	/* Initialize the media entity. */
    	imx390->pad.flags = MEDIA_PAD_FL_SOURCE;
    	sd->entity.function = MEDIA_ENT_F_CAM_SENSOR;
    	ret = media_entity_pads_init(&sd->entity, 1, &imx390->pad);
    	if (ret < 0) {
    		dev_err(imx390->dev,
    			"%s: media entity init failed %d\n", __func__, ret);
    		return ret;
    	}
    
    	ret = v4l2_subdev_init_finalize(sd);
    	if (ret < 0)
    		goto err_subdev_cleanup;
    
    	/* Finally, register the subdev. */
    	ret = v4l2_async_register_subdev(sd);
    	if (ret < 0) {
    		dev_err(imx390->dev,
    			"%s: v4l2 subdev register failed %d\n", __func__, ret);
    		goto err_subdev_cleanup;
    	}
    
    	dev_info(imx390->dev, "imx390 dummy probed\n");
    	return 0;
    
    err_subdev_cleanup:
    	v4l2_subdev_cleanup(&imx390->subdev);
    	media_entity_cleanup(&imx390->subdev.entity);
    
    	return ret;
    }
    
    static int imx390_dummy_remove(struct i2c_client *client)
    {
    	struct v4l2_subdev *sd = i2c_get_clientdata(client);
    	struct imx390_dummy *imx390 = to_imx390(sd);
    
    	v4l2_async_unregister_subdev(sd);
    	v4l2_subdev_cleanup(&imx390->subdev);
    	media_entity_cleanup(&sd->entity);
    
    	return 0;
    }
    
    struct of_device_id imx390_dummy_dt_id[] = {
    	{ .compatible = "ottobrite,imx390dummy" },
    	{ /* sentinel */ }
    };
    
    MODULE_DEVICE_TABLE(of, imx390_dummy_dt_id);
    
    static struct i2c_driver imx390_dummy_i2c_driver = {
    	.driver = {
    		.name = "imx390dummy",
    		.of_match_table = of_match_ptr(imx390_dummy_dt_id),
    	},
    	.probe_new = imx390_dummy_probe,
    	.remove = imx390_dummy_remove,
    };
    
    module_i2c_driver(imx390_dummy_i2c_driver);
    
    MODULE_DESCRIPTION("Dummy Driver for self streaming IMX390");
    MODULE_AUTHOR("Vaishnav Achath <vaishnav.a@ti.com>");
    MODULE_LICENSE("GPL v2");
    
    
    de

  • You probably don't need to modify imx390_dummy.c.

    Did you modify the dts file for imx390 accordingly?

    Can you provide the output of "media-ctl -p" as text file?

  • yes,i have modify dts 。What time are you online? I'm off duty now

  • I can check this for the next 12 hours.

  • media -p as the follow:

    root@am62axx-evm:/home# media-ctl -p
    Media controller API version 5.10.168
    
    Media device information
    ------------------------
    driver          j721e-csi2rx
    model           TI-CSI2RX
    serial
    bus info        platform:30102000.ticsi2rx
    hw revision     0x1
    driver version  5.10.168
    
    Device topology
    - entity 1: 30102000.ticsi2rx (7 pads, 7 links, 1 route)
                type V4L2 subdev subtype Unknown flags 0
                device node name /dev/v4l-subdev0
            routes:
                    0/0 -> 1/0 [ACTIVE]
            pad0: Sink
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    <- "cdns_csi2rx.30101000.csi-bridge":1 [ENABLED,IMMUTABLE]
            pad1: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    -> "30102000.ticsi2rx context 0":0 [ENABLED,IMMUTABLE]
            pad2: Source
                    -> "30102000.ticsi2rx context 1":0 [ENABLED,IMMUTABLE]
            pad3: Source
                    -> "30102000.ticsi2rx context 2":0 [ENABLED,IMMUTABLE]
            pad4: Source
                    -> "30102000.ticsi2rx context 3":0 [ENABLED,IMMUTABLE]
            pad5: Source
                    -> "30102000.ticsi2rx context 4":0 [ENABLED,IMMUTABLE]
            pad6: Source
                    -> "30102000.ticsi2rx context 5":0 [ENABLED,IMMUTABLE]
    
    - entity 9: cdns_csi2rx.30101000.csi-bridge (5 pads, 2 links, 0 route)
                type V4L2 subdev subtype Unknown flags 0
                device node name /dev/v4l-subdev1
            pad0: Sink
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    <- "ds90ub960 4-0030":4 [ENABLED,IMMUTABLE]
            pad1: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    -> "30102000.ticsi2rx":0 [ENABLED,IMMUTABLE]
            pad2: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
            pad3: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
            pad4: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
    
    - entity 15: ds90ub960 4-0030 (6 pads, 2 links, 1 route)
                 type V4L2 subdev subtype Unknown flags 0
                 device node name /dev/v4l-subdev2
            routes:
                    0/0 -> 4/0 [ACTIVE]
            pad0: Sink
                    [stream:0 fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    <- "ds90ub953 4-0018":1 [ENABLED,IMMUTABLE]
            pad1: Sink
            pad2: Sink
            pad3: Sink
            pad4: Source
                    [stream:0 fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    -> "cdns_csi2rx.30101000.csi-bridge":0 [ENABLED,IMMUTABLE]
            pad5: Source
    
    - entity 24: ds90ub953 4-0018 (2 pads, 2 links, 1 route)
                 type V4L2 subdev subtype Unknown flags 0
                 device node name /dev/v4l-subdev3
            routes:
                    0/0 -> 1/0 [ACTIVE]
            pad0: Sink
                    [stream:0 fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    <- "imx390dummy 6-0021":0 [ENABLED,IMMUTABLE]
            pad1: Source
                    [stream:0 fmt:UYVY8_2X8/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    -> "ds90ub960 4-0030":0 [ENABLED,IMMUTABLE]
    
    - entity 29: imx390dummy 6-0021 (1 pad, 1 link, 2 routes)
                 type V4L2 subdev subtype Sensor flags 0
                 device node name /dev/v4l-subdev4
            routes:
                    0/0 -> 0/0 [ACTIVE, IMMUTABLE, SOURCE]
                    0/0 -> 0/1 [INACTIVE, IMMUTABLE, SOURCE]
            pad0: Source
                    [stream:0 fmt:SRGGB12_1X12/1936x1100@1/30 field:none colorspace:smpte170m]
                    -> "ds90ub953 4-0018":0 [ENABLED,IMMUTABLE]
    
    - entity 35: 30102000.ticsi2rx context 0 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video2
            pad0: Sink
                    <- "30102000.ticsi2rx":1 [ENABLED,IMMUTABLE]
    
    - entity 41: 30102000.ticsi2rx context 1 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video3
            pad0: Sink
                    <- "30102000.ticsi2rx":2 [ENABLED,IMMUTABLE]
    
    - entity 47: 30102000.ticsi2rx context 2 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video4
            pad0: Sink
                    <- "30102000.ticsi2rx":3 [ENABLED,IMMUTABLE]
    
    - entity 53: 30102000.ticsi2rx context 3 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video5
            pad0: Sink
                    <- "30102000.ticsi2rx":4 [ENABLED,IMMUTABLE]
    
    - entity 59: 30102000.ticsi2rx context 4 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video6
            pad0: Sink
                    <- "30102000.ticsi2rx":5 [ENABLED,IMMUTABLE]
    
    - entity 65: 30102000.ticsi2rx context 5 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video7
            pad0: Sink
                    <- "30102000.ticsi2rx":6 [ENABLED,IMMUTABLE]
    
    root@am62axx-evm:/home#
    

  • Thank you for sharing the log. I noticed that entity 29 (imx390dummy) has different format from entity 24 (ub953) and entity 15 (ub960). Can you try to set the same format for all of three and then run yavta?

    media-ctl -V '"ds90ub953 4-0018":0 [fmt:UYVY8_2X8/1920x1080 field: none]'
    media-ctl -V '"ds90ub960 4-0030":0 [fmt:UYVY8_2X8/1920x1080 field: none]'
    media-ctl -V '"imx390dummy 6-0021":0 [fmt:UYVY8_2X8/1920x1080 field: none]'

  • What does "media-ctl -p" show now?

  • root@am62axx-evm:/home# media-ctl -p
    Media controller API version 5.10.168
    
    Media device information
    ------------------------
    driver          j721e-csi2rx
    model           TI-CSI2RX
    serial
    bus info        platform:30102000.ticsi2rx
    hw revision     0x1
    driver version  5.10.168
    
    Device topology
    - entity 1: 30102000.ticsi2rx (7 pads, 7 links, 1 route)
                type V4L2 subdev subtype Unknown flags 0
                device node name /dev/v4l-subdev0
            routes:
                    0/0 -> 1/0 [ACTIVE]
            pad0: Sink
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    <- "cdns_csi2rx.30101000.csi-bridge":1 [ENABLED,IMMUTABLE]
            pad1: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    -> "30102000.ticsi2rx context 0":0 [ENABLED,IMMUTABLE]
            pad2: Source
                    -> "30102000.ticsi2rx context 1":0 [ENABLED,IMMUTABLE]
            pad3: Source
                    -> "30102000.ticsi2rx context 2":0 [ENABLED,IMMUTABLE]
            pad4: Source
                    -> "30102000.ticsi2rx context 3":0 [ENABLED,IMMUTABLE]
            pad5: Source
                    -> "30102000.ticsi2rx context 4":0 [ENABLED,IMMUTABLE]
            pad6: Source
                    -> "30102000.ticsi2rx context 5":0 [ENABLED,IMMUTABLE]
    
    - entity 9: cdns_csi2rx.30101000.csi-bridge (5 pads, 2 links, 0 route)
                type V4L2 subdev subtype Unknown flags 0
                device node name /dev/v4l-subdev1
            pad0: Sink
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    <- "ds90ub960 4-0030":4 [ENABLED,IMMUTABLE]
            pad1: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
                    -> "30102000.ticsi2rx":0 [ENABLED,IMMUTABLE]
            pad2: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
            pad3: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
            pad4: Source
                    [stream:0 fmt:UYVY8_1X16/640x480 field:none colorspace:srgb xfer:srgb ycbcr:601 quantization:lim-range]
    
    - entity 15: ds90ub960 4-0030 (6 pads, 2 links, 1 route)
                 type V4L2 subdev subtype Unknown flags 0
                 device node name /dev/v4l-subdev2
            routes:
                    0/0 -> 4/0 [ACTIVE]
            pad0: Sink
                    [stream:0 fmt:UYVY8_2X8/1920x1080 field:none]
                    <- "ds90ub953 4-0018":1 [ENABLED,IMMUTABLE]
            pad1: Sink
            pad2: Sink
            pad3: Sink
            pad4: Source
                    [stream:0 fmt:UYVY8_2X8/1920x1080 field:none]
                    -> "cdns_csi2rx.30101000.csi-bridge":0 [ENABLED,IMMUTABLE]
            pad5: Source
    
    - entity 24: ds90ub953 4-0018 (2 pads, 2 links, 1 route)
                 type V4L2 subdev subtype Unknown flags 0
                 device node name /dev/v4l-subdev3
            routes:
                    0/0 -> 1/0 [ACTIVE]
            pad0: Sink
                    [stream:0 fmt:SRGGB12_1X12/1936x1100 field:none colorspace:smpte170m]
                    <- "imx390dummy 6-0021":0 [ENABLED,IMMUTABLE]
            pad1: Source
                    [stream:0 fmt:SRGGB12_1X12/1936x1100 field:none colorspace:smpte170m]
                    -> "ds90ub960 4-0030":0 [ENABLED,IMMUTABLE]
    
    - entity 29: imx390dummy 6-0021 (1 pad, 1 link, 2 routes)
                 type V4L2 subdev subtype Sensor flags 0
                 device node name /dev/v4l-subdev4
            routes:
                    0/0 -> 0/0 [ACTIVE, IMMUTABLE, SOURCE]
                    0/0 -> 0/1 [INACTIVE, IMMUTABLE, SOURCE]
            pad0: Source
                    [stream:0 fmt:SRGGB12_1X12/1936x1100@1/30 field:none colorspace:smpte170m]
                    -> "ds90ub953 4-0018":0 [ENABLED,IMMUTABLE]
    
    - entity 35: 30102000.ticsi2rx context 0 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video2
            pad0: Sink
                    <- "30102000.ticsi2rx":1 [ENABLED,IMMUTABLE]
    
    - entity 41: 30102000.ticsi2rx context 1 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video3
            pad0: Sink
                    <- "30102000.ticsi2rx":2 [ENABLED,IMMUTABLE]
    
    - entity 47: 30102000.ticsi2rx context 2 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video4
            pad0: Sink
                    <- "30102000.ticsi2rx":3 [ENABLED,IMMUTABLE]
    
    - entity 53: 30102000.ticsi2rx context 3 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video5
            pad0: Sink
                    <- "30102000.ticsi2rx":4 [ENABLED,IMMUTABLE]
    
    - entity 59: 30102000.ticsi2rx context 4 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video6
            pad0: Sink
                    <- "30102000.ticsi2rx":5 [ENABLED,IMMUTABLE]
    
    - entity 65: 30102000.ticsi2rx context 5 (1 pad, 1 link, 0 route)
                 type Node subtype V4L flags 0
                 device node name /dev/video7
            pad0: Sink
                    <- "30102000.ticsi2rx":6 [ENABLED,IMMUTABLE]
    
    root@am62axx-evm:/home#
    

  • Ok. Thanks. Looks like imx390dummy format was not set properly. It still has "SRGGB12".

    You need to add the right format to the imx390dummy driver, for example:

    static void imx390_dummy_init_formats(struct v4l2_subdev_state *state)
    {
    	struct v4l2_mbus_framefmt *format;
    
    	format = v4l2_state_get_stream_format(state, 0, 0);
    	//format->code = MEDIA_BUS_FMT_SRGGB12_1X12;
    	format->code = MEDIA_BUS_FMT_UYVY8_2X8;
    	//format->width = 1936;
    	//format->height = 1100;
    	format->width = 1920;
    	format->height = 1080;
    	format->field = V4L2_FIELD_NONE;
    	format->colorspace = V4L2_COLORSPACE_SMPTE170M;
    }
    

  • Tthanks for your support!I have get the frame!

  • Great! Thanks for the update.

  • Hello Jianzhong Xu,

    At present, we have replaced ds90ub954 with TIDA-01413, which consists of two ds90ub960, the sensor is raw imx390, and the processor is am62a. The stream capture succeeded, but the image is all black, could you please help support it

  • Hello Zhangpeng,

    Sorry for my late response. I've been out in the past few weeks. Are you still having this issue?

    Regards,

    Jianzhong

  • Hello Jianzhong Xu,

    Let this sit for a while, and we'll debug it later.

    Now I am debug a new sensor OX03C.

    I see that there is no OX03C sensor driver in the SDK, can you provide this sensor driver?

  • Ok. I just saw the discussion at a new thread: https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1241501/sk-am62a-lp-tida-01413-debug. Let's use that one for continuing support and I'll close this one.

    Regarding OX03C, we have no plan at this moment to develop the driver.

    Regards,

    Jianzhong