Re: [RFC PATCH 4/6] spi: ti-qspi: Implement the spi_mem interface

Boris Brezillon
2018-02-12T12:32:16Z

On Mon, 12 Feb 2018 17:13:55 +0530
Vignesh R <vigneshr@ti.com> wrote:

> On Tuesday 06 February 2018 04:51 AM, Boris Brezillon wrote:
> > From: Boris Brezillon <boris.brezillon@free-electrons.com>
> >
> > The spi_mem interface is meant to replace the spi_flash_read() one.
> > Implement the ->exec_op() method so that we can smoothly get rid of the
> > old interface.
> >
> > Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
> > ---
> > drivers/spi/spi-ti-qspi.c | 85 +++++++++++++++++++++++++++++++++++++++--------
> > 1 file changed, 72 insertions(+), 13 deletions(-)
> >
> > diff --git a/drivers/spi/spi-ti-qspi.c b/drivers/spi/spi-ti-qspi.c
> > index c24d9b45a27c..40cac3ef6cc9 100644
> > --- a/drivers/spi/spi-ti-qspi.c
> > +++ b/drivers/spi/spi-ti-qspi.c
>
> [...]
>
> > +static const struct spi_controller_mem_ops ti_qspi_mem_ops = {
> > + .exec_op = ti_qspi_exec_mem_op,
>
> .supports_op = ti_qspi_supports_mem_op,
>
> Its required as per spi_controller_check_ops() in Patch 1/6

->supports_op() is optional, and if it's missing, the core will do the
regular QuadSPI/DualSPI/SingleSPI check (see spi_mem_supports_op()
implementation). This being said, if you think a custom ->supports_op()
implementation is needed for this controller I can add one.

>
> > +};
> > +
> > static int ti_qspi_start_transfer_one(struct spi_master *master,
> > struct spi_message *m)
> > {
> > @@ -673,6 +730,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
> > master->bits_per_word_mask = SPI_BPW_MASK(32) | SPI_BPW_MASK(16) |
> > SPI_BPW_MASK(8);
> > master->spi_flash_read = ti_qspi_spi_flash_read;
> > + master->mem_ops = &ti_qspi_mem_ops;
> >
> > if (!of_property_read_u32(np, "num-cs", &num_cs))
> > master->num_chipselect = num_cs;
> > @@ -785,6 +843,7 @@ static int ti_qspi_probe(struct platform_device *pdev)
> > PTR_ERR(qspi->mmap_base));
> > qspi->mmap_base = NULL;
> > master->spi_flash_read = NULL;
> > + master->mem_ops = NULL;
> > }
> > }
> > qspi->mmap_enabled = false;
> >
>

--
Boris Brezillon, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering