Files
banban/ql-bootloader/common/inc/quec_ssp_lcd.h

203 lines
6.2 KiB
C

/*========================================================================================================================
Copyright (c) 2022 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
Quectel Wireless Solution Proprietary and Confidential.
========================================================================================================================*/
/*=================================================================
EDIT HISTORY FOR MODULE
This section contains comments describing changes made to the module.
Notice that changes are listed in reverse chronological order.
WHEN WHO WHAT, WHERE, WHY
------------ ------- -------------------------------------------------------------------------------
2022/04/26 Fias.fan 此文件用于LCD的主要驱动文件,---客户可根据硬件设计更改此文件的部分引脚
==========================================================================================================================*/
#ifndef __QUEC_SSP_LCD_H__
#define __QUEC_SSP_LCD_H__
#include "plat_types.h"
#include "quec_startup_gpio.h"
#include "quec_lcd_application.h"
//客户需要根据硬件电路设计自行配置如下参数
//配置LCD
#define _QUEC_LCD_SSP2_ //请咨询AE/FAE
//LCD的接口类型
#define LCD_SPI_CONTROLLER_LINE (4)
//LCD的数据线个数
#define LCD_SPI_CONTROLLER_DATA_LINE (1)
//LCD的写时钟
#define LCD_SCLK_FREQ (SPI_52M)
//lCD的读时钟
#define LCD_SCLK_READ_FREQ (SPI_812_5k)
//600MCN_XX
#if defined (__QUECTEL_PROJECT_EC600MCN_XX__) \
|| defined (__QUECTEL_PROJECT_EC600MCN_LA__) || defined (__QUECTEL_PROJECT_EC600MCN_LE__) \
|| defined (__QUECTEL_PROJECT_EC600MCN_LC__)|| defined (__QUECTEL_PROJECT_EC600MCN_LF__) \
|| defined (__QUECTEL_PROJECT_EC600MCN_MC__)
//lcd-spi的clk Pin
#define LCD_SPI_CLK (GPIO_PIN_NO_12)
//LCD的片选Pin,OutPot
#define LCD_SPI_CS (GPIO_PIN_NO_13)
//LCD的数据和命令选择Pin,OutPut,拉低为发送Cmd,拉高为发送Data[只有接口类型为4线时,才有此Pin功能]
#define LCD_SPI_RS (GPIO_PIN_NO_14)
//LCD的数据Pin(双向pin),用于数据输出和输入
#define LCD_SPI_DOUT (GPIO_PIN_NO_15)
//LCD的复位引脚,OutPut
#define LCD_RST_PIN (GPIO_PIN_NO_50)
//LCD的帧中断Pin,IntPut(中断)
#define LCD_TE_PIN (GPIO_PIN_NO_28)
//LCD的背光引脚(PWM or GPIO)
#define LCD_BACK_LIGHT (GPIO_PIN_NO_7)
//800MCN_XX
#elif defined (__QUECTEL_PROJECT_EC800MCN_XX__) \
|| defined(__QUECTEL_PROJECT_EC800MCN_GA__) || defined (__QUECTEL_PROJECT_EC800MCN_LA__)\
|| defined (__QUECTEL_PROJECT_EG810MCN_GA__)|| defined (__QUECTEL_PROJECT_EC800MCN_CC__) \
|| defined (__QUECTEL_PROJECT_EC800MCN_NC__)|| defined (__QUECTEL_PROJECT_EC800MCN_MC__)\
|| defined (__QUECTEL_PROJECT_EC800MCN_LF__)|| defined (__QUECTEL_PROJECT_EG810MCN_LA__)\
|| defined (__QUECTEL_PROJECT_EG800PCN_LA__)
//lcd-spi的clk Pin
#define LCD_SPI_CLK (GPIO_PIN_NO_33)
//LCD的片选Pin,OutPot
#define LCD_SPI_CS (GPIO_PIN_NO_34)
//LCD的数据和命令选择Pin,OutPut,拉低为发送Cmd,拉高为发送Data[只有接口类型为4线时,才有此Pin功能]
#define LCD_SPI_RS (GPIO_PIN_NO_35)
//LCD的数据Pin(双向pin),用于数据输出和输入
#define LCD_SPI_DOUT (GPIO_PIN_NO_36)
//LCD的复位引脚,OutPut
#define LCD_RST_PIN (GPIO_PIN_NO_32)
//LCD的帧中断Pin,IntPut(中断)
#define LCD_TE_PIN (GPIO_PIN_NO_7)
//LCD的背光引脚(PWM or GPIO)
#define LCD_BACK_LIGHT (GPIO_PIN_NO_8)
#elif defined (__QUECTEL_PROJECT_EG800AKCN_XX__)
//lcd-spi的clk Pin
#define LCD_SPI_CLK (GPIO_PIN_NO_12)
//LCD的片选Pin,OutPot
#define LCD_SPI_CS (GPIO_PIN_NO_13)
//LCD的数据和命令选择Pin,OutPut,拉低为发送Cmd,拉高为发送Data[只有接口类型为4线时,才有此Pin功能]
#define LCD_SPI_RS (GPIO_PIN_NO_14)
//LCD的数据Pin(双向pin),用于数据输出和输入
#define LCD_SPI_DOUT (GPIO_PIN_NO_15)
//LCD的复位引脚,OutPut
#define LCD_RST_PIN (GPIO_PIN_NO_90)
//LCD的帧中断Pin,IntPut(中断)
#define LCD_TE_PIN (GPIO_PIN_NO_89)
//LCD的背光引脚(PWM or GPIO)
#define LCD_BACK_LIGHT (GPIO_PIN_NO_69)
#else
#endif
#define LCDLOGE CP_LOGW
#define LCDLOGW CP_LOGW
#define LCDLOGI CP_LOGW
#define LCDLOGD CP_LOGW
enum
{
LCD_CAP_NORMAL = 0,
LCD_CAP_FAKE = 1, /*virtal panel*/
LCD_CAP_POWERON = 2,
LCD_CAP_NOTE = 4, /*has no te signal*/
LCD_CAP_LIMIT
};
enum
{
LCD_MODE_MCU = 0,
LCD_MODE_SPI = 1,
LCD_MODE_LIMIT
};
enum
{
LCD_POLARITY_POS = 0,
LCD_POLARITY_NEG,
LCD_POLARITY_LIMIT
};
//LCD控制器的状态
enum
{
LCD_STATUS_POWEROFF,
LCD_STATUS_POWERON,
LCD_STATUS_HWON,
LCD_STATUS_ASSERTON,
LCD_STATUS_SLEEP,
LCD_STATUS_LIMIT
};
//LCD控制器SPI的工作模式
enum
{
LCD_WORK_MODE_POLLING,
LCD_WORK_MODE_ASS_POLLING,
LCD_WORK_MODE_INTERRUPT,
LCD_WORK_MODE_LIMIT
};
/* LCD operations */
struct panel_operations {
int (*panel_interface_init)(struct panel_spec *self, uint32_t sclk, int32_t work_mode);
int (*panel_interface_update)(struct panel_spec *self, int32_t work_mode);
int (*panel_init)(struct panel_spec *self);
int (*panel_invalid)(struct panel_spec *self, uint32_t start_x,
uint32_t start_y, uint32_t end_x, uint32_t end_y);
int (*panel_suspend)(struct panel_spec *self);
int (*panel_resume)(struct panel_spec *self);
unsigned int (*panel_readid)(struct panel_spec *self);
};
/* LCD abstraction */
struct panel_spec {
char name[32];
unsigned int panel_id;
unsigned int cap;
unsigned short width; //short
unsigned short height; // short
unsigned short interf; /*mcu, spi, mipi*/ //short
unsigned short type; /*rgb, fstn*/
struct spi_info *info;
void *panel_if;
struct panel_operations *ops;
};
struct asrlcdd_framebuffer_info{
void* pbuffer;
unsigned int height;
unsigned int stride;
unsigned int bitdepth;
};
struct asrlcdd_roi_info{
int startX;
int startY;
unsigned short width;
unsigned short height;
};
struct asrlcdd_framebuffer_window{
struct asrlcdd_framebuffer_info frame_info;
struct asrlcdd_roi_info roi_info;
};
struct quec_lcd_driver{
struct panel_spec *quec_panel_spec;
int (*lcd_panel_init)(struct panel_spec *self);
};
#endif