#ifndef __SPI_H__
#define __SPI_H__
///////////////////////////////////////////////////////////////////////////////
//             Includes
///////////////////////////////////////////////////////////////////////////////
//

///////////////////////////////////////////////////////////////////////////////
//              Types
///////////////////////////////////////////////////////////////////////////////

/******************************************************************************
* Function:spi_protect_mode
* Purpose:Initialize spi device - read device ID, if this matches return
* pointer to device information structure
* Returns:	0 or < 0 
* Note:
*  *****************************************************************************/
int spi_protect_mode(struct flash_info *device);


/******************************************************************************
* Function:spi_read_id
* Purpose:Reads spi device ID
* Returns: ID
* Note:
*  *****************************************************************************/
uint32_t spi_read_id(void);

/******************************************************************************
* Function:spi_read_status
* Purpose:Reads spi status reg
* Returns: Status
* Note:
*  *****************************************************************************/
uint32_t spi_read_status(void);

/******************************************************************************
* Function:spi_write_status
* Purpose:write spi status reg
* Returns: NONE
* Note:
*  *****************************************************************************/
int spi_write_status(uint32_t status);

/******************************************************************************
* Function:spi_lock
* Purpose:locks spi device
* Returns: NONE
* Note:
*  *****************************************************************************/
int spi_lock(void);

/******************************************************************************
* Function:spi_unlock
* Purpose:unlocks spi device
* Returns: 0 or < 1
* Note:
*  *****************************************************************************/
int spi_unlock(void);

/******************************************************************************
* Function:spi_write_prot_select
* Purpose:Select write protection
* Returns: 0 or < 0
* Note:
*  *****************************************************************************/
int spi_write_prot_select(struct flash_info *device);

/******************************************************************************
* Function:spi_read_scur
* Purpose:Read security register
* Returns: status
* Note:
*  *****************************************************************************/
uint32_t spi_read_scur(void);

/******************************************************************************
* Function:spi_write_scur
* Purpose:Write security register to set lockdown bit
* Returns: 0 or < 0
* Note:
*  *****************************************************************************/
uint32_t spi_write_scur(void);


/******************************************************************************
* Function:spi_gang_block_lock
* Purpose:Lock all DPB
* Returns: 0 or < 0
* Note:
*  *****************************************************************************/
int spi_gang_block_lock(void);

/******************************************************************************
* Function:spi_gang_block_unlock
* Purpose:Lock all DPB
* Returns: 0 or < 0
* Note:
*  *****************************************************************************/
int spi_gang_block_unlock(void);

/******************************************************************************
* Function:spi_clear_dpb_reg
* Purpose:unproctect individual sector
* Returns: 0 or < 0
* Note:
***********************************************************************************/
int spi_clear_dpb_reg(uint32_t addr);

/******************************************************************************
* Function:spi_read_dpb_reg
* Purpose:read individual sector
* Returns: o or < 0 
* Note:
**********************************************************************************/
uint32_t spi_read_dpb_reg(uint32_t addr);

/******************************************************************************
* Function:spi_api_flash_status
* Purpose: read status of the Flash
* Returns: status
* Note:
* ***********************************************************************************/
int spi_api_flash_status(void);

/******************************************************************************
* Function:spi_unprotect_all
* Purpose:unprotect the whole flash device
* Returns:0 or < 0
* Note:
*******************************************************************************/
int spi_unprotect_all(const struct flash_info *device);

/******************************************************************************
* Function:spi_unprotect_sector
* Purpose:unprotect the a individual sector
* Returns:0 or < 0
* Note:
*******************************************************************************/
int spi_unprotect_sector(const struct flash_info *device, uint32_t address);

/******************************************************************************
* Function:spi_protect_all
* Purpose:protect whole chipset device
* Returns: 0 or < 0
* Note:
******************************************************************************/
int spi_protect_all(const struct flash_info *device);

/******************************************************************************
* Function:spi_read_wps
* Purpose:Read register 3
* Returns: SPI Status Bits
* Note:
* ******************************************************************************/
uint32_t spi_read_wps(void);

/******************************************************************************
 * * Function:spi_write_wps
 * * Purpose:write security register
 * * Returns: SPI Status Bits
 * * Note:
 * ******************************************************************************/
uint32_t spi_write_wps(void);

void spi_device_resize(struct flash_info *device);

int spi_device_erase(struct flash_info *device, u32 flash_addr, unsigned es);

void spi_flash_write_enable(void);

int qtn_get_spi_protect_config(void);

int spi_flash_wait_ready(const struct flash_info *info);

#endif // __SPI_H__

