Up until now driver model has not been used for any type of bus. Buses have some unique properties and needs, so we cannot claim that driver model can cover all the common cases unless we have converted a bus over to driver model.
SPI is a reasonable choice for this next step. It has a fairly simple API and not too many dependencies. The main one is SPI flash so we may as well convert that also. Since the boards I test with have cros_ec I have also included that, for SPI only. The technique used is make use of driver model's supported data structures to hold information currently kept by each subsystem in a private data structure. Since 'struct spi_slave' relates to the slave device on the bus it is stored in the 'parent' data with each child device of the bus. Since 'struct spi_flash' is a standard interface used for each SPI flash driver, it is stored in the SPI FLash uclass's private data for each device. New defines are created to enable driver model for each subsystem. These are: CONFIG_DM_SPI CONFIG_DM_SPI_FLASH CONFIG_DM_CROS_EC This allows us to move some boards and drivers to driver model, while leaving others behind. A 'big bang' conversion of everything to driver model, even at a subsystem level, is never going to work. There is some cost in changing the uclass interface after it is created, so if you have limited time, please spend it reviewing the uclass interfaces in spi.h and spi_flash.h. These need to be supported by each driver, so changing them later may involve changing multiple drivers. To assist with the conversion of other SPI drivers, a README file is added to walk through the process. So far, sandbox, exynos and tegra drivers are converted over. As always, driver model patches are available at u-boot-dm.git branch 'working'. There is a branch for just this series called 'spi-working'. Changes in v4: - Drop the incorrect compulab hunk from this patch - Remove a extra tab character (oops) Changes in v3: - Add a cs_info() method to the driver model SPI API - Add a debug() in the probe method - Add a few more debug() statements - Add a function comment for sandbox_spi_get_emul() - Add a missing tab character - Add a uclass for a generic SPI device (for use with the 'sspi' command) - Add implementation/comment for the cs_info() method - Add missing comments to spi.h - Add new functions to iterate through device children - Add new patch to add a clarifying comment on struct udevice's seq member - Add new patch to add aliases for spi on tegra30 boards - Add new patch to allow parents to pass data to children during probe - Add new patch to convert Tegra SPI to driver model - Add spi.h header to 3 sh boards - Correct typo where 'slave' should say 'bus' - Expand SPI tests to cover compatibility functions - Fix two comment typos - Make sure the old device is both removed and unbound in 'sf probe' - Minor renames for clarity - Put the cs member back into spi_slave - Rebase to master - Remove the child_pre_probe() method which is no longer needed - Update for the new cs_info() method - Use a generic SPI device for the 'sspi command' - Use an explicit chip select value instead of reusing device sequence number - Word-wrap the first paragraph of the binding Changes in v2: - Add additional debug() statements - Add missing comments for struct spi_slave - Add spi.h header to dfu_sf.c - Adjust binding to avoid Linux-specific mentions - Adjust xfer() method for new API - Correct sandbox's xfer() method signature - Create a 'spi.bin' file for the SPI tests - Fix a typo in the commit message - Fix code nits from Daniel Schwierzeck - Fix comment on 'slave' parameter to match the parameter name - Fix typos reported by Jagannadha Sutradharudu Teki - Update for changes to exynos driver - Use 'bus' instead of 'dev' to distinguish bus from slave - Use 'bus' instead of 'dev' to make the API clearer Simon Glass (29): sandbox: dts: Add a SPI device and cros_ec device dm: core: Add functions for iterating through device children dm: core: Allow parents to pass data to children during probe dm: core: Add a clarifying comment on struct udevice's seq member dm: spi: Add a uclass for SPI dm: sandbox: Add a SPI emulation uclass dm: Remove spi_init() from board_r.c when using driver model dm: Add spi.h header to a few files dm: spi: Adjust cmd_spi to work with driver model dm: sandbox: spi: Move to driver model dm: spi: Rename soft_spi.c to soft_spi_legacy.c dm: spi: Remove SPI_INIT feature dm: spi: Add soft_spi implementation dm: exynos: Convert SPI to driver model dm: spi: Add documentation on how to convert over SPI drivers exynos: universal_c210: Move to driver model soft_spi sf: Tidy up public and private header files spi: Use error return value in sf_ops dm: sf: Add a uclass for SPI flash dm: Convert spi_flash_probe() and 'sf probe' to use driver model dm: sf: sandbox: Convert SPI flash driver to driver model dm: exynos: config: Use driver model for SPI flash dm: spi: Add tests dm: sf: Add tests for SPI flash dm: tegra: dts: Add aliases for spi on tegra30 boards dm: tegra: spi: Convert to driver model dm: cros_ec: Add support for driver model dm: sandbox: cros_ec: Move sandbox cros_ec to driver module dm: exynos: cros_ec: Move cros_ec_spi to driver model arch/arm/dts/exynos4210-universal_c210.dts | 13 + arch/arm/dts/exynos5250-snow.dts | 8 + arch/arm/dts/exynos5420-peach-pit.dts | 1 + arch/arm/dts/tegra20-trimslice.dts | 1 + arch/arm/dts/tegra30-beaver.dts | 1 + arch/arm/dts/tegra30-cardhu.dts | 1 + arch/arm/dts/tegra30-colibri.dts | 1 + arch/arm/include/asm/arch-tegra114/tegra114_spi.h | 41 -- arch/arm/include/asm/arch-tegra20/tegra20_sflash.h | 41 -- arch/arm/include/asm/arch-tegra20/tegra20_slink.h | 41 -- arch/sandbox/dts/sandbox.dts | 26 + arch/sandbox/include/asm/spi.h | 13 - arch/sandbox/include/asm/state.h | 2 +- board/buffalo/lsxl/lsxl.c | 3 +- board/nvidia/common/board.c | 3 +- board/renesas/sh7752evb/sh7752evb.c | 1 + board/renesas/sh7753evb/sh7753evb.c | 1 + board/renesas/sh7757lcr/sh7757lcr.c | 1 + board/samsung/common/board.c | 3 - board/samsung/universal_c210/universal.c | 52 -- common/board_r.c | 2 +- common/cmd_sf.c | 26 + common/cmd_spi.c | 39 +- common/cros_ec.c | 30 ++ common/env_sf.c | 1 + common/exports.c | 4 +- doc/device-tree-bindings/mtd/spi/spi-flash.txt | 25 + doc/device-tree-bindings/spi/soft-spi.txt | 34 ++ doc/driver-model/README.txt | 7 +- doc/driver-model/spi-howto.txt | 594 +++++++++++++++++++++ drivers/core/device.c | 36 +- drivers/dfu/dfu_sf.c | 1 + drivers/misc/cros_ec.c | 122 ++++- drivers/misc/cros_ec_sandbox.c | 99 +++- drivers/misc/cros_ec_spi.c | 68 ++- drivers/mtd/spi/Makefile | 7 +- drivers/mtd/spi/ramtron.c | 1 + drivers/mtd/spi/sandbox.c | 338 ++++++++++-- drivers/mtd/spi/sf-uclass.c | 63 +++ drivers/mtd/spi/sf_internal.h | 67 ++- drivers/mtd/spi/sf_params.c | 1 + drivers/mtd/spi/sf_probe.c | 154 ++++-- drivers/mtd/spi/spi_spl_load.c | 1 + drivers/spi/Makefile | 9 +- drivers/spi/exynos_spi.c | 513 +++++++----------- drivers/spi/fdt_spi.c | 186 ------- drivers/spi/sandbox_spi.c | 200 +++---- drivers/spi/soft_spi.c | 227 +++++--- drivers/spi/soft_spi_legacy.c | 176 ++++++ drivers/spi/spi-emul-uclass.c | 15 + drivers/spi/spi-uclass.c | 390 ++++++++++++++ drivers/spi/tegra114_spi.c | 254 ++++----- drivers/spi/tegra20_sflash.c | 238 +++++---- drivers/spi/tegra20_slink.c | 235 ++++---- drivers/spi/tegra_spi.h | 12 + include/configs/exynos-common.h | 2 + include/configs/peach-pit.h | 1 + include/configs/s5pc210_universal.h | 12 +- include/configs/sacsng.h | 1 - include/configs/sandbox.h | 5 +- include/configs/tegra-common-post.h | 2 +- include/configs/tegra-common.h | 2 + include/configs/zipitz2.h | 1 - include/cros_ec.h | 27 +- include/dm/device-internal.h | 13 + include/dm/device.h | 25 +- include/dm/uclass-id.h | 5 + include/spi.h | 299 ++++++++++- include/spi_flash.h | 127 +++-- test/dm/Makefile | 2 + test/dm/bus.c | 31 ++ test/dm/sf.c | 43 ++ test/dm/spi.c | 127 +++++ test/dm/test-dm.sh | 2 + test/dm/test.dts | 17 +- 75 files changed, 3702 insertions(+), 1471 deletions(-) delete mode 100644 arch/arm/include/asm/arch-tegra114/tegra114_spi.h delete mode 100644 arch/arm/include/asm/arch-tegra20/tegra20_sflash.h delete mode 100644 arch/arm/include/asm/arch-tegra20/tegra20_slink.h create mode 100644 doc/device-tree-bindings/mtd/spi/spi-flash.txt create mode 100644 doc/device-tree-bindings/spi/soft-spi.txt create mode 100644 doc/driver-model/spi-howto.txt create mode 100644 drivers/mtd/spi/sf-uclass.c delete mode 100644 drivers/spi/fdt_spi.c create mode 100644 drivers/spi/soft_spi_legacy.c create mode 100644 drivers/spi/spi-emul-uclass.c create mode 100644 drivers/spi/spi-uclass.c create mode 100644 drivers/spi/tegra_spi.h create mode 100644 test/dm/sf.c create mode 100644 test/dm/spi.c -- 2.1.0.rc2.206.gedb03e5 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot