lkml.org 
[lkml]   [2020]   [May]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.6 090/126] staging: iio: ad2s1210: Fix SPI reading
    Date
    From: Dragos Bogdan <dragos.bogdan@analog.com>

    commit 5e4f99a6b788047b0b8a7496c2e0c8f372f6edf2 upstream.

    If the serial interface is used, the 8-bit address should be latched using
    the rising edge of the WR/FSYNC signal.

    This basically means that a CS change is required between the first byte
    sent, and the second one.
    This change splits the single-transfer transfer of 2 bytes into 2 transfers
    with a single byte, and CS change in-between.

    Note fixes tag is not accurate, but reflects a point beyond which there
    are too many refactors to make backporting straight forward.

    Fixes: b19e9ad5e2cb ("staging:iio:resolver:ad2s1210 general driver cleanup.")
    Signed-off-by: Dragos Bogdan <dragos.bogdan@analog.com>
    Signed-off-by: Alexandru Ardelean <alexandru.ardelean@analog.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/staging/iio/resolver/ad2s1210.c | 17 ++++++++++++-----
    1 file changed, 12 insertions(+), 5 deletions(-)

    --- a/drivers/staging/iio/resolver/ad2s1210.c
    +++ b/drivers/staging/iio/resolver/ad2s1210.c
    @@ -130,17 +130,24 @@ static int ad2s1210_config_write(struct
    static int ad2s1210_config_read(struct ad2s1210_state *st,
    unsigned char address)
    {
    - struct spi_transfer xfer = {
    - .len = 2,
    - .rx_buf = st->rx,
    - .tx_buf = st->tx,
    + struct spi_transfer xfers[] = {
    + {
    + .len = 1,
    + .rx_buf = &st->rx[0],
    + .tx_buf = &st->tx[0],
    + .cs_change = 1,
    + }, {
    + .len = 1,
    + .rx_buf = &st->rx[1],
    + .tx_buf = &st->tx[1],
    + },
    };
    int ret = 0;

    ad2s1210_set_mode(MOD_CONFIG, st);
    st->tx[0] = address | AD2S1210_MSB_IS_HIGH;
    st->tx[1] = AD2S1210_REG_FAULT;
    - ret = spi_sync_transfer(st->sdev, &xfer, 1);
    + ret = spi_sync_transfer(st->sdev, xfers, 2);
    if (ret < 0)
    return ret;


    \
     
     \ /
      Last update: 2020-05-26 21:18    [W:4.053 / U:0.200 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site