V4L/DVB (13659): soc-camera: convert to the new mediabus API
[pandora-kernel.git] / drivers / media / video / soc_camera_platform.c
index c7c9151..10b003a 100644 (file)
@@ -22,7 +22,6 @@
 
 struct soc_camera_platform_priv {
        struct v4l2_subdev subdev;
 
 struct soc_camera_platform_priv {
        struct v4l2_subdev subdev;
-       struct soc_camera_data_format format;
 };
 
 static struct soc_camera_platform_priv *get_priv(struct platform_device *pdev)
 };
 
 static struct soc_camera_platform_priv *get_priv(struct platform_device *pdev)
@@ -58,36 +57,36 @@ soc_camera_platform_query_bus_param(struct soc_camera_device *icd)
 }
 
 static int soc_camera_platform_try_fmt(struct v4l2_subdev *sd,
 }
 
 static int soc_camera_platform_try_fmt(struct v4l2_subdev *sd,
-                                      struct v4l2_format *f)
+                                      struct v4l2_mbus_framefmt *mf)
 {
        struct soc_camera_platform_info *p = v4l2_get_subdevdata(sd);
 {
        struct soc_camera_platform_info *p = v4l2_get_subdevdata(sd);
-       struct v4l2_pix_format *pix = &f->fmt.pix;
 
 
-       pix->width = p->format.width;
-       pix->height = p->format.height;
+       mf->width       = p->format.width;
+       mf->height      = p->format.height;
+       mf->code        = p->format.code;
+       mf->colorspace  = p->format.colorspace;
+
        return 0;
 }
 
        return 0;
 }
 
-static void soc_camera_platform_video_probe(struct soc_camera_device *icd,
-                                           struct platform_device *pdev)
+static struct v4l2_subdev_core_ops platform_subdev_core_ops;
+
+static int soc_camera_platform_enum_fmt(struct v4l2_subdev *sd, int index,
+                                       enum v4l2_mbus_pixelcode *code)
 {
 {
-       struct soc_camera_platform_priv *priv = get_priv(pdev);
-       struct soc_camera_platform_info *p = pdev->dev.platform_data;
+       struct soc_camera_platform_info *p = v4l2_get_subdevdata(sd);
 
 
-       priv->format.name = p->format_name;
-       priv->format.depth = p->format_depth;
-       priv->format.fourcc = p->format.pixelformat;
-       priv->format.colorspace = p->format.colorspace;
+       if (index)
+               return -EINVAL;
 
 
-       icd->formats = &priv->format;
-       icd->num_formats = 1;
+       *code = p->format.code;
+       return 0;
 }
 
 }
 
-static struct v4l2_subdev_core_ops platform_subdev_core_ops;
-
 static struct v4l2_subdev_video_ops platform_subdev_video_ops = {
        .s_stream       = soc_camera_platform_s_stream,
 static struct v4l2_subdev_video_ops platform_subdev_video_ops = {
        .s_stream       = soc_camera_platform_s_stream,
-       .try_fmt        = soc_camera_platform_try_fmt,
+       .try_mbus_fmt   = soc_camera_platform_try_fmt,
+       .enum_mbus_fmt  = soc_camera_platform_enum_fmt,
 };
 
 static struct v4l2_subdev_ops platform_subdev_ops = {
 };
 
 static struct v4l2_subdev_ops platform_subdev_ops = {
@@ -128,12 +127,10 @@ static int soc_camera_platform_probe(struct platform_device *pdev)
        /* Set the control device reference */
        dev_set_drvdata(&icd->dev, &pdev->dev);
 
        /* Set the control device reference */
        dev_set_drvdata(&icd->dev, &pdev->dev);
 
-       icd->ops                = &soc_camera_platform_ops;
+       icd->ops = &soc_camera_platform_ops;
 
        ici = to_soc_camera_host(icd->dev.parent);
 
 
        ici = to_soc_camera_host(icd->dev.parent);
 
-       soc_camera_platform_video_probe(icd, pdev);
-
        v4l2_subdev_init(&priv->subdev, &platform_subdev_ops);
        v4l2_set_subdevdata(&priv->subdev, p);
        strncpy(priv->subdev.name, dev_name(&pdev->dev), V4L2_SUBDEV_NAME_SIZE);
        v4l2_subdev_init(&priv->subdev, &platform_subdev_ops);
        v4l2_set_subdevdata(&priv->subdev, p);
        strncpy(priv->subdev.name, dev_name(&pdev->dev), V4L2_SUBDEV_NAME_SIZE);