1*d25ce7d2SHaavard Skinnemoen /* 2*d25ce7d2SHaavard Skinnemoen * Interface to SPI flash 3*d25ce7d2SHaavard Skinnemoen * 4*d25ce7d2SHaavard Skinnemoen * Copyright (C) 2008 Atmel Corporation 5*d25ce7d2SHaavard Skinnemoen * 6*d25ce7d2SHaavard Skinnemoen * See file CREDITS for list of people who contributed to this 7*d25ce7d2SHaavard Skinnemoen * project. 8*d25ce7d2SHaavard Skinnemoen * 9*d25ce7d2SHaavard Skinnemoen * This program is free software; you can redistribute it and/or 10*d25ce7d2SHaavard Skinnemoen * modify it under the terms of the GNU General Public License 11*d25ce7d2SHaavard Skinnemoen * version 2 as published by the Free Software Foundation. 12*d25ce7d2SHaavard Skinnemoen * 13*d25ce7d2SHaavard Skinnemoen * This program is distributed in the hope that it will be useful, 14*d25ce7d2SHaavard Skinnemoen * but WITHOUT ANY WARRANTY; without even the implied warranty of 15*d25ce7d2SHaavard Skinnemoen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16*d25ce7d2SHaavard Skinnemoen * GNU General Public License for more details. 17*d25ce7d2SHaavard Skinnemoen * 18*d25ce7d2SHaavard Skinnemoen * You should have received a copy of the GNU General Public License 19*d25ce7d2SHaavard Skinnemoen * along with this program; if not, write to the Free Software 20*d25ce7d2SHaavard Skinnemoen * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 21*d25ce7d2SHaavard Skinnemoen * MA 02111-1307 USA 22*d25ce7d2SHaavard Skinnemoen */ 23*d25ce7d2SHaavard Skinnemoen #ifndef _SPI_FLASH_H_ 24*d25ce7d2SHaavard Skinnemoen #define _SPI_FLASH_H_ 25*d25ce7d2SHaavard Skinnemoen 26*d25ce7d2SHaavard Skinnemoen #include <spi.h> 27*d25ce7d2SHaavard Skinnemoen 28*d25ce7d2SHaavard Skinnemoen struct spi_flash_region { 29*d25ce7d2SHaavard Skinnemoen unsigned int count; 30*d25ce7d2SHaavard Skinnemoen unsigned int size; 31*d25ce7d2SHaavard Skinnemoen }; 32*d25ce7d2SHaavard Skinnemoen 33*d25ce7d2SHaavard Skinnemoen struct spi_flash { 34*d25ce7d2SHaavard Skinnemoen struct spi_slave *spi; 35*d25ce7d2SHaavard Skinnemoen 36*d25ce7d2SHaavard Skinnemoen const char *name; 37*d25ce7d2SHaavard Skinnemoen 38*d25ce7d2SHaavard Skinnemoen u32 size; 39*d25ce7d2SHaavard Skinnemoen 40*d25ce7d2SHaavard Skinnemoen int (*read)(struct spi_flash *flash, u32 offset, 41*d25ce7d2SHaavard Skinnemoen size_t len, void *buf); 42*d25ce7d2SHaavard Skinnemoen int (*write)(struct spi_flash *flash, u32 offset, 43*d25ce7d2SHaavard Skinnemoen size_t len, const void *buf); 44*d25ce7d2SHaavard Skinnemoen int (*erase)(struct spi_flash *flash, u32 offset, 45*d25ce7d2SHaavard Skinnemoen size_t len); 46*d25ce7d2SHaavard Skinnemoen }; 47*d25ce7d2SHaavard Skinnemoen 48*d25ce7d2SHaavard Skinnemoen struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs, 49*d25ce7d2SHaavard Skinnemoen unsigned int max_hz, unsigned int spi_mode); 50*d25ce7d2SHaavard Skinnemoen void spi_flash_free(struct spi_flash *flash); 51*d25ce7d2SHaavard Skinnemoen 52*d25ce7d2SHaavard Skinnemoen static inline int spi_flash_read(struct spi_flash *flash, u32 offset, 53*d25ce7d2SHaavard Skinnemoen size_t len, void *buf) 54*d25ce7d2SHaavard Skinnemoen { 55*d25ce7d2SHaavard Skinnemoen return flash->read(flash, offset, len, buf); 56*d25ce7d2SHaavard Skinnemoen } 57*d25ce7d2SHaavard Skinnemoen 58*d25ce7d2SHaavard Skinnemoen static inline int spi_flash_write(struct spi_flash *flash, u32 offset, 59*d25ce7d2SHaavard Skinnemoen size_t len, const void *buf) 60*d25ce7d2SHaavard Skinnemoen { 61*d25ce7d2SHaavard Skinnemoen return flash->write(flash, offset, len, buf); 62*d25ce7d2SHaavard Skinnemoen } 63*d25ce7d2SHaavard Skinnemoen 64*d25ce7d2SHaavard Skinnemoen static inline int spi_flash_erase(struct spi_flash *flash, u32 offset, 65*d25ce7d2SHaavard Skinnemoen size_t len) 66*d25ce7d2SHaavard Skinnemoen { 67*d25ce7d2SHaavard Skinnemoen return flash->erase(flash, offset, len); 68*d25ce7d2SHaavard Skinnemoen } 69*d25ce7d2SHaavard Skinnemoen 70*d25ce7d2SHaavard Skinnemoen #endif /* _SPI_FLASH_H_ */ 71