[PATCH 0/6] [Blackfin] SPI driver updates - Kernel

This is a discussion on [PATCH 0/6] [Blackfin] SPI driver updates - Kernel ; -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/...

+ Reply to Thread
Results 1 to 9 of 9

Thread: [PATCH 0/6] [Blackfin] SPI driver updates

  1. [PATCH 0/6] [Blackfin] SPI driver updates

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. [PATCH 4/6] [Blackfin] SPI driver: fix bug - SPI duplex operation can read a dummy byte at the first transfer

    Bug reported by Jean-Christian de Rivaz and he also gave a patch.
    http://blackfin.uclinux.org/gf/proje...r_item_id=3678

    So revert spi_bfin5xx.c duplex operation.

    Signed-off-by: Jean-Christian de Rivaz
    Signed-off-by: Bryan Wu
    ---
    drivers/spi/spi_bfin5xx.c | 18 +++---------------
    1 files changed, 3 insertions(+), 15 deletions(-)

    diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
    index ceb5b53..c5d4d77 100644
    --- a/drivers/spi/spi_bfin5xx.c
    +++ b/drivers/spi/spi_bfin5xx.c
    @@ -358,14 +358,10 @@ static void u8_cs_chg_reader(struct driver_data *drv_data)

    static void u8_duplex(struct driver_data *drv_data)
    {
    - /* poll for SPI completion before start */
    - while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    - cpu_relax();
    -
    /* in duplex mode, clk is triggered by writing of TDBR */
    while (drv_data->rx < drv_data->rx_end) {
    write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
    - while (read_STAT(drv_data) & BIT_STAT_TXS)
    + while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    cpu_relax();
    while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    cpu_relax();
    @@ -495,14 +491,10 @@ static void u16_cs_chg_reader(struct driver_data *drv_data)

    static void u16_duplex(struct driver_data *drv_data)
    {
    - /* poll for SPI completion before start */
    - while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    - cpu_relax();
    -
    /* in duplex mode, clk is triggered by writing of TDBR */
    while (drv_data->tx < drv_data->tx_end) {
    write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
    - while (read_STAT(drv_data) & BIT_STAT_TXS)
    + while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    cpu_relax();
    while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    cpu_relax();
    @@ -516,15 +508,11 @@ static void u16_cs_chg_duplex(struct driver_data *drv_data)
    {
    struct chip_data *chip = drv_data->cur_chip;

    - /* poll for SPI completion before start */
    - while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    - cpu_relax();
    -
    while (drv_data->tx < drv_data->tx_end) {
    cs_active(drv_data, chip);

    write_TDBR(drv_data, (*(u16 *) (drv_data->tx)));
    - while (read_STAT(drv_data) & BIT_STAT_TXS)
    + while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    cpu_relax();
    while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    cpu_relax();
    --
    1.5.3.4
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  3. [PATCH 3/6] [Blackfin] SPI driver: fix bug - PBX cannot work with this SPI framework driver

    PBX 2 SPI device need cs change per word and this regression is due to commit

    Signed-off-by: Bryan Wu
    ---
    drivers/spi/spi_bfin5xx.c | 40 ++++++++++++----------------------------
    1 files changed, 12 insertions(+), 28 deletions(-)

    diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
    index c3f9ed4..ceb5b53 100644
    --- a/drivers/spi/spi_bfin5xx.c
    +++ b/drivers/spi/spi_bfin5xx.c
    @@ -294,16 +294,14 @@ static void u8_cs_chg_writer(struct driver_data *drv_data)
    {
    struct chip_data *chip = drv_data->cur_chip;

    - /* poll for SPI completion before start */
    - while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    - cpu_relax();
    -
    while (drv_data->tx < drv_data->tx_end) {
    cs_active(drv_data, chip);

    write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
    while (read_STAT(drv_data) & BIT_STAT_TXS)
    cpu_relax();
    + while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    + cpu_relax();

    cs_deactive(drv_data, chip);

    @@ -342,31 +340,20 @@ static void u8_cs_chg_reader(struct driver_data *drv_data)
    {
    struct chip_data *chip = drv_data->cur_chip;

    - /* poll for SPI completion before start */
    - while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    - cpu_relax();
    -
    - /* clear TDBR buffer before read(else it will be shifted out) */
    - write_TDBR(drv_data, 0xFFFF);
    + while (drv_data->rx < drv_data->rx_end) {
    + cs_active(drv_data, chip);
    + read_RDBR(drv_data); /* kick off */

    - cs_active(drv_data, chip);
    - dummy_read(drv_data);
    + while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    + cpu_relax();
    + while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    + cpu_relax();

    - while (drv_data->rx < drv_data->rx_end - 1) {
    + *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
    cs_deactive(drv_data, chip);

    - while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    - cpu_relax();
    - cs_active(drv_data, chip);
    - *(u8 *) (drv_data->rx) = read_RDBR(drv_data);
    ++drv_data->rx;
    }
    - cs_deactive(drv_data, chip);
    -
    - while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    - cpu_relax();
    - *(u8 *) (drv_data->rx) = read_SHAW(drv_data);
    - ++drv_data->rx;
    }

    static void u8_duplex(struct driver_data *drv_data)
    @@ -392,15 +379,12 @@ static void u8_cs_chg_duplex(struct driver_data *drv_data)
    {
    struct chip_data *chip = drv_data->cur_chip;

    - /* poll for SPI completion before start */
    - while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    - cpu_relax();
    -
    while (drv_data->rx < drv_data->rx_end) {
    cs_active(drv_data, chip);

    write_TDBR(drv_data, (*(u8 *) (drv_data->tx)));
    - while (read_STAT(drv_data) & BIT_STAT_TXS)
    +
    + while (!(read_STAT(drv_data) & BIT_STAT_SPIF))
    cpu_relax();
    while (!(read_STAT(drv_data) & BIT_STAT_RXS))
    cpu_relax();
    --
    1.5.3.4
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. [PATCH 1/6] [Blackfin] SPI driver: remove useless return status check in restore_state function pointed by Michael.

    Cc: Michael Hennerich
    Signed-off-by: Bryan Wu
    ---
    drivers/spi/spi_bfin5xx.c | 15 ++-------------
    1 files changed, 2 insertions(+), 13 deletions(-)

    diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
    index 7ef39a6..8fd1365 100644
    --- a/drivers/spi/spi_bfin5xx.c
    +++ b/drivers/spi/spi_bfin5xx.c
    @@ -223,10 +223,9 @@ static void cs_deactive(struct driver_data *drv_data, struct chip_data *chip)
    #define MAX_SPI_SSEL 7

    /* stop controller and re-config current chip*/
    -static int restore_state(struct driver_data *drv_data)
    +static void restore_state(struct driver_data *drv_data)
    {
    struct chip_data *chip = drv_data->cur_chip;
    - int ret = 0;

    /* Clear status and disable clock */
    write_STAT(drv_data, BIT_STAT_CLR);
    @@ -239,13 +238,6 @@ static int restore_state(struct driver_data *drv_data)

    bfin_spi_enable(drv_data);
    cs_active(drv_data, chip);
    -
    - if (ret)
    - dev_dbg(&drv_data->pdev->dev,
    - ": request chip select number %d failed\n",
    - chip->chip_select_num);
    -
    - return ret;
    }

    /* used to kick off transfer in rx mode */
    @@ -978,10 +970,7 @@ static void pump_messages(struct work_struct *work)

    /* Setup the SSP using the per chip configuration */
    drv_data->cur_chip = spi_get_ctldata(drv_data->cur_msg->spi);
    - if (restore_state(drv_data)) {
    - spin_unlock_irqrestore(&drv_data->lock, flags);
    - return;
    - };
    + restore_state(drv_data);

    list_del_init(&drv_data->cur_msg->queue);

    --
    1.5.3.4
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  5. [PATCH 2/6] [Blackfin] SPI driver: Use SPI device name to do gpio peripheral request

    When got some gpio conflict, it is easy to know which SPI device driver not just got "bfin-spi"

    Signed-off-by: Bryan Wu
    ---
    drivers/spi/spi_bfin5xx.c | 2 +-
    1 files changed, 1 insertions(+), 1 deletions(-)

    diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
    index 8fd1365..c3f9ed4 100644
    --- a/drivers/spi/spi_bfin5xx.c
    +++ b/drivers/spi/spi_bfin5xx.c
    @@ -1176,7 +1176,7 @@ static int setup(struct spi_device *spi)
    if ((chip->chip_select_num > 0)
    && (chip->chip_select_num <= spi->master->num_chipselect))
    peripheral_request(ssel[spi->master->bus_num]
    - [chip->chip_select_num-1], DRV_NAME);
    + [chip->chip_select_num-1], spi->modalias);

    cs_deactive(drv_data, chip);

    --
    1.5.3.4
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  6. Re: [spi-devel-general] [PATCH 2/6] [Blackfin] SPI driver: Use SPI device name to do gpio peripheral request

    On Wednesday 30 January 2008, Bryan Wu wrote:
    > When got some gpio conflict, it is easy to know which SPI device driver not just got "bfin-spi"
    >
    > Signed-off-by: Bryan Wu
    > ---
    > drivers/spi/spi_bfin5xx.c | 2 +-
    > 1 files changed, 1 insertions(+), 1 deletions(-)
    >
    > diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
    > index 8fd1365..c3f9ed4 100644
    > --- a/drivers/spi/spi_bfin5xx.c
    > +++ b/drivers/spi/spi_bfin5xx.c
    > @@ -1176,7 +1176,7 @@ static int setup(struct spi_device *spi)
    > if ((chip->chip_select_num > 0)
    > && (chip->chip_select_num <= spi->master->num_chipselect))
    > peripheral_request(ssel[spi->master->bus_num]
    > - [chip->chip_select_num-1], DRV_NAME);
    > + [chip->chip_select_num-1], spi->modalias);


    Better: spi->dev.bus_id (always unique) not spi->modalias (isn't) ...


    >
    > cs_deactive(drv_data, chip);
    >
    >

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  7. Re: [spi-devel-general] [PATCH 2/6] [Blackfin] SPI driver: Use SPI device name to do gpio peripheral request

    On Jan 31, 2008 5:48 AM, David Brownell wrote:
    > On Wednesday 30 January 2008, Bryan Wu wrote:
    > > When got some gpio conflict, it is easy to know which SPI device driver not just got "bfin-spi"
    > >
    > > Signed-off-by: Bryan Wu
    > > ---
    > > drivers/spi/spi_bfin5xx.c | 2 +-
    > > 1 files changed, 1 insertions(+), 1 deletions(-)
    > >
    > > diff --git a/drivers/spi/spi_bfin5xx.c b/drivers/spi/spi_bfin5xx.c
    > > index 8fd1365..c3f9ed4 100644
    > > --- a/drivers/spi/spi_bfin5xx.c
    > > +++ b/drivers/spi/spi_bfin5xx.c
    > > @@ -1176,7 +1176,7 @@ static int setup(struct spi_device *spi)
    > > if ((chip->chip_select_num > 0)
    > > && (chip->chip_select_num <= spi->master->num_chipselect))
    > > peripheral_request(ssel[spi->master->bus_num]
    > > - [chip->chip_select_num-1], DRV_NAME);
    > > + [chip->chip_select_num-1], spi->modalias);

    >
    > Better: spi->dev.bus_id (always unique) not spi->modalias (isn't) ...
    >


    spi->dev.bus_id is just number, while spi->modalias usually is a
    string name which it is more meaningful.
    In most time, modalias is easier for us to locate the gpio conflict.

    Thanks
    -Bryan Wu
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  8. Re: [spi-devel-general] [PATCH 0/6] [Blackfin] SPI driver updates

    I've forwarded these to Andrew, with my signoff and updated comments.
    You still need to work on having your patch descriptions match up
    to what the patches actually do...

    Patches 3-5 in this series seem to have a common thread: waiting
    until BIT_STAT_SPIF is set before moving to the next step of the
    transfer. Next time something similar happens, I'd rather see just
    one patch addressing the issue on all code paths ... not three small
    patches that only fix it for a few of the code paths.

    Also, two of those three patches describe their updates as fixing
    a "regression", or "reverting" the code. Was this a bug that came
    in those patches you wanted to merge to 2.6.24? If so, shouldn't
    those regression fixes go into the stable series?

    - Dave

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  9. Re: [spi-devel-general] [PATCH 0/6] [Blackfin] SPI driver updates

    On Feb 1, 2008 4:50 AM, David Brownell wrote:
    > I've forwarded these to Andrew, with my signoff and updated comments.
    > You still need to work on having your patch descriptions match up
    > to what the patches actually do...
    >


    Thanks a lot, I will try to make it more clearer next time.

    > Patches 3-5 in this series seem to have a common thread: waiting
    > until BIT_STAT_SPIF is set before moving to the next step of the
    > transfer. Next time something similar happens, I'd rather see just
    > one patch addressing the issue on all code paths ... not three small
    > patches that only fix it for a few of the code paths.
    >


    OK, I will try to merge these same bug fixing into one patch.

    > Also, two of those three patches describe their updates as fixing
    > a "regression", or "reverting" the code. Was this a bug that came
    > in those patches you wanted to merge to 2.6.24? If so, shouldn't
    > those regression fixes go into the stable series?
    >


    Yes, I agree with you. Actually, I intend to send out these bug fixing
    patch ASAP, but we want to make sure our tester verify this bug was
    fixing first.

    Thanks
    -Bryan
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread