Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 273635
b: refs/heads/master
c: f836c62
h: refs/heads/master
i:
  273633: 202bd11
  273631: d1b82fd
v: v3
  • Loading branch information
Guennadi Liakhovetski authored and Mauro Carvalho Chehab committed Nov 3, 2011
1 parent 0d3eb7b commit 34efac6
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 19a1780b628ecbc943465fa4d53b69e94c279f23
refs/heads/master: f836c6289b0cfbfaf2f90202d0edcb45f957f7cd
58 changes: 52 additions & 6 deletions trunk/drivers/media/video/sh_mobile_csi2.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <media/sh_mobile_ceu.h>
#include <media/sh_mobile_csi2.h>
#include <media/soc_camera.h>
#include <media/soc_mediabus.h>
#include <media/v4l2-common.h>
#include <media/v4l2-dev.h>
#include <media/v4l2-device.h>
Expand Down Expand Up @@ -144,11 +145,21 @@ static void sh_csi2_hwinit(struct sh_csi2 *priv)
udelay(5);
iowrite32(0x00000000, priv->base + SH_CSI2_SRST);

if (priv->client->lanes & 3)
tmp |= priv->client->lanes & 3;
else
/* Default - both lanes */
tmp |= 3;
switch (pdata->type) {
case SH_CSI2C:
if (priv->client->lanes == 1)
tmp |= 1;
else
/* Default - both lanes */
tmp |= 3;
break;
case SH_CSI2I:
if (!priv->client->lanes || priv->client->lanes > 4)
/* Default - all 4 lanes */
tmp |= 0xf;
else
tmp |= (1 << priv->client->lanes) - 1;
}

if (priv->client->phy == SH_CSI2_PHY_MAIN)
tmp |= 0x8000;
Expand Down Expand Up @@ -185,7 +196,9 @@ static int sh_csi2_client_connect(struct sh_csi2 *priv)
struct v4l2_subdev *sd, *csi2_sd = &priv->subdev;
struct soc_camera_device *icd = NULL;
struct device *dev = v4l2_get_subdevdata(&priv->subdev);
int i;
struct v4l2_mbus_config cfg;
unsigned long common_flags, csi2_flags;
int i, ret;

v4l2_device_for_each_subdev(sd, csi2_sd->v4l2_dev)
if (sd->grp_id) {
Expand All @@ -205,6 +218,39 @@ static int sh_csi2_client_connect(struct sh_csi2 *priv)
if (i == pdata->num_clients)
return -ENODEV;

/* Check if we can support this camera */
csi2_flags = V4L2_MBUS_CSI2_CONTINUOUS_CLOCK | V4L2_MBUS_CSI2_1_LANE;

switch (pdata->type) {
case SH_CSI2C:
if (pdata->clients[i].lanes != 1)
csi2_flags |= V4L2_MBUS_CSI2_2_LANE;
break;
case SH_CSI2I:
switch (pdata->clients[i].lanes) {
default:
csi2_flags |= V4L2_MBUS_CSI2_4_LANE;
case 3:
csi2_flags |= V4L2_MBUS_CSI2_3_LANE;
case 2:
csi2_flags |= V4L2_MBUS_CSI2_2_LANE;
}
}

cfg.type = V4L2_MBUS_CSI2;
ret = v4l2_subdev_call(sd, video, g_mbus_config, &cfg);
if (ret == -ENOIOCTLCMD)
common_flags = csi2_flags;
else if (!ret)
common_flags = soc_mbus_config_compatible(&cfg,
csi2_flags);
else
common_flags = 0;

if (!common_flags)
return -EINVAL;

/* All good: camera MIPI configuration supported */
priv->client = pdata->clients + i;

priv->set_bus_param = icd->ops->set_bus_param;
Expand Down

0 comments on commit 34efac6

Please sign in to comment.