static int soc_camera_enum_input(struct file *file, void *priv,
                                 struct v4l2_input *inp)
 {
+       struct soc_camera_file *icf = file->private_data;
+       struct soc_camera_device *icd = icf->icd;
+       int ret = 0;
+
        if (inp->index != 0)
                return -EINVAL;
 
-       inp->type = V4L2_INPUT_TYPE_CAMERA;
-       inp->std = V4L2_STD_UNKNOWN;
-       strcpy(inp->name, "Camera");
+       if (icd->ops->enum_input)
+               ret = icd->ops->enum_input(icd, inp);
+       else {
+               /* default is camera */
+               inp->type = V4L2_INPUT_TYPE_CAMERA;
+               inp->std  = V4L2_STD_UNKNOWN;
+               strcpy(inp->name, "Camera");
+       }
 
-       return 0;
+       return ret;
 }
 
 static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i)
 
        int (*get_chip_id)(struct soc_camera_device *,
                           struct v4l2_chip_ident *);
        int (*set_std)(struct soc_camera_device *, v4l2_std_id *);
+       int (*enum_input)(struct soc_camera_device *, struct v4l2_input *);
 #ifdef CONFIG_VIDEO_ADV_DEBUG
        int (*get_register)(struct soc_camera_device *, struct v4l2_register *);
        int (*set_register)(struct soc_camera_device *, struct v4l2_register *);