When probing soft_spi the result of dev_get_parent_priv(dev) in probe
function is null ptr because the spi is on the ahb bus which has
per_child_auto_alloc_size set to 0. Therefore it would generate an Ooops
messages when accessing spi_slave structure.

The fix consist of updating the soft_spi_platdata flags inside the
.set_mode.

Signed-off-by: Horatiu Vultur <horatiu.vul...@microchip.com>
---
 drivers/spi/soft_spi.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/spi/soft_spi.c b/drivers/spi/soft_spi.c
index b06883f..2c47577 100644
--- a/drivers/spi/soft_spi.c
+++ b/drivers/spi/soft_spi.c
@@ -183,9 +183,15 @@ static int soft_spi_set_speed(struct udevice *dev, 
unsigned int speed)
 static int soft_spi_set_mode(struct udevice *dev, unsigned int mode)
 {
        struct soft_spi_priv *priv = dev_get_priv(dev);
+       struct soft_spi_platdata *plat = dev->platdata;
 
        priv->mode = mode;
 
+       if (!(mode & SPI_CS_HIGH))
+               plat->cs.flags |= GPIOD_ACTIVE_LOW;
+       if (mode & SPI_CPOL)
+               plat->sclk.flags |= GPIOD_ACTIVE_LOW;
+
        return 0;
 }
 
@@ -210,18 +216,13 @@ static int soft_spi_ofdata_to_platdata(struct udevice 
*dev)
 
 static int soft_spi_probe(struct udevice *dev)
 {
-       struct spi_slave *slave = dev_get_parent_priv(dev);
        struct soft_spi_platdata *plat = dev->platdata;
-       int cs_flags, clk_flags;
        int ret;
 
-       cs_flags = (slave->mode & SPI_CS_HIGH) ? 0 : GPIOD_ACTIVE_LOW;
-       clk_flags = (slave->mode & SPI_CPOL) ? GPIOD_ACTIVE_LOW : 0;
-
        if (gpio_request_by_name(dev, "cs-gpios", 0, &plat->cs,
-                                GPIOD_IS_OUT | cs_flags) ||
+                                GPIOD_IS_OUT) ||
            gpio_request_by_name(dev, "gpio-sck", 0, &plat->sclk,
-                                GPIOD_IS_OUT | clk_flags))
+                                GPIOD_IS_OUT))
                return -EINVAL;
 
        ret = gpio_request_by_name(dev, "gpio-mosi", 0, &plat->mosi,
-- 
2.7.4

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to