@@ -119,11 +119,10 @@
struct soc_camera_device *icd = icf->icd;
int ret = 0;
- if (inp->index != 0)
- return -EINVAL;
-
if (icd->ops->enum_input)
ret = icd->ops->enum_input(icd, inp);
+ else if (inp->index != 0)
+ return -EINVAL;
else {
/* default is camera */
inp->type = V4L2_INPUT_TYPE_CAMERA;
@@ -136,17 +135,30 @@
static int soc_camera_g_input(struct file *file, void *priv, unsigned int *i)
{
- *i = 0;
+ struct soc_camera_file *icf = file->private_data;
+ struct soc_camera_device *icd = icf->icd;
+ int ret = 0;
- return 0;
+ if (icd->ops->g_input)
+ ret = icd->ops->g_input(icd, i);
+ else
+ *i = 0;
+
+ return ret;
}
static int soc_camera_s_input(struct file *file, void *priv, unsigned int i)
{
- if (i > 0)
+ struct soc_camera_file *icf = file->private_data;
+ struct soc_camera_device *icd = icf->icd;
+ int ret = 0;
+
+ if (icd->ops->s_input)
+ ret = icd->ops->s_input(icd, i);
+ else if (i > 0)
return -EINVAL;
- return 0;
+ return ret;
}
static int soc_camera_s_std(struct file *file, void *priv, v4l2_std_id *a)
@@ -197,6 +197,8 @@
unsigned long (*query_bus_param)(struct soc_camera_device *);
int (*set_bus_param)(struct soc_camera_device *, unsigned long);
int (*enum_input)(struct soc_camera_device *, struct v4l2_input *);
+ int (*g_input)(struct soc_camera_device *, unsigned int *);
+ int (*s_input)(struct soc_camera_device *, unsigned int);
const struct v4l2_queryctrl *controls;
int num_controls;
};