我是靠谱客的博主 热心花生,最近开发中收集的这篇文章主要介绍Linux LCD重要数据结构解析一、struct fb_info二、struct fb_videomode三、 struct s3c_fb_platdata (填充platform_data),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Table of Contents

一、struct fb_info

1.1、struct fb_var_screeninfo

1.2、struct fb_fix_screeninfo

二、struct fb_videomode

三、 struct s3c_fb_platdata (填充platform_data)

3.1、struct s3c_fb_pd_win(窗口结构体)


一、struct fb_info

Fb.h linux-3.5includeLinux
 

用法:

//驱动程序必须用这个结构体定义的成员,并且从平台设备数据中取出信息对该结构体进行填充

 

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; /* LCD 屏的可变参数 */
struct fb_fix_screeninfo fix; /* LCD 屏的可变参数*/

struct fb_monspecs monspecs; /* Current Monitor specs */
struct work_struct queue; /* Framebuffer event queue */
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; /* current 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; /* 真正操作 LCD 硬件寄存器的方法集合 */
struct device *device; /* This is the parent */
struct device *dev; /* This is this fb device */
int class_flag; /* private sysfs flags */
#ifdef CONFIG_FB_TILEBLITTING
struct fb_tile_ops *tileops; /* Tile Blitting */
#endif
char __iomem *screen_base; /* LCD 显存的虚拟址 */
unsigned long screen_size; /* Amount of ioremapped VRAM or 0 */
void *pseudo_palette; /* 指向 16 种颜色调试板,其实就是一块内存 */
#define FBINFO_STATE_RUNNING 0
#define FBINFO_STATE_SUSPENDED 1
u32 state; /* Hardware state i.e suspend */
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;
};

1.1、struct fb_var_screeninfo

struct fb_var_screeninfo {
__u32 xres; /* 可见屏幕一行有多少个像素点*/
__u32 yres; /* 可见屏幕一屏有多少行*/
__u32 xres_virtual; /* 虚拟屏幕一行有多少个像素点*/
__u32 yres_virtual; /* 虚拟屏幕一屏有多少行*/
__u32 xoffset; /*虚拟屏到实际屏的水平偏移量*/
__u32 yoffset; /*虚拟屏到实际屏的垂直偏移量*/

__u32 bits_per_pixel; /* LCD 屏工作时 BPP */
__u32 grayscale; /* 0 = 彩屏, 1 = 灰度,非彩屏,一般不使用了 */
struct fb_bitfield red; /*红色的长度和偏移信息, */
struct fb_bitfield green; /* 绿色的长度和偏移信息, */
struct fb_bitfield blue; /* 蓝色的长度和偏移信息, */
struct fb_bitfield transp; /* 透明度的长度和偏移信息,*/
__u32 nonstd; /* 0==0 表示标准像素格式,基本都是标准*/
//修改可变参数生效时刻,一般是马上生效,对应值是 0,宏名是 FB_ACTIVATE_NOW
__u32 activate; /* see FB_ACTIVATE_* :FB_ACTIVATE_NOW,FB_ACTIVATE_NXTOPEN */
//存放物理屏的物理尺寸,是外观尺寸,单位 mm ,可选的
__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)


以下是 LCD 屏的工作时序,对应的前面移植 LCD 传递下来的 struct fb_videomode 结构 */
__u32 pixclock; /* pixel clock in ps (pico seconds) */
__u32 left_margin; /* time from sync to picture HBPD*/
__u32 right_margin; /* time from picture to sync HFPD */
__u32 upper_margin; /* time from sync to picture VBPD*/
__u32 lower_margin; /* VFPB */
__u32 hsync_len; /* length of horizontal sync HSPW*/
__u32 vsync_len; /* length of vertical sync VSPW */

__u32 sync; /* see FB_SYNC_* */
__u32 vmode; /* see FB_VMODE_* */
__u32 rotate; /* angle we rotate counter clockwise */
__u32 colorspace; /* colorspace for FOURCC-based modes */
__u32 reserved[4]; /* Reserved for future compatibility */
};

1.2、struct fb_fix_screeninfo

