aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb
diff options
context:
space:
mode:
authorTommy Jonsson <quazzie2@gmail.com>2010-09-12 15:03:45 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-21 05:54:09 -0400
commitd2fd44a33083973157d6e0e0e8bcfd5faa214bbb (patch)
tree0e7c54a391db750e543397ba9ad61733942524a6 /drivers/media/dvb
parentb4d752b308493b08b51ea04361848ef63d0cad42 (diff)
[media] firedtv: support for PSK8 for S2 devices. To watch HD
Add support for tuning with PSK8 modulation, pilot and rolloff with the S2 versions of firedtv. Signed-off-by: Tommy Jonsson <quazzie2@gmail.com> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (trivial simplification) Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/dvb')
-rw-r--r--drivers/media/dvb/firewire/firedtv-avc.c30
-rw-r--r--drivers/media/dvb/firewire/firedtv-fe.c36
2 files changed, 60 insertions, 6 deletions
diff --git a/drivers/media/dvb/firewire/firedtv-avc.c b/drivers/media/dvb/firewire/firedtv-avc.c
index 28294af752db..1f3d1fbf446c 100644
--- a/drivers/media/dvb/firewire/firedtv-avc.c
+++ b/drivers/media/dvb/firewire/firedtv-avc.c
@@ -24,6 +24,8 @@
24#include <linux/wait.h> 24#include <linux/wait.h>
25#include <linux/workqueue.h> 25#include <linux/workqueue.h>
26 26
27#include <dvb_frontend.h>
28
27#include "firedtv.h" 29#include "firedtv.h"
28 30
29#define FCP_COMMAND_REGISTER 0xfffff0000b00ULL 31#define FCP_COMMAND_REGISTER 0xfffff0000b00ULL
@@ -368,10 +370,30 @@ static int avc_tuner_tuneqpsk(struct firedtv *fdtv,
368 c->operand[12] = 0; 370 c->operand[12] = 0;
369 371
370 if (fdtv->type == FIREDTV_DVB_S2) { 372 if (fdtv->type == FIREDTV_DVB_S2) {
371 c->operand[13] = 0x1; 373 if (fdtv->fe.dtv_property_cache.delivery_system == SYS_DVBS2) {
372 c->operand[14] = 0xff; 374 switch (fdtv->fe.dtv_property_cache.modulation) {
373 c->operand[15] = 0xff; 375 case QAM_16: c->operand[13] = 0x1; break;
374 376 case QPSK: c->operand[13] = 0x2; break;
377 case PSK_8: c->operand[13] = 0x3; break;
378 default: c->operand[13] = 0x2; break;
379 }
380 switch (fdtv->fe.dtv_property_cache.rolloff) {
381 case ROLLOFF_AUTO: c->operand[14] = 0x2; break;
382 case ROLLOFF_35: c->operand[14] = 0x2; break;
383 case ROLLOFF_20: c->operand[14] = 0x0; break;
384 case ROLLOFF_25: c->operand[14] = 0x1; break;
385 /* case ROLLOFF_NONE: c->operand[14] = 0xff; break; */
386 }
387 switch (fdtv->fe.dtv_property_cache.pilot) {
388 case PILOT_AUTO: c->operand[15] = 0x0; break;
389 case PILOT_OFF: c->operand[15] = 0x0; break;
390 case PILOT_ON: c->operand[15] = 0x1; break;
391 }
392 } else {
393 c->operand[13] = 0x1; /* auto modulation */
394 c->operand[14] = 0xff; /* disable rolloff */
395 c->operand[15] = 0xff; /* disable pilot */
396 }
375 return 16; 397 return 16;
376 } else { 398 } else {
377 return 13; 399 return 13;
diff --git a/drivers/media/dvb/firewire/firedtv-fe.c b/drivers/media/dvb/firewire/firedtv-fe.c
index e49cdc88b0c7..d10920e2f3a2 100644
--- a/drivers/media/dvb/firewire/firedtv-fe.c
+++ b/drivers/media/dvb/firewire/firedtv-fe.c
@@ -155,6 +155,16 @@ static int fdtv_get_frontend(struct dvb_frontend *fe,
155 return -EOPNOTSUPP; 155 return -EOPNOTSUPP;
156} 156}
157 157
158static int fdtv_get_property(struct dvb_frontend *fe, struct dtv_property *tvp)
159{
160 return 0;
161}
162
163static int fdtv_set_property(struct dvb_frontend *fe, struct dtv_property *tvp)
164{
165 return 0;
166}
167
158void fdtv_frontend_init(struct firedtv *fdtv) 168void fdtv_frontend_init(struct firedtv *fdtv)
159{ 169{
160 struct dvb_frontend_ops *ops = &fdtv->fe.ops; 170 struct dvb_frontend_ops *ops = &fdtv->fe.ops;
@@ -166,6 +176,9 @@ void fdtv_frontend_init(struct firedtv *fdtv)
166 ops->set_frontend = fdtv_set_frontend; 176 ops->set_frontend = fdtv_set_frontend;
167 ops->get_frontend = fdtv_get_frontend; 177 ops->get_frontend = fdtv_get_frontend;
168 178
179 ops->get_property = fdtv_get_property;
180 ops->set_property = fdtv_set_property;
181
169 ops->read_status = fdtv_read_status; 182 ops->read_status = fdtv_read_status;
170 ops->read_ber = fdtv_read_ber; 183 ops->read_ber = fdtv_read_ber;
171 ops->read_signal_strength = fdtv_read_signal_strength; 184 ops->read_signal_strength = fdtv_read_signal_strength;
@@ -179,7 +192,6 @@ void fdtv_frontend_init(struct firedtv *fdtv)
179 192
180 switch (fdtv->type) { 193 switch (fdtv->type) {
181 case FIREDTV_DVB_S: 194 case FIREDTV_DVB_S:
182 case FIREDTV_DVB_S2:
183 fi->type = FE_QPSK; 195 fi->type = FE_QPSK;
184 196
185 fi->frequency_min = 950000; 197 fi->frequency_min = 950000;
@@ -188,7 +200,7 @@ void fdtv_frontend_init(struct firedtv *fdtv)
188 fi->symbol_rate_min = 1000000; 200 fi->symbol_rate_min = 1000000;
189 fi->symbol_rate_max = 40000000; 201 fi->symbol_rate_max = 40000000;
190 202
191 fi->caps = FE_CAN_INVERSION_AUTO | 203 fi->caps = FE_CAN_INVERSION_AUTO |
192 FE_CAN_FEC_1_2 | 204 FE_CAN_FEC_1_2 |
193 FE_CAN_FEC_2_3 | 205 FE_CAN_FEC_2_3 |
194 FE_CAN_FEC_3_4 | 206 FE_CAN_FEC_3_4 |
@@ -198,6 +210,26 @@ void fdtv_frontend_init(struct firedtv *fdtv)
198 FE_CAN_QPSK; 210 FE_CAN_QPSK;
199 break; 211 break;
200 212
213 case FIREDTV_DVB_S2:
214 fi->type = FE_QPSK;
215
216 fi->frequency_min = 950000;
217 fi->frequency_max = 2150000;
218 fi->frequency_stepsize = 125;
219 fi->symbol_rate_min = 1000000;
220 fi->symbol_rate_max = 40000000;
221
222 fi->caps = FE_CAN_INVERSION_AUTO |
223 FE_CAN_FEC_1_2 |
224 FE_CAN_FEC_2_3 |
225 FE_CAN_FEC_3_4 |
226 FE_CAN_FEC_5_6 |
227 FE_CAN_FEC_7_8 |
228 FE_CAN_FEC_AUTO |
229 FE_CAN_QPSK |
230 FE_CAN_2G_MODULATION;
231 break;
232
201 case FIREDTV_DVB_C: 233 case FIREDTV_DVB_C:
202 fi->type = FE_QAM; 234 fi->type = FE_QAM;
203 235