[lkml]   [2011]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectAW: [PATCH v7 0/5] AT91: replace broken TWI driver i2c-at91.c

    I've tested this driver with the pca953x GPIO expander driver with a PCA9554.

    In the case of 8 GPIO pins (my case) "i2c_smbus_read_byte_data(...)"
    is called to read the registers of the GPIO expander. This results in a at91_twi_xfer with two messages. The first message is to put the register address into the IADR and the second is to read the one byte content of the register.

    At the end we have a one byte read with a repeated start condition.

    I observed that reading out the GPIO status is one read delayed.
    The first read to a register from the pca953x driver does not result in a RXRDY interrupt and at91_twi_read_next_byte(...) is not called.
    Only the completion routine is triggered with a TXCOMP interrupt.

    Additionally, I took a look at the status flags just after the control flags are set (in at91_do_twi_transfer(...), AT91_TWI_START|AT91_TWI_STOP for the one byte read). Surprisingly, the AT91_TWI_RXRDY flag is zero before the first register read and one for the following reads. According to the manual this flag should be zero after a read on AT91_TWI_RHR.

    Reading the AT91_TWI_RHR before the control flags are set to be sure that the AT91_TWI_RXRDY is cleared leads to a never occurring RXRDY interrupt.

    This looks very strange to me. Can anyone help?

    Mit freundlichen Grüßen / Best regards
    Carsten Behling

    Development Engineer
    Garz & Fricke GmbH
    Tempowerkring 2, 21079 Hamburg - Germany
    Amtsgericht Hamburg HRB 60514
    Geschäftsführer: Manfred Garz, Matthias Fricke
    Phone: +49 (0) 40 791 899 - 56
    Fax: +49 40 / 791 899 - 39

    -----Ursprüngliche Nachricht-----
    Von: Hubert Feurstein []
    Gesendet: Freitag, 25. November 2011 16:42
    An: Nikolaus Voss
    Cc:;;;; Carsten Behling
    Betreff: Re: [PATCH v7 0/5] AT91: replace broken TWI driver i2c-at91.c


    I've tested this driver on a 2.6.38 kernel with several i2c clients
    (temp-sensor, audio-codec, touchscreen-controller, w1-bridge,
    io-expanders) and works without problems. SoC: at91sam9g45

    Because of the 2.6.38 kernel, I had to skip "[PATCH v7 2/5] Replace
    clk_lookup.con_id with clk_lookup.dev_id entries for twi clk" and used
    instead: at91_clock_associate("twi0_clk", &,

    Best Regards

    On 2011-11-23 16:35, Nikolaus Voss wrote:
    > The old driver has two main deficencies:
    > i) No repeated start (Sr) condiction is possible, this makes it unusable
    > e.g. for most SMBus transfers.
    > ii) I/O was done with polling/busy waiting what caused over-/underruns
    > even at light system loads and clock speeds.
    > The new driver overcomes these deficencies and in addition allows for
    > more than one TWI interface.

    Tested-by: Hubert Feurstein <>
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2011-12-28 14:39    [W:6.532 / U:0.292 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site