LCD驱动

 

视频卡的各个属性保存在struct fb_var_screeninfo

struct fb_var_screeninfo {
	__u32 xres;			/* visible resolution 可视分辨率*/
	__u32 yres;
	__u32 xres_virtual;		/* virtual resolution 虚拟分辨率*/
	__u32 yres_virtual;
	__u32 xoffset;			/* 从虚拟到可见区X偏移 */
	__u32 yoffset;			/* 从虚拟到可见区Y偏移*/

	__u32 bits_per_pixel;		/* 每像素比特			*/
	__u32 grayscale;		/* != 0 表示灰度图 */

	struct fb_bitfield red;		/* bitfield in fb mem if true color, */
	struct fb_bitfield green;	/* else only length is significant */
	struct fb_bitfield blue;
	struct fb_bitfield transp;	/* transparency	透明度		*/	

	__u32 nonstd;			/* != 0 Non standard pixel format 非标准像素格式 */

	__u32 activate;			/* see FB_ACTIVATE_*标志*/

	__u32 height;			/* height of picture in mm 图片以毫米为单位高度 */
	__u32 width;			/* width of picture in mm    图片以毫米为单位宽度  */

	__u32 accel_flags;		/* (OBSOLETE) see fb_info.flags */

	/* Timing: All values in pixclocks, except pixclock (of course) */
	__u32 pixclock;			/* pixel clock in ps (pico seconds) 像素时钟 */
	__u32 left_margin;		/* time from sync to picture 左同步到图片的时间(行同步信号到像素的时钟数)*/
	__u32 right_margin;		/* time from picture to sync  图片到右同步的时间(图像到同步信号的时钟数)*/
	__u32 upper_margin;		/* time from sync to picture 上同步到图片的时间(帧同步信号到图像的时钟数)*/
	__u32 lower_margin;
	__u32 hsync_len;		/* length of horizontal sync 水平同步信号的长度*/
	__u32 vsync_len;		/* length of vertical sync	垂直同步信号的长度*/
	__u32 sync;			/* see FB_SYNC_*标志*/
	__u32 vmode;			/* see FB_VMODE_*标志*/
	__u32 rotate;			/* angle we rotate counter clockwise  角度逆时针旋转*/
	__u32 reserved[5];		/* Reserved for future compatibility */
};


视频硬件的固定信息

struct fb_fix_screeninfo {
	char id[16];			/* identification string eg "TT Builtin" */
	unsigned long smem_start;	/* framebuffer物理地址开始*/
					 
	__u32 smem_len;			/* framebuffer 物理内存长度*/
	__u32 type;			/* see FB_TYPE_*		*/
	__u32 type_aux;			/* Interleave for interleaved Planes */
	__u32 visual;			/* 视频模式	*/ 
	__u16 xpanstep;			/* zero if no hardware panning  */
	__u16 ypanstep;			/* zero if no hardware panning  */
	__u16 ywrapstep;		/* zero if no hardware ywrap    */
	__u32 line_length;		/* length of a line in bytes  行字节数  */
	unsigned long mmio_start;	/* I/O映射内存起点   */
					/* (physical address) */
	__u32 mmio_len;			/* I/O映射内存长度  */
	__u32 accel;			/* Indicate to driver which	*/
					/*  specific chip/card we have	*/
	__u16 reserved[3];		/* Reserved for future compatibility */
};


fb_cmap规定了颜色映射

struct fb_cmap {
	__u32 start;			/* First entry	*/
	__u32 len;			/* Number of entries */
	__u16 *red;			/* Red values	*/
	__u16 *green;
	__u16 *blue;
	__u16 *transp;			/* transparency, can be NULL  透明度,可以为NULL*/
};

 

帧缓冲关键数据结构

