mirror of https://gitee.com/openkylin/linux.git
[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: Devin Heitmueller <dheitmueller@kernellabs.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
aafdbaa6cf
commit
96b43136b8
|
@ -188,7 +188,8 @@ static int drx39xxj_set_frontend(struct dvb_frontend *fe)
|
||||||
struct drx_channel channel;
|
struct drx_channel channel;
|
||||||
int result;
|
int result;
|
||||||
struct drxuio_data uio_data;
|
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,
|
/* bandwidth */ DRX_BANDWIDTH_6MHZ,
|
||||||
/* mirror */ DRX_MIRROR_NO,
|
/* mirror */ DRX_MIRROR_NO,
|
||||||
/* constellation */ DRX_CONSTELLATION_AUTO,
|
/* constellation */ DRX_CONSTELLATION_AUTO,
|
||||||
|
@ -204,6 +205,7 @@ static int drx39xxj_set_frontend(struct dvb_frontend *fe)
|
||||||
/* carrier */ DRX_CARRIER_UNKNOWN,
|
/* carrier */ DRX_CARRIER_UNKNOWN,
|
||||||
/* frame mode */ DRX_FRAMEMODE_UNKNOWN
|
/* frame mode */ DRX_FRAMEMODE_UNKNOWN
|
||||||
};
|
};
|
||||||
|
u32 constellation = DRX_CONSTELLATION_AUTO;
|
||||||
|
|
||||||
/* Bring the demod out of sleep */
|
/* Bring the demod out of sleep */
|
||||||
drx39xxj_set_powerstate(fe, 1);
|
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);
|
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) {
|
if (standard != state->current_standard || state->powered_up == 0) {
|
||||||
/* Set the standard (will be powered up if necessary */
|
/* Set the standard (will be powered up if necessary */
|
||||||
result = drx_ctrl(demod, DRX_CTRL_SET_STANDARD, &standard);
|
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 = def_channel;
|
||||||
channel.frequency = p->frequency / 1000;
|
channel.frequency = p->frequency / 1000;
|
||||||
channel.bandwidth = DRX_BANDWIDTH_6MHZ;
|
channel.bandwidth = DRX_BANDWIDTH_6MHZ;
|
||||||
channel.constellation = DRX_CONSTELLATION_AUTO;
|
channel.constellation = constellation;
|
||||||
|
|
||||||
/* program channel */
|
/* program channel */
|
||||||
result = drx_ctrl(demod, DRX_CTRL_SET_CHANNEL, &channel);
|
result = drx_ctrl(demod, DRX_CTRL_SET_CHANNEL, &channel);
|
||||||
|
|
Loading…
Reference in New Issue