struct fb_fix_screeninfo {
char id[16]; /*lcd 标识名,随便*/
unsigned long smem_start; /*显存物理起始地址,注意,是物理址,不是虚拟地址*/
__u32 smem_len; /*显存的内存长度 */
__u32 type; /* see FB_TYPE_*, FB_TYPE_PACKED_PIXELS 表示像素类型,一般都标准像素格式 */
__u32 type_aux; /* Interleave for interleaved Planes */
__u32 visual; /* FB_VISUAL_TRUECOLOR,FB_VISUAL_PSEUDOCOLOR */
__u16 xpanstep; /* 如果没有硬件平移功能设置为 0 */
__u16 ypanstep; /*如果没有硬件平移功能设置为 0 */

__u16 ywrapstep; /* zero if no hardware ywrap */
__u32 line_length; /* 一行占用的内存字节数 */
unsigned long mmio_start; /* Start of Memory Mapped I/O, (physical address) */
__u32 mmio_len; /* Length of Memory Mapped I/O */
__u32 accel; /* Indicate to driver which specific chip/card we have */
__u16 capabilities; /* see FB_CAP_* */
__u16 reserved[2]; /* Reserved for future compatibility */
};

二、struct fb_videomode

定义文件: linux/fb.h

用法:

//struct fb_videomode 结构体定义的成员给平台驱动传递时间参数,便于LCD平台驱动程序设置时间相关的寄存器

 

struct fb_videomode {
const char *name; /* 名字,随便 */
u32 refresh; /* optional */
u32 xres; /* 物理屏的有水平方向的分辨率 */
u32 yres; /* 物理屏的有垂直方向的分辨率 */
u32 pixclock; /* LCD 屏的 VCLK 频率,单位是皮秒, 10^6/VCLK ,VCLK 单位 M */
u32 left_margin; /* 对于 lcd 屏的 HBPD */
u32 right_margin; /* 对于 lcd 屏的 HFPD */
u32 upper_margin; /* 对于 lcd 屏的 VBPD */
u32 lower_margin; /* 对于 lcd 屏的 VFPD */
u32 hsync_len; /* 对于 lcd 屏的水平同步脉冲信号宽度 HSPW*/
u32 vsync_len; /* 对于 lcd 屏的垂直同步脉冲信号宽度 VSPW*/
u32 sync; /* 表示同步脉冲信号极性 */
u32 vmode; /* 表示 LCD 屏的扫描方式*/
u32 flag;
};


sync 值内核有规定好对应的宏:
#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */
#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */
flag 值内核有规定好对应的宏:
#define FB_VMODE_NONINTERLACED 0 /* non interlaced 非隔行扫描 */
#define FB_VMODE_INTERLACED 1 /* interlaced 隔行扫描*/
#define FB_VMODE_DOUBLE 2 /* double scan 双扫描*/
#define FB_VMODE_ODD_FLD_FIRST 4 /* interlaced: top line first */

三、 struct s3c_fb_platdata (填充platform_data)

用法:

//用s3c_fb_platdata结构体定义的成员用于填充platform_device->dev->platform_data成员,以便于lcd平台驱动取出平台数据

struct s3c_fb_platdata {
    void    (*setup_gpio)(void);

    struct s3c_fb_pd_win    *win[S3C_FB_MAX_WIN]; //tiny4412 LCD有5个窗口
    struct fb_videomode     *vtiming;

    u32             vidcon0;
    u32             vidcon1;
};

3.1、struct s3c_fb_pd_win(窗口结构体)

struct s3c_fb_pd_win {
    unsigned short        default_bpp;
    unsigned short        max_bpp;
    unsigned short        xres;
    unsigned short        yres;
    unsigned short        virtual_x;
    unsigned short        virtual_y;
    unsigned short        width;
    unsigned short        height;
};
 

 

 

 

最后

以上就是热心花生为你收集整理的Linux LCD重要数据结构解析一、struct fb_info二、struct fb_videomode三、 struct s3c_fb_platdata (填充platform_data)的全部内容,希望文章能够帮你解决Linux LCD重要数据结构解析一、struct fb_info二、struct fb_videomode三、 struct s3c_fb_platdata (填充platform_data)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部