Advertisement
Guest User

Untitled

a guest
May 28th, 2016
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.33 KB | None | 0 0
  1. static int mdss_fb_register(struct msm_fb_data_type *mfd)
  2. {
  3. int ret = -ENODEV;
  4. int bpp;
  5. struct mdss_panel_info *panel_info = mfd->panel_info;
  6. struct fb_info *fbi = mfd->fbi;
  7. struct fb_fix_screeninfo *fix;
  8. struct fb_var_screeninfo *var;
  9. int *id;
  10.  
  11. /*
  12. * fb info initialization
  13. */
  14. fix = &fbi->fix;
  15. var = &fbi->var;
  16.  
  17. fix->type_aux = 0; /* if type == FB_TYPE_INTERLEAVED_PLANES */
  18. fix->visual = FB_VISUAL_TRUECOLOR; /* True Color */
  19. fix->ywrapstep = 0; /* No support */
  20. fix->mmio_start = 0; /* No MMIO Address */
  21. fix->mmio_len = 0; /* No MMIO Address */
  22. fix->accel = FB_ACCEL_NONE;/* FB_ACCEL_MSM needes to be added in fb.h */
  23.  
  24. var->xoffset = 0, /* Offset from virtual to visible */
  25. var->yoffset = 0, /* resolution */
  26. var->grayscale = 0, /* No graylevels */
  27. var->nonstd = 0, /* standard pixel format */
  28. var->activate = FB_ACTIVATE_VBL, /* activate it at vsync */
  29. var->height = -1, /* height of picture in mm */
  30. var->width = -1, /* width of picture in mm */
  31. var->accel_flags = 0, /* acceleration flags */
  32. var->sync = 0, /* see FB_SYNC_* */
  33. var->rotate = 0, /* angle we rotate counter clockwise */
  34. mfd->op_enable = false;
  35.  
  36. switch (mfd->fb_imgType) {
  37. case MDP_RGB_565:
  38. fix->type = FB_TYPE_PACKED_PIXELS;
  39. fix->xpanstep = 1;
  40. fix->ypanstep = 1;
  41. var->vmode = FB_VMODE_NONINTERLACED;
  42. var->blue.offset = 0;
  43. var->green.offset = 5;
  44. var->red.offset = 11;
  45. var->blue.length = 5;
  46. var->green.length = 6;
  47. var->red.length = 5;
  48. var->blue.msb_right = 0;
  49. var->green.msb_right = 0;
  50. var->red.msb_right = 0;
  51. var->transp.offset = 0;
  52. var->transp.length = 0;
  53. bpp = 2;
  54. break;
  55.  
  56. case MDP_RGB_888:
  57. fix->type = FB_TYPE_PACKED_PIXELS;
  58. fix->xpanstep = 1;
  59. fix->ypanstep = 1;
  60. var->vmode = FB_VMODE_NONINTERLACED;
  61. var->blue.offset = 0;
  62. var->green.offset = 8;
  63. var->red.offset = 16;
  64. var->blue.length = 8;
  65. var->green.length = 8;
  66. var->red.length = 8;
  67. var->blue.msb_right = 0;
  68. var->green.msb_right = 0;
  69. var->red.msb_right = 0;
  70. var->transp.offset = 0;
  71. var->transp.length = 0;
  72. bpp = 3;
  73. break;
  74.  
  75. case MDP_ARGB_8888:
  76. fix->type = FB_TYPE_PACKED_PIXELS;
  77. fix->xpanstep = 1;
  78. fix->ypanstep = 1;
  79. var->vmode = FB_VMODE_NONINTERLACED;
  80. var->blue.offset = 24;
  81. var->green.offset = 16;
  82. var->red.offset = 8;
  83. var->blue.length = 8;
  84. var->green.length = 8;
  85. var->red.length = 8;
  86. var->blue.msb_right = 0;
  87. var->green.msb_right = 0;
  88. var->red.msb_right = 0;
  89. var->transp.offset = 0;
  90. var->transp.length = 8;
  91. bpp = 4;
  92. break;
  93.  
  94. case MDP_RGBA_8888:
  95. fix->type = FB_TYPE_PACKED_PIXELS;
  96. fix->xpanstep = 1;
  97. fix->ypanstep = 1;
  98. var->vmode = FB_VMODE_NONINTERLACED;
  99. var->blue.offset = 16;
  100. var->green.offset = 8;
  101. var->red.offset = 0;
  102. var->blue.length = 8;
  103. var->green.length = 8;
  104. var->red.length = 8;
  105. var->blue.msb_right = 0;
  106. var->green.msb_right = 0;
  107. var->red.msb_right = 0;
  108. var->transp.offset = 24;
  109. var->transp.length = 8;
  110. bpp = 4;
  111. break;
  112.  
  113. case MDP_YCRYCB_H2V1:
  114. fix->type = FB_TYPE_INTERLEAVED_PLANES;
  115. fix->xpanstep = 2;
  116. fix->ypanstep = 1;
  117. var->vmode = FB_VMODE_NONINTERLACED;
  118.  
  119. /* how about R/G/B offset? */
  120. var->blue.offset = 0;
  121. var->green.offset = 5;
  122. var->red.offset = 11;
  123. var->blue.length = 5;
  124. var->green.length = 6;
  125. var->red.length = 5;
  126. var->blue.msb_right = 0;
  127. var->green.msb_right = 0;
  128. var->red.msb_right = 0;
  129. var->transp.offset = 0;
  130. var->transp.length = 0;
  131. bpp = 2;
  132. break;
  133.  
  134. default:
  135. pr_err("msm_fb_init: fb %d unkown image type!\n",
  136. mfd->index);
  137. return ret;
  138. }
  139.  
  140. var->xres = panel_info->xres;
  141. if (mfd->split_display)
  142. var->xres *= 2;
  143.  
  144. fix->type = panel_info->is_3d_panel;
  145. if (mfd->mdp.fb_stride)
  146. fix->line_length = mfd->mdp.fb_stride(mfd->index, var->xres,
  147. bpp);
  148. else
  149. fix->line_length = var->xres * bpp;
  150.  
  151. var->yres = panel_info->yres;
  152. if (panel_info->physical_width)
  153. var->width = panel_info->physical_width;
  154. if (panel_info->physical_height)
  155. var->height = panel_info->physical_height;
  156. var->xres_virtual = var->xres;
  157. var->yres_virtual = panel_info->yres * mfd->fb_page;
  158. var->bits_per_pixel = bpp * 8; /* FrameBuffer color depth */
  159. var->upper_margin = panel_info->lcdc.v_back_porch;
  160. var->lower_margin = panel_info->lcdc.v_front_porch;
  161. var->vsync_len = panel_info->lcdc.v_pulse_width;
  162. var->left_margin = panel_info->lcdc.h_back_porch;
  163. var->right_margin = panel_info->lcdc.h_front_porch;
  164. var->hsync_len = panel_info->lcdc.h_pulse_width;
  165. var->pixclock = panel_info->clk_rate / 1000;
  166.  
  167. /* id field for fb app */
  168.  
  169. id = (int *)&mfd->panel;
  170.  
  171. snprintf(fix->id, sizeof(fix->id), "mdssfb_%x", (u32) *id);
  172.  
  173. fbi->fbops = &mdss_fb_ops;
  174. fbi->flags = FBINFO_FLAG_DEFAULT;
  175. fbi->pseudo_palette = mdss_fb_pseudo_palette;
  176.  
  177. mfd->ref_cnt = 0;
  178. mfd->panel_power_on = false;
  179. mfd->dcm_state = DCM_UNINIT;
  180.  
  181. mdss_fb_parse_dt(mfd);
  182.  
  183. if (mdss_fb_alloc_fbmem(mfd))
  184. pr_warn("unable to allocate fb memory in fb register\n");
  185.  
  186. mfd->op_enable = true;
  187.  
  188. mutex_init(&mfd->update.lock);
  189. mutex_init(&mfd->no_update.lock);
  190. mutex_init(&mfd->mdp_sync_pt_data.sync_mutex);
  191. atomic_set(&mfd->mdp_sync_pt_data.commit_cnt, 0);
  192. atomic_set(&mfd->commits_pending, 0);
  193. atomic_set(&mfd->ioctl_ref_cnt, 0);
  194. atomic_set(&mfd->kickoff_pending, 0);
  195.  
  196. init_timer(&mfd->no_update.timer);
  197. mfd->no_update.timer.function = mdss_fb_no_update_notify_timer_cb;
  198. mfd->no_update.timer.data = (unsigned long)mfd;
  199. mfd->update.ref_count = 0;
  200. mfd->no_update.ref_count = 0;
  201. init_completion(&mfd->update.comp);
  202. init_completion(&mfd->no_update.comp);
  203. init_completion(&mfd->power_off_comp);
  204. init_completion(&mfd->power_set_comp);
  205. init_waitqueue_head(&mfd->commit_wait_q);
  206. init_waitqueue_head(&mfd->idle_wait_q);
  207. init_waitqueue_head(&mfd->ioctl_q);
  208. init_waitqueue_head(&mfd->kickoff_wait_q);
  209.  
  210. ret = fb_alloc_cmap(&fbi->cmap, 256, 0);
  211. if (ret)
  212. pr_err("fb_alloc_cmap() failed!\n");
  213.  
  214. if (register_framebuffer(fbi) < 0) {
  215. fb_dealloc_cmap(&fbi->cmap);
  216.  
  217. mfd->op_enable = false;
  218. return -EPERM;
  219. }
  220.  
  221. pr_info("FrameBuffer[%d] %dx%d registered successfully!\n", mfd->index,
  222. fbi->var.xres, fbi->var.yres);
  223.  
  224. #ifdef CONFIG_LGE_HANDLE_PANIC
  225. /* save fb address for crash handler display buffer */
  226. if (mfd->index == 0)
  227. lge_set_fb_addr((unsigned int)mfd->fbi->fix.smem_start);
  228. #endif
  229.  
  230. return 0;
  231. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement