Re: [PATCH v6 062/102] spi: Correct operations check in dm_spi_xfer()

2019-12-07 Thread Bin Meng
On Sat, Dec 7, 2019 at 12:50 PM Simon Glass  wrote:
>
> At present we have to have an xfer() method even if it does nothing. This
> is not correct, so fix it.
>
> Signed-off-by: Simon Glass 
> Reviewed-by: Bin Meng 
> ---
>
> Changes in v6: None
> Changes in v5: None
> Changes in v4: None
> Changes in v3: None
> Changes in v2: None
>
>  drivers/spi/ich.c| 9 +
>  drivers/spi/spi-uclass.c | 5 -
>  include/spi.h| 2 +-
>  3 files changed, 6 insertions(+), 10 deletions(-)
>

applied to u-boot-x86/next, thanks!


[PATCH v6 062/102] spi: Correct operations check in dm_spi_xfer()

2019-12-06 Thread Simon Glass
At present we have to have an xfer() method even if it does nothing. This
is not correct, so fix it.

Signed-off-by: Simon Glass 
Reviewed-by: Bin Meng 
---

Changes in v6: None
Changes in v5: None
Changes in v4: None
Changes in v3: None
Changes in v2: None

 drivers/spi/ich.c| 9 +
 drivers/spi/spi-uclass.c | 5 -
 include/spi.h| 2 +-
 3 files changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c
index fbb58c783e..a4e4ad55c6 100644
--- a/drivers/spi/ich.c
+++ b/drivers/spi/ich.c
@@ -493,13 +493,6 @@ static int ich_spi_adjust_size(struct spi_slave *slave, 
struct spi_mem_op *op)
return 0;
 }
 
-static int ich_spi_xfer(struct udevice *dev, unsigned int bitlen,
-   const void *dout, void *din, unsigned long flags)
-{
-   printf("ICH SPI: Only supports memory operations\n");
-   return -1;
-}
-
 static int ich_spi_probe(struct udevice *dev)
 {
struct ich_spi_platdata *plat = dev_get_platdata(dev);
@@ -612,7 +605,7 @@ static const struct spi_controller_mem_ops 
ich_controller_mem_ops = {
 };
 
 static const struct dm_spi_ops ich_spi_ops = {
-   .xfer   = ich_spi_xfer,
+   /* xfer is not supported */
.set_speed  = ich_spi_set_speed,
.set_mode   = ich_spi_set_mode,
.mem_ops= _controller_mem_ops,
diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index 665611f7e2..af910e9efc 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -85,11 +85,14 @@ int dm_spi_xfer(struct udevice *dev, unsigned int bitlen,
const void *dout, void *din, unsigned long flags)
 {
struct udevice *bus = dev->parent;
+   struct dm_spi_ops *ops = spi_get_ops(bus);
 
if (bus->uclass->uc_drv->id != UCLASS_SPI)
return -EOPNOTSUPP;
+   if (!ops->xfer)
+   return -ENOSYS;
 
-   return spi_get_ops(bus)->xfer(dev, bitlen, dout, din, flags);
+   return ops->xfer(dev, bitlen, dout, din, flags);
 }
 
 int dm_spi_get_mmap(struct udevice *dev, ulong *map_basep, uint *map_sizep,
diff --git a/include/spi.h b/include/spi.h
index 6fbb4336ce..ba2c8406b2 100644
--- a/include/spi.h
+++ b/include/spi.h
@@ -224,7 +224,7 @@ void spi_release_bus(struct spi_slave *slave);
 int spi_set_wordlen(struct spi_slave *slave, unsigned int wordlen);
 
 /**
- * SPI transfer
+ * SPI transfer (optional if mem_ops is used)
  *
  * This writes "bitlen" bits out the SPI MOSI port and simultaneously clocks
  * "bitlen" bits in the SPI MISO port.  That's just the way SPI works.
-- 
2.24.0.393.g34dc348eaf-goog