xref: /dragonfly/sys/dev/video/bktr/ioctl_bt848.h (revision 6b5ed54a38712b1725eb2d5c74e794f76780dace)
1 /*
2  * extensions to ioctl_meteor.h for the bt848 cards
3  *
4  * $FreeBSD: src/sys/dev/bktr/ioctl_bt848.h,v 1.30 2003/12/20 17:12:25 obrien Exp $
5  */
6 
7 #ifndef  _DEV_BKTR_IOCTL_BT848_H_
8 #define  _DEV_BKTR_IOCTL_BT848_H_
9 
10 #include <sys/ioccom.h>
11 
12 /*
13  * frequency sets
14  */
15 #define CHNLSET_NABCST                  1
16 #define CHNLSET_CABLEIRC      2
17 #define CHNLSET_CABLEHRC      3
18 #define CHNLSET_WEUROPE                 4
19 #define CHNLSET_JPNBCST         5
20 #define CHNLSET_JPNCABLE        6
21 #define CHNLSET_XUSSR           7
22 #define CHNLSET_AUSTRALIA       8
23 #define CHNLSET_FRANCE          9
24 #define CHNLSET_MIN         CHNLSET_NABCST
25 #define CHNLSET_MAX         CHNLSET_FRANCE
26 
27 
28 /*
29  * constants for various tuner registers
30  */
31 #define BT848_HUEMIN                    (-90)
32 #define BT848_HUEMAX                    90
33 #define BT848_HUECENTER                 0
34 #define BT848_HUERANGE                  179.3
35 #define BT848_HUEREGMIN                 (-128)
36 #define BT848_HUEREGMAX                 127
37 #define BT848_HUESTEPS                  256
38 
39 #define BT848_BRIGHTMIN                 (-50)
40 #define BT848_BRIGHTMAX                 50
41 #define BT848_BRIGHTCENTER    0
42 #define BT848_BRIGHTRANGE     99.6
43 #define BT848_BRIGHTREGMIN    (-128)
44 #define BT848_BRIGHTREGMAX    127
45 #define BT848_BRIGHTSTEPS     256
46 
47 #define BT848_CONTRASTMIN     0
48 #define BT848_CONTRASTMAX     237
49 #define BT848_CONTRASTCENTER  100
50 #define BT848_CONTRASTRANGE   236.57
51 #define BT848_CONTRASTREGMIN  0
52 #define BT848_CONTRASTREGMAX  511
53 #define BT848_CONTRASTSTEPS   512
54 
55 #define BT848_CHROMAMIN                 0
56 #define BT848_CHROMAMAX                 284
57 #define BT848_CHROMACENTER    100
58 #define BT848_CHROMARANGE     283.89
59 #define BT848_CHROMAREGMIN    0
60 #define BT848_CHROMAREGMAX    511
61 #define BT848_CHROMASTEPS     512
62 
63 #define BT848_SATUMIN                   0
64 #define BT848_SATUMAX                   202
65 #define BT848_SATUCENTER      100
66 #define BT848_SATURANGE                 201.18
67 #define BT848_SATUREGMIN      0
68 #define BT848_SATUREGMAX      511
69 #define BT848_SATUSTEPS                 512
70 
71 #define BT848_SATVMIN                   0
72 #define BT848_SATVMAX                   284
73 #define BT848_SATVCENTER      100
74 #define BT848_SATVRANGE                 283.89
75 #define BT848_SATVREGMIN      0
76 #define BT848_SATVREGMAX      511
77 #define BT848_SATVSTEPS                 512
78 
79 
80 /*
81  * audio stuff
82  */
83 #define AUDIO_TUNER           0x00      /* command for the audio routine */
84 #define AUDIO_EXTERN                    0x01      /* don't confuse them with bit */
85 #define AUDIO_INTERN                    0x02      /* settings */
86 #define AUDIO_MUTE            0x80
87 #define AUDIO_UNMUTE                    0x81
88 
89 
90 /*
91  * EEProm stuff
92  */
93 struct eeProm {
94           short     offset;
95           short     count;
96           u_char    bytes[ 256 ];
97 };
98 
99 
100 /*
101  * XXX: this is a hack, should be in ioctl_meteor.h
102  * here to avoid touching that file for now...
103  */
104 #define   TVTUNER_SETCHNL    _IOW('x', 32, unsigned int)    /* set channel */
105 #define   TVTUNER_GETCHNL    _IOR('x', 32, unsigned int)    /* get channel */
106 #define   TVTUNER_SETTYPE    _IOW('x', 33, unsigned int)    /* set tuner type */
107 #define   TVTUNER_GETTYPE    _IOR('x', 33, unsigned int)    /* get tuner type */
108 #define   TVTUNER_GETSTATUS  _IOR('x', 34, unsigned int)    /* get tuner status */
109 #define   TVTUNER_SETFREQ    _IOW('x', 35, unsigned int)    /* set frequency */
110 #define   TVTUNER_GETFREQ    _IOR('x', 36, unsigned int)    /* get frequency */
111 
112 
113 #define BT848_SHUE  _IOW('x', 37, int)            /* set hue */
114 #define BT848_GHUE  _IOR('x', 37, int)            /* get hue */
115 #define   BT848_SBRIG         _IOW('x', 38, int)            /* set brightness */
116 #define BT848_GBRIG _IOR('x', 38, int)            /* get brightness */
117 #define   BT848_SCSAT         _IOW('x', 39, int)            /* set chroma sat */
118 #define BT848_GCSAT _IOR('x', 39, int)            /* get UV saturation */
119 #define   BT848_SCONT         _IOW('x', 40, int)            /* set contrast */
120 #define   BT848_GCONT         _IOR('x', 40, int)            /* get contrast */
121 #define   BT848_SVSAT         _IOW('x', 41, int)            /* set chroma V sat */
122 #define BT848_GVSAT _IOR('x', 41, int)            /* get V saturation */
123 #define   BT848_SUSAT         _IOW('x', 42, int)            /* set chroma U sat */
124 #define BT848_GUSAT _IOR('x', 42, int)            /* get U saturation */
125 
126 #define   BT848_SCBARS        _IOR('x', 43, int)            /* set colorbar */
127 #define   BT848_CCBARS        _IOR('x', 44, int)            /* clear colorbar */
128 
129 
130 #define   BT848_SAUDIO        _IOW('x', 46, int)            /* set audio channel */
131 #define BT848_GAUDIO          _IOR('x', 47, int)            /* get audio channel */
132 #define   BT848_SBTSC         _IOW('x', 48, int)            /* set audio channel */
133 
134 #define   BT848_GSTATUS       _IOR('x', 49, unsigned int)   /* reap status */
135 
136 #define   BT848_WEEPROM       _IOWR('x', 50, struct eeProm) /* write to EEProm */
137 #define   BT848_REEPROM       _IOWR('x', 51, struct eeProm) /* read from EEProm */
138 
139 #define   BT848_SIGNATURE     _IOWR('x', 52, struct eeProm) /* read card sig */
140 
141 #define   TVTUNER_SETAFC      _IOW('x', 53, int)            /* turn AFC on/off */
142 #define TVTUNER_GETAFC        _IOR('x', 54, int)            /* query AFC on/off */
143 #define BT848_SLNOTCH         _IOW('x', 55, int)            /* set luma notch */
144 #define BT848_GLNOTCH         _IOR('x', 56, int)            /* get luma notch */
145 
146 /* Read/Write the BT848's I2C bus directly
147  * b7-b0:    data (read/write)
148  * b15-b8:   internal peripheral register (write)
149  * b23-b16:  i2c addr (write)
150  * b31-b24:  1 = write, 0 = read
151  */
152 #define BT848_I2CWR     _IOWR('x', 57, u_long)    /* i2c read-write */
153 
154 struct bktr_msp_control {
155           unsigned char function;
156           unsigned int  address;
157           unsigned int  data;
158 };
159 
160 #define BT848_MSP_RESET _IO('x', 76)                                  /* MSP chip reset */
161 #define BT848_MSP_READ  _IOWR('x', 77, struct bktr_msp_control)       /* MSP chip read */
162 #define BT848_MSP_WRITE _IOWR('x', 78, struct bktr_msp_control)       /* MSP chip write */
163 
164 /* Support for radio tuner */
165 #define RADIO_SETMODE          _IOW('x', 58, unsigned int)  /* set radio modes */
166 #define RADIO_GETMODE          _IOR('x', 58, unsigned char)  /* get radio modes */
167 #define   RADIO_AFC  0x01               /* These modes will probably not */
168 #define   RADIO_MONO           0x02               /*  work on the FRxxxx. It does          */
169 #define   RADIO_MUTE           0x08               /*  work on the FMxxxx.       */
170 #define RADIO_SETFREQ    _IOW('x', 59, unsigned int)  /* set frequency   */
171 #define RADIO_GETFREQ    _IOR('x', 59, unsigned int)  /* set frequency   */
172  /*        Argument is frequency*100MHz  */
173 
174 /*
175  * XXX: more bad magic,
176  *      we need to fix the METEORGINPUT to return something public
177  *      duplicate them here for now...
178  */
179 #define   METEOR_DEV0                   0x00001000
180 #define   METEOR_DEV1                   0x00002000
181 #define   METEOR_DEV2                   0x00004000
182 #define   METEOR_DEV3                   0x00008000
183 #define   METEOR_DEV_SVIDEO   0x00006000
184 /*
185  * right now I don't know were to put these, but as they are suppose to be
186  * a part of a common video capture interface, these should be relocated to
187  * another place.  Probably most of the METEOR_xxx defines need to be
188  * renamed and moved to a common header
189  */
190 
191 typedef enum { METEOR_PIXTYPE_RGB, METEOR_PIXTYPE_YUV,
192                  METEOR_PIXTYPE_YUV_PACKED,
193                  METEOR_PIXTYPE_YUV_12 } METEOR_PIXTYPE;
194 
195 
196 struct meteor_pixfmt {
197           u_int          index;         /* Index in supported pixfmt list     */
198           METEOR_PIXTYPE type;          /* What's the board gonna feed us     */
199           u_int          Bpp;           /* Bytes per pixel                    */
200           u_long         masks[3];      /* R,G,B or Y,U,V masks, respectively */
201           unsigned       swap_bytes :1; /* Bytes  swapped within shorts       */
202           unsigned       swap_shorts:1; /* Shorts swapped within longs        */
203 };
204 
205 
206 struct bktr_clip {
207     int          x_min;
208     int          x_max;
209     int          y_min;
210     int          y_max;
211 };
212 
213 #define BT848_MAX_CLIP_NODE 100
214 struct _bktr_clip {
215     struct bktr_clip x[BT848_MAX_CLIP_NODE];
216 };
217 
218 /*
219  * I'm using METEOR_xxx just because that will be common to other interface
220  * and less of a surprise
221  */
222 #define METEORSACTPIXFMT      _IOW('x', 64, int )
223 #define METEORGACTPIXFMT      _IOR('x', 64, int )
224 #define METEORGSUPPIXFMT      _IOWR('x', 65, struct meteor_pixfmt)
225 
226 /* set clip list */
227 #define BT848SCLIP     _IOW('x', 66, struct _bktr_clip )
228 
229 /* set input format */
230 #define BT848SFMT             _IOW('x', 67, unsigned long )
231 #define BT848GFMT             _IOR('x', 67, unsigned long )
232 
233 /* set clear-buffer-on-start */
234 #define BT848SCBUF  _IOW('x', 68, int)
235 #define BT848GCBUF  _IOR('x', 68, int)
236 
237 /* set capture area */
238 /* The capture area is the area of the video image which is grabbed */
239 /* Usually the capture area is 640x480 (768x576 PAL) pixels */
240 /* This area is then scaled to the dimensions the user requires */
241 /* using the METEORGEO ioctl */
242 /* However, the capture area could be 400x300 pixels from the top right */
243 /* corner of the video image */
244 struct bktr_capture_area {
245    int      x_offset;
246    int      y_offset;
247    int      x_size;
248    int      y_size;
249 };
250 #define BT848_SCAPAREA   _IOW('x', 69, struct bktr_capture_area)
251 #define BT848_GCAPAREA   _IOR('x', 69, struct bktr_capture_area)
252 
253 
254 /* Get channel Set */
255 #define BT848_MAX_CHNLSET_NAME_LEN 16
256 struct bktr_chnlset {
257        short   index;
258        short   max_channel;
259        char    name[BT848_MAX_CHNLSET_NAME_LEN];
260 };
261 #define   TVTUNER_GETCHNLSET _IOWR('x', 70, struct bktr_chnlset)
262 
263 
264 
265 /* Infra Red Remote Control */
266 struct bktr_remote {
267        unsigned char data[3];
268 };
269 #define   REMOTE_GETKEY      _IOR('x', 71, struct bktr_remote)/*read the remote */
270                                                             /*control receiver*/
271                                                             /*returns raw data*/
272 
273 
274 /*
275  * Direct access to GPIO pins. You must add BKTR_GPIO_ACCESS to your kernel
276  * configuration file to use these
277  */
278 #define BT848_GPIO_SET_EN      _IOW('x', 72, int)      /* set gpio_out_en */
279 #define BT848_GPIO_GET_EN      _IOR('x', 73, int)      /* get gpio_out_en */
280 #define BT848_GPIO_SET_DATA    _IOW('x', 74, int)      /* set gpio_data */
281 #define BT848_GPIO_GET_DATA    _IOR('x', 75, int)      /* get gpio_data */
282 
283 
284 
285 /*  XXX - Copied from /sys/pci/brktree_reg.h  */
286 #define BT848_IFORM_FORMAT              (0x7<<0)
287 # define BT848_IFORM_F_RSVD             (0x7)
288 # define BT848_IFORM_F_SECAM            (0x6)
289 # define BT848_IFORM_F_PALN             (0x5)
290 # define BT848_IFORM_F_PALM             (0x4)
291 # define BT848_IFORM_F_PALBDGHI         (0x3)
292 # define BT848_IFORM_F_NTSCJ            (0x2)
293 # define BT848_IFORM_F_NTSCM            (0x1)
294 # define BT848_IFORM_F_AUTO             (0x0)
295 
296 
297 #endif    /* _DEV_BKTR_IOCTL_BT848_H_ */
298