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.

Signed-off-by: Mauro Carvalho Chehab <m.che...@samsung.com>
---
 drivers/media/dvb-frontends/drx39xyj/drx39xxj.c | 29 +++++++++++++++++++++++--
 1 file changed, 27 insertions(+), 2 deletions(-)

diff --git a/drivers/media/dvb-frontends/drx39xyj/drx39xxj.c 
b/drivers/media/dvb-frontends/drx39xyj/drx39xxj.c
index f0f14ed95958..7a7a4a87fe25 100644
--- a/drivers/media/dvb-frontends/drx39xyj/drx39xxj.c
+++ b/drivers/media/dvb-frontends/drx39xyj/drx39xxj.c
@@ -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);
-- 
1.8.5.3

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to