Commit d2fd44a3 authored by Tommy Jonsson's avatar Tommy Jonsson Committed by Mauro Carvalho Chehab
Browse files

[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: default avatarTommy Jonsson <quazzie2@gmail.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> (trivial simplification)
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent b4d752b3
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@
#include <linux/wait.h>
#include <linux/workqueue.h>

#include <dvb_frontend.h>

#include "firedtv.h"

#define FCP_COMMAND_REGISTER		0xfffff0000b00ULL
@@ -368,10 +370,30 @@ static int avc_tuner_tuneqpsk(struct firedtv *fdtv,
		c->operand[12] = 0;

	if (fdtv->type == FIREDTV_DVB_S2) {
		c->operand[13] = 0x1;
		c->operand[14] = 0xff;
		c->operand[15] = 0xff;

		if (fdtv->fe.dtv_property_cache.delivery_system == SYS_DVBS2) {
			switch (fdtv->fe.dtv_property_cache.modulation) {
			case QAM_16:		c->operand[13] = 0x1; break;
			case QPSK:		c->operand[13] = 0x2; break;
			case PSK_8:		c->operand[13] = 0x3; break;
			default:		c->operand[13] = 0x2; break;
			}
			switch (fdtv->fe.dtv_property_cache.rolloff) {
			case ROLLOFF_AUTO:	c->operand[14] = 0x2; break;
			case ROLLOFF_35:	c->operand[14] = 0x2; break;
			case ROLLOFF_20:	c->operand[14] = 0x0; break;
			case ROLLOFF_25:	c->operand[14] = 0x1; break;
			/* case ROLLOFF_NONE:	c->operand[14] = 0xff; break; */
			}
			switch (fdtv->fe.dtv_property_cache.pilot) {
			case PILOT_AUTO:	c->operand[15] = 0x0; break;
			case PILOT_OFF:		c->operand[15] = 0x0; break;
			case PILOT_ON:		c->operand[15] = 0x1; break;
			}
		} else {
			c->operand[13] = 0x1;  /* auto modulation */
			c->operand[14] = 0xff; /* disable rolloff */
			c->operand[15] = 0xff; /* disable pilot */
		}
		return 16;
	} else {
		return 13;
+34 −2
Original line number Diff line number Diff line
@@ -155,6 +155,16 @@ static int fdtv_get_frontend(struct dvb_frontend *fe,
	return -EOPNOTSUPP;
}

static int fdtv_get_property(struct dvb_frontend *fe, struct dtv_property *tvp)
{
	return 0;
}

static int fdtv_set_property(struct dvb_frontend *fe, struct dtv_property *tvp)
{
	return 0;
}

void fdtv_frontend_init(struct firedtv *fdtv)
{
	struct dvb_frontend_ops *ops = &fdtv->fe.ops;
@@ -166,6 +176,9 @@ void fdtv_frontend_init(struct firedtv *fdtv)
	ops->set_frontend		= fdtv_set_frontend;
	ops->get_frontend		= fdtv_get_frontend;

	ops->get_property		= fdtv_get_property;
	ops->set_property		= fdtv_set_property;

	ops->read_status		= fdtv_read_status;
	ops->read_ber			= fdtv_read_ber;
	ops->read_signal_strength	= fdtv_read_signal_strength;
@@ -179,7 +192,6 @@ void fdtv_frontend_init(struct firedtv *fdtv)

	switch (fdtv->type) {
	case FIREDTV_DVB_S:
	case FIREDTV_DVB_S2:
		fi->type		= FE_QPSK;

		fi->frequency_min	= 950000;
@@ -198,6 +210,26 @@ void fdtv_frontend_init(struct firedtv *fdtv)
					  FE_CAN_QPSK;
		break;

	case FIREDTV_DVB_S2:
		fi->type		= FE_QPSK;

		fi->frequency_min	= 950000;
		fi->frequency_max	= 2150000;
		fi->frequency_stepsize	= 125;
		fi->symbol_rate_min	= 1000000;
		fi->symbol_rate_max	= 40000000;

		fi->caps		= FE_CAN_INVERSION_AUTO |
					  FE_CAN_FEC_1_2        |
					  FE_CAN_FEC_2_3        |
					  FE_CAN_FEC_3_4        |
					  FE_CAN_FEC_5_6        |
					  FE_CAN_FEC_7_8        |
					  FE_CAN_FEC_AUTO       |
					  FE_CAN_QPSK           |
					  FE_CAN_2G_MODULATION;
		break;

	case FIREDTV_DVB_C:
		fi->type		= FE_QAM;