Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 96b43136 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] drx-j: Allow standard selection



ClearQAM is currently not working. Add support for it too.
Unlikely other ATSC tuners, though, this device will not
auto-detect between ATSC and ClearQAM. So, the delivery
system should be properly set.

Also, this frontend seems to also support DVB-C annex A/C. Add
experimental support for them.

Acked-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent aafdbaa6
Loading
Loading
Loading
Loading
+27 −2
Original line number Diff line number Diff line
@@ -188,7 +188,8 @@ static int drx39xxj_set_frontend(struct dvb_frontend *fe)
	struct drx_channel channel;
	int result;
	struct drxuio_data uio_data;
	struct drx_channel def_channel = { /* frequency      */ 0,
	static const struct drx_channel def_channel = {
		/* frequency      */ 0,
		/* bandwidth      */ DRX_BANDWIDTH_6MHZ,
		/* mirror         */ DRX_MIRROR_NO,
		/* constellation  */ DRX_CONSTELLATION_AUTO,
@@ -204,6 +205,7 @@ static int drx39xxj_set_frontend(struct dvb_frontend *fe)
		/* carrier        */ DRX_CARRIER_UNKNOWN,
		/* frame mode     */ DRX_FRAMEMODE_UNKNOWN
	};
	u32 constellation = DRX_CONSTELLATION_AUTO;

	/* Bring the demod out of sleep */
	drx39xxj_set_powerstate(fe, 1);
@@ -217,6 +219,29 @@ static int drx39xxj_set_frontend(struct dvb_frontend *fe)
			fe->ops.i2c_gate_ctrl(fe, 0);
	}

	switch (p->delivery_system) {
	case SYS_ATSC:
		standard = DRX_STANDARD_8VSB;
		break;
	case SYS_DVBC_ANNEX_B:
		standard = DRX_STANDARD_ITU_B;

		switch (p->modulation) {
		case QAM_64:
			constellation = DRX_CONSTELLATION_QAM64;
			break;
		case QAM_256:
			constellation = DRX_CONSTELLATION_QAM256;
			break;
		default:
			constellation = DRX_CONSTELLATION_AUTO;
			break;
		}
		break;
	default:
		return -EINVAL;
	}

	if (standard != state->current_standard || state->powered_up == 0) {
		/* Set the standard (will be powered up if necessary */
		result = drx_ctrl(demod, DRX_CTRL_SET_STANDARD, &standard);
@@ -233,7 +258,7 @@ static int drx39xxj_set_frontend(struct dvb_frontend *fe)
	channel = def_channel;
	channel.frequency = p->frequency / 1000;
	channel.bandwidth = DRX_BANDWIDTH_6MHZ;
	channel.constellation = DRX_CONSTELLATION_AUTO;
	channel.constellation = constellation;

	/* program channel */
	result = drx_ctrl(demod, DRX_CTRL_SET_CHANNEL, &channel);