#ifndef _SPI_FLASH_H_
#define _SPI_FLASH_H_
-#include <dm.h> /* Because we dereference struct udevice here */
#include <linux/types.h>
#include <linux/mtd/spi-nor.h>
+struct udevice;
+
struct spi_slave;
struct dm_spi_flash_ops {
/* Access the serial operations for a device */
#define sf_get_ops(dev) ((struct dm_spi_flash_ops *)(dev)->driver->ops)
-#ifdef CONFIG_DM_SPI_FLASH
+#if CONFIG_IS_ENABLED(DM_SPI_FLASH)
/**
* spi_flash_read_dm() - Read data from SPI flash
*
* @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
+ * Return: 0 if OK, -ve on error
*/
int spi_flash_read_dm(struct udevice *dev, u32 offset, size_t len, void *buf);
* @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
+ * Return: 0 if OK, -ve on error
*/
int spi_flash_write_dm(struct udevice *dev, u32 offset, size_t len,
const void *buf);
* @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
+ * Return: 0 if OK, -ve on error
*/
int spi_flash_erase_dm(struct udevice *dev, u32 offset, size_t len);
* defined.
*
* @dev: SPI flash device
- * @return 0 if no region is write-protected, 1 if a region is
+ * Return: 0 if no region is write-protected, 1 if a region is
* write-protected, -ENOSYS if the driver does not implement this,
* other -ve value on error
*/
int spl_flash_get_sw_write_prot(struct udevice *dev);
+/**
+ * spi_flash_std_probe() - Probe a SPI flash device
+ *
+ * This is the standard internal method for probing a SPI flash device to
+ * determine its type. It can be used in chip-specific drivers which need to
+ * do this, typically with of-platdata
+ *
+ * @dev: SPI-flash device to probe
+ * Return: 0 if OK, -ve on error
+ */
+int spi_flash_std_probe(struct udevice *dev);
+
int spi_flash_probe_bus_cs(unsigned int busnum, unsigned int cs,
- unsigned int max_hz, unsigned int spi_mode,
struct udevice **devp);
/* Compatibility function - this is the old U-Boot API */
unsigned int max_hz, unsigned int spi_mode);
/* Compatibility function - this is the old U-Boot API */
-void spi_flash_free(struct spi_flash *flash);
+static inline void spi_flash_free(struct spi_flash *flash)
+{
+}
static inline int spi_flash_read(struct spi_flash *flash, u32 offset,
size_t len, void *buf)
struct mtd_info *mtd = &flash->mtd;
size_t retlen;
+ if (!len)
+ return 0;
+
return mtd->_read(mtd, offset, len, &retlen, buf);
}
struct mtd_info *mtd = &flash->mtd;
size_t retlen;
+ if (!len)
+ return 0;
+
return mtd->_write(mtd, offset, len, &retlen, buf);
}
return -EINVAL;
}
+ if (!len)
+ return 0;
+
memset(&instr, 0, sizeof(instr));
instr.addr = offset;
instr.len = len;