100 lines
2.3 KiB
C
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_*/
|