19a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski/*
29a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * Media Bus API header
39a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski *
49a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * Copyright (C) 2009, Guennadi Liakhovetski <g.liakhovetski@gmx.de>
59a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski *
69a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * This program is free software; you can redistribute it and/or modify
79a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * it under the terms of the GNU General Public License version 2 as
89a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski * published by the Free Software Foundation.
99a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski */
109a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski
119a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#ifndef V4L2_MEDIABUS_H
129a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#define V4L2_MEDIABUS_H
139a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski
142ef2d5a336891ee38fee7c7ad2396e31ac9d8aaaLaurent Pinchart#include <linux/v4l2-mediabus.h>
159a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski
1691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/* Parallel flags */
1791c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/*
1891c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * Can the client run in master or in slave mode. By "Master mode" an operation
1991c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * mode is meant, when the client (e.g., a camera sensor) is producing
2091c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * horizontal and vertical synchronisation. In "Slave mode" the host is
2191c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * providing these signals to the slave.
2291c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski */
2391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_MASTER			(1 << 0)
2491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_SLAVE				(1 << 1)
253c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki/*
263c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki * Signal polarity flags
273c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki * Note: in BT.656 mode HSYNC, FIELD, and VSYNC are unused
283c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki * V4L2_MBUS_[HV]SYNC* flags should be also used for specifying
293c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki * configuration of hardware that uses [HV]REF signals
303c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki */
3191c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_HSYNC_ACTIVE_HIGH		(1 << 2)
3291c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_HSYNC_ACTIVE_LOW		(1 << 3)
3391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_VSYNC_ACTIVE_HIGH		(1 << 4)
3491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_VSYNC_ACTIVE_LOW		(1 << 5)
3591c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_PCLK_SAMPLE_RISING		(1 << 6)
3691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_PCLK_SAMPLE_FALLING		(1 << 7)
3791c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_DATA_ACTIVE_HIGH		(1 << 8)
3891c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_DATA_ACTIVE_LOW		(1 << 9)
393c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki/* FIELD = 0/1 - Field1 (odd)/Field2 (even) */
403c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki#define V4L2_MBUS_FIELD_EVEN_HIGH		(1 << 10)
413c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki/* FIELD = 1/0 - Field1 (odd)/Field2 (even) */
423c6938f805c557b45c0b01c081901b44145221d2Sylwester Nawrocki#define V4L2_MBUS_FIELD_EVEN_LOW		(1 << 11)
4391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski
4491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/* Serial flags */
4591c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/* How many lanes the client can use */
4691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_1_LANE			(1 << 0)
4791c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_2_LANE			(1 << 1)
4891c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_3_LANE			(1 << 2)
4991c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_4_LANE			(1 << 3)
5091c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/* On which channels it can send video data */
5191c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_CHANNEL_0		(1 << 4)
5291c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_CHANNEL_1		(1 << 5)
5391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_CHANNEL_2		(1 << 6)
5491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_CHANNEL_3		(1 << 7)
5591c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/* Does it support only continuous or also non-continuous clock mode */
5691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_CONTINUOUS_CLOCK		(1 << 8)
5791c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_NONCONTINUOUS_CLOCK	(1 << 9)
5891c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski
5991c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_LANES		(V4L2_MBUS_CSI2_1_LANE | V4L2_MBUS_CSI2_2_LANE | \
6091c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski					 V4L2_MBUS_CSI2_3_LANE | V4L2_MBUS_CSI2_4_LANE)
6191c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski#define V4L2_MBUS_CSI2_CHANNELS		(V4L2_MBUS_CSI2_CHANNEL_0 | V4L2_MBUS_CSI2_CHANNEL_1 | \
6291c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski					 V4L2_MBUS_CSI2_CHANNEL_2 | V4L2_MBUS_CSI2_CHANNEL_3)
6391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski
6491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/**
6591c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * v4l2_mbus_type - media bus type
6691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * @V4L2_MBUS_PARALLEL:	parallel interface with hsync and vsync
6791c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * @V4L2_MBUS_BT656:	parallel interface with embedded synchronisation, can
6891c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski *			also be used for BT.1120
6991c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * @V4L2_MBUS_CSI2:	MIPI CSI-2 serial interface
7091c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski */
7191c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetskienum v4l2_mbus_type {
7291c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski	V4L2_MBUS_PARALLEL,
7391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski	V4L2_MBUS_BT656,
7491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski	V4L2_MBUS_CSI2,
7591c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski};
7691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski
7791c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski/**
7891c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * v4l2_mbus_config - media bus configuration
7991c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * @type:	in: interface type
8091c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski * @flags:	in / out: configuration flags, depending on @type
8191c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski */
8291c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetskistruct v4l2_mbus_config {
8391c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski	enum v4l2_mbus_type type;
8491c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski	unsigned int flags;
8591c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski};
8691c7953005247c9563408bbdbf35e27de33e6ec3Guennadi Liakhovetski
873a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuilstatic inline void v4l2_fill_pix_format(struct v4l2_pix_format *pix_fmt,
883a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil				const struct v4l2_mbus_framefmt *mbus_fmt)
893a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil{
903a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	pix_fmt->width = mbus_fmt->width;
913a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	pix_fmt->height = mbus_fmt->height;
923a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	pix_fmt->field = mbus_fmt->field;
933a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	pix_fmt->colorspace = mbus_fmt->colorspace;
943a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil}
953a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil
963a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuilstatic inline void v4l2_fill_mbus_format(struct v4l2_mbus_framefmt *mbus_fmt,
973a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil			   const struct v4l2_pix_format *pix_fmt,
983a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil			   enum v4l2_mbus_pixelcode code)
993a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil{
1003a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	mbus_fmt->width = pix_fmt->width;
1013a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	mbus_fmt->height = pix_fmt->height;
1023a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	mbus_fmt->field = pix_fmt->field;
1033a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	mbus_fmt->colorspace = pix_fmt->colorspace;
1043a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil	mbus_fmt->code = code;
1053a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil}
1063a21ceed7f373894a7c537b4dbbe484f36e7ae24Hans Verkuil
1079a74251d8bee7a25fee89a0be3ccea73e01c1a05Guennadi Liakhovetski#endif
108