si2157: Fix DVB-C bandwidth.

Message ID 1406027388-10336-1-git-send-email-ljalvs@gmail.com (mailing list archive)
State Rejected, archived
Delegated to: Michael Krufky
Headers

Commit Message

Luis Alves July 22, 2014, 11:09 a.m. UTC
  This patch fixes DVB-C reception.
Without setting the bandwidth to 8MHz the received stream gets corrupted.

Regards,
Luis

Signed-off-by: Luis Alves <ljalvs@gmail.com>
---
 drivers/media/tuners/si2157.c | 1 +
 1 file changed, 1 insertion(+)
  

Comments

Matthias Schwarzott July 22, 2014, 3:59 p.m. UTC | #1
On 22.07.2014 13:09, Luis Alves wrote:
> This patch fixes DVB-C reception.
> Without setting the bandwidth to 8MHz the received stream gets corrupted.


Hi Luis,
I also wonder if some code should default to bandwidth of 8MHz if none
is set.

But then I grepped for it and found code in
drivers/media/dvb-core/dvb_frontend.c to calculate the bandwidth
depending on delivery system and symbol rate.
So if this works, the bandwidth should already be correct.

Regards
Matthias

--
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
  
Mauro Carvalho Chehab July 22, 2014, 4:10 p.m. UTC | #2
Em Tue, 22 Jul 2014 12:09:48 +0100
Luis Alves <ljalvs@gmail.com> escreveu:

> This patch fixes DVB-C reception.
> Without setting the bandwidth to 8MHz the received stream gets corrupted.
> 
> Regards,
> Luis
> 
> Signed-off-by: Luis Alves <ljalvs@gmail.com>
> ---
>  drivers/media/tuners/si2157.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
> index 6c53edb..e2de428 100644
> --- a/drivers/media/tuners/si2157.c
> +++ b/drivers/media/tuners/si2157.c
> @@ -245,6 +245,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
>  			break;
>  	case SYS_DVBC_ANNEX_A:
>  			delivery_system = 0x30;
> +			bandwidth = 0x08;

Hmm... this patch looks wrong, as it will break DVB-C support where
the bandwidth is lower than 6MHz.

The DVB core sets c->bandwidth_hz for DVB-C based on the rolloff and
the symbol rate. If this is not working for you, then something else
is likely wrong.

I suggest you to add a printk() there to show what's the value set
at c->bandwidth_hz and what's the symbol rate that you're using.

On DVB-C, the rolloff is fixed (1.15 for annex A and 1.13 for Annex C).
Not sure if DVB-C2 allows selecting a different rolloff factor, nor
if si2157 works with DVB-C2.

>  			break;
>  	default:
>  			ret = -EINVAL;
--
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
  
Luis Alves July 22, 2014, 4:28 p.m. UTC | #3
That's right,
A few days ago I also checked that with Antti. I've also had made some
debugging and DVB core is in fact passing the correct bandwidth to the
driver.

But the true is that it doesn't work...
The sample I have is a dvb-c mux using QAM128 @ 6 Mbaud (which results
in 7MHz bw) using 7MHz filter value will make the TS stream
unwatchable (lots of continuity errors).

Can this be a hardware fault?
All closed source drivers I've seen are hardcoding this value to 8MHz
when working in dvb-c (easily seen on i2c sniffs).


On Tue, Jul 22, 2014 at 5:10 PM, Mauro Carvalho Chehab
<m.chehab@samsung.com> wrote:
> Em Tue, 22 Jul 2014 12:09:48 +0100
> Luis Alves <ljalvs@gmail.com> escreveu:
>
>> This patch fixes DVB-C reception.
>> Without setting the bandwidth to 8MHz the received stream gets corrupted.
>>
>> Regards,
>> Luis
>>
>> Signed-off-by: Luis Alves <ljalvs@gmail.com>
>> ---
>>  drivers/media/tuners/si2157.c | 1 +
>>  1 file changed, 1 insertion(+)
>>
>> diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
>> index 6c53edb..e2de428 100644
>> --- a/drivers/media/tuners/si2157.c
>> +++ b/drivers/media/tuners/si2157.c
>> @@ -245,6 +245,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
>>                       break;
>>       case SYS_DVBC_ANNEX_A:
>>                       delivery_system = 0x30;
>> +                     bandwidth = 0x08;
>
> Hmm... this patch looks wrong, as it will break DVB-C support where
> the bandwidth is lower than 6MHz.
>
> The DVB core sets c->bandwidth_hz for DVB-C based on the rolloff and
> the symbol rate. If this is not working for you, then something else
> is likely wrong.
>
> I suggest you to add a printk() there to show what's the value set
> at c->bandwidth_hz and what's the symbol rate that you're using.
>
> On DVB-C, the rolloff is fixed (1.15 for annex A and 1.13 for Annex C).
> Not sure if DVB-C2 allows selecting a different rolloff factor, nor
> if si2157 works with DVB-C2.
>
>>                       break;
>>       default:
>>                       ret = -EINVAL;
--
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
  
