Message ID | 1405183191-10432-1-git-send-email-m.chehab@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Mauro, you have forgot some debug hacks to that patch. Antti On 07/12/2014 07:39 PM, Mauro Carvalho Chehab wrote: > The driver was reporting an incorrect mode, when mode 2 > is selected. > > While testing it, noticed that neither mode 1 or guard > interval 1/32 is supported by this device. Document it, > and ensure that it will report _AUTO when it doesn't lock, > in order to not report a wrong detection to userspace. > > Cc: stable@vger.kernel.org > Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com> > --- > drivers/media/dvb-frontends/dib0090.c | 6 +++++- > drivers/media/dvb-frontends/mb86a20s.c | 9 +++++---- > drivers/media/usb/dvb-usb/dib0700_devices.c | 3 +++ > 3 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/media/dvb-frontends/dib0090.c b/drivers/media/dvb-frontends/dib0090.c > index 68e2af2650d3..27d5c5cd439c 100644 > --- a/drivers/media/dvb-frontends/dib0090.c > +++ b/drivers/media/dvb-frontends/dib0090.c > @@ -24,6 +24,8 @@ > * > */ > > +#define DEBUG_AGC > + > #include <linux/kernel.h> > #include <linux/slab.h> > #include <linux/i2c.h> > @@ -1199,11 +1201,13 @@ int dib0090_gain_control(struct dvb_frontend *fe) > state->rf_gain_limit = state->rf_ramp[0] << WBD_ALPHA; > state->current_gain = ((state->rf_ramp[0] + state->bb_ramp[0]) / 2) << GAIN_ALPHA; > > +dprintk("Current gain: %d\n", state->current_gain); > + > *tune_state = CT_AGC_STEP_0; > } else if (!state->agc_freeze) { > s16 wbd = 0, i, cnt; > > - int adc; > + int adc = 0; > wbd_val = dib0090_get_slow_adc_val(state); > > if (*tune_state == CT_AGC_STEP_0) > diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c > index 227a420f7069..b931179c70a4 100644 > --- a/drivers/media/dvb-frontends/mb86a20s.c > +++ b/drivers/media/dvb-frontends/mb86a20s.c > @@ -711,11 +711,10 @@ static int mb86a20s_get_frontend(struct dvb_frontend *fe) > rc = mb86a20s_readreg(state, 0x07); > if (rc < 0) > return rc; > + c->transmission_mode = TRANSMISSION_MODE_AUTO; > if ((rc & 0x60) == 0x20) { > - switch (rc & 0x0c >> 2) { > - case 0: > - c->transmission_mode = TRANSMISSION_MODE_2K; > - break; > + /* Only modes 2 and 3 are supported */ > + switch ((rc >> 2) & 0x03) { > case 1: > c->transmission_mode = TRANSMISSION_MODE_4K; > break; > @@ -724,7 +723,9 @@ static int mb86a20s_get_frontend(struct dvb_frontend *fe) > break; > } > } > + c->guard_interval = GUARD_INTERVAL_AUTO; > if (!(rc & 0x10)) { > + /* Guard interval 1/32 is not supported */ > switch (rc & 0x3) { > case 0: > c->guard_interval = GUARD_INTERVAL_1_4; > diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c > index 501947eaacfe..cad359fcd690 100644 > --- a/drivers/media/usb/dvb-usb/dib0700_devices.c > +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c > @@ -1645,6 +1645,8 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) > int ret = 0; > enum frontend_tune_state tune_state = CT_SHUTDOWN; > > +printk("%s called.\n", __func__); > + > switch (band) { > default: > deb_info("Warning : Rf frequency (%iHz) is not in the supported range, using VHF switch ", fe->dtv_property_cache.frequency); > @@ -1714,6 +1716,7 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) > } else { > /* for everything else than CBAND we are using standard AGC */ > deb_info("not tuning in CBAND - standard AGC startup\n"); > +printk("%s: calling dib0090_pwm_gain_reset\n", __func__); > dib0090_pwm_gain_reset(fe); > } > >
Em Sat, 12 Jul 2014 21:52:46 +0300 Antti Palosaari <crope@iki.fi> escreveu: > Mauro, you have forgot some debug hacks to that patch. Thanks for noticing. Actually, it got merged by mistake with a hack I'm using to debug another driver. Just sent a version 2 of this patch. Regards, Mauro > > Antti > > On 07/12/2014 07:39 PM, Mauro Carvalho Chehab wrote: > > The driver was reporting an incorrect mode, when mode 2 > > is selected. > > > > While testing it, noticed that neither mode 1 or guard > > interval 1/32 is supported by this device. Document it, > > and ensure that it will report _AUTO when it doesn't lock, > > in order to not report a wrong detection to userspace. > > > > Cc: stable@vger.kernel.org > > Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com> > > --- > > drivers/media/dvb-frontends/dib0090.c | 6 +++++- > > drivers/media/dvb-frontends/mb86a20s.c | 9 +++++---- > > drivers/media/usb/dvb-usb/dib0700_devices.c | 3 +++ > > 3 files changed, 13 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/media/dvb-frontends/dib0090.c b/drivers/media/dvb-frontends/dib0090.c > > index 68e2af2650d3..27d5c5cd439c 100644 > > --- a/drivers/media/dvb-frontends/dib0090.c > > +++ b/drivers/media/dvb-frontends/dib0090.c > > @@ -24,6 +24,8 @@ > > * > > */ > > > > +#define DEBUG_AGC > > + > > #include <linux/kernel.h> > > #include <linux/slab.h> > > #include <linux/i2c.h> > > @@ -1199,11 +1201,13 @@ int dib0090_gain_control(struct dvb_frontend *fe) > > state->rf_gain_limit = state->rf_ramp[0] << WBD_ALPHA; > > state->current_gain = ((state->rf_ramp[0] + state->bb_ramp[0]) / 2) << GAIN_ALPHA; > > > > +dprintk("Current gain: %d\n", state->current_gain); > > + > > *tune_state = CT_AGC_STEP_0; > > } else if (!state->agc_freeze) { > > s16 wbd = 0, i, cnt; > > > > - int adc; > > + int adc = 0; > > wbd_val = dib0090_get_slow_adc_val(state); > > > > if (*tune_state == CT_AGC_STEP_0) > > diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c > > index 227a420f7069..b931179c70a4 100644 > > --- a/drivers/media/dvb-frontends/mb86a20s.c > > +++ b/drivers/media/dvb-frontends/mb86a20s.c > > @@ -711,11 +711,10 @@ static int mb86a20s_get_frontend(struct dvb_frontend *fe) > > rc = mb86a20s_readreg(state, 0x07); > > if (rc < 0) > > return rc; > > + c->transmission_mode = TRANSMISSION_MODE_AUTO; > > if ((rc & 0x60) == 0x20) { > > - switch (rc & 0x0c >> 2) { > > - case 0: > > - c->transmission_mode = TRANSMISSION_MODE_2K; > > - break; > > + /* Only modes 2 and 3 are supported */ > > + switch ((rc >> 2) & 0x03) { > > case 1: > > c->transmission_mode = TRANSMISSION_MODE_4K; > > break; > > @@ -724,7 +723,9 @@ static int mb86a20s_get_frontend(struct dvb_frontend *fe) > > break; > > } > > } > > + c->guard_interval = GUARD_INTERVAL_AUTO; > > if (!(rc & 0x10)) { > > + /* Guard interval 1/32 is not supported */ > > switch (rc & 0x3) { > > case 0: > > c->guard_interval = GUARD_INTERVAL_1_4; > > diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c > > index 501947eaacfe..cad359fcd690 100644 > > --- a/drivers/media/usb/dvb-usb/dib0700_devices.c > > +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c > > @@ -1645,6 +1645,8 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) > > int ret = 0; > > enum frontend_tune_state tune_state = CT_SHUTDOWN; > > > > +printk("%s called.\n", __func__); > > + > > switch (band) { > > default: > > deb_info("Warning : Rf frequency (%iHz) is not in the supported range, using VHF switch ", fe->dtv_property_cache.frequency); > > @@ -1714,6 +1716,7 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) > > } else { > > /* for everything else than CBAND we are using standard AGC */ > > deb_info("not tuning in CBAND - standard AGC startup\n"); > > +printk("%s: calling dib0090_pwm_gain_reset\n", __func__); > > dib0090_pwm_gain_reset(fe); > > } > > > > > -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/media/dvb-frontends/dib0090.c b/drivers/media/dvb-frontends/dib0090.c index 68e2af2650d3..27d5c5cd439c 100644 --- a/drivers/media/dvb-frontends/dib0090.c +++ b/drivers/media/dvb-frontends/dib0090.c @@ -24,6 +24,8 @@ * */ +#define DEBUG_AGC + #include <linux/kernel.h> #include <linux/slab.h> #include <linux/i2c.h> @@ -1199,11 +1201,13 @@ int dib0090_gain_control(struct dvb_frontend *fe) state->rf_gain_limit = state->rf_ramp[0] << WBD_ALPHA; state->current_gain = ((state->rf_ramp[0] + state->bb_ramp[0]) / 2) << GAIN_ALPHA; +dprintk("Current gain: %d\n", state->current_gain); + *tune_state = CT_AGC_STEP_0; } else if (!state->agc_freeze) { s16 wbd = 0, i, cnt; - int adc; + int adc = 0; wbd_val = dib0090_get_slow_adc_val(state); if (*tune_state == CT_AGC_STEP_0) diff --git a/drivers/media/dvb-frontends/mb86a20s.c b/drivers/media/dvb-frontends/mb86a20s.c index 227a420f7069..b931179c70a4 100644 --- a/drivers/media/dvb-frontends/mb86a20s.c +++ b/drivers/media/dvb-frontends/mb86a20s.c @@ -711,11 +711,10 @@ static int mb86a20s_get_frontend(struct dvb_frontend *fe) rc = mb86a20s_readreg(state, 0x07); if (rc < 0) return rc; + c->transmission_mode = TRANSMISSION_MODE_AUTO; if ((rc & 0x60) == 0x20) { - switch (rc & 0x0c >> 2) { - case 0: - c->transmission_mode = TRANSMISSION_MODE_2K; - break; + /* Only modes 2 and 3 are supported */ + switch ((rc >> 2) & 0x03) { case 1: c->transmission_mode = TRANSMISSION_MODE_4K; break; @@ -724,7 +723,9 @@ static int mb86a20s_get_frontend(struct dvb_frontend *fe) break; } } + c->guard_interval = GUARD_INTERVAL_AUTO; if (!(rc & 0x10)) { + /* Guard interval 1/32 is not supported */ switch (rc & 0x3) { case 0: c->guard_interval = GUARD_INTERVAL_1_4; diff --git a/drivers/media/usb/dvb-usb/dib0700_devices.c b/drivers/media/usb/dvb-usb/dib0700_devices.c index 501947eaacfe..cad359fcd690 100644 --- a/drivers/media/usb/dvb-usb/dib0700_devices.c +++ b/drivers/media/usb/dvb-usb/dib0700_devices.c @@ -1645,6 +1645,8 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) int ret = 0; enum frontend_tune_state tune_state = CT_SHUTDOWN; +printk("%s called.\n", __func__); + switch (band) { default: deb_info("Warning : Rf frequency (%iHz) is not in the supported range, using VHF switch ", fe->dtv_property_cache.frequency); @@ -1714,6 +1716,7 @@ static int dib8096_set_param_override(struct dvb_frontend *fe) } else { /* for everything else than CBAND we are using standard AGC */ deb_info("not tuning in CBAND - standard AGC startup\n"); +printk("%s: calling dib0090_pwm_gain_reset\n", __func__); dib0090_pwm_gain_reset(fe); }
The driver was reporting an incorrect mode, when mode 2 is selected. While testing it, noticed that neither mode 1 or guard interval 1/32 is supported by this device. Document it, and ensure that it will report _AUTO when it doesn't lock, in order to not report a wrong detection to userspace. Cc: stable@vger.kernel.org Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com> --- drivers/media/dvb-frontends/dib0090.c | 6 +++++- drivers/media/dvb-frontends/mb86a20s.c | 9 +++++---- drivers/media/usb/dvb-usb/dib0700_devices.c | 3 +++ 3 files changed, 13 insertions(+), 5 deletions(-)