mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
dm: sf: Add driver model read/write/erase methods
Permit use of a udevice to talk to SPI flash. Ultimately we would like to retire the use of 'struct spi_flash' for this purpose, so create the new API for those who want to move to it. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
60304592b9
commit
8d987abc6a
2 changed files with 57 additions and 6 deletions
|
@ -11,6 +11,22 @@
|
|||
#include <dm/device-internal.h>
|
||||
#include "sf_internal.h"
|
||||
|
||||
int spi_flash_read_dm(struct udevice *dev, u32 offset, size_t len, void *buf)
|
||||
{
|
||||
return sf_get_ops(dev)->read(dev, offset, len, buf);
|
||||
}
|
||||
|
||||
int spi_flash_write_dm(struct udevice *dev, u32 offset, size_t len,
|
||||
const void *buf)
|
||||
{
|
||||
return sf_get_ops(dev)->write(dev, offset, len, buf);
|
||||
}
|
||||
|
||||
int spi_flash_erase_dm(struct udevice *dev, u32 offset, size_t len)
|
||||
{
|
||||
return sf_get_ops(dev)->erase(dev, offset, len);
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO(sjg@chromium.org): This is an old-style function. We should remove
|
||||
* it when all SPI flash drivers use dm
|
||||
|
|
|
@ -118,6 +118,41 @@ struct dm_spi_flash_ops {
|
|||
#define sf_get_ops(dev) ((struct dm_spi_flash_ops *)(dev)->driver->ops)
|
||||
|
||||
#ifdef CONFIG_DM_SPI_FLASH
|
||||
/**
|
||||
* spi_flash_read_dm() - Read data from SPI flash
|
||||
*
|
||||
* @dev: SPI flash device
|
||||
* @offset: Offset into device in bytes to read from
|
||||
* @len: Number of bytes to read
|
||||
* @buf: Buffer to put the data that is read
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int spi_flash_read_dm(struct udevice *dev, u32 offset, size_t len, void *buf);
|
||||
|
||||
/**
|
||||
* spi_flash_write_dm() - Write data to SPI flash
|
||||
*
|
||||
* @dev: SPI flash device
|
||||
* @offset: Offset into device in bytes to write to
|
||||
* @len: Number of bytes to write
|
||||
* @buf: Buffer containing bytes to write
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int spi_flash_write_dm(struct udevice *dev, u32 offset, size_t len,
|
||||
const void *buf);
|
||||
|
||||
/**
|
||||
* spi_flash_erase_dm() - Erase blocks of the SPI flash
|
||||
*
|
||||
* Note that @len must be a muiltiple of the flash sector size.
|
||||
*
|
||||
* @dev: SPI flash device
|
||||
* @offset: Offset into device in bytes to start erasing
|
||||
* @len: Number of bytes to erase
|
||||
* @return 0 if OK, -ve on error
|
||||
*/
|
||||
int spi_flash_erase_dm(struct udevice *dev, u32 offset, size_t len);
|
||||
|
||||
int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
|
||||
unsigned int max_hz, unsigned int spi_mode,
|
||||
struct udevice **devp);
|
||||
|
@ -132,21 +167,21 @@ void spi_flash_free(struct spi_flash *flash);
|
|||
int spi_flash_remove(struct udevice *flash);
|
||||
|
||||
static inline int spi_flash_read(struct spi_flash *flash, u32 offset,
|
||||
size_t len, void *buf)
|
||||
size_t len, void *buf)
|
||||
{
|
||||
return sf_get_ops(flash->dev)->read(flash->dev, offset, len, buf);
|
||||
return spi_flash_read_dm(flash->dev, offset, len, buf);
|
||||
}
|
||||
|
||||
static inline int spi_flash_write(struct spi_flash *flash, u32 offset,
|
||||
size_t len, const void *buf)
|
||||
size_t len, const void *buf)
|
||||
{
|
||||
return sf_get_ops(flash->dev)->write(flash->dev, offset, len, buf);
|
||||
return spi_flash_write_dm(flash->dev, offset, len, buf);
|
||||
}
|
||||
|
||||
static inline int spi_flash_erase(struct spi_flash *flash, u32 offset,
|
||||
size_t len)
|
||||
size_t len)
|
||||
{
|
||||
return sf_get_ops(flash->dev)->erase(flash->dev, offset, len);
|
||||
return spi_flash_erase_dm(flash->dev, offset, len);
|
||||
}
|
||||
|
||||
struct sandbox_state;
|
||||
|
|
Loading…
Reference in a new issue