dtv: Added description for interface configuration
[linux-2.6.git] / include / media / tegra_dtv.h
1 /*
2  *
3  * Copyright (c) 2011, NVIDIA Corporation.
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  */
15
16 #ifndef __TEGRA_DTV_H__
17 #define __TEGRA_DTV_H__
18
19 #include <linux/ioctl.h>
20
21 #define TEGRA_DTV_MAGIC 'v'
22
23 #define TEGRA_DTV_IOCTL_START           _IO(TEGRA_DTV_MAGIC, 0)
24 #define TEGRA_DTV_IOCTL_STOP            _IO(TEGRA_DTV_MAGIC, 1)
25
26 struct tegra_dtv_hw_config {
27         int clk_edge; /*< clock edge to be used to sample DTV input signals */
28         int byte_swz_enabled; /*< byte order during deserialization */
29         int bit_swz_enabled;  /*< bit order during deserialization */
30
31         int protocol_sel;   /*< VD pin configuration. */
32         int clk_mode;       /*< input clock characteristics */
33         int fec_size;       /*< FEC size */
34         int body_size;      /*< BODY size */
35         int body_valid_sel; /*< VALID signal gate */
36         int start_sel;      /*< START of the package */
37         int err_pol;        /*< ERROR pin polarity */
38         int psync_pol;      /*< PSYNC pin polarity */
39         int valid_pol;      /*< VALID pin polarity */
40 };
41
42 #define TEGRA_DTV_IOCTL_SET_HW_CONFIG  _IOW(TEGRA_DTV_MAGIC, 2,         \
43                                            const struct tegra_dtv_hw_config *)
44 #define TEGRA_DTV_IOCTL_GET_HW_CONFIG  _IOR(TEGRA_DTV_MAGIC, 3,         \
45                                            struct tegra_dtv_hw_config *)
46
47 /**
48  * clock edge settings for clk_edge
49  *
50  * RISE_EDGE: sample input signal at rising edge
51  * FALL_EDGE: sample input signal at falling edge
52  */
53 enum {
54         TEGRA_DTV_CLK_RISE_EDGE = 0,
55         TEGRA_DTV_CLK_FALL_EDGE,
56 };
57
58 /**
59  * swizzle settings for byte_swz and bit_swz
60  *
61  * ENABLE: enable swizzle during deserialization
62  * DISABLE: disable swizzle during deserialization
63  *
64  * If swizzling is enabled then deserialized data will be re-ordered to
65  * fit the required format for tegra.
66  *
67  * For example, if raw BGR data is inputed into DTV interface, the data
68  * could be swizzled into RGB.
69  *
70  * For TS/MPEG-2 stream, please disable this feature.
71  */
72 enum {
73         TEGRA_DTV_SWZ_DISABLE = 0,
74         TEGRA_DTV_SWZ_ENABLE,
75 };
76
77 /* for selecting the pin configuration for VD(valid).
78  * NONE : ERROR is tied to 0, PSYNC is tied to 0
79  * ERROR: ERROR is tied to VD, PSYNC is tied to 0
80  * PSYNC: ERROR is tied to 0, PSYNC is tied to VD
81  */
82 enum {
83         TEGRA_DTV_PROTOCOL_NONE = 0,
84         TEGRA_DTV_PROTOCOL_ERROR,
85         TEGRA_DTV_PROTOCOL_PSYNC,
86 };
87
88 enum {
89         TEGRA_DTV_CLK_DISCONTINUOUS = 0,
90         TEGRA_DTV_CLK_CONTINUOUS,
91 };
92
93 enum {
94         TEGRA_DTV_BODY_VALID_IGNORE = 0,
95         TEGRA_DTV_BODY_VALID_GATE,
96 };
97
98 enum {
99         TEGRA_DTV_START_RESERVED = 0, /* never use this */
100         TEGRA_DTV_START_PSYNC,
101         TEGRA_DTV_START_VALID,
102         TEGRA_DTV_START_BOTH,
103 };
104
105 enum {
106         TEGRA_DTV_ERROR_POLARITY_HIGH = 0,
107         TEGRA_DTV_ERROR_POLARITY_LOW,
108 };
109
110 enum {
111         TEGRA_DTV_PSYNC_POLARITY_HIGH = 0,
112         TEGRA_DTV_PSYNC_POLARITY_LOW,
113 };
114
115 enum {
116         TEGRA_DTV_VALID_POLARITY_HIGH = 0,
117         TEGRA_DTV_VALID_POLARITY_LOW,
118 };
119
120 #ifdef __KERNEL__
121 enum {
122         TEGRA_DTV_CLK_POSEDGE,
123         TEGRA_DTV_CLK_NEGEDGE,
124 };
125
126 struct tegra_dtv_platform_data {
127         unsigned int dma_buf_size;
128         int clk_edge;
129         bool byte_swz_enabled;
130         bool bit_swz_enabled;
131 };
132 #endif /* __KERNEL__ */
133
134 #endif /* __TEGRA_DTV_H__ */