[media] ds3000: lock led procedure added
authorIgor M. Liplianin <liplianin@me.by>
Fri, 28 Dec 2012 22:40:24 +0000 (19:40 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 28 Dec 2012 23:30:29 +0000 (21:30 -0200)
TeVii s660 and others have LED for lock indication.
Let's use it in right order.

Signed-off-by: Igor M. Liplianin <liplianin@me.by>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/dvb-frontends/ds3000.c
drivers/media/dvb-frontends/ds3000.h
drivers/media/usb/dvb-usb/dw2102.c

index fded9b67456c83a2677df612b49d2e60c00134e4..d128f85844e7e19e2ed884acf6d39ad0a2d9b27a 100644 (file)
@@ -460,6 +460,9 @@ static int ds3000_read_status(struct dvb_frontend *fe, fe_status_t* status)
                return 1;
        }
 
+       if (state->config->set_lock_led)
+               state->config->set_lock_led(fe, *status == 0 ? 0 : 1);
+
        dprintk("%s: status = 0x%02x\n", __func__, lock);
 
        return 0;
@@ -809,6 +812,10 @@ static int ds3000_diseqc_send_burst(struct dvb_frontend *fe,
 static void ds3000_release(struct dvb_frontend *fe)
 {
        struct ds3000_state *state = fe->demodulator_priv;
+
+       if (state->config->set_lock_led)
+               state->config->set_lock_led(fe, 0);
+
        dprintk("%s\n", __func__);
        kfree(state);
 }
@@ -1037,6 +1044,11 @@ static int ds3000_tune(struct dvb_frontend *fe,
 
 static enum dvbfe_algo ds3000_get_algo(struct dvb_frontend *fe)
 {
+       struct ds3000_state *state = fe->demodulator_priv;
+
+       if (state->config->set_lock_led)
+               state->config->set_lock_led(fe, 0);
+
        dprintk("%s()\n", __func__);
        return DVBFE_ALGO_HW;
 }
index 67eeaf9bdbce68c8a1706d72086fe49549455c20..478ad66c63d72d9df908306f893734d510c59ee8 100644 (file)
@@ -30,6 +30,8 @@ struct ds3000_config {
        u8 ci_mode;
        /* Set device param to start dma */
        int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured);
+       /* Hook for Lock LED */
+       void (*set_lock_led)(struct dvb_frontend *fe, int offon);
 };
 
 #if defined(CONFIG_DVB_DS3000) || \
index 5ae3529f81ad8a3b219c55199c449d83be60e8b0..d8a5ebb436260d845905a69480a0fe2056184f7d 100644 (file)
@@ -955,6 +955,11 @@ static struct ts2020_config dw2104_ts2020_config  = {
        .tuner_address = 0x60,
 };
 
+static struct ds3000_config s660_ds3000_config = {
+       .demod_address = 0x68,
+       .set_lock_led = dw210x_led_ctrl,
+};
+
 static struct stv0900_config dw2104a_stv0900_config = {
        .demod_address = 0x6a,
        .demod_mode = 0,
@@ -1200,7 +1205,7 @@ static int ds3000_frontend_attach(struct dvb_usb_adapter *d)
        struct s6x0_state *st = (struct s6x0_state *)d->dev->priv;
        u8 obuf[] = {7, 1};
 
-       d->fe_adap[0].fe = dvb_attach(ds3000_attach, &dw2104_ds3000_config,
+       d->fe_adap[0].fe = dvb_attach(ds3000_attach, &s660_ds3000_config,
                        &d->dev->i2c_adap);
 
        if (d->fe_adap[0].fe == NULL)