Files
banban/ql-bootloader/common/inc/quec_spi_drv.h
T

100 lines
2.3 KiB
C

#ifndef _SPI_DRV_H_
#define _SPI_DRV_H_
enum{
SPI_EDGE_RISING = 0,
SPI_EDGE_FALLING = 1,
SPI_EDGE_LIMIT
};
enum{
SPI_ENDIAN_LSB = 0,
SPI_ENDIAN_MSB = 1,
SPI_ENDIAN_LIMIT
};
enum{
SPI_PATH_IMAGE = 0,
SPI_PATH_REGISTER = 1,
SPI_PATH_LIMIT
};
enum{
SPI_FORMAT_RGB565 = 0,
SPI_FORMAT_RGB666 = 1,
SPI_FORMAT_RGB666_2_3 = 2,
SPI_FORMAT_RGB888 = 3,
SPI_FORMAT_RGB888_2_3 = 4,
SPI_FORMAT_LIMIT
};
enum{
SPI_STATUS_UNINIT = 0,
SPI_STATUS_INIT = 1,
SPI_STATUS_LIMIT
};
/* used for CraneM&CraneL */
enum
{
SPI_6_5M = 0,
SPI_13M = 1,
SPI_26M,
SPI_52M,
SPI_3_25M,
SPI_1_625M,
SPI_812_5k,
SPI_CLK_LIMIT
};
struct timing_spi {
uint32_t wclk; /*KHz*/
uint32_t rclk; /*KHz*/
};
struct spi_info{
uint16_t line_num; /*3 or 4*/
uint16_t interface_id; /*1 or 2*/
uint16_t data_lane_num; /*1 or 2*/
uint16_t format;
uint16_t device_id; /*0 or 1*/
uint16_t sample_edge;
uint16_t force_cs; /*0-disable, 1-enable*/
uint16_t endian;
uint16_t reserved;
struct timing_spi *timing;
};
struct s_spi_ctx{
uint32_t base_addr;
uint32_t sclk; /*KHz*/
uint16_t cur_path;
uint16_t cur_cs;
uint16_t status;
uint8_t work_mode;
uint8_t reserved;
struct spi_info info;
};
struct s_spi_ctx* spi_init(uint32_t sclk, struct spi_info *info, int32_t work_mode);
int spi_update(struct s_spi_ctx *spi_ctx, int32_t work_mode);
int spi_set_cs(struct s_spi_ctx *spi_ctx, uint32_t enable);
int spi_write_cmd(struct s_spi_ctx *spi_ctx, uint32_t cmd, uint32_t bits);
int spi_write_data(struct s_spi_ctx *spi_ctx, uint32_t data, uint32_t bits);
int spi_read_data(struct s_spi_ctx *spi_ctx, uint32_t cmd, uint32_t cmd_bits,
uint32_t *data, uint32_t data_bits);
int spi_before_refresh(struct s_spi_ctx *spi_ctx);
int spi_after_refresh(struct s_spi_ctx *spi_ctx);
void spi_uninit(struct s_spi_ctx *mcu_ctx);
/* add for CraneM */
void spi_lcd_init(void);
void spi_set_clk_rate(unsigned int clk_dev);
void ssp_write_cmd_data_to_LCD(uint32_t cmd, uint32_t data, uint32_t data_bits, uint16_t line_num);
void ssp_write_data_to_LCD_Gram(uint16_t* data, uint32_t sum_pixel, uint32_t data_bits, uint16_t line_num);
void ssp_read_data_from_LCD(uint32_t *data, uint32_t data_bits);
void wait_ssp_write_data_to_LCD_complete(void);
#endif /*_SPI_DRV_H_*/