X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fmedia%2Fsoc_camera.h;h=ac62e82a90818152428f57a151d90c4eddf4e300;hb=05b29f94a4ab4f37071025b0c235516c2616bce6;hp=ff77d08c30fda6062bdcc45ccdf8327e1560b506;hpb=6fad8d02ef9ab12d5e178014a4c5c297e1707f23;p=firefly-linux-kernel-4.4.55.git diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index ff77d08c30fd..ac62e82a9081 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h @@ -39,6 +39,10 @@ struct soc_camera_device { unsigned char iface; /* Host number */ unsigned char devnum; /* Device number per host */ struct soc_camera_sense *sense; /* See comment in struct definition */ + + struct soc_camera_ops *ops;/*yzm*/ + struct mutex video_lock;/*yzm*/ + struct video_device *vdev; struct v4l2_ctrl_handler ctrl_handler; const struct soc_camera_format_xlate *current_fmt; @@ -73,6 +77,17 @@ struct soc_camera_host_ops { struct module *owner; int (*add)(struct soc_camera_device *); void (*remove)(struct soc_camera_device *); + /****************yzm**************/ + int (*suspend)(struct soc_camera_device *, pm_message_t); + int (*resume)(struct soc_camera_device *); + int (*enum_frameinervals)(struct soc_camera_device *, struct v4l2_frmivalenum *);/* ddl@rock-chips.com :Add ioctrl - VIDIOC_ENUM_FRAMEINTERVALS for soc-camera */ + int (*get_ctrl)(struct soc_camera_device *, struct v4l2_control *); + int (*set_ctrl)(struct soc_camera_device *, struct v4l2_control *); + int (*s_stream)(struct soc_camera_device *, int enable); + const struct v4l2_queryctrl *controls; + int num_controls; + /***************yzm*****************/ + /* * .get_formats() is called for each client device format, but * .put_formats() is only called once. Further, if any of the calls to @@ -100,7 +115,7 @@ struct soc_camera_host_ops { struct soc_camera_device *); int (*reqbufs)(struct soc_camera_device *, struct v4l2_requestbuffers *); int (*querycap)(struct soc_camera_host *, struct v4l2_capability *); - int (*set_bus_param)(struct soc_camera_device *); + int (*set_bus_param)(struct soc_camera_device *, __u32);/*yzm*/ int (*get_parm)(struct soc_camera_device *, struct v4l2_streamparm *); int (*set_parm)(struct soc_camera_device *, struct v4l2_streamparm *); int (*enum_framesizes)(struct soc_camera_device *, struct v4l2_frmsizeenum *); @@ -123,6 +138,8 @@ struct soc_camera_subdev_desc { /* sensor driver private platform data */ void *drv_priv; + struct soc_camera_device *socdev;/*yzm*/ + /* Optional regulators that have to be managed on power on/off events */ struct regulator_bulk_data *regulators; int num_regulators; @@ -131,6 +148,7 @@ struct soc_camera_subdev_desc { int (*power)(struct device *, int); int (*reset)(struct device *); + int (*powerdown)(struct device *, int);/*yzm*/ /* * some platforms may support different data widths than the sensors * native ones due to different data line routing. Let the board code @@ -177,7 +195,7 @@ struct soc_camera_link { unsigned long flags; void *priv; - + void *priv_usr; /*yzm*/ /* Optional regulators that have to be managed on power on/off events */ struct regulator_bulk_data *regulators; int num_regulators; @@ -185,6 +203,7 @@ struct soc_camera_link { /* Optional callbacks to power on or off and reset the sensor */ int (*power)(struct device *, int); int (*reset)(struct device *); + int (*powerdown)(struct device *,int); /*yzm*/ /* * some platforms may support different data widths than the sensors * native ones due to different data line routing. Let the board code @@ -261,6 +280,20 @@ struct soc_camera_format_xlate { const struct soc_mbus_pixelfmt *host_fmt; }; +/*****************yzm***************/ +struct soc_camera_ops { + int (*suspend)(struct soc_camera_device *, pm_message_t state); + int (*resume)(struct soc_camera_device *); + 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 *); + const struct v4l2_queryctrl *controls; + struct v4l2_querymenu *menus; + int num_controls; + int num_menus; +}; +/****************yzm***************/ + #define SOCAM_SENSE_PCLK_CHANGED (1 << 0) /** @@ -286,6 +319,19 @@ struct soc_camera_sense { unsigned long pixel_clock_max; unsigned long pixel_clock; }; +/***************yzm****************/ +static inline struct v4l2_queryctrl const *soc_camera_find_qctrl( + struct soc_camera_ops *ops, int id) +{ + int i; + + for (i = 0; i < ops->num_controls; i++) + if (ops->controls[i].id == id) + return &ops->controls[i]; + + return NULL; +} +/***************yzm****************rnd*/ #define SOCAM_DATAWIDTH(x) BIT((x) - 1) #define SOCAM_DATAWIDTH_4 SOCAM_DATAWIDTH(4) @@ -297,7 +343,10 @@ struct soc_camera_sense { #define SOCAM_DATAWIDTH_16 SOCAM_DATAWIDTH(16) #define SOCAM_DATAWIDTH_18 SOCAM_DATAWIDTH(18) #define SOCAM_DATAWIDTH_24 SOCAM_DATAWIDTH(24) - +/**************yzm***********/ +#define SOCAM_MCLK_24MHZ (1<<29) +#define SOCAM_MCLK_48MHZ (1<<31) +//*************yzm***********end #define SOCAM_DATAWIDTH_MASK (SOCAM_DATAWIDTH_4 | SOCAM_DATAWIDTH_8 | \ SOCAM_DATAWIDTH_9 | SOCAM_DATAWIDTH_10 | \ SOCAM_DATAWIDTH_12 | SOCAM_DATAWIDTH_15 | \