Re: bisected regression in tuner-xc2028 on DVICO dual digital 4

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Nov 4, 2009 at 10:00 PM, Robert Lowery <rglowery@xxxxxxxxxxxxxx> wrote:
> Hi,
>
> I have been having some difficulties getting my DVICO dual digital 4
> (rev1) working with recent kernels, failing to tune and getting errors
> like the following
>
> kernel: [ 315.032076] dvb-usb: bulk message failed: -110 (4/0)
> kernel: [ 315.032080] cxusb: i2c read failed
>
> and making the machine very slow as documented at
> https://bugs.launchpad.net/ubuntu/+source/linux-meta/+bug/459523
>
> Using the v4l-dvb tree, I was able to bisect the issue down to
> http://linuxtv.org/hg/v4l-dvb/rev/7276a5854219
>
> At first I though I could workaround the issue by setting no_poweroff=1,
> but that did not work.  The following diff did however resolve the issue.
>
> diff -r 43878f8dbfb0 linux/drivers/media/common/tuners/tuner-xc2028.c
> --- a/linux/drivers/media/common/tuners/tuner-xc2028.c        Sun Nov 01
> 07:17:46
> 2009 -0200
> +++ b/linux/drivers/media/common/tuners/tuner-xc2028.c        Tue Nov 03
> 14:24:05
> 2009 +1100
> @@ -1240,7 +1240,7 @@
>         .get_frequency     = xc2028_get_frequency,
>         .get_rf_strength   = xc2028_signal,
>         .set_params        = xc2028_set_params,
> -        .sleep             = xc2028_sleep,
> +        //.sleep             = xc2028_sleep,
>  #if 0
>         int (*get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
>         int (*get_status)(struct dvb_frontend *fe, u32 *status);
>
> This led me to dvb_frontend.c where I could see i2c_gate_ctrl() was being
> called if .sleep was non zero.  Setting dvb_powerdown_on_sleep=0 worked
> around the issue by stoppign i2c_gate_ctrl() being called, so I suspect
> i2c_gate_ctrl() is triggering the issue somehow.
>
> Any thoughts on a proper solution for this issue?
>
> -Rob

Hello Rob,

The problem is not actually the i2c_gate_ctrl().  It's the fact that
the xc3028 is being put to sleep but cannot be woken up.

The GPIOs are probably setup for this card improperly in the board
profile.  This will result in the xc3028 being put to sleep, but then
it cannot be woken up because the wrong GPIO is being pulled low to
reset the chip in the xc3028 reset callback.

Yet another case where blindly enabling the power management on the
xc3028 by default was a really crappy idea.

You can either track down the which GPIO is actually connected to the
xc3028 reset pin for your board, or disable the xc3028 power
management by setting the disable_power_mgmt field in the xc3028
config when the call is made to xc2028_set_config for your card.

Devin

-- 
Devin J. Heitmueller - Kernel Labs
http://www.kernellabs.com
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux