/*======================================================================================================================== 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