/*
 * SPI flash internal definitions
 *
 * Copyright (C) 2011 Amlogic Corporation
 *
 * Licensed under the GPL-2 or later.
 *
 *
 * Dedicated for Amlogic SPI controller use
 */


#ifndef __SPI_FLASH_AMLOGIC_H__
#define __SPI_FLASH_AMLOGIC_H__
#include <spi.h>
#include <spi_flash.h>
#include <asm/arch/io.h>
#include <asm/arch/secure_apb.h>

#define BUS_SPICC 2

#ifdef CONFIG_AMLOGIC_SPI_FLASH

/* SPI transfer flags */
//copy from @\u-boot-arm\branches\a3_bringup\include\spi.h
//should place to <inlcude\spi.h>
//but ....
#ifndef SPI_XFER_BEGIN
#define SPI_XFER_BEGIN      0x0001      /* Assert CS before transfer */
#define SPI_XFER_END        0x0002      /* Defassert CS after transfer */
#endif
#define SPI_XFER_ADR        0x0004      /* Set SPI address for read/write */
#define SPI_XFER_CMD        0x0008      /* Trigger SPI command */
#define SPI_XFER_STATUS       0x0010        /* Read SPI status register from device */
#define SPI_XFER_ID           0x0020        /* Read SPI device ID */
#define SPI_XFER_COPY           0x0040      /* Amlogic SPI AHB bus copy */
#define SPI_XFER_READCACHE  0x0080      /* SPI controller data operation: from cache to host */
#define SPI_XFER_WRITECACHE 0x0100      /* SPI controller data operation: from host to cache*/


int spi_flash_cmd_amlogic(struct spi_slave *spi, u32 cmd, void *response, size_t len);
int spi_flash_read_amlogic(struct spi_flash *flash,u32 offset, size_t len, void *buf);
int spi_flash_write_amlogic(struct spi_flash *flash,u32 offset, size_t len, const void *buf);
int spi_flash_erase_amlogic(struct spi_flash *flash,u32 offset, size_t len, u32 sector_size);
int spi_flash_erase_be_amlogic(struct spi_flash *flash,u32 offset, size_t len, u32 sector_size);
int spi_xfer(struct spi_slave *slave, unsigned int bitlen,
			const void *dout, void *din, unsigned long flags);

#endif //CONFIG_AMLOGIC_SPI_FLASH

/* Manufacturer-specific probe functions */
#ifdef CONFIG_SPI_FLASH_SPANSION
struct spi_flash *spi_flash_probe_spansion(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_ATEML
struct spi_flash *spi_flash_probe_atmel(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_EON
struct spi_flash *spi_flash_probe_eon(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_MACRONIX
struct spi_flash *spi_flash_probe_macronix(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_SST
struct spi_flash *spi_flash_probe_sst(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_STMICRO
struct spi_flash *spi_flash_probe_stmicro(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_WINBOND
struct spi_flash *spi_flash_probe_winbond(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_RAMTRON
struct spi_flash *spi_fram_probe_ramtron(struct spi_slave *spi, u8 *idcode);
#endif

#ifdef CONFIG_SPI_FLASH_GIGADEVICE
struct spi_flash *spi_flash_probe_gigadevice(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_PMDEVICE
struct spi_flash *spi_flash_probe_pmdevice(struct spi_slave *spi, u8 *idcode);
#endif
#ifdef CONFIG_SPI_FLASH_ESMT
struct spi_flash *spi_flash_probe_esmt(struct spi_slave *spi, u8 *idcode);
#endif

#endif //__SPI_FLASH_AMLOGIC_H__
