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;
}