spi: pl022: Simplify platdata code
PATCH v2 1/2 spi: pl022: Simplify platdata code
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
---
Changes for v2:
- Update commit message
- Use struct clk for clkdev
drivers/spi/pl022_spi.c | 48 ++++++++++++---------------- include/dm/platform_data/pl022_spi.h | 9 ------ 2 files changed, 20 insertions(+), 37 deletions(-)
drivers/spi/pl022_spi.c +20 -28
@@ -72,11 +72,7 @@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,
include/dm/platform_data/pl022_spi.h +0 -9
@@ -10,19 +10,10 @@#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
Signature · 1 line
2.18.0.321.gffc6fa0e3
PATCH v2 2/2 spi: pl022: Driver cleanup
- Drop unnecessary include files.
- Rename platform_data include file as spi_pl022.h from pl022_spi.h, this is generic notation used for spi platdat include files.
---
Changes for v2:
- none
drivers/spi/pl022_spi.c | 7 +------
include/dm/platform_data/{pl022_spi.h => spi_pl022.h} | 6 +++---
2 files changed, 4 insertions(+), 9 deletions(-)
rename include/dm/platform_data/{pl022_spi.h => spi_pl022.h} (81%)drivers/spi/pl022_spi.c +1 -6
@@ -9,16 +9,11 @@* Driver for ARM PL022 SPI Controller. */ -#include <asm/io.h> #include <clk.h> #include <common.h> #include <dm.h> -#include <dm/platform_data/pl022_spi.h> -#include <fdtdec.h> -#include <linux/bitops.h> -#include <linux/bug.h> +#include <dm/platform_data/spi_pl022.h> #include <linux/io.h> -#include <linux/kernel.h> #include <spi.h> #define SSP_CR0 0x000
include/dm/platform_data/spi_pl022.h renamed from include/dm/platform_data/pl022_spi.h +3 -3
@@ -7,8 +7,8 @@* in ofdata_to_platdata. */ -#ifndef __PL022_SPI_H__ -#define __PL022_SPI_H__ +#ifndef __spi_pl022_h +#define __spi_pl022_h struct pl022_spi_pdata { fdt_addr_t addr;
@@ -16,4 +16,4 @@ struct pl022_spi_pdata { unsigned int freq; }; -#endif +#endif /* __spi_pl022_h */
Signature · 1 line
2.18.0.321.gffc6fa0e3
PATCH v2 2/2 spi: pl022: Driver cleanup
Hi Jagan,
Quoted 5 lines · Jagan Teki
- Drop unnecessary include files.
- Renameplatform_datainclude file asspi_pl022.hfrompl022_spi.h, this is generic notation used for spi platdat include files.
You tell it yourself here, there are two changes. IMHO, it would make sense to have two patches.
Thanks,
Quentin
Quoted 60 lines
Cc Quentin Schulz <[email protected]>Signed-off-by Jagan Teki <[email protected]>---
Changes for v2:
- nonedrivers/spi/pl022_spi.c | 7 +------ include/dm/platform_data/{pl022_spi.h => spi_pl022.h} | 6 +++--- 2 files changed, 4 insertions(+), 9 deletions(-) rename include/dm/platform_data/{pl022_spi.h => spi_pl022.h} (81%)drivers/spi/pl022_spi.c +1
-6@@ -9,16 +9,11 @@* Driver for ARM PL022 SPI Controller. */ -#include <asm/io.h> #include <clk.h> #include <common.h> #include <dm.h> -#include <dm/platform_data/pl022_spi.h> -#include <fdtdec.h> -#include <linux/bitops.h> -#include <linux/bug.h> +#include <dm/platform_data/spi_pl022.h> #include <linux/io.h> -#include <linux/kernel.h> #include <spi.h> #define SSP_CR0 0x000include/dm/platform_data/spi_pl022.h renamed from include/dm/platform_data/pl022_spi.h +3
-3@@ -7,8 +7,8 @@* in ofdata_to_platdata. */ -#ifndef __PL022_SPI_H__ -#define __PL022_SPI_H__ +#ifndef __spi_pl022_h +#define __spi_pl022_h struct pl022_spi_pdata { fdt_addr_t addr;@@ -16,4 +16,4 @@ struct pl022_spi_pdata { unsigned int freq; }; -#endif +#endif /* __spi_pl022_h */ Signature · 1 line
2.18.0.321.gffc6fa0e3
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20181114/b2a6ae96/attachment.sig>