kernel: Replace struct device* by device_t
[dragonfly.git] / sys / dev / video / cxm / cxm.h
blob19ed784a20b2b0beb0b046684ce0f9725401baaa
1 /*
2 * Copyright (c) 2003, 2004, 2005
3 * John Wehle <john@feith.com>. All rights reserved.
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 3. All advertising materials mentioning features or use of this software
14 * must display the following acknowledgement:
15 * This product includes software developed by John Wehle.
16 * 4. The name of the author may not be used to endorse or promote products
17 * derived from this software without specific prior written permission.
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22 * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
23 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
27 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
28 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
32 #ifndef _CXM_H
33 #define _CXM_H
36 * Header file for the Conexant MPEG-2 Codec driver.
39 #include <sys/event.h>
41 #include "pcidevs.h"
43 #define bswap32(X) ntohl(X)
45 #define NUM_ELEMENTS(array) (sizeof(array) / sizeof(*array))
48 * For simplicity several large buffers allocate during
49 * driver attachment which normally occurs early on
50 * (when large areas of memory are available) are used
51 * to move data to / from the card. It's not unusual
52 * for the memory allocation to fail due to fragmentation
53 * if the driver is loaded after the system has been
54 * running for a while. One solution is to allocate
55 * several PAGE_SIZE buffers instead, however it doesn't
56 * seem worth the trouble.
58 enum cxm_byte_order { cxm_unknown_byte_order,
59 cxm_device_mpeg_byte_order, cxm_device_yuv12_byte_order,
60 cxm_host_byte_order };
62 struct cxm_buffer {
63 char *vaddr;
64 bus_addr_t baddr;
65 bus_dmamap_t dmamap;
66 size_t size;
67 enum cxm_byte_order byte_order;
70 #define CXM_SG_BUFFERS 50
72 struct cxm_buffer_pool {
73 bus_dma_tag_t dmat;
74 size_t offset;
75 unsigned int read;
76 volatile unsigned int write;
77 struct cxm_buffer bufs[CXM_SG_BUFFERS];
81 * Audio format encoding
83 * 7 6 5 4 3 2 1 0
85 * 0 0 44.1 kHz
86 * 0 1 48 kHz
87 * 1 0 32 kHz
89 * 0 1 Layer 1
90 * 1 0 Layer 2
91 * 1 1 Layer 3
93 * L1 / L2
94 * 0 0 0 0 Free fmt
95 * 0 0 0 1 32k / 32k
96 * 0 0 1 0 64k / 48k
97 * 0 0 1 1 96k / 56k
98 * 0 1 0 0 128k / 64k
99 * 0 1 0 1 160k / 80k
100 * 0 1 1 0 192k / 96k
101 * 0 1 1 1 224k / 112k
102 * 1 0 0 0 256k / 128k
103 * 1 0 0 1 288k / 160k
104 * 1 0 1 0 320k / 192k
105 * 1 0 1 1 352k / 224k
106 * 1 1 0 0 384k / 256k
107 * 1 1 0 1 416k / 320k
108 * 1 1 1 0 448k / 384k
110 struct cxm_codec_audio_format {
111 unsigned int sample_rate;
112 uint32_t format;
115 struct cxm_codec_profile {
116 const char *name;
117 uint32_t stream_type;
118 uint32_t fps;
119 uint32_t width;
120 uint32_t height;
121 uint32_t source_height;
122 struct {
123 uint32_t start;
124 uint32_t nlines;
125 uint32_t cc;
126 } vbi;
127 uint32_t aspect;
128 uint32_t pulldown;
129 struct {
130 uint32_t mode;
131 uint32_t average;
132 uint32_t peak;
133 } bitrate;
134 struct {
135 uint32_t closure;
136 uint32_t frames;
137 uint32_t bframes;
138 } gop;
139 struct {
140 uint32_t mode;
141 uint32_t type;
142 uint32_t spatial;
143 uint32_t temporal;
144 } dnr;
146 unsigned int audio_sample_rate;
149 struct cxm_dev {
150 uint16_t vid;
151 uint16_t did;
152 char *name;
155 #define CXM_MBX_FW_CMD_MAILBOX 0
156 #define CXM_MBX_FW_CMD_MAILBOXES 6
158 #define CXM_MBX_FW_DMA_MAILBOX 9
160 #define CXM_MBX_MAX_PARAMETERS 16
162 /* Mailbox flags bit definitions */
163 #define CXM_MBX_FLAG_DRV_DONE 0x00000002
164 #define CXM_MBX_FLAG_FW_DONE 0x00000004
165 #define CXM_MBX_FLAG_IN_USE 0x00000001
167 struct cxm_mailbox {
168 uint32_t flags;
169 uint32_t command;
170 uint32_t result;
171 uint32_t timeout;
172 uint32_t parameters[CXM_MBX_MAX_PARAMETERS];
173 } __attribute__ ((packed));
175 enum cxm_mailbox_name { cxm_unknown_mailbox,
176 cxm_dec_mailbox, cxm_enc_mailbox };
179 * Scatter / gather is supported with the restriction
180 * that the size of each piece must be a multiple of
181 * 256 and less than 64k.
183 #define CXM_SG_SEGMENT (0xff00 & ~(PAGE_SIZE - 1))
185 struct cxm_sg_entry {
186 uint32_t src;
187 uint32_t dst;
188 uint32_t size;
189 } __attribute__ ((packed));
191 struct cxm_sg_list {
192 bus_dma_tag_t dmat;
193 struct cxm_sg_entry *vaddr;
194 bus_addr_t baddr;
195 bus_dmamap_t dmamap;
199 enum cxm_source { cxm_unknown_source, cxm_fm_source, cxm_tuner_source,
200 cxm_line_in_source_composite, cxm_line_in_source_svideo };
202 enum cxm_source_format { cxm_unknown_source_format,
203 cxm_bw_50hz_source_format,
204 cxm_bw_60hz_source_format,
205 cxm_ntsc_50hz_source_format,
206 cxm_ntsc_60hz_source_format,
207 cxm_pal_50hz_source_format,
208 cxm_pal_60hz_source_format,
209 cxm_secam_50hz_source_format };
211 enum cxm_type { cxm_unknown_type, cxm_iTVC15_type, cxm_iTVC16_type };
214 * Conexant iTVC15 / iTVC16 info structure, one per card installed.
216 struct cxm_softc {
217 enum cxm_type type;
219 struct resource *mem_res; /* Resource descriptor for registers */
220 bus_space_tag_t btag; /* Bus space access functions */
221 bus_space_handle_t bhandle; /* Bus space access functions */
223 struct resource *irq_res; /* Resource descriptor for interrupt */
224 void *ih_cookie; /* Newbus interrupt handler cookie */
226 uint32_t irq_mask;
228 bus_dma_tag_t parent_dmat;
230 struct cxm_buffer_pool enc_pool;
231 struct cxm_sg_list enc_sg;
233 struct kqinfo enc_kq;
235 struct proc *enc_proc;
236 int enc_signal;
238 unsigned int dec_mbx;
239 unsigned int enc_mbx;
241 device_t cxm_iic;
242 device_t iicbus;
244 const struct cxm_tuner *tuner;
245 const struct cxm_tuner_channels *tuner_channels;
246 int tuner_afc;
247 unsigned long tuner_freq;
249 char msp_name[10];
251 const struct cxm_codec_profile *profile;
253 enum cxm_source source;
255 device_t dev; /* bus attachment */
256 cdev_t cxm_dev_t; /* control device */
257 int is_opened;
258 int mpeg;
260 int encoding;
261 int encoding_dma;
262 int encoding_eos;
263 int video_std;
267 * Conexant iTVC15 / iTVC16 I2C info structure, one per card installed.
269 struct cxm_iic_softc {
270 bus_space_tag_t btag; /* Bus space access functions */
271 bus_space_handle_t bhandle; /* Bus space access functions */
273 device_t iicbb;
278 * List of IVARS available to the I2C device driver
280 #define CXM_IVAR_BHANDLE 0
281 #define CXM_IVAR_BTAG 1
282 #define CXM_IVAR_IICBUS 2
285 * Bus resource id
287 #define CXM_RID PCIR_MAPS
290 * Access macros
292 #define CSR_WRITE_4(sc, reg, val) \
293 bus_space_write_4((sc)->btag, (sc)->bhandle, (reg), (val))
294 #define CSR_WRITE_2(sc, reg, val) \
295 bus_space_write_2((sc)->btag, (sc)->bhandle, (reg), val))
296 #define CSR_WRITE_1(sc, reg, val) \
297 bus_space_write_1((sc)->btag, (sc)->bhandle, (reg), val))
298 #define CSR_READ_4(sc, reg) \
299 bus_space_read_4((sc)->btag, (sc)->bhandle, (reg))
300 #define CSR_READ_2(sc, reg) \
301 bus_space_read_2((sc)->btag, (sc)->bhandle, (reg))
302 #define CSR_READ_1(sc, reg) \
303 bus_space_read_1((sc)->btag, (sc)->bhandle, (reg))
306 * Decoder / encoder firmware
308 extern const uint8_t cxm_dec_fw[] __aligned(4);
309 extern const uint8_t cxm_enc_fw[] __aligned(4);
311 #define CXM_FW_SIZE (256 * 1024)
314 * Decoder / encoder memory offsets
316 #define CXM_MEM_DEC 0x01000000
317 #define CXM_MEM_ENC 0x00000000
319 #define CXM_MEM_DEC_SIZE 0x01000000
320 #define CXM_MEM_ENC_SIZE 0x01000000
323 * Register offsets
325 #define CXM_REG_AO 0x2002d00
326 #define CXM_REG_APU 0x200a064
327 #define CXM_REG_DEC_SDRAM_PRECHARGE 0x20008fc
328 #define CXM_REG_DEC_SDRAM_REFRESH 0x20008f8
329 #define CXM_REG_DMA_STATUS 0x2000004
330 #define CXM_REG_ENC_SDRAM_PRECHARGE 0x20007fc
331 #define CXM_REG_ENC_SDRAM_REFRESH 0x20007f8
332 #define CXM_REG_HW_BLOCKS 0x2009054
333 #define CXM_REG_I2C_GETSCL 0x2007008
334 #define CXM_REG_I2C_GETSDA 0x200700c
335 #define CXM_REG_I2C_SETSCL 0x2007000
336 #define CXM_REG_I2C_SETSDA 0x2007004
337 #define CXM_REG_IRQ_MASK 0x2000048
338 #define CXM_REG_IRQ_STATUS 0x2000040
339 #define CXM_REG_SPU 0x2009050
340 #define CXM_REG_VDM 0x2002800
341 #define CXM_REG_VPU 0x2009058
344 * Register values
346 #define CXM_CMD_AO_STOP 0x00000005
347 #define CXM_CMD_APU_PING 0x00000000
348 #define CXM_CMD_HW_BLOCKS_RST 0xffffffff
349 #define CXM_CMD_SDRAM_PRECHARGE_INIT 0x0000001a
350 #define CXM_CMD_SDRAM_REFRESH_INIT 0x80000640
351 #define CXM_CMD_SPU_STOP 0x00000001
352 #define CXM_CMD_VDM_STOP 0x00000000
353 #define CXM_CMD_VPU_STOP15 0xfffffffe
354 #define CXM_CMD_VPU_STOP16 0xffffffee
356 #define CXM_DMA_ERROR_LIST 0x00000008
357 #define CXM_DMA_ERROR_READ 0x00000002
358 #define CXM_DMA_ERROR_WRITE 0x00000004
359 #define CXM_DMA_SUCCESS 0x00000001
361 #define CXM_IRQ_DEC_DMA_DONE (1 << 20)
362 #define CXM_IRQ_DEC_DMA_REQUEST (1 << 22)
363 #define CXM_IRQ_DEC_VSYNC (1 << 10)
364 #define CXM_IRQ_ENC_DMA_DONE (1 << 27)
365 #define CXM_IRQ_ENC_DMA_REQUEST (1 << 31)
366 #define CXM_IRQ_ENC_EOS (1 << 30)
367 #define CXM_IRQ_ENC_EVENT (1 << 28)
369 #define CXM_IRQ_ENC (CXM_IRQ_ENC_DMA_REQUEST | CXM_IRQ_ENC_DMA_DONE \
370 | CXM_IRQ_ENC_EOS | CXM_IRQ_ENC_EVENT)
373 * Register masks
375 #define CXM_MASK_SPU_ENABLE 0xfffffffe
376 #define CXM_MASK_VPU_ENABLE15 0xfffffff6
377 #define CXM_MASK_VPU_ENABLE16 0xfffffffb
380 * Firmware commands
382 #define CXM_FW_CMD_ASSIGN_3_2_PULLDOWN 0x000000b1
383 #define CXM_FW_CMD_ASSIGN_ASPECT_RATIO 0x00000099
384 #define CXM_FW_CMD_ASSIGN_AUDIO_PROPERTIES 0x000000bd
385 #define CXM_FW_CMD_ASSIGN_BITRATES 0x00000095
386 #define CXM_FW_CMD_ASSIGN_CORING_LEVELS 0x0000009f
387 #define CXM_FW_CMD_ASSIGN_DMA_BLOCKLEN 0x000000c9
388 #define CXM_FW_CMD_ASSIGN_DNR_FILTER_MODE 0x0000009b
389 #define CXM_FW_CMD_ASSIGN_DNR_FILTER_PROPERTIES 0x0000009d
390 #define CXM_FW_CMD_ASSIGN_FRAME_DROP_RATE 0x000000d0
391 #define CXM_FW_CMD_ASSIGN_FRAME_RATE 0x0000008f
392 #define CXM_FW_CMD_ASSIGN_FRAME_SIZE 0x00000091
393 #define CXM_FW_CMD_ASSIGN_GOP_CLOSURE 0x000000c5
394 #define CXM_FW_CMD_ASSIGN_GOP_PROPERTIES 0x00000097
395 #define CXM_FW_CMD_ASSIGN_NUM_VSYNC_LINES 0x000000d6
396 #define CXM_FW_CMD_ASSIGN_OUTPUT_PORT 0x000000bb
397 #define CXM_FW_CMD_ASSIGN_PGM_INDEX_INFO 0x000000c7
398 #define CXM_FW_CMD_ASSIGN_PLACEHOLDER 0x000000d8
399 #define CXM_FW_CMD_ASSIGN_SPATIAL_FILTER_TYPE 0x000000a1
400 #define CXM_FW_CMD_ASSIGN_STREAM_TYPE 0x000000b9
401 #define CXM_FW_CMD_ASSIGN_VBI_LINE 0x000000b7
402 #define CXM_FW_CMD_ASSIGN_VBI_PROPERTIES 0x000000c8
403 #define CXM_FW_CMD_BEGIN_CAPTURE 0x00000081
404 #define CXM_FW_CMD_DEC_EVENT_NOTIFICATION 0x00000017
405 #define CXM_FW_CMD_DEC_GET_FW_VER 0x00000011
406 #define CXM_FW_CMD_DEC_HALT_FW 0x0000000e
407 #define CXM_FW_CMD_ENC_EVENT_NOTIFICATION 0x000000d5
408 #define CXM_FW_CMD_ENC_GET_FW_VER 0x000000c4
409 #define CXM_FW_CMD_ENC_HALT_FW 0x000000c3
410 #define CXM_FW_CMD_END_CAPTURE 0x00000082
411 #define CXM_FW_CMD_INITIALIZE_VIDEO_INPUT 0x000000cd
412 #define CXM_FW_CMD_MUTE_VIDEO_INPUT 0x000000d9
413 #define CXM_FW_CMD_PAUSE_ENCODER 0x000000d2
414 #define CXM_FW_CMD_SCHED_DMA_TO_HOST 0x000000cc
416 #define CXM_FW_STD_TIMEOUT 0x00010000
418 #define CXM_FW_CAPTURE_STREAM_TYPE_MPEG 0x00000000
419 #define CXM_FW_CAPTURE_STREAM_TYPE_RAW 0x00000001
420 #define CXM_FW_CAPTURE_STREAM_TYPE_RAW_PASSTHROUGH 0x00000002
421 #define CXM_FW_CAPTURE_STREAM_TYPE_VBI 0x00000003
423 #define CXM_FW_CAPTURE_STREAM_YUV 0x00000001
424 #define CXM_FW_CAPTURE_STREAM_PCM_AUDIO 0x00000002
425 #define CXM_FW_CAPTURE_STREAM_VBI 0x00000004
427 #define CXM_FW_STREAM_TYPE_DVD 0x0000000a
428 #define CXM_FW_STREAM_TYPE_MPEG1 0x00000002
429 #define CXM_FW_STREAM_TYPE_MPEG2_PROGRAM 0x00000000
430 #define CXM_FW_STREAM_TYPE_SVCD 0x0000000c
431 #define CXM_FW_STREAM_TYPE_VCD 0x0000000b
433 #define CXM_MACROBLOCK_HEIGHT 16
434 #define CXM_MACROBLOCK_WIDTH 16
435 #define CXM_MACROBLOCK_SIZE (CXM_MACROBLOCK_HEIGHT * CXM_MACROBLOCK_WIDTH)
438 * I2C addresses
440 #define CXM_I2C_CX2584x 0x88
441 #define CXM_I2C_EEPROM 0xa0
442 #define CXM_I2C_IR 0x30
443 #define CXM_I2C_MSP3400 0x80
444 #define CXM_I2C_SAA7115 0x42
445 #define CXM_I2C_TDA988x_W (0x43 << 1) /* Write address */
446 #define CXM_I2C_TDA988x_R ((0x43 << 1) | 0x01) /* Read address */
447 #define CXM_I2C_TUNER 0xc2
448 #define CXM_I2C_TUNER_IF 0x86
449 #define CXM_I2C_WM8775 0x36
451 #define CXM_I2C_TIMEOUT 1000
454 * EEPROM
456 int cxm_eeprom_init(struct cxm_softc *sc);
457 int cxm_eeprom_tuner_type(struct cxm_softc *sc);
460 * Infrared remote
462 int cxm_ir_init(struct cxm_softc *sc);
463 int cxm_ir_key(struct cxm_softc *sc, char *buf, int len);
466 * msp34xxx Audio decoder
468 #define CXM_MSP3400C_DEM 0x10
469 #define CXM_MSP3400C_DFP 0x12
471 struct cxm_msp_setting {
472 unsigned char dev;
473 unsigned int addr;
474 char value[2];
477 struct cxm_msp_command {
478 unsigned int nsettings;
479 struct cxm_msp_setting settings[5];
482 int cxm_msp_init(struct cxm_softc *sc);
483 int cxm_msp_mute(struct cxm_softc *sc);
484 int cxm_msp_unmute(struct cxm_softc *sc);
485 int cxm_msp_is_muted(struct cxm_softc *sc);
486 int cxm_msp_select_source(struct cxm_softc *sc, enum cxm_source source);
487 enum cxm_source cxm_msp_selected_source(struct cxm_softc *sc);
488 int cxm_msp_autodetect_standard(struct cxm_softc *sc);
489 int cxm_msp_is_locked(struct cxm_softc *sc);
490 int cxm_msp_wait_for_lock(struct cxm_softc *sc);
493 * wm8775 Audio ADC
495 struct cxm_wm8775_setting {
496 unsigned char addr;
497 uint16_t value;
500 struct cxm_wm8775_command {
501 unsigned int nsettings;
502 struct cxm_wm8775_setting settings[13];
505 int cxm_wm8775_init(struct cxm_softc *sc);
508 * tda988x Demodulator
510 int cxm_tda988x_init(struct cxm_softc *sc);
511 int cxm_tda988x_diag(struct cxm_softc *sc);
514 * cx2584x Decoder
516 struct cxm_cx2584x_setting {
517 uint16_t addr;
518 unsigned char value;
521 struct cxm_cx2584x_command {
522 unsigned int nsettings;
523 struct cxm_cx2584x_setting settings[21];
526 int cxm_cx2584x_init(struct cxm_softc *sc);
527 int cxm_cx2584x_mute(struct cxm_softc *sc);
528 int cxm_cx2584x_unmute(struct cxm_softc *sc);
529 int cxm_cx2584x_select_source(struct cxm_softc *sc, enum cxm_source source);
530 int cxm_cx2584x_set_std(struct cxm_softc *sc);
533 * Tuner
535 #define CXM_TUNER_PHILIPS_FI1216_MK2 0
536 #define CXM_TUNER_PHILIPS_FM1216 1
537 #define CXM_TUNER_PHILIPS_FQ1216ME 2
538 #define CXM_TUNER_PHILIPS_FQ1216ME_MK3 3
539 #define CXM_TUNER_PHILIPS_FM1216ME_MK3 4
540 #define CXM_TUNER_PHILIPS_FI1236_MK2 5
541 #define CXM_TUNER_PHILIPS_FM1236 6
542 #define CXM_TUNER_PHILIPS_FI1246_MK2 7
543 #define CXM_TUNER_PHILIPS_FM1246 8
544 #define CXM_TUNER_TEMIC_4006_FH5 9
545 #define CXM_TUNER_TEMIC_4009_FR5 10
546 #define CXM_TUNER_TEMIC_4036_FY5 11
547 #define CXM_TUNER_TEMIC_4039_FR5 12
548 #define CXM_TUNER_TEMIC_4066_FY5 13
549 #define CXM_TUNER_LG_TPI8PSB11D 14
550 #define CXM_TUNER_LG_TPI8PSB01N 15
551 #define CXM_TUNER_LG_TAPC_H701F 16
552 #define CXM_TUNER_LG_TAPC_H001F 17
553 #define CXM_TUNER_LG_TAPE_H001F 18
554 #define CXM_TUNER_MICROTUNE_4049_FM5 19
555 #define CXM_TUNER_TCL_2002N_6A 20
556 #define CXM_TUNER_TYPES 21
558 #define CXM_TUNER_AFC_MASK 0x07
560 #define CXM_TUNER_AFC_FREQ_MINUS_125 0x00
561 #define CXM_TUNER_AFC_FREQ_MINUS_62 0x01
562 #define CXM_TUNER_AFC_FREQ_CENTERED 0x02
563 #define CXM_TUNER_AFC_FREQ_PLUS_62 0x03
564 #define CXM_TUNER_AFC_FREQ_PLUS_125 0x04
566 #define CXM_TUNER_PHASE_LOCKED 0x40
568 #define CXM_TUNER_FM_SYSTEM 0x01
569 #define CXM_TUNER_TV_SYSTEM_BG 0x02
570 #define CXM_TUNER_TV_SYSTEM_DK 0x04
571 #define CXM_TUNER_TV_SYSTEM_I 0x08
572 #define CXM_TUNER_TV_SYSTEM_MN 0x10
573 #define CXM_TUNER_TV_SYSTEM_L 0x20
574 #define CXM_TUNER_TV_SYSTEM_L_PRIME 0x40
576 struct cxm_tuner_band_code {
577 unsigned long freq;
578 unsigned char codes[2];
581 struct cxm_tuner_channel_assignment {
582 unsigned int channel;
583 unsigned long freq;
584 unsigned long step;
587 struct cxm_tuner_channels {
588 const char *name;
589 unsigned int chnlset;
590 unsigned int system;
591 unsigned int min_channel;
592 unsigned int max_channel;
593 unsigned long if_freq;
594 struct cxm_tuner_channel_assignment assignments[17];
597 struct cxm_tuner_system_code {
598 unsigned int system;
599 unsigned char codes[4];
602 enum cxm_tuner_system_code_style { cxm_unknown_system_code_style,
603 cxm_none_system_code_style,
604 cxm_port_system_code_style,
605 cxm_if_system_code_style,
606 cxm_if_system_with_aux_code_style };
608 struct cxm_tuner_system {
609 unsigned int supported;
610 enum cxm_tuner_system_code_style code_style;
611 struct cxm_tuner_system_code codes[6];
614 struct cxm_tuner {
615 const char *name;
616 struct cxm_tuner_system systems;
617 unsigned long min_freq;
618 unsigned long max_freq;
619 struct cxm_tuner_band_code band_codes[3];
620 unsigned long fm_min_freq;
621 unsigned long fm_max_freq;
622 struct cxm_tuner_band_code fm_band_code;
623 const struct cxm_tuner_channels *default_channels;
626 enum cxm_tuner_freq_type { cxm_tuner_unknown_freq_type, cxm_tuner_fm_freq_type,
627 cxm_tuner_tv_freq_type };
629 extern const struct cxm_tuner cxm_tuners[];
631 int cxm_tuner_init(struct cxm_softc *sc);
632 int cxm_tuner_select_channel_set(struct cxm_softc *sc,
633 unsigned int channel_set);
634 unsigned int cxm_tuner_selected_channel_set(struct cxm_softc *sc);
635 int cxm_tuner_select_frequency(struct cxm_softc *sc,
636 enum cxm_tuner_freq_type type,
637 unsigned long freq);
638 int cxm_tuner_select_channel(struct cxm_softc *sc, unsigned int channel);
639 int cxm_tuner_apply_afc(struct cxm_softc *sc);
640 int cxm_tuner_is_locked(struct cxm_softc *sc);
641 int cxm_tuner_wait_for_lock(struct cxm_softc *sc);
642 int cxm_tuner_status(struct cxm_softc *sc);
645 * Video decoder
647 struct cxm_saa7115_setting {
648 unsigned char addr;
649 unsigned int nvalues;
650 char values[32];
653 struct cxm_saa7115_command {
654 unsigned int nsettings;
655 struct cxm_saa7115_setting settings[20];
658 struct cxm_saa7115_audio_clock {
659 unsigned int sample_rate;
660 unsigned int fps;
661 const struct cxm_saa7115_command *clock;
664 struct cxm_saa7115_scaling {
665 unsigned int width;
666 unsigned int height;
667 unsigned int fps;
668 const struct cxm_saa7115_command *scaling;
671 int cxm_saa7115_init(struct cxm_softc *sc);
672 int cxm_saa7115_mute(struct cxm_softc *sc);
673 int cxm_saa7115_unmute(struct cxm_softc *sc);
674 int cxm_saa7115_select_source(struct cxm_softc *sc, enum cxm_source source);
675 int cxm_saa7115_configure(struct cxm_softc *sc,
676 unsigned int width, unsigned int height,
677 unsigned int fps, unsigned int audio_sample_rate);
678 enum cxm_source_format cxm_saa7115_detected_format(struct cxm_softc *sc);
679 int cxm_saa7115_detected_fps(struct cxm_softc *sc);
680 int cxm_saa7115_get_brightness(struct cxm_softc *sc);
681 int cxm_saa7115_set_brightness(struct cxm_softc *sc,
682 unsigned char brightness);
683 int cxm_saa7115_get_chroma_saturation(struct cxm_softc *sc);
684 int cxm_saa7115_set_chroma_saturation(struct cxm_softc *sc,
685 unsigned char chroma_saturation);
686 int cxm_saa7115_get_contrast(struct cxm_softc *sc);
687 int cxm_saa7115_set_contrast(struct cxm_softc *sc, unsigned char contrast);
688 int cxm_saa7115_get_hue(struct cxm_softc *sc);
689 int cxm_saa7115_set_hue(struct cxm_softc *sc, unsigned char hue);
690 int cxm_saa7115_is_locked(struct cxm_softc *sc);
691 int cxm_saa7115_wait_for_lock(struct cxm_softc *sc);
693 #endif /* !_CXM_H */