struct fb_info {
	atomic_t count;
	int node;
	int flags;
	struct mutex lock;		/* Lock for open/release/ioctl funcs */
	struct mutex mm_lock;		/* Lock for fb_mmap and smem_* fields */
	struct fb_var_screeninfo var;	/* 可变屏幕参数 */
	struct fb_fix_screeninfo fix;	/* 固定屏幕参数 */
	struct fb_monspecs monspecs;	/* Current Monitor specs */
	struct work_struct queue;	/* Framebuffer 事件队列 */
	struct fb_pixmap pixmap;	/* Image hardware mapper */
	struct fb_pixmap sprite;	/* Cursor hardware mapper */
	struct fb_cmap cmap;		/* Current cmap */
	struct list_head modelist;      /* mode list */
	struct fb_videomode *mode;	/* 当前视频模式 */

#ifdef CONFIG_FB_BACKLIGHT
	/* assigned backlight device */
	/* set before framebuffer registration, 
	   remove after unregister */
	struct backlight_device *bl_dev;//背光设备

	/* Backlight level curve */
	struct mutex bl_curve_mutex;	
	u8 bl_curve[FB_BACKLIGHT_LEVELS];
#endif
#ifdef CONFIG_FB_DEFERRED_IO
	struct delayed_work deferred_work;
	struct fb_deferred_io *fbdefio;
#endif

	struct fb_ops *fbops;
	struct device *device;		/* This is the parent 父设备 */
	struct device *dev;		/* This is this fb device 本设备*/
	int class_flag;                    /* private sysfs flags 私有sysfs标志*/
#ifdef CONFIG_FB_TILEBLITTING
	struct fb_tile_ops *tileops;    /* Tile Blitting */
#endif
	char __iomem *screen_base;	/* Virtual address 虚拟地址*/
	unsigned long screen_size;	/* Amount of ioremapped VRAM or 0 */ 
	void *pseudo_palette;		/* Fake palette of 16 colors 16位颜色表*/ 
#define FBINFO_STATE_RUNNING	0
#define FBINFO_STATE_SUSPENDED	1
	u32 state;			/* 硬件状态 */
	void *fbcon_par;                /* fbcon use-only private area */
	/* From here on everything is device dependent */
	void *par;
	/* we need the PCI or similar aperture base/size not
	   smem_start/size as smem_start may just be an object
	   allocated inside the aperture so may not actually overlap */
	struct apertures_struct {
		unsigned int count;
		struct aperture {
			resource_size_t base;
			resource_size_t size;
		} ranges[0];
	} *apertures;
};

 

 帧缓冲操作

struct fb_ops {
	/* open/release and usage marking */
	struct module *owner;
	int (*fb_open)(struct fb_info *info, int user);//打开
	int (*fb_release)(struct fb_info *info, int user);//释放
	/*读接口*/
	ssize_t (*fb_read)(struct fb_info *info, char __user *buf,
			   size_t count, loff_t *ppos);
	/*写接口*/
	ssize_t (*fb_write)(struct fb_info *info, const char __user *buf,
			    size_t count, loff_t *ppos);

	/*sanity check on video parameters*/ //视频参数的合法性检查
	int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);

	/* configure the video controller registers */ 
	int (*fb_set_par)(struct fb_info *info);//配置视频参数

	//配置颜色寄存器
	int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,
			    unsigned blue, unsigned transp, struct fb_info *info);

	//批量配置颜色寄存器
	int (*fb_setcmap)(struct fb_cmap *cmap, struct fb_info *info);

	/* blank display */ //清空显示
	int (*fb_blank)(int blank, struct fb_info *info);

	/* pan display */ //虚拟屏的游动显示
	int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);

	/* Draws a rectangle */ //填充区域
	void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);

	/* Copy data from area to another */ //复制区域
	void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);

	/* Draws a image to the display */ //显示图像
	void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);

	/* Draws cursor */  //光标接口
	int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);

	/* Rotates the display */ //旋转显示
	void (*fb_rotate)(struct fb_info *info, int angle);

	/* wait for blit idle, optional */ //等待了位图的闲置,可选
	int (*fb_sync)(struct fb_info *info);

	/* 特定的ioctl */
	int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
			unsigned long arg);

	/* 32位兼容的ioctl*/
	int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
			unsigned long arg);

	/* 内存映射 */ 
	int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);

	/* 获取屏幕参数 */
	void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
			    struct fb_var_screeninfo *var);

	/* 释放资源*/
	void (*fb_destroy)(struct fb_info *info);

	/* called at KDB enter and leave time to prepare the console */
	int (*fb_debug_enter)(struct fb_info *info);
	int (*fb_debug_leave)(struct fb_info *info);
};

 


 

你可能感兴趣的:(LCD驱动)