summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStanimir Varbanov <svarbanov@mm-sol.com>2011-12-16 13:46:22 +0800
committerAndy Green <andy.green@linaro.org>2011-12-16 13:46:22 +0800
commitb8d6f76a62da48ca5505099d10787e5fb58592d5 (patch)
treee90fb7e744ba88ff3fcb3c445fcf8230915cb29d
parent3d58de16f65d99636c973eb93dd69e693ca2fa7a (diff)
v4l: Introduce sensor operation for getting interface configuration
Introduce g_interface_parms sensor operation for getting sensor interface parameters. These parameters are needed from the host side to determine it's own configuration. Signed-off-by: Stanimir Varbanov <svarbanov@mm-sol.com>
-rw-r--r--include/media/v4l2-subdev.h42
1 files changed, 42 insertions, 0 deletions
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h
index 257da1a30f6..ea4f6ac64c4 100644
--- a/include/media/v4l2-subdev.h
+++ b/include/media/v4l2-subdev.h
@@ -361,6 +361,42 @@ struct v4l2_subdev_vbi_ops {
int (*s_sliced_fmt)(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_format *fmt);
};
+/* Which interface the sensor use to provide it's image data */
+enum v4l2_subdev_sensor_iface {
+ V4L2_SUBDEV_SENSOR_PARALLEL,
+ V4L2_SUBDEV_SENSOR_SERIAL,
+};
+
+/* Each interface could use the following modes */
+/* Image sensor provides horizontal and vertical sync signals */
+#define V4L2_SUBDEV_SENSOR_MODE_PARALLEL_SYNC 0
+/* BT.656 interface. Embedded sync */
+#define V4L2_SUBDEV_SENSOR_MODE_PARALLEL_ITU 1
+/* MIPI CSI1 */
+#define V4L2_SUBDEV_SENSOR_MODE_SERIAL_CSI1 2
+/* MIPI CSI2 */
+#define V4L2_SUBDEV_SENSOR_MODE_SERIAL_CSI2 3
+
+struct v4l2_subdev_sensor_serial_parms {
+ unsigned char lanes; /* number of lanes used */
+ unsigned char channel; /* virtual channel */
+ unsigned int phy_rate; /* output rate at CSI phy in bps */
+ unsigned int pix_clk; /* pixel clock in Hz */
+};
+
+struct v4l2_subdev_sensor_parallel_parms {
+ unsigned int pix_clk; /* pixel clock in Hz */
+};
+
+struct v4l2_subdev_sensor_interface_parms {
+ enum v4l2_subdev_sensor_iface if_type;
+ unsigned int if_mode;
+ union {
+ struct v4l2_subdev_sensor_serial_parms serial;
+ struct v4l2_subdev_sensor_parallel_parms parallel;
+ } parms;
+};
+
/**
* struct v4l2_subdev_sensor_ops - v4l2-subdev sensor operations
* @g_skip_top_lines: number of lines at the top of the image to be skipped.
@@ -370,10 +406,16 @@ struct v4l2_subdev_vbi_ops {
* @g_skip_frames: number of frames to skip at stream start. This is needed for
* buggy sensors that generate faulty frames when they are
* turned on.
+ * @g_interface_parms: get sensor interface parameters. The sensor subdev should
+ * fill this structure with current interface params. These
+ * interface parameters are needed on host side to configure
+ * it's own hardware receivers.
*/
struct v4l2_subdev_sensor_ops {
int (*g_skip_top_lines)(struct v4l2_subdev *sd, u32 *lines);
int (*g_skip_frames)(struct v4l2_subdev *sd, u32 *frames);
+ int (*g_interface_parms)(struct v4l2_subdev *sd,
+ struct v4l2_subdev_sensor_interface_parms *parms);
};
/*