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