]> err.no Git - linux-2.6/blob - drivers/media/video/ivtv/ivtv-cards.h
V4L/DVB (6090): ivtv-fb: correct transparency bit reporting
[linux-2.6] / drivers / media / video / ivtv / ivtv-cards.h
1 /*
2     Functions to query card hardware
3     Copyright (C) 2003-2004  Kevin Thayer <nufan_wfk at yahoo.com>
4     Copyright (C) 2005-2007  Hans Verkuil <hverkuil@xs4all.nl>
5
6     This program is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     This program is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with this program; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20
21 /* hardware flags */
22 #define IVTV_HW_CX25840   (1 << 0)
23 #define IVTV_HW_SAA7115   (1 << 1)
24 #define IVTV_HW_SAA7127   (1 << 2)
25 #define IVTV_HW_MSP34XX   (1 << 3)
26 #define IVTV_HW_TUNER     (1 << 4)
27 #define IVTV_HW_WM8775    (1 << 5)
28 #define IVTV_HW_CS53L32A  (1 << 6)
29 #define IVTV_HW_TVEEPROM  (1 << 7)
30 #define IVTV_HW_SAA7114   (1 << 8)
31 #define IVTV_HW_TVAUDIO   (1 << 9)
32 #define IVTV_HW_UPD64031A (1 << 10)
33 #define IVTV_HW_UPD6408X  (1 << 11)
34 #define IVTV_HW_SAA717X   (1 << 12)
35 #define IVTV_HW_WM8739    (1 << 13)
36 #define IVTV_HW_VP27SMPX  (1 << 14)
37 #define IVTV_HW_GPIO      (1 << 15)
38
39 #define IVTV_HW_SAA711X   (IVTV_HW_SAA7115 | IVTV_HW_SAA7114)
40
41 /* video inputs */
42 #define IVTV_CARD_INPUT_VID_TUNER       1
43 #define IVTV_CARD_INPUT_SVIDEO1         2
44 #define IVTV_CARD_INPUT_SVIDEO2         3
45 #define IVTV_CARD_INPUT_COMPOSITE1      4
46 #define IVTV_CARD_INPUT_COMPOSITE2      5
47 #define IVTV_CARD_INPUT_COMPOSITE3      6
48
49 /* audio inputs */
50 #define IVTV_CARD_INPUT_AUD_TUNER       1
51 #define IVTV_CARD_INPUT_LINE_IN1        2
52 #define IVTV_CARD_INPUT_LINE_IN2        3
53
54 #define IVTV_CARD_MAX_VIDEO_INPUTS 6
55 #define IVTV_CARD_MAX_AUDIO_INPUTS 3
56 #define IVTV_CARD_MAX_TUNERS       2
57
58 /* SAA71XX HW inputs */
59 #define IVTV_SAA71XX_COMPOSITE0 0
60 #define IVTV_SAA71XX_COMPOSITE1 1
61 #define IVTV_SAA71XX_COMPOSITE2 2
62 #define IVTV_SAA71XX_COMPOSITE3 3
63 #define IVTV_SAA71XX_COMPOSITE4 4
64 #define IVTV_SAA71XX_COMPOSITE5 5
65 #define IVTV_SAA71XX_SVIDEO0    6
66 #define IVTV_SAA71XX_SVIDEO1    7
67 #define IVTV_SAA71XX_SVIDEO2    8
68 #define IVTV_SAA71XX_SVIDEO3    9
69
70 /* SAA717X needs to mark the tuner input by ORing with this flag */
71 #define IVTV_SAA717X_TUNER_FLAG 0x80
72
73 /* Dummy HW input */
74 #define IVTV_DUMMY_AUDIO        0
75
76 /* GPIO HW inputs */
77 #define IVTV_GPIO_TUNER   0
78 #define IVTV_GPIO_LINE_IN 1
79
80 /* SAA717X HW inputs */
81 #define IVTV_SAA717X_IN0 0
82 #define IVTV_SAA717X_IN1 1
83 #define IVTV_SAA717X_IN2 2
84
85 /* V4L2 capability aliases */
86 #define IVTV_CAP_ENCODER (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TUNER | \
87                           V4L2_CAP_AUDIO | V4L2_CAP_READWRITE | V4L2_CAP_VBI_CAPTURE | \
88                           V4L2_CAP_SLICED_VBI_CAPTURE)
89 #define IVTV_CAP_DECODER (V4L2_CAP_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT | \
90                           V4L2_CAP_SLICED_VBI_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_OVERLAY)
91
92 struct ivtv_card_video_input {
93         u8  video_type;         /* video input type */
94         u8  audio_index;        /* index in ivtv_card_audio_input array */
95         u16 video_input;        /* hardware video input */
96 };
97
98 struct ivtv_card_audio_input {
99         u8  audio_type;         /* audio input type */
100         u32 audio_input;        /* hardware audio input */
101         u16 muxer_input;        /* hardware muxer input for boards with a
102                                    multiplexer chip */
103 };
104
105 struct ivtv_card_output {
106         u8  name[32];
107         u16 video_output;  /* hardware video output */
108 };
109
110 struct ivtv_card_pci_info {
111         u16 device;
112         u16 subsystem_vendor;
113         u16 subsystem_device;
114 };
115
116 /* GPIO definitions */
117
118 /* The mask is the set of bits used by the operation */
119
120 struct ivtv_gpio_init {         /* set initial GPIO DIR and OUT values */
121         u16 direction;          /* DIR setting. Leave to 0 if no init is needed */
122         u16 initial_value;
123 };
124
125 struct ivtv_gpio_video_input {  /* select tuner/line in input */
126         u16 mask;               /* leave to 0 if not supported */
127         u16 tuner;
128         u16 composite;
129         u16 svideo;
130 };
131
132 struct ivtv_gpio_audio_input {  /* select tuner/line in input */
133         u16 mask;               /* leave to 0 if not supported */
134         u16 tuner;
135         u16 linein;
136         u16 radio;
137 };
138
139 struct ivtv_gpio_audio_mute {
140         u16 mask;               /* leave to 0 if not supported */
141         u16 mute;               /* set this value to mute, 0 to unmute */
142 };
143
144 struct ivtv_gpio_audio_mode {
145         u16 mask;               /* leave to 0 if not supported */
146         u16 mono;               /* set audio to mono */
147         u16 stereo;             /* set audio to stereo */
148         u16 lang1;              /* set audio to the first language */
149         u16 lang2;              /* set audio to the second language */
150         u16 both;               /* both languages are output */
151 };
152
153 struct ivtv_gpio_audio_freq {
154         u16 mask;               /* leave to 0 if not supported */
155         u16 f32000;
156         u16 f44100;
157         u16 f48000;
158 };
159
160 struct ivtv_gpio_audio_detect {
161         u16 mask;               /* leave to 0 if not supported */
162         u16 stereo;             /* if the input matches this value then
163                                    stereo is detected */
164 };
165
166 struct ivtv_card_tuner {
167         v4l2_std_id std;        /* standard for which the tuner is suitable */
168         int         tuner;      /* tuner ID (from tuner.h) */
169 };
170
171 /* for card information/parameters */
172 struct ivtv_card {
173         int type;
174         char *name;
175         u32 v4l2_capabilities;
176         u32 hw_video;           /* hardware used to process video */
177         u32 hw_audio;           /* hardware used to process audio */
178         u32 hw_audio_ctrl;      /* hardware used for the V4L2 controls (only 1 dev allowed) */
179         u32 hw_muxer;           /* hardware used to multiplex audio input */
180         u32 hw_all;             /* all hardware used by the board */
181         struct ivtv_card_video_input video_inputs[IVTV_CARD_MAX_VIDEO_INPUTS];
182         struct ivtv_card_audio_input audio_inputs[IVTV_CARD_MAX_AUDIO_INPUTS];
183         struct ivtv_card_audio_input radio_input;
184         int nof_outputs;
185         const struct ivtv_card_output *video_outputs;
186         u8 gr_config;           /* config byte for the ghost reduction device */
187
188         /* GPIO card-specific settings */
189         struct ivtv_gpio_init           gpio_init;
190         struct ivtv_gpio_video_input    gpio_video_input;
191         struct ivtv_gpio_audio_input    gpio_audio_input;
192         struct ivtv_gpio_audio_mute     gpio_audio_mute;
193         struct ivtv_gpio_audio_mode     gpio_audio_mode;
194         struct ivtv_gpio_audio_freq     gpio_audio_freq;
195         struct ivtv_gpio_audio_detect   gpio_audio_detect;
196
197         struct ivtv_card_tuner tuners[IVTV_CARD_MAX_TUNERS];
198
199         /* list of device and subsystem vendor/devices that
200            correspond to this card type. */
201         const struct ivtv_card_pci_info *pci_list;
202 };
203
204 int ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input);
205 int ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output);
206 int ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *input);
207 int ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *output);
208 const struct ivtv_card *ivtv_get_card(u16 index);