diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-17 00:15:42 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-17 00:15:42 -0400 |
commit | 0dd5198672dd2bbeb933862e1fc82162e0b636be (patch) | |
tree | c9efed20d90603c4d1626c21bd7aab1e7fc74a58 /drivers/media/dvb/siano/sms-cards.c | |
parent | c868d550115b9ccc0027c67265b9520790f05601 (diff) | |
parent | 11c635a25b9f3a5d87409ce46cf2e05c500251ec (diff) |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (425 commits)
V4L/DVB (11870): gspca - main: VIDIOC_ENUM_FRAMESIZES ioctl added.
V4L/DVB (12004): poll method lose race condition
V4L/DVB (11894): flexcop-pci: dmesg visible names broken
V4L/DVB (11892): Siano: smsendian - declare function as extern
V4L/DVB (11891): Siano: smscore - bind the GPIO SMS protocol
V4L/DVB (11890): Siano: smscore - remove redundant code
V4L/DVB (11889): Siano: smsdvb - add DVB v3 events
V4L/DVB (11888): Siano: smsusb - remove redundant ifdef
V4L/DVB (11887): Siano: smscards - add board (target) events
V4L/DVB (11886): Siano: smscore - fix some new GPIO definitions names
V4L/DVB (11885): Siano: Add new GPIO management interface
V4L/DVB (11884): Siano: smssdio - revert to stand alone module
V4L/DVB (11883): Siano: cards - add two additional (USB) devices
V4L/DVB (11824): Siano: smsusb - change exit func debug msg
V4L/DVB (11823): Siano: smsusb - fix typo in module description
V4L/DVB (11822): Siano: smscore - bug fix at get_device_mode
V4L/DVB (11821): Siano: smscore - fix isdb-t firmware name
V4L/DVB (11820): Siano: smscore - fix byte ordering bug
V4L/DVB (11819): Siano: smscore - fix get_common_buffer bug
V4L/DVB (11818): Siano: smscards - assign gpio to HPG targets
...
Diffstat (limited to 'drivers/media/dvb/siano/sms-cards.c')
-rw-r--r-- | drivers/media/dvb/siano/sms-cards.c | 188 |
1 files changed, 184 insertions, 4 deletions
diff --git a/drivers/media/dvb/siano/sms-cards.c b/drivers/media/dvb/siano/sms-cards.c index 63e4d0ec6583..d8b15d583bde 100644 --- a/drivers/media/dvb/siano/sms-cards.c +++ b/drivers/media/dvb/siano/sms-cards.c | |||
@@ -18,6 +18,7 @@ | |||
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include "sms-cards.h" | 20 | #include "sms-cards.h" |
21 | #include "smsir.h" | ||
21 | 22 | ||
22 | static int sms_dbg; | 23 | static int sms_dbg; |
23 | module_param_named(cards_dbg, sms_dbg, int, 0644); | 24 | module_param_named(cards_dbg, sms_dbg, int, 0644); |
@@ -30,17 +31,14 @@ static struct sms_board sms_boards[] = { | |||
30 | [SMS1XXX_BOARD_SIANO_STELLAR] = { | 31 | [SMS1XXX_BOARD_SIANO_STELLAR] = { |
31 | .name = "Siano Stellar Digital Receiver", | 32 | .name = "Siano Stellar Digital Receiver", |
32 | .type = SMS_STELLAR, | 33 | .type = SMS_STELLAR, |
33 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-stellar-dvbt-01.fw", | ||
34 | }, | 34 | }, |
35 | [SMS1XXX_BOARD_SIANO_NOVA_A] = { | 35 | [SMS1XXX_BOARD_SIANO_NOVA_A] = { |
36 | .name = "Siano Nova A Digital Receiver", | 36 | .name = "Siano Nova A Digital Receiver", |
37 | .type = SMS_NOVA_A0, | 37 | .type = SMS_NOVA_A0, |
38 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-nova-a-dvbt-01.fw", | ||
39 | }, | 38 | }, |
40 | [SMS1XXX_BOARD_SIANO_NOVA_B] = { | 39 | [SMS1XXX_BOARD_SIANO_NOVA_B] = { |
41 | .name = "Siano Nova B Digital Receiver", | 40 | .name = "Siano Nova B Digital Receiver", |
42 | .type = SMS_NOVA_B0, | 41 | .type = SMS_NOVA_B0, |
43 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-nova-b-dvbt-01.fw", | ||
44 | }, | 42 | }, |
45 | [SMS1XXX_BOARD_SIANO_VEGA] = { | 43 | [SMS1XXX_BOARD_SIANO_VEGA] = { |
46 | .name = "Siano Vega Digital Receiver", | 44 | .name = "Siano Vega Digital Receiver", |
@@ -65,6 +63,9 @@ static struct sms_board sms_boards[] = { | |||
65 | .name = "Hauppauge WinTV MiniStick", | 63 | .name = "Hauppauge WinTV MiniStick", |
66 | .type = SMS_NOVA_B0, | 64 | .type = SMS_NOVA_B0, |
67 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", | 65 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", |
66 | .board_cfg.leds_power = 26, | ||
67 | .board_cfg.led0 = 27, | ||
68 | .board_cfg.led1 = 28, | ||
68 | .led_power = 26, | 69 | .led_power = 26, |
69 | .led_lo = 27, | 70 | .led_lo = 27, |
70 | .led_hi = 28, | 71 | .led_hi = 28, |
@@ -74,7 +75,9 @@ static struct sms_board sms_boards[] = { | |||
74 | .type = SMS_NOVA_B0, | 75 | .type = SMS_NOVA_B0, |
75 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", | 76 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", |
76 | .lna_ctrl = 29, | 77 | .lna_ctrl = 29, |
78 | .board_cfg.foreign_lna0_ctrl = 29, | ||
77 | .rf_switch = 17, | 79 | .rf_switch = 17, |
80 | .board_cfg.rf_switch_uhf = 17, | ||
78 | }, | 81 | }, |
79 | [SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2] = { | 82 | [SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2] = { |
80 | .name = "Hauppauge WinTV MiniCard", | 83 | .name = "Hauppauge WinTV MiniCard", |
@@ -82,6 +85,16 @@ static struct sms_board sms_boards[] = { | |||
82 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", | 85 | .fw[DEVICE_MODE_DVBT_BDA] = "sms1xxx-hcw-55xxx-dvbt-02.fw", |
83 | .lna_ctrl = -1, | 86 | .lna_ctrl = -1, |
84 | }, | 87 | }, |
88 | [SMS1XXX_BOARD_SIANO_NICE] = { | ||
89 | /* 11 */ | ||
90 | .name = "Siano Nice Digital Receiver", | ||
91 | .type = SMS_NOVA_B0, | ||
92 | }, | ||
93 | [SMS1XXX_BOARD_SIANO_VENICE] = { | ||
94 | /* 12 */ | ||
95 | .name = "Siano Venice Digital Receiver", | ||
96 | .type = SMS_VEGA, | ||
97 | }, | ||
85 | }; | 98 | }; |
86 | 99 | ||
87 | struct sms_board *sms_get_board(int id) | 100 | struct sms_board *sms_get_board(int id) |
@@ -91,12 +104,179 @@ struct sms_board *sms_get_board(int id) | |||
91 | return &sms_boards[id]; | 104 | return &sms_boards[id]; |
92 | } | 105 | } |
93 | EXPORT_SYMBOL_GPL(sms_get_board); | 106 | EXPORT_SYMBOL_GPL(sms_get_board); |
107 | static inline void sms_gpio_assign_11xx_default_led_config( | ||
108 | struct smscore_gpio_config *pGpioConfig) { | ||
109 | pGpioConfig->Direction = SMS_GPIO_DIRECTION_OUTPUT; | ||
110 | pGpioConfig->InputCharacteristics = | ||
111 | SMS_GPIO_INPUT_CHARACTERISTICS_NORMAL; | ||
112 | pGpioConfig->OutputDriving = SMS_GPIO_OUTPUT_DRIVING_4mA; | ||
113 | pGpioConfig->OutputSlewRate = SMS_GPIO_OUTPUT_SLEW_RATE_0_45_V_NS; | ||
114 | pGpioConfig->PullUpDown = SMS_GPIO_PULL_UP_DOWN_NONE; | ||
115 | } | ||
116 | |||
117 | int sms_board_event(struct smscore_device_t *coredev, | ||
118 | enum SMS_BOARD_EVENTS gevent) { | ||
119 | int board_id = smscore_get_board_id(coredev); | ||
120 | struct sms_board *board = sms_get_board(board_id); | ||
121 | struct smscore_gpio_config MyGpioConfig; | ||
122 | |||
123 | sms_gpio_assign_11xx_default_led_config(&MyGpioConfig); | ||
124 | |||
125 | switch (gevent) { | ||
126 | case BOARD_EVENT_POWER_INIT: /* including hotplug */ | ||
127 | switch (board_id) { | ||
128 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
129 | /* set I/O and turn off all LEDs */ | ||
130 | smscore_gpio_configure(coredev, | ||
131 | board->board_cfg.leds_power, | ||
132 | &MyGpioConfig); | ||
133 | smscore_gpio_set_level(coredev, | ||
134 | board->board_cfg.leds_power, 0); | ||
135 | smscore_gpio_configure(coredev, board->board_cfg.led0, | ||
136 | &MyGpioConfig); | ||
137 | smscore_gpio_set_level(coredev, | ||
138 | board->board_cfg.led0, 0); | ||
139 | smscore_gpio_configure(coredev, board->board_cfg.led1, | ||
140 | &MyGpioConfig); | ||
141 | smscore_gpio_set_level(coredev, | ||
142 | board->board_cfg.led1, 0); | ||
143 | break; | ||
144 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2: | ||
145 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD: | ||
146 | /* set I/O and turn off LNA */ | ||
147 | smscore_gpio_configure(coredev, | ||
148 | board->board_cfg.foreign_lna0_ctrl, | ||
149 | &MyGpioConfig); | ||
150 | smscore_gpio_set_level(coredev, | ||
151 | board->board_cfg.foreign_lna0_ctrl, | ||
152 | 0); | ||
153 | break; | ||
154 | } | ||
155 | break; /* BOARD_EVENT_BIND */ | ||
156 | |||
157 | case BOARD_EVENT_POWER_SUSPEND: | ||
158 | switch (board_id) { | ||
159 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
160 | smscore_gpio_set_level(coredev, | ||
161 | board->board_cfg.leds_power, 0); | ||
162 | smscore_gpio_set_level(coredev, | ||
163 | board->board_cfg.led0, 0); | ||
164 | smscore_gpio_set_level(coredev, | ||
165 | board->board_cfg.led1, 0); | ||
166 | break; | ||
167 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2: | ||
168 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD: | ||
169 | smscore_gpio_set_level(coredev, | ||
170 | board->board_cfg.foreign_lna0_ctrl, | ||
171 | 0); | ||
172 | break; | ||
173 | } | ||
174 | break; /* BOARD_EVENT_POWER_SUSPEND */ | ||
175 | |||
176 | case BOARD_EVENT_POWER_RESUME: | ||
177 | switch (board_id) { | ||
178 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
179 | smscore_gpio_set_level(coredev, | ||
180 | board->board_cfg.leds_power, 1); | ||
181 | smscore_gpio_set_level(coredev, | ||
182 | board->board_cfg.led0, 1); | ||
183 | smscore_gpio_set_level(coredev, | ||
184 | board->board_cfg.led1, 0); | ||
185 | break; | ||
186 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2: | ||
187 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD: | ||
188 | smscore_gpio_set_level(coredev, | ||
189 | board->board_cfg.foreign_lna0_ctrl, | ||
190 | 1); | ||
191 | break; | ||
192 | } | ||
193 | break; /* BOARD_EVENT_POWER_RESUME */ | ||
194 | |||
195 | case BOARD_EVENT_BIND: | ||
196 | switch (board_id) { | ||
197 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
198 | smscore_gpio_set_level(coredev, | ||
199 | board->board_cfg.leds_power, 1); | ||
200 | smscore_gpio_set_level(coredev, | ||
201 | board->board_cfg.led0, 1); | ||
202 | smscore_gpio_set_level(coredev, | ||
203 | board->board_cfg.led1, 0); | ||
204 | break; | ||
205 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD_R2: | ||
206 | case SMS1XXX_BOARD_HAUPPAUGE_TIGER_MINICARD: | ||
207 | smscore_gpio_set_level(coredev, | ||
208 | board->board_cfg.foreign_lna0_ctrl, | ||
209 | 1); | ||
210 | break; | ||
211 | } | ||
212 | break; /* BOARD_EVENT_BIND */ | ||
213 | |||
214 | case BOARD_EVENT_SCAN_PROG: | ||
215 | break; /* BOARD_EVENT_SCAN_PROG */ | ||
216 | case BOARD_EVENT_SCAN_COMP: | ||
217 | break; /* BOARD_EVENT_SCAN_COMP */ | ||
218 | case BOARD_EVENT_EMERGENCY_WARNING_SIGNAL: | ||
219 | break; /* BOARD_EVENT_EMERGENCY_WARNING_SIGNAL */ | ||
220 | case BOARD_EVENT_FE_LOCK: | ||
221 | switch (board_id) { | ||
222 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
223 | smscore_gpio_set_level(coredev, | ||
224 | board->board_cfg.led1, 1); | ||
225 | break; | ||
226 | } | ||
227 | break; /* BOARD_EVENT_FE_LOCK */ | ||
228 | case BOARD_EVENT_FE_UNLOCK: | ||
229 | switch (board_id) { | ||
230 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
231 | smscore_gpio_set_level(coredev, | ||
232 | board->board_cfg.led1, 0); | ||
233 | break; | ||
234 | } | ||
235 | break; /* BOARD_EVENT_FE_UNLOCK */ | ||
236 | case BOARD_EVENT_DEMOD_LOCK: | ||
237 | break; /* BOARD_EVENT_DEMOD_LOCK */ | ||
238 | case BOARD_EVENT_DEMOD_UNLOCK: | ||
239 | break; /* BOARD_EVENT_DEMOD_UNLOCK */ | ||
240 | case BOARD_EVENT_RECEPTION_MAX_4: | ||
241 | break; /* BOARD_EVENT_RECEPTION_MAX_4 */ | ||
242 | case BOARD_EVENT_RECEPTION_3: | ||
243 | break; /* BOARD_EVENT_RECEPTION_3 */ | ||
244 | case BOARD_EVENT_RECEPTION_2: | ||
245 | break; /* BOARD_EVENT_RECEPTION_2 */ | ||
246 | case BOARD_EVENT_RECEPTION_1: | ||
247 | break; /* BOARD_EVENT_RECEPTION_1 */ | ||
248 | case BOARD_EVENT_RECEPTION_LOST_0: | ||
249 | break; /* BOARD_EVENT_RECEPTION_LOST_0 */ | ||
250 | case BOARD_EVENT_MULTIPLEX_OK: | ||
251 | switch (board_id) { | ||
252 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
253 | smscore_gpio_set_level(coredev, | ||
254 | board->board_cfg.led1, 1); | ||
255 | break; | ||
256 | } | ||
257 | break; /* BOARD_EVENT_MULTIPLEX_OK */ | ||
258 | case BOARD_EVENT_MULTIPLEX_ERRORS: | ||
259 | switch (board_id) { | ||
260 | case SMS1XXX_BOARD_HAUPPAUGE_WINDHAM: | ||
261 | smscore_gpio_set_level(coredev, | ||
262 | board->board_cfg.led1, 0); | ||
263 | break; | ||
264 | } | ||
265 | break; /* BOARD_EVENT_MULTIPLEX_ERRORS */ | ||
266 | |||
267 | default: | ||
268 | sms_err("Unknown SMS board event"); | ||
269 | break; | ||
270 | } | ||
271 | return 0; | ||
272 | } | ||
273 | EXPORT_SYMBOL_GPL(sms_board_event); | ||
94 | 274 | ||
95 | static int sms_set_gpio(struct smscore_device_t *coredev, int pin, int enable) | 275 | static int sms_set_gpio(struct smscore_device_t *coredev, int pin, int enable) |
96 | { | 276 | { |
97 | int lvl, ret; | 277 | int lvl, ret; |
98 | u32 gpio; | 278 | u32 gpio; |
99 | struct smscore_gpio_config gpioconfig = { | 279 | struct smscore_config_gpio gpioconfig = { |
100 | .direction = SMS_GPIO_DIRECTION_OUTPUT, | 280 | .direction = SMS_GPIO_DIRECTION_OUTPUT, |
101 | .pullupdown = SMS_GPIO_PULLUPDOWN_NONE, | 281 | .pullupdown = SMS_GPIO_PULLUPDOWN_NONE, |
102 | .inputcharacteristics = SMS_GPIO_INPUTCHARACTERISTICS_NORMAL, | 282 | .inputcharacteristics = SMS_GPIO_INPUTCHARACTERISTICS_NORMAL, |