移植树莓派中的fbtft显示驱动到Linux开发板下(四)-fbtft中的数据结构

/* FBTFT主要数据结构 */
struct fbtft_par {
	struct spi_device *spi;           /* 设置spi设备 */     
	struct platform_device *pdev;     /* 设置是否是平台设备 */
	struct fb_info *info;             /* 指向framebuffer fb_info结构的指针 */
	struct fbtft_platform_data *pdata;  /* 指向平台数据的指针 */
	u16 *ssbuf; /* no use */
	u32 pseudo_palette[16];  /* 由fb_set_colreg()使用 */
	struct {
		void *buf;  /* 发送缓冲区 */
		dma_addr_t dma;
		size_t len;  /* 发送缓冲区长度 */
	} txbuf;
	u8 *buf;    /* 在SPI上写入初始化数据时使用的小缓冲区 */
	u8 startbyte; /* 某些控制器在SPI模式下使用 */
	struct fbtft_ops fbtftops; /* 由驱动程序或设备提供的FBTFT操作 */
	spinlock_t dirty_lock;
	unsigned int dirty_lines_start; /* 开始更新显示的位置 */
	unsigned int dirty_lines_end; /* 在哪里结束更新显示 */
	struct {
		int reset; /* GPIO用于重置显示 */
		int dc; /* 数据/命令信号,也称为RS */
		int rd; /* 读取锁存信号 */
		int wr; /* 写锁存信号 */
		int latch; /* 总线锁存信号,例如16-> 8位总线锁存器 */
		int cs;  /* 采用并行接口总线的LCD芯片选择 */
		int db[16]; /* 并行数据总线 */
		int led[16]; /* LED控制信号 */
		int aux[16]; /* 辅助信号,不由核心使用 */
	} gpio;
	int *init_sequence; /* 指向LCD初始化数组的指针 */
	struct {
		struct mutex lock;
		unsigned long *curves;
		int num_values;
		int num_curves;
	} gamma;
	unsigned long debug; /* 指向调试值的指针 */
	bool first_update_done; /* 仅用于第一次显示更新 */
	ktime_t update_time;
	bool bgr;
	void *extra;
};


/* 将显示特定数据传递给驱动程序 
 *
  * @display:显示属性
  * @gpios:指向gpio映射的pinname数组的指针
  * @rotate:显示旋转角度
  * @bgr:LCD控制器BGR位
  * @fps:每秒帧数(这将消失,@fbtft_display中使用@fps)
  * @txbuflen:发送缓冲区的大小
  * @startbyte:设置时,可以在传输中使用Startbyte
  * @gamma:Gamma曲线的字符串表示形式
  * @extra:一种传递额外信息的方式
*/
struct fbtft_platform_data {
	struct fbtft_display display;
	const struct fbtft_gpio *gpios;
	unsigned int rotate;
	bool bgr;
	unsigned int fps;
	int txbuflen;
	u8 startbyte;
	char *gamma;
	void *extra;
};
/*
* struct fbtft_display - 描述显示属性
  * @width:以像素为单位的显示宽度
  * @height:显示高度(以像素为单位)
  * @regwidth:LCD控制器寄存器宽度(以位为单位)
  * @buswidth:以位显示接口总线宽度
  * @backlight:背光类型。
  * @fbtftops:由驱动程序或设备提供的FBTFT操作(platform_data)
  * @bpp:每像素的位数
  * @fps:每秒帧数
  * @txbuflen:发送缓冲区的大小
  * @init_sequence:指向LCD初始化数组的指针
  * @gamma:Gamma曲线的字符串表示形式
  * @debug:初始调试值
*/
struct fbtft_display {
	unsigned int width;
	unsigned int height;
	unsigned int regwidth;
	unsigned int buswidth;
	unsigned int backlight;
	struct fbtft_ops fbtftops;
	unsigned int bpp;
	unsigned int fps;
	int txbuflen;
	int *init_sequence;
	char *gamma;
	int gamma_num;
	int gamma_len;
	unsigned long debug;
};


/* struct fbtft_ops - FBTFT操作结构
 * @write:写入接口总线
 * @read:从接口总线读取
 * @write_vmem:写入显示内存
 * @write_reg:写入控制器寄存器
 * @set_addr_win:设置GRAM更新窗口
 * @reset:重置LCD控制器
 * @mkdirty:标记显示更新的行
 * @update_display:更新显示
 * @init_display:初始化显示
 * @blank:空白显示(可选)
 * @request_gpios_match:将引脚命名为gpio匹配
 * @request_gpios:从内核请求gpios
 * @free_gpios:免费以前要求的gpios
 * @verify_gpios:验证是否存在必需的gpios(可选)
 * @register_backlight:用于注册背光设备(可选)
 * @unregister_backlight:取消注册背光设备(可选)
 * @set_var:使用@rotate和@bgr等变量的值配置LCD
 * (可选的)
 * @set_gamma:设置伽玛曲线(可选)
 *
 *大多数这些操作都具有分配给它们的默认功能
 * fbtft_framebuffer_alloc()
*/
struct fbtft_ops {
	int (*write)(struct fbtft_par *par, void *buf, size_t len);
	int (*read)(struct fbtft_par *par, void *buf, size_t len);
	int (*write_vmem)(struct fbtft_par *par, size_t offset, size_t len);
	void (*write_register)(struct fbtft_par *par, int len, ...);

	void (*set_addr_win)(struct fbtft_par *par,
		int xs, int ys, int xe, int ye);
	void (*reset)(struct fbtft_par *par);
	void (*mkdirty)(struct fb_info *info, int from, int to);
	void (*update_display)(struct fbtft_par *par,
				unsigned int start_line, unsigned int end_line);
	int (*init_display)(struct fbtft_par *par);
	int (*blank)(struct fbtft_par *par, bool on);

	unsigned long (*request_gpios_match)(struct fbtft_par *par,
		const struct fbtft_gpio *gpio);
	int (*request_gpios)(struct fbtft_par *par);
	int (*verify_gpios)(struct fbtft_par *par);

	void (*register_backlight)(struct fbtft_par *par);
	void (*unregister_backlight)(struct fbtft_par *par);

	int (*set_var)(struct fbtft_par *par);
	int (*set_gamma)(struct fbtft_par *par, unsigned long *curves);
};






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值