Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static int mdss_fb_register(struct msm_fb_data_type *mfd)
- {
- int ret = -ENODEV;
- int bpp;
- struct mdss_panel_info *panel_info = mfd->panel_info;
- struct fb_info *fbi = mfd->fbi;
- struct fb_fix_screeninfo *fix;
- struct fb_var_screeninfo *var;
- int *id;
- /*
- * fb info initialization
- */
- fix = &fbi->fix;
- var = &fbi->var;
- fix->type_aux = 0; /* if type == FB_TYPE_INTERLEAVED_PLANES */
- fix->visual = FB_VISUAL_TRUECOLOR; /* True Color */
- fix->ywrapstep = 0; /* No support */
- fix->mmio_start = 0; /* No MMIO Address */
- fix->mmio_len = 0; /* No MMIO Address */
- fix->accel = FB_ACCEL_NONE;/* FB_ACCEL_MSM needes to be added in fb.h */
- var->xoffset = 0, /* Offset from virtual to visible */
- var->yoffset = 0, /* resolution */
- var->grayscale = 0, /* No graylevels */
- var->nonstd = 0, /* standard pixel format */
- var->activate = FB_ACTIVATE_VBL, /* activate it at vsync */
- var->height = -1, /* height of picture in mm */
- var->width = -1, /* width of picture in mm */
- var->accel_flags = 0, /* acceleration flags */
- var->sync = 0, /* see FB_SYNC_* */
- var->rotate = 0, /* angle we rotate counter clockwise */
- mfd->op_enable = false;
- switch (mfd->fb_imgType) {
- case MDP_RGB_565:
- fix->type = FB_TYPE_PACKED_PIXELS;
- fix->xpanstep = 1;
- fix->ypanstep = 1;
- var->vmode = FB_VMODE_NONINTERLACED;
- var->blue.offset = 0;
- var->green.offset = 5;
- var->red.offset = 11;
- var->blue.length = 5;
- var->green.length = 6;
- var->red.length = 5;
- var->blue.msb_right = 0;
- var->green.msb_right = 0;
- var->red.msb_right = 0;
- var->transp.offset = 0;
- var->transp.length = 0;
- bpp = 2;
- break;
- case MDP_RGB_888:
- fix->type = FB_TYPE_PACKED_PIXELS;
- fix->xpanstep = 1;
- fix->ypanstep = 1;
- var->vmode = FB_VMODE_NONINTERLACED;
- var->blue.offset = 0;
- var->green.offset = 8;
- var->red.offset = 16;
- var->blue.length = 8;
- var->green.length = 8;
- var->red.length = 8;
- var->blue.msb_right = 0;
- var->green.msb_right = 0;
- var->red.msb_right = 0;
- var->transp.offset = 0;
- var->transp.length = 0;
- bpp = 3;
- break;
- case MDP_ARGB_8888:
- fix->type = FB_TYPE_PACKED_PIXELS;
- fix->xpanstep = 1;
- fix->ypanstep = 1;
- var->vmode = FB_VMODE_NONINTERLACED;
- var->blue.offset = 24;
- var->green.offset = 16;
- var->red.offset = 8;
- var->blue.length = 8;
- var->green.length = 8;
- var->red.length = 8;
- var->blue.msb_right = 0;
- var->green.msb_right = 0;
- var->red.msb_right = 0;
- var->transp.offset = 0;
- var->transp.length = 8;
- bpp = 4;
- break;
- case MDP_RGBA_8888:
- fix->type = FB_TYPE_PACKED_PIXELS;
- fix->xpanstep = 1;
- fix->ypanstep = 1;
- var->vmode = FB_VMODE_NONINTERLACED;
- var->blue.offset = 16;
- var->green.offset = 8;
- var->red.offset = 0;
- var->blue.length = 8;
- var->green.length = 8;
- var->red.length = 8;
- var->blue.msb_right = 0;
- var->green.msb_right = 0;
- var->red.msb_right = 0;
- var->transp.offset = 24;
- var->transp.length = 8;
- bpp = 4;
- break;
- case MDP_YCRYCB_H2V1:
- fix->type = FB_TYPE_INTERLEAVED_PLANES;
- fix->xpanstep = 2;
- fix->ypanstep = 1;
- var->vmode = FB_VMODE_NONINTERLACED;
- /* how about R/G/B offset? */
- var->blue.offset = 0;
- var->green.offset = 5;
- var->red.offset = 11;
- var->blue.length = 5;
- var->green.length = 6;
- var->red.length = 5;
- var->blue.msb_right = 0;
- var->green.msb_right = 0;
- var->red.msb_right = 0;
- var->transp.offset = 0;
- var->transp.length = 0;
- bpp = 2;
- break;
- default:
- pr_err("msm_fb_init: fb %d unkown image type!\n",
- mfd->index);
- return ret;
- }
- var->xres = panel_info->xres;
- if (mfd->split_display)
- var->xres *= 2;
- fix->type = panel_info->is_3d_panel;
- if (mfd->mdp.fb_stride)
- fix->line_length = mfd->mdp.fb_stride(mfd->index, var->xres,
- bpp);
- else
- fix->line_length = var->xres * bpp;
- var->yres = panel_info->yres;
- if (panel_info->physical_width)
- var->width = panel_info->physical_width;
- if (panel_info->physical_height)
- var->height = panel_info->physical_height;
- var->xres_virtual = var->xres;
- var->yres_virtual = panel_info->yres * mfd->fb_page;
- var->bits_per_pixel = bpp * 8; /* FrameBuffer color depth */
- var->upper_margin = panel_info->lcdc.v_back_porch;
- var->lower_margin = panel_info->lcdc.v_front_porch;
- var->vsync_len = panel_info->lcdc.v_pulse_width;
- var->left_margin = panel_info->lcdc.h_back_porch;
- var->right_margin = panel_info->lcdc.h_front_porch;
- var->hsync_len = panel_info->lcdc.h_pulse_width;
- var->pixclock = panel_info->clk_rate / 1000;
- /* id field for fb app */
- id = (int *)&mfd->panel;
- snprintf(fix->id, sizeof(fix->id), "mdssfb_%x", (u32) *id);
- fbi->fbops = &mdss_fb_ops;
- fbi->flags = FBINFO_FLAG_DEFAULT;
- fbi->pseudo_palette = mdss_fb_pseudo_palette;
- mfd->ref_cnt = 0;
- mfd->panel_power_on = false;
- mfd->dcm_state = DCM_UNINIT;
- mdss_fb_parse_dt(mfd);
- if (mdss_fb_alloc_fbmem(mfd))
- pr_warn("unable to allocate fb memory in fb register\n");
- mfd->op_enable = true;
- mutex_init(&mfd->update.lock);
- mutex_init(&mfd->no_update.lock);
- mutex_init(&mfd->mdp_sync_pt_data.sync_mutex);
- atomic_set(&mfd->mdp_sync_pt_data.commit_cnt, 0);
- atomic_set(&mfd->commits_pending, 0);
- atomic_set(&mfd->ioctl_ref_cnt, 0);
- atomic_set(&mfd->kickoff_pending, 0);
- init_timer(&mfd->no_update.timer);
- mfd->no_update.timer.function = mdss_fb_no_update_notify_timer_cb;
- mfd->no_update.timer.data = (unsigned long)mfd;
- mfd->update.ref_count = 0;
- mfd->no_update.ref_count = 0;
- init_completion(&mfd->update.comp);
- init_completion(&mfd->no_update.comp);
- init_completion(&mfd->power_off_comp);
- init_completion(&mfd->power_set_comp);
- init_waitqueue_head(&mfd->commit_wait_q);
- init_waitqueue_head(&mfd->idle_wait_q);
- init_waitqueue_head(&mfd->ioctl_q);
- init_waitqueue_head(&mfd->kickoff_wait_q);
- ret = fb_alloc_cmap(&fbi->cmap, 256, 0);
- if (ret)
- pr_err("fb_alloc_cmap() failed!\n");
- if (register_framebuffer(fbi) < 0) {
- fb_dealloc_cmap(&fbi->cmap);
- mfd->op_enable = false;
- return -EPERM;
- }
- pr_info("FrameBuffer[%d] %dx%d registered successfully!\n", mfd->index,
- fbi->var.xres, fbi->var.yres);
- #ifdef CONFIG_LGE_HANDLE_PANIC
- /* save fb address for crash handler display buffer */
- if (mfd->index == 0)
- lge_set_fb_addr((unsigned int)mfd->fbi->fix.smem_start);
- #endif
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement