Skip to content

Commit

Permalink
[media] via-camera: specify XO-1.5 camera clock speed
Browse files Browse the repository at this point in the history
For the ov7670 camera to return images at the requested frame rate,
it needs to make calculations based on the clock speed, which is
a completely external factor (depends on the wiring of the system).

On the XO-1.5, which is the only known via-camera user, the camera
is clocked at 90MHz.

Pass this information to the ov7670 driver, to fix an issue where
a framerate of 3x the requested amount was being provided.

Signed-off-by: Daniel Drake <dsd@laptop.org>
Acked-by: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Daniel Drake authored and Mauro Carvalho Chehab committed May 14, 2012
1 parent 3477e2a commit a39fbb1
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions drivers/media/video/via-camera.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include <media/v4l2-device.h>
#include <media/v4l2-ioctl.h>
#include <media/v4l2-chip-ident.h>
#include <media/ov7670.h>
#include <media/videobuf-dma-sg.h>
#include <linux/delay.h>
#include <linux/dma-mapping.h>
Expand Down Expand Up @@ -1347,11 +1348,21 @@ static __devinit bool viacam_serial_is_enabled(void)
return false;
}

static struct ov7670_config sensor_cfg = {
/* The XO-1.5 (only known user) clocks the camera at 90MHz. */
.clock_speed = 90,
};

static __devinit int viacam_probe(struct platform_device *pdev)
{
int ret;
struct i2c_adapter *sensor_adapter;
struct viafb_dev *viadev = pdev->dev.platform_data;
struct i2c_board_info ov7670_info = {
.type = "ov7670",
.addr = 0x42 >> 1,
.platform_data = &sensor_cfg,
};

/*
* Note that there are actually two capture channels on
Expand Down Expand Up @@ -1433,8 +1444,8 @@ static __devinit int viacam_probe(struct platform_device *pdev)
* is OLPC-specific. 0x42 assumption is ov7670-specific.
*/
sensor_adapter = viafb_find_i2c_adapter(VIA_PORT_31);
cam->sensor = v4l2_i2c_new_subdev(&cam->v4l2_dev, sensor_adapter,
"ov7670", 0x42 >> 1, NULL);
cam->sensor = v4l2_i2c_new_subdev_board(&cam->v4l2_dev, sensor_adapter,
&ov7670_info, NULL);
if (cam->sensor == NULL) {
dev_err(&pdev->dev, "Unable to find the sensor!\n");
ret = -ENODEV;
Expand Down

0 comments on commit a39fbb1

Please sign in to comment.