1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * |
4 | * Copyright (C) 2005 Mike Isely <isely@pobox.com> |
5 | */ |
6 | #ifndef __PVRUSB2_DEVATTR_H |
7 | #define __PVRUSB2_DEVATTR_H |
8 | |
9 | #include <linux/mod_devicetable.h> |
10 | #include <linux/videodev2.h> |
11 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB |
12 | #include "pvrusb2-dvb.h" |
13 | #endif |
14 | |
15 | /* |
16 | |
17 | This header defines structures used to describe attributes of a device. |
18 | |
19 | */ |
20 | |
21 | |
22 | #define PVR2_CLIENT_ID_NULL 0 |
23 | #define PVR2_CLIENT_ID_MSP3400 1 |
24 | #define PVR2_CLIENT_ID_CX25840 2 |
25 | #define PVR2_CLIENT_ID_SAA7115 3 |
26 | #define PVR2_CLIENT_ID_TUNER 4 |
27 | #define PVR2_CLIENT_ID_CS53L32A 5 |
28 | #define PVR2_CLIENT_ID_WM8775 6 |
29 | #define PVR2_CLIENT_ID_DEMOD 7 |
30 | |
31 | struct pvr2_device_client_desc { |
32 | /* One ovr PVR2_CLIENT_ID_xxxx */ |
33 | unsigned char module_id; |
34 | |
35 | /* Null-terminated array of I2C addresses to try in order |
36 | initialize the module. It's safe to make this null terminated |
37 | since we're never going to encounter an i2c device with an |
38 | address of zero. If this is a null pointer or zero-length, |
39 | then no I2C addresses have been specified, in which case we'll |
40 | try some compiled in defaults for now. */ |
41 | unsigned char *i2c_address_list; |
42 | }; |
43 | |
44 | struct pvr2_device_client_table { |
45 | const struct pvr2_device_client_desc *lst; |
46 | unsigned char cnt; |
47 | }; |
48 | |
49 | |
50 | struct pvr2_string_table { |
51 | const char **lst; |
52 | unsigned int cnt; |
53 | }; |
54 | |
55 | #define PVR2_ROUTING_SCHEME_HAUPPAUGE 0 |
56 | #define PVR2_ROUTING_SCHEME_GOTVIEW 1 |
57 | #define PVR2_ROUTING_SCHEME_ONAIR 2 |
58 | #define PVR2_ROUTING_SCHEME_AV400 3 |
59 | #define PVR2_ROUTING_SCHEME_HAUP160XXX 4 |
60 | |
61 | #define PVR2_DIGITAL_SCHEME_NONE 0 |
62 | #define PVR2_DIGITAL_SCHEME_HAUPPAUGE 1 |
63 | #define PVR2_DIGITAL_SCHEME_ONAIR 2 |
64 | |
65 | #define PVR2_LED_SCHEME_NONE 0 |
66 | #define PVR2_LED_SCHEME_HAUPPAUGE 1 |
67 | |
68 | #define PVR2_IR_SCHEME_NONE 0 |
69 | #define PVR2_IR_SCHEME_24XXX 1 /* FX2-controlled IR */ |
70 | #define PVR2_IR_SCHEME_ZILOG 2 /* HVR-1950 style (must be taken out of reset) */ |
71 | #define PVR2_IR_SCHEME_24XXX_MCE 3 /* 24xxx MCE device */ |
72 | #define PVR2_IR_SCHEME_29XXX 4 /* Original 29xxx device */ |
73 | |
74 | /* This describes a particular hardware type (except for the USB device ID |
75 | which must live in a separate structure due to environmental |
76 | constraints). See the top of pvrusb2-hdw.c for where this is |
77 | instantiated. */ |
78 | struct pvr2_device_desc { |
79 | /* Single line text description of hardware */ |
80 | const char *description; |
81 | |
82 | /* Single token identifier for hardware */ |
83 | const char *shortname; |
84 | |
85 | /* List of additional client modules we need to load */ |
86 | struct pvr2_string_table client_modules; |
87 | |
88 | /* List of defined client modules we need to load */ |
89 | struct pvr2_device_client_table client_table; |
90 | |
91 | /* List of FX2 firmware file names we should search; if empty then |
92 | FX2 firmware check / load is skipped and we assume the device |
93 | was initialized from internal ROM. */ |
94 | struct pvr2_string_table fx2_firmware; |
95 | |
96 | #ifdef CONFIG_VIDEO_PVRUSB2_DVB |
97 | /* callback functions to handle attachment of digital tuner & demod */ |
98 | const struct pvr2_dvb_props *dvb_props; |
99 | |
100 | #endif |
101 | /* Initial standard bits to use for this device, if not zero. |
102 | Anything set here is also implied as an available standard. |
103 | Note: This is ignored if overridden on the module load line via |
104 | the video_std module option. */ |
105 | v4l2_std_id default_std_mask; |
106 | |
107 | /* V4L tuner type ID to use with this device (only used if the |
108 | driver could not discover the type any other way). */ |
109 | int default_tuner_type; |
110 | |
111 | /* Signal routing scheme used by device, contains one of |
112 | PVR2_ROUTING_SCHEME_XXX. Schemes have to be defined as we |
113 | encounter them. This is an arbitrary integer scheme id; its |
114 | meaning is contained entirely within the driver and is |
115 | interpreted by logic which must send commands to the chip-level |
116 | drivers (search for things which touch this field). */ |
117 | unsigned char signal_routing_scheme; |
118 | |
119 | /* Indicates scheme for controlling device's LED (if any). The |
120 | driver will turn on the LED when streaming is underway. This |
121 | contains one of PVR2_LED_SCHEME_XXX. */ |
122 | unsigned char led_scheme; |
123 | |
124 | /* Control scheme to use if there is a digital tuner. This |
125 | contains one of PVR2_DIGITAL_SCHEME_XXX. This is an arbitrary |
126 | integer scheme id; its meaning is contained entirely within the |
127 | driver and is interpreted by logic which must control the |
128 | streaming pathway (search for things which touch this field). */ |
129 | unsigned char digital_control_scheme; |
130 | |
131 | /* If set, we don't bother trying to load cx23416 firmware. */ |
132 | unsigned int flag_skip_cx23416_firmware:1; |
133 | |
134 | /* If set, the encoder must be healthy in order for digital mode to |
135 | work (otherwise we assume that digital streaming will work even |
136 | if we fail to locate firmware for the encoder). If the device |
137 | doesn't support digital streaming then this flag has no |
138 | effect. */ |
139 | unsigned int flag_digital_requires_cx23416:1; |
140 | |
141 | /* Device has a hauppauge eeprom which we can interrogate. */ |
142 | unsigned int flag_has_hauppauge_rom:1; |
143 | |
144 | /* Device does not require a powerup command to be issued. */ |
145 | unsigned int flag_no_powerup:1; |
146 | |
147 | /* Device has a cx25840 - this enables special additional logic to |
148 | handle it. */ |
149 | unsigned int flag_has_cx25840:1; |
150 | |
151 | /* Device has a wm8775 - this enables special additional logic to |
152 | ensure that it is found. */ |
153 | unsigned int flag_has_wm8775:1; |
154 | |
155 | /* Indicate IR scheme of hardware. If not set, then it is assumed |
156 | that IR can work without any help from the driver. */ |
157 | unsigned int ir_scheme:3; |
158 | |
159 | /* These bits define which kinds of sources the device can handle. |
160 | Note: Digital tuner presence is inferred by the |
161 | digital_control_scheme enumeration. */ |
162 | unsigned int flag_has_fmradio:1; /* Has FM radio receiver */ |
163 | unsigned int flag_has_analogtuner:1; /* Has analog tuner */ |
164 | unsigned int flag_has_composite:1; /* Has composite input */ |
165 | unsigned int flag_has_svideo:1; /* Has s-video input */ |
166 | unsigned int flag_fx2_16kb:1; /* 16KB FX2 firmware OK here */ |
167 | |
168 | /* If this driver is considered experimental, i.e. not all aspects |
169 | are working correctly and/or it is untested, mark that fact |
170 | with this flag. */ |
171 | unsigned int flag_is_experimental:1; |
172 | }; |
173 | |
174 | extern struct usb_device_id pvr2_device_table[]; |
175 | |
176 | #endif /* __PVRUSB2_HDW_INTERNAL_H */ |
177 | |