Mauro Carvalho Chehab July 22, 2014, 5:03 p.m. UTC | #4
Em Tue, 22 Jul 2014 17:28:07 +0100
Luis Alves <ljalvs@gmail.com> escreveu:

> That's right,
> A few days ago I also checked that with Antti. I've also had made some
> debugging and DVB core is in fact passing the correct bandwidth to the
> driver.
> 
> But the true is that it doesn't work...
> The sample I have is a dvb-c mux using QAM128 @ 6 Mbaud (which results
> in 7MHz bw) using 7MHz filter value will make the TS stream
> unwatchable (lots of continuity errors).
> 
> Can this be a hardware fault?
> All closed source drivers I've seen are hardcoding this value to 8MHz
> when working in dvb-c (easily seen on i2c sniffs).

Could be. Well, here, the DVB-C channel operators use 6MHz-spaced channels,
with symbol rate equal to 5,217 Kbaud. I'll see if I can test it latter
this week with a PCTV 292e.

Regards,
Mauro
> 
> 
> On Tue, Jul 22, 2014 at 5:10 PM, Mauro Carvalho Chehab
> <m.chehab@samsung.com> wrote:
> > Em Tue, 22 Jul 2014 12:09:48 +0100
> > Luis Alves <ljalvs@gmail.com> escreveu:
> >
> >> This patch fixes DVB-C reception.
> >> Without setting the bandwidth to 8MHz the received stream gets corrupted.
> >>
> >> Regards,
> >> Luis
> >>
> >> Signed-off-by: Luis Alves <ljalvs@gmail.com>
> >> ---
> >>  drivers/media/tuners/si2157.c | 1 +
> >>  1 file changed, 1 insertion(+)
> >>
> >> diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
> >> index 6c53edb..e2de428 100644
> >> --- a/drivers/media/tuners/si2157.c
> >> +++ b/drivers/media/tuners/si2157.c
> >> @@ -245,6 +245,7 @@ static int si2157_set_params(struct dvb_frontend *fe)
> >>                       break;
> >>       case SYS_DVBC_ANNEX_A:
> >>                       delivery_system = 0x30;
> >> +                     bandwidth = 0x08;
> >
> > Hmm... this patch looks wrong, as it will break DVB-C support where
> > the bandwidth is lower than 6MHz.
> >
> > The DVB core sets c->bandwidth_hz for DVB-C based on the rolloff and
> > the symbol rate. If this is not working for you, then something else
> > is likely wrong.
> >
> > I suggest you to add a printk() there to show what's the value set
> > at c->bandwidth_hz and what's the symbol rate that you're using.
> >
> > On DVB-C, the rolloff is fixed (1.15 for annex A and 1.13 for Annex C).
> > Not sure if DVB-C2 allows selecting a different rolloff factor, nor
> > if si2157 works with DVB-C2.
> >
> >>                       break;
> >>       default:
> >>                       ret = -EINVAL;
--
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
  
Antti Palosaari July 22, 2014, 7:12 p.m. UTC | #5
On 07/22/2014 08:03 PM, Mauro Carvalho Chehab wrote:
> Em Tue, 22 Jul 2014 17:28:07 +0100
> Luis Alves <ljalvs@gmail.com> escreveu:
>
>> That's right,
>> A few days ago I also checked that with Antti. I've also had made some
>> debugging and DVB core is in fact passing the correct bandwidth to the
>> driver.
>>
>> But the true is that it doesn't work...
>> The sample I have is a dvb-c mux using QAM128 @ 6 Mbaud (which results
>> in 7MHz bw) using 7MHz filter value will make the TS stream
>> unwatchable (lots of continuity errors).
>>
>> Can this be a hardware fault?
>> All closed source drivers I've seen are hardcoding this value to 8MHz
>> when working in dvb-c (easily seen on i2c sniffs).
>
> Could be. Well, here, the DVB-C channel operators use 6MHz-spaced channels,
> with symbol rate equal to 5,217 Kbaud. I'll see if I can test it latter
> this week with a PCTV 292e.

I could also test it against modulator. However, that patch seems to be 
wrong for my eyes too. Generally speaking RF tuner needs to know 
bandwidth to adjust filters on signal path. For narrow suitable is 
filter, the better will be signal. If you have 7MHz filter then you 
definitely want use it in a case your carrier fits that space. Larger 
filter will work, but CNR is worse. If filter is too narrow and cuts 
your carrier, you are not able to receive mux or at lest performance 
drop notably.

What is you channel raster? Could you tell center frequencies of all 
your DVB-C muxes? Could you test with 7MHz bw, but adjust center 
frequency off from nominal ~0-500kHz to see if it helps.

regards
Antti
  

Patch

diff --git a/drivers/media/tuners/si2157.c b/drivers/media/tuners/si2157.c
index 6c53edb..e2de428 100644
--- a/drivers/media/tuners/si2157.c
+++ b/drivers/media/tuners/si2157.c
@@ -245,6 +245,7 @@  static int si2157_set_params(struct dvb_frontend *fe)
 			break;
 	case SYS_DVBC_ANNEX_A:
 			delivery_system = 0x30;
+			bandwidth = 0x08;
 			break;
 	default:
 			ret = -EINVAL;