zoukankan      html  css  js  c++  java
  • uboot-imx RGB24分析

    在mx6q_sabrsd.c文件中
    函数else if(strcmp(s, "YUV444") == 0)
    val = IPU_PIX_FMT_YUV444;
    else
    val = IPU_PIX_FMT_RGB666;
    printf("fixfmt = %s %d ", s, val); ,其中val=RGB24 di=1 lvsd=fb_videomode
    ret = ipuv3_fb_init(&lvds_xga, di, val,
    DI_PCLK_LDB, 65000000);
    此后进入ipuv3_fb_init这个函数
    分析发现ret = ipuv3_fb_init(&lvds_xga, di, val,DI_PCLK_LDB, 65000000);

    int ipuv3_fb_init(struct fb_videomode *mode, int di, int interface_pix_fmt(即是val),
    ipu_di_clk_parent_t di_clk_parent, int di_clk_val)
    {
    int ret;

    ret = ipu_probe(di, di_clk_parent, di_clk_val);
    if (ret)
    puts("Error initializing IPU ");

    debug("Framebuffer at 0x%x ", (unsigned int)lcd_base);
    ret = mxcfb_probe(interface_pix_fmt, mode, di);

    return ret;
    }
    interface_pix_fmt==RGB24
    struct fb_videomode *mode ==&lvds_xga
    di ==1
    发现mxcfb_probe这个函数设计到了RGB24==interface_pix_fmt, 的形式
    此时我们再进入mxcfb_probe这个函数分析
    static int mxcfb_probe(u32 interface_pix_fmt, struct fb_videomode *mode, int di)
    {
    struct fb_info *fbi;
    struct mxcfb_info *mxcfbi;
    int ret = 0;

    /*
    * Initialize FB structures
    */
    fbi = mxcfb_init_fbinfo();
    if (!fbi) {
    ret = -ENOMEM;
    goto err0;
    }
    mxcfbi = (struct mxcfb_info *)fbi->par;

    if (!g_dp_in_use) {
    mxcfbi->ipu_ch = MEM_BG_SYNC;
    mxcfbi->blank = FB_BLANK_UNBLANK;
    } else {
    mxcfbi->ipu_ch = MEM_DC_SYNC;
    mxcfbi->blank = FB_BLANK_POWERDOWN;
    }

    mxcfbi->ipu_di = di;

    ipu_disp_set_global_alpha(mxcfbi->ipu_ch, 1, 0x80);
    ipu_disp_set_color_key(mxcfbi->ipu_ch, 0, 0);
    strcpy(fbi->fix.id, "DISP3 BG");

    g_dp_in_use = 1;

    mxcfb_info[mxcfbi->ipu_di] = fbi;

    /* Need dummy values until real panel is configured */
    fbi->var.xres = 640;
    fbi->var.yres = 480;
    fbi->var.bits_per_pixel = 16;

    发现在这个地方RGB24被赋值给了mxcfbi->ipu_di_pix_fmt,我们再来分析mxcfbi这个函数

    mxcfbi->ipu_di_pix_fmt = interface_pix_fmt;//RGB24
    fb_videomode_to_var(&fbi->var, mode);

    mxcfb_check_var(&fbi->var, fbi);

    /* Default Y virtual size is 2x panel size */
    fbi->var.yres_virtual = fbi->var.yres * 2;

    mxcfb_set_fix(fbi);

    /* alocate fb first */
    if (mxcfb_map_video_memory(fbi) < 0)
    return -ENOMEM;

    mxcfb_set_par(fbi);

    /* Setting panel_info for lcd */
    panel_info.vl_col = fbi->var.xres;
    panel_info.vl_row = fbi->var.yres;
    panel_info.vl_bpix = LCD_BPP;

    lcd_line_length = (panel_info.vl_col * NBITS(panel_info.vl_bpix)) / 8;

    debug("MXC IPUV3 configured "
    "XRES = %d YRES = %d BitsXpixel = %d ",
    panel_info.vl_col,
    panel_info.vl_row,
    panel_info.vl_bpix);

    ipu_dump_registers();

    return 0;

    err0:
    return ret;
    }

    我们在mxc_ipuv3_fb.c这个文件中发现了mxcfbi的定义

    struct mxcfb_info {
    int blank;
    ipu_channel_t ipu_ch;
    int ipu_di;
    u32 ipu_di_pix_fmt;
    unsigned char overlay;
    unsigned char alpha_chan_en;
    dma_addr_t alpha_phy_addr0;
    dma_addr_t alpha_phy_addr1;
    void *alpha_virt_addr0;
    void *alpha_virt_addr1;
    uint32_t alpha_mem_len;
    uint32_t cur_ipu_buf;
    uint32_t cur_ipu_alpha_buf;

    u32 pseudo_palette[16];
    };

    struct fb_info {

    struct fb_var_screeninfo var; /* Current var */
    unsigned long smem_start; /* Start of frame buffer mem */
    /* (physical address) */
    unsigned int smem_len; /* Length of frame buffer mem */
    unsigned int type; /* see FB_TYPE_* */
    unsigned int line_length; /* length of a line in bytes */

    char *screen_base;
    unsigned long screen_size;
    int logo_height;
    unsigned int logo_size;
    };

  • 相关阅读:
    寒假Day31:CSU1508地图的四着色bfs+dfs
    寒假Day32:链式前向星
    寒假Day30:HDU4507吉哥系列故事恨7不成妻数位dp
    寒假Day35:HTML表格+图像+超链接
    寒假Day35:2018蓝桥杯 B组
    寒假Day33:HTML入门
    寒假Day30:二叉树的遍历相关题型(求先序或后序、搜索树的判断)
    POJ 1177 Picture (线段树+离散化+扫描线) 详解
    MFC对话框中文出现乱码的解决方法
    如何枚举系统COM串口
  • 原文地址:https://www.cnblogs.com/haoxing990/p/4669957.html
Copyright © 2011-2022 走看看