Mipi Csi2错误:无法获得时钟csi_mclk

时间:2017-07-16 09:28:06

标签: linux camera linux-device-driver embedded-linux yocto

我一直致力于编写mipi csi-2 imx290相机驱动程序。我遇到了csi_clock错误。 enter image description here

这是我的imx290_probe函数;

static int imx290_probe(struct i2c_client *client,
  const struct i2c_device_id *id)
{

  struct device *dev = &client->dev;
  int retval;
  int value;




  /* request reset pin */
  xclr = of_get_named_gpio(dev->of_node, "rst-gpios", 0);
  if (!gpio_is_valid(xclr)) {
    dev_warn(dev, "no sensor reset pin available");
    return -EINVAL;
  }

  retval = devm_gpio_request_one(dev, xclr, GPIOF_OUT_INIT_LOW,"imx290_mipi_reset");
  if (retval < 0)
    return retval;


  /* Set initial values for the sensor struct. */
  memset(&imx290_data, 0, sizeof(imx290_data));
  imx290_data.sensor_clk = devm_clk_get(dev, "csi_mclk");

  if (IS_ERR(imx290_data.sensor_clk)) {

    /* assuming clock enabled by default */
    imx290_data.sensor_clk = NULL;
    dev_err(dev, "clock-frequency missing or invalid\n");
    return PTR_ERR(imx290_data.sensor_clk);
  }


  retval = of_property_read_u32(dev->of_node, "mclk",&(imx290_data.mclk));

  if (retval) {
    dev_err(dev, "mclk missing or invalid\n");
    return retval;
  }

  retval = of_property_read_u32(dev->of_node, "mclk_source",
          (u32 *) &(imx290_data.mclk_source));
  if (retval) {
    dev_err(dev, "mclk_source missing or invalid\n");
    return retval;
  }

  retval = of_property_read_u32(dev->of_node, "csi_id",
          &(imx290_data.csi));
  if (retval) {
    dev_err(dev, "csi id missing or invalid\n");
    return retval;
  }
  pr_info("Line 10 is Ok\n ");
  clk_prepare_enable(imx290_data.sensor_clk);

  imx290_data.io_init = imx290_reset;
  imx290_data.i2c_client = client;
  imx290_data.pix.pixelformat = V4L2_PIX_FMT_UYVY;
  imx290_data.pix.width = 1920;
  imx290_data.pix.height = 1080;
  imx290_data.streamcap.capability = V4L2_MODE_HIGHQUALITY | V4L2_CAP_TIMEPERFRAME;
  imx290_data.streamcap.capturemode = 0;
  imx290_data.streamcap.timeperframe.denominator = DEFAULT_FPS;
  imx290_data.streamcap.timeperframe.numerator = 1;

  imx290_power_on(dev);

  imx290_reset();

  retval = imx290_write_reg(IMX290_REG_STANDBY, 0x1,NULL);

  imx290_int_device.priv = &imx290_data;
  retval = v4l2_int_device_register(&imx290_int_device);

  clk_disable_unprepare(imx290_data.sensor_clk);

  pr_info("camera imx290_mipi is found\n");
  return retval;
}

我还提供了设备树配置,

imx290_mipi: imx290_mipi@1a {
    compatible = "sony,imx290lqr,imx290,imx290_camera";
    reg = <0x1a>;
    clocks = <&clks 200>;
    clock-names = "csi_mclk";   
    OVDD = <&reg_1p8v>;
    AVDD = <&reg_2p9v>;
    DVDD = <&reg_1p2v>;
    pwn-gpios = <&gpio1 6 1>;
    rst-gpios = <&gpio4 14 0>; /// xclr 
    ipu_id = <0>;
    csi_id = <0>;
    mclk = <37125000>;
    mclk_source = <0>;
    lanes = <4>;
}

执行此操作时可能出错,因为此探针功能与ov5640相机探测功能类似,并且在探测时不会出现任何错误。  我的思绪很混乱,我需要第二意见和建议。

谢谢

最好的问候

穆斯塔法

0 个答案:

没有答案