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.

dm3730 beagleboard cannot read ID

everyone:

i use ov5640 with dm37xx. sometimes i can read ov5640 ID from 0x300a,0x300b , but more time i cannot read ID , i'm sure ov5640 hardware connect is OK.

i read ID in board-omap3beagle-camera.c :

static int beagle_ov5640_s_power(struct v4l2_subdev *subdev, int on)
{
 printk(KERN_DEBUG "%s, ENTER\n",__func__);
 struct isp_device *isp = v4l2_dev_to_isp_device(subdev->v4l2_dev);

 if (!beagle_1v5 || !beagle_1v8) {
  dev_err(isp->dev, "No regulator available\n");
  return -ENODEV;
 }
 if (on) {
  /* Check Voltage-Levels */
  if(regulator_get_voltage(beagle_1v5) != 1500000)
   regulator_set_voltage(beagle_1v5,1500000,1500000);
  
  if(regulator_get_voltage(beagle_1v8) != 1800000)
   regulator_set_voltage(beagle_1v8,1800000,1800000);
  /* Request POWER_DOWN_GPIO and set to output */

  gpio_request(POWER_DOWN_GPIO,"CAM_PWRDN");
  gpio_direction_output(POWER_DOWN_GPIO,true);

  /*
   * Power Up Sequence
   */
  /* Set POWER_DOWN to 1*/
  gpio_set_value(POWER_DOWN_GPIO,1);
  /* Set RESET_BAR to 0 */
  gpio_set_value(LEOPARD_RESET_GPIO, 0);
  /* Turn on VDD */
  regulator_enable(beagle_1v8);
  mdelay(1);
  regulator_enable(beagle_1v5);

  mdelay(50);
  /* Enable EXTCLK */
  if (isp->platform_cb.set_xclk)
   isp->platform_cb.set_xclk(isp, 24000000, CAM_USE_XCLKA);
  /*
   * Wait at least 70 CLK cycles (w/EXTCLK = 24MHz):
   * ((1000000 * 70) / 24000000) = aprox 3 us.
   */
  udelay(3);
  /* Set RESET_BAR to 1 */
  gpio_set_value(LEOPARD_RESET_GPIO, 1);
  /* Set POWER_DOWN to 0 */
  gpio_set_value(POWER_DOWN_GPIO,0);
  /*
   * Wait at least 100 CLK cycles (w/EXTCLK = 24MHz):
   * ((1000000 * 100) / 24000000) = aprox 5 us.
   */
  udelay(5);
  while(1){
   struct i2c_client *client = v4l2_get_subdevdata(subdev);

   printk(KERN_INFO "%s,val=0x%x\n",__func__,(ov5640_read_reg(client, 0x300a) << 8) + ov5640_read_reg(client, 0x300b));

  }
 } else {
  /*
   * Power Down Sequence
   */
  if (regulator_is_enabled(beagle_1v5))
   regulator_disable(beagle_1v5);
  if (regulator_is_enabled(beagle_1v8))
   regulator_disable(beagle_1v8);

  if (isp->platform_cb.set_xclk)
   isp->platform_cb.set_xclk(isp, 0, CAM_USE_XCLKA);
 }

 printk(KERN_DEBUG "%s,EXIT\n", __func__);
 return 0;
}

 

2110.board-omap3beagle-camera.c

6433.ov5640.c

7433.board-omap3beagle.c