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

Commit 48763e2c authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] drxk: Switch the delivery system on FE_SET_PROPERTY



The DRX-K doesn't change the delivery system at set_properties,
but do it at frontend init. This causes problems on programs like
w_scan that, by default, opens both frontends.

Instead, explicitly set the format when set_parameters callback is
called.

Tested-by: default avatarEddi De Pieri <eddi@depieri.net>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 0433cd28
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -1847,6 +1847,7 @@ static int SetOperationMode(struct drxk_state *state,
		*/
	switch (oMode) {
	case OM_DVBT:
		dprintk(1, ": DVB-T\n");
		state->m_OperationMode = oMode;
		status = SetDVBTStandard(state, oMode);
		if (status < 0)
@@ -1854,6 +1855,8 @@ static int SetOperationMode(struct drxk_state *state,
		break;
	case OM_QAM_ITU_A:	/* fallthrough */
	case OM_QAM_ITU_C:
		dprintk(1, ": DVB-C Annex %c\n",
			(state->m_OperationMode == OM_QAM_ITU_A) ? 'A' : 'C');
		state->m_OperationMode = oMode;
		status = SetQAMStandard(state, oMode);
		if (status < 0)
@@ -6183,6 +6186,9 @@ static int drxk_c_init(struct dvb_frontend *fe)
	dprintk(1, "\n");
	if (mutex_trylock(&state->ctlock) == 0)
		return -EBUSY;
	if (state->m_itut_annex_c)
		SetOperationMode(state, OM_QAM_ITU_C);
	else
		SetOperationMode(state, OM_QAM_ITU_A);
	return 0;
}
@@ -6219,12 +6225,11 @@ static int drxk_set_parameters(struct dvb_frontend *fe,
		return -EINVAL;
	}

	if (state->m_OperationMode == OM_QAM_ITU_A ||
	    state->m_OperationMode == OM_QAM_ITU_C) {
	if (fe->ops.info.type == FE_QAM) {
		if (fe->dtv_property_cache.rolloff == ROLLOFF_13)
			state->m_OperationMode = OM_QAM_ITU_C;
			state->m_itut_annex_c = true;
		else
			state->m_OperationMode = OM_QAM_ITU_A;
			state->m_itut_annex_c = false;
	}

	if (fe->ops.i2c_gate_ctrl)
+2 −0
Original line number Diff line number Diff line
@@ -263,6 +263,8 @@ struct drxk_state {
	u8     m_TSDataStrength;
	u8     m_TSClockkStrength;

	bool   m_itut_annex_c;      /* If true, uses ITU-T DVB-C Annex C, instead of Annex A */

	enum DRXMPEGStrWidth_t  m_widthSTR;    /**< MPEG start width */
	u32    m_mpegTsStaticBitrate;          /**< Maximum bitrate in b/s in case
						    static clockrate is selected */
+4 −0
Original line number Diff line number Diff line
@@ -899,6 +899,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
		       &dvb->fe[0]->ops.tuner_ops,
		       sizeof(dvb->fe[0]->ops.tuner_ops));

		mfe_shared = 1;

		break;
	}
	case EM2884_BOARD_TERRATEC_H5:
@@ -935,6 +937,8 @@ static int em28xx_dvb_init(struct em28xx *dev)
		       &dvb->fe[0]->ops.tuner_ops,
		       sizeof(dvb->fe[0]->ops.tuner_ops));

		mfe_shared = 1;

		break;
	case EM28174_BOARD_PCTV_460E:
		/* attach demod */