Linux LCD重要數據結構解析

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.5\include\Linux
 

用法:

//驅動程序必須用這個結構體定義的成員,並且從平臺設備數據中取出信息對該結構體進行填充

 

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;
};
 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章