How to make a camera without eeprom work

  1. We designed the carrier board, and then we want to transplant the ov9282 camera driver. We modeled the official tx2 board with the camera ov5693 module driver to modify the dts file and found that the /dev/video0 node is always out.
  2. I compared the official ov5693 camera with our ov9282 and found that ov5693 comes with eeprom. I checked the document saying If your camera module has onboard EEPROM and has a valid camera ID programmed, Plugin Manager can be used.Dts to enable pugin manager support, but our ov9282 does not have eeprom, need to use main platform device tree File, I modified dts found that there is always no /dev/video0, for the convenience of comparison, I use the official carrier board and ov5693, device tree file Remove the plugin management, the same can not appear /dev/video0. I don’t know how to proceed to the next step.

hello webhack,

since you do not have eeprom, you should disable the camera-plugin-manager.
you may also refer to V4L2 Sensor Driver Development Tutorial for how to update your sensor device tree to disable that.
thanks

Dear,JerryChang!
Thank you for your answer, I don’t know how to set these parameters from the tutorial.

tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";
          num_csi_lanes = <2>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <160000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

Are there any calculation formulas?

hello webhack,

these were general settings and they should works for lots of sensors.
you should only review the num_csi_lanes property to match your use-case.
thanks

Dear,JerryChang!
You means that if I only use a single camera, I don’t have to modify other parameters?

Dear,JerryChang!
Whether nvidia does not support raw8 data format camera,
from the c file senor_common.c function,it only supports raw10, raw12, but our camera output is raw8
static int extract_pixel_format(
const char *pixel_t, u32 *format)
{
size_t size = strnlen(pixel_t, OF_MAX_STR_LEN);

if (strncmp(pixel_t, "bayer_bggr10", size) == 0)
	*format = V4L2_PIX_FMT_SBGGR10;
	
else if (strncmp(pixel_t, "bayer_rggb10", size) == 0)
	*format = V4L2_PIX_FMT_SRGGB10;
else if (strncmp(pixel_t, "bayer_bggr12", size) == 0)
	*format = V4L2_PIX_FMT_SBGGR12;
else if (strncmp(pixel_t, "bayer_rggb12", size) == 0)
	*format = V4L2_PIX_FMT_SRGGB12;
else if (strncmp(pixel_t, "bayer_wdr_pwl_rggb12", size) == 0)
	*format = V4L2_PIX_FMT_SRGGB12;
else if (strncmp(pixel_t, "bayer_wdr_dol_rggb10", size) == 0)
	*format = V4L2_PIX_FMT_SRGGB10;
else if (strncmp(pixel_t, "bayer_xbggr10p", size) == 0)
	*format = V4L2_PIX_FMT_XBGGR10P;
else if (strncmp(pixel_t, "bayer_xrggb10p", size) == 0)
	*format = V4L2_PIX_FMT_XRGGB10P;
else {
	pr_err("%s: Need to extend format%s\n", __func__, pixel_t);
	return -EINVAL;
}

return 0;

}

hello webhack,

those properties settings in comment #3 were clock and signaling settings. please refer to [Sensor Driver Programming Guide] to have more details.

your comment #6 is a code snippet of our VI drivers.
those were following the v4l2, you’re able to extend the support pixel types by updating the kernel sources manually.
you might also check below for v4l2 pixel format standards.
thanks

<top>/kernel_src/kernel/kernel-4.4/include/uapi/linux/videodev2.h