]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
spi: pl022: Simplify platdata code
authorJagan Teki <jagan@amarulasolutions.com>
Wed, 14 Nov 2018 09:58:05 +0000 (15:28 +0530)
committerJagan Teki <jagan@amarulasolutions.com>
Tue, 27 Nov 2018 15:36:19 +0000 (21:06 +0530)
pl022 spi driver support both OF_CONTROL and PLATDATA, this
patch is trying to simplify the code that differentiating
platdata vs of_control.
- Move OF_CONTROL code at one place
- Handle clock setup code directly in pl022_spi_ofdata_to_platdata

Acked-by: Quentin Schulz <quentin.schulz@bootlin.com>
Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
drivers/spi/pl022_spi.c
include/dm/platform_data/pl022_spi.h

index 86b71d2e21abdab4fa08d60ba8c36122a2a53d45..05f4f6f4819f561acc2ceb7b44ab610fe6775704 100644 (file)
 
 struct pl022_spi_slave {
        void *base;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       struct clk clk;
-#else
        unsigned int freq;
-#endif
 };
 
 /*
@@ -96,30 +92,13 @@ static int pl022_is_supported(struct pl022_spi_slave *ps)
        return 0;
 }
 
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-static int pl022_spi_ofdata_to_platdata(struct udevice *bus)
-{
-       struct pl022_spi_pdata *plat = bus->platdata;
-       const void *fdt = gd->fdt_blob;
-       int node = dev_of_offset(bus);
-
-       plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size);
-
-       return clk_get_by_index(bus, 0, &plat->clk);
-}
-#endif
-
 static int pl022_spi_probe(struct udevice *bus)
 {
        struct pl022_spi_pdata *plat = dev_get_platdata(bus);
        struct pl022_spi_slave *ps = dev_get_priv(bus);
 
        ps->base = ioremap(plat->addr, plat->size);
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       ps->clk = plat->clk;
-#else
        ps->freq = plat->freq;
-#endif
 
        /* Check the PL022 version */
        if (!pl022_is_supported(ps))
@@ -240,11 +219,7 @@ static int pl022_spi_set_speed(struct udevice *bus, uint speed)
        u16 scr = SSP_SCR_MIN, cr0 = 0, cpsr = SSP_CPSR_MIN, best_scr = scr,
            best_cpsr = cpsr;
        u32 min, max, best_freq = 0, tmp;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       u32 rate = clk_get_rate(&ps->clk);
-#else
        u32 rate = ps->freq;
-#endif
        bool found = false;
 
        max = spi_rate(rate, SSP_CPSR_MIN, SSP_SCR_MIN);
@@ -316,6 +291,25 @@ static const struct dm_spi_ops pl022_spi_ops = {
 };
 
 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
+static int pl022_spi_ofdata_to_platdata(struct udevice *bus)
+{
+       struct pl022_spi_pdata *plat = bus->platdata;
+       const void *fdt = gd->fdt_blob;
+       int node = dev_of_offset(bus);
+       struct clk clkdev;
+       int ret;
+
+       plat->addr = fdtdec_get_addr_size(fdt, node, "reg", &plat->size);
+
+       ret = clk_get_by_index(bus, 0, &clkdev);
+       if (ret)
+               return ret;
+
+       plat->freq = clk_get_rate(&clkdev);
+
+       return 0;
+}
+
 static const struct udevice_id pl022_spi_ids[] = {
        { .compatible = "arm,pl022-spi" },
        { }
@@ -327,11 +321,9 @@ U_BOOT_DRIVER(pl022_spi) = {
        .id     = UCLASS_SPI,
 #if !CONFIG_IS_ENABLED(OF_PLATDATA)
        .of_match = pl022_spi_ids,
-#endif
-       .ops    = &pl022_spi_ops,
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
        .ofdata_to_platdata = pl022_spi_ofdata_to_platdata,
 #endif
+       .ops    = &pl022_spi_ops,
        .platdata_auto_alloc_size = sizeof(struct pl022_spi_pdata),
        .priv_auto_alloc_size = sizeof(struct pl022_spi_slave),
        .probe  = pl022_spi_probe,
index 77fe6da3cb241ee8c6724bfcbbb3ccb1c7ed99a0..df8870169dde0ceef1ce08cb0a72cb1b0e40d1e4 100644 (file)
 #ifndef __PL022_SPI_H__
 #define __PL022_SPI_H__
 
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-#include <clk.h>
-#endif
 #include <fdtdec.h>
 
 struct pl022_spi_pdata {
        fdt_addr_t addr;
        fdt_size_t size;
-#if !CONFIG_IS_ENABLED(OF_PLATDATA)
-       struct clk clk;
-#else
        unsigned int freq;
-#endif
 };
 
 #endif