lkml.org 
[lkml]   [2010]   [Oct]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: DVB: af9015 defunct [was: mmotm 2010-10-20-15-01 uploaded]
    Em 22-10-2010 07:21, Jiri Slaby escreveu:
    > On 10/21/2010 07:51 PM, Jiri Slaby wrote:
    >> On 10/21/2010 12:01 AM, akpm@linux-foundation.org wrote:
    >>> The mm-of-the-moment snapshot 2010-10-20-15-01 has been uploaded to
    >>
    >> Well, this release happens to be a multimedia failure :(.
    >>
    >> I hit another regression against mmotm 2010-10-13-17-13, where
    >> 0413:6029 (DVB USB tuner) can't be inited when plugged in. Even lsusb
    >> waits inifitely.
    >
    > Revert of this commit helps:


    Ah, the problem is here (drivers/media/dvb/dvb-usb/af9015.c):

    static struct tda18271_config af9015_tda18271_config = {
    .gate = TDA18271_GATE_DIGITAL,
    .small_i2c = 1,
    };

    small_i2c is an enum, currently defined as:

    enum tda18271_small_i2c {
    TDA18271_39_BYTE_CHUNK_INIT = 0,
    TDA18271_16_BYTE_CHUNK_INIT = 16,
    TDA18271_08_BYTE_CHUNK_INIT = 8,
    TDA18271_03_BYTE_CHUNK_INIT = 3,
    };

    The value is just a magic number, but having it associated with the max
    I2C size makes more sense than a random value.

    The value, before the patch was:

    enum tda18271_small_i2c {
    TDA18271_39_BYTE_CHUNK_INIT = 0,
    TDA18271_16_BYTE_CHUNK_INIT = 1,
    TDA18271_08_BYTE_CHUNK_INIT = 2,
    };

    So, it seems that the max I2C size for af9015 is 16 bytes. The proper init
    should be:

    .small_i2c = TDA18271_16_BYTE_CHUNK_INIT;

    Please check if the enclosed patch fixes the issue.

    Thanks,
    Mauro

    ---

    [media] af9015: Properly initialize tda18271.small_i2c

    As reported by Jiri, a regression at mm series is happening on af9015:

    tda18271 18-00c0: creating new instance
    TDA18271HD/C2 detected @ 18-00c0
    af9015: command failed:1
    tda18271_write_regs: [18-00c0|M] ERROR: idx = 0x0, len = 39,
    i2c_transfer returned: -1
    af9015: command failed:1

    The cause is that tda18271.small_i2c is an enum. Drivers should use the value
    alias, instead of its number, as the "magic" number may change anytime.

    Reported-by: Jiri Slaby <jirislaby@gmail.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

    diff --git a/drivers/media/dvb/dvb-usb/af9015.c b/drivers/media/dvb/dvb-usb/af9015.c
    index 759cbf8..f5e4066 100644
    --- a/drivers/media/dvb/dvb-usb/af9015.c
    +++ b/drivers/media/dvb/dvb-usb/af9015.c
    @@ -1144,7 +1144,7 @@ static struct qt1010_config af9015_qt1010_config = {

    static struct tda18271_config af9015_tda18271_config = {
    .gate = TDA18271_GATE_DIGITAL,
    - .small_i2c = 1,
    + .small_i2c = TDA18271_16_BYTE_CHUNK_INIT;,
    };

    static struct mxl5005s_config af9015_mxl5003_config = {

    \
     
     \ /
      Last update: 2010-10-22 15:59    [W:0.025 / U:32.180 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site