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

  • 相关阅读:
    如何成为一个合格的数据架构师?
    证道:零售企业如何借助数据智能提升人效?| 数智加速度10课回顾
    终于,数据中台成为3000万企业的增长引擎
    凯德中国 × 阿里云 × 奇点云 | 沉淀数据资产,遇见数智未来
    追风:数据中台如何驱动全域消费者运营?| 数智加速度09课回顾
    何夕:跟上趋势,拥抱全域数据中台 | 数智加速度08课回顾
    南弈:释放数据价值的「三个关键点」 | 数智加速度07课回顾
    百然:智能算法如何落地商业化?| 数智加速度06课回顾
    星魁:管理数据资产的「五步骤」与「六要素」 | 数智加速度05课回顾
    pytest系列(四)- pytest+allure+jenkins
  • 原文地址:https://www.cnblogs.com/haoxing990/p/4669957.html
Copyright © 2011-2022 走看看