转自:http://blog.csdn.net/liujia2100/article/details/9009063

版权声明:本文为博主原创文章,未经博主允许不得转载。

之前移植LCD的时候,一切正常,但是当尝试把log输出到lcd的时候,总是会出现10分钟黑屏,无论如何都唤不醒
通过打log,最终定位到s3c_fb_blank这个函数。

  1. static int s3c_fb_blank(int blank_mode, struct fb_info *info)
  2. {
  3. struct s3c_fb_win *win = info->par;
  4. struct s3c_fb *sfb = win->parent;
  5. unsigned int index = win->index;
  6. u32 wincon;
  7. printk("lj:s3c_fb_blank:blank mode:%d\n",blank_mode);
  8. dev_dbg(sfb->dev, "blank mode %d\n", blank_mode);
  9. pm_runtime_get_sync(sfb->dev);
  10. wincon = readl(sfb->regs + sfb->variant.wincon + (index * 4));
  11. switch (blank_mode) {
  12. case FB_BLANK_POWERDOWN:
  13. wincon &= ~WINCONx_ENWIN;
  14. sfb->enabled &= ~(1 << index);
  15. /* fall through to FB_BLANK_NORMAL */
  16. case FB_BLANK_NORMAL:
  17. /* disable the DMA and display 0x0 (black) */
  18. shadow_protect_win(win, 1);
  19. dump_stack();
  20. writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia  disable the black screen
  21. sfb->regs + sfb->variant.winmap + (index * 4));
  22. shadow_protect_win(win, 0);
  23. break;
  24. case FB_BLANK_UNBLANK:
  25. shadow_protect_win(win, 1);
  26. writel(0x0, sfb->regs + sfb->variant.winmap + (index * 4));
  27. shadow_protect_win(win, 0);
  28. wincon |= WINCONx_ENWIN;
  29. sfb->enabled |= (1 << index);
  30. break;
  31. case FB_BLANK_VSYNC_SUSPEND:
  32. case FB_BLANK_HSYNC_SUSPEND:
  33. default:
  34. pm_runtime_put_sync(sfb->dev);
  35. return 1;
  36. }
  37. shadow_protect_win(win, 1);
  38. writel(wincon, sfb->regs + sfb->variant.wincon + (index * 4));
  39. shadow_protect_win(win, 0);
  40. /* Check the enabled state to see if we need to be running the
  41. * main LCD interface, as if there are no active windows then
  42. * it is highly likely that we also do not need to output
  43. * anything.
  44. */
  45. /* We could do something like the following code, but the current
  46. * system of using framebuffer events means that we cannot make
  47. * the distinction between just window 0 being inactive and all
  48. * the windows being down.
  49. *
  50. * s3c_fb_enable(sfb, sfb->enabled ? 1 : 0);
  51. */
  52. /* we're stuck with this until we can do something about overriding
  53. * the power control using the blanking event for a single fb.
  54. */
  55. if (index == sfb->pdata->default_win) {
  56. shadow_protect_win(win, 1);
  57. s3c_fb_enable(sfb, blank_mode != FB_BLANK_POWERDOWN ? 1 : 0);
  58. shadow_protect_win(win, 0);
  59. }
  60. pm_runtime_put_sync(sfb->dev);
  61. return 0;
  62. }

问题就出在
writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia  disable the black screen
      sfb->regs + sfb->variant.winmap + (index * 4));
发现执行到这里,LCD就黑屏了。
查数据手册发现:

这个寄存器的意思是,当MAPCOLEN_F使能的时候,他会把LCD显示成MAPCOLOR设置成颜色,关闭LCD的DMA功能,然后Framebuffer就不能刷新LCD了。
这也许就是FB_BLANK_NORMAL,这个的功能吧,把LCD一直刷成某个颜色。
参考http://blog.csdn.net/zanget/article/details/6569743这个 大侠的博客,
加入dump_stack

  1. case FB_BLANK_NORMAL:
  2. /* disable the DMA and display 0x0 (black) */
  3. shadow_protect_win(win, 1);
  4. dump_stack();
  5. writel(WINxMAP_MAP | WINxMAP_MAP_COLOUR(0x00),//liujia  disable the black screen
  6. sfb->regs + sfb->variant.winmap + (index * 4));
  7. shadow_protect_win(win, 0);
  8. break;

log:

  1. <7>[   61.285759] lj:s3c_fb_blank:blank mode:1
  2. <7>[   61.285772] lj:shadow_protect_win:1
  3. <7>[   61.285816] [<80013120>] (unwind_backtrace+0x0/0xec) from [<801af0b8>] (s3c_fb_blank+0x84/0x180)
  4. <7>[   61.285835] [<801af0b8>] (s3c_fb_blank+0x84/0x180) from [<801a2bcc>] (fb_blank+0x3c/0x68)
  5. <7>[   61.285852] [<801a2bcc>] (fb_blank+0x3c/0x68) from [<801a9690>] (fbcon_blank+0x118/0x260)
  6. <7>[   61.285875] [<801a9690>] (fbcon_blank+0x118/0x260) from [<801c7594>] (do_blank_screen+0x1b8/0x258)
  7. <7>[   61.285892] [<801c7594>] (do_blank_screen+0x1b8/0x258) from [<801c884c>] (console_callback+0xe4/0x114)
  8. <7>[   61.285909] [<801c884c>] (console_callback+0xe4/0x114) from [<8002e12c>] (process_one_work+0x1e8/0x318)
  9. <7>[   61.285927] [<8002e12c>] (process_one_work+0x1e8/0x318) from [<800301c0>] (worker_thread+0x1b4/0x2b4)
  10. <7>[   61.285947] [<800301c0>] (worker_thread+0x1b4/0x2b4) from [<80033438>] (kthread+0x88/0x94)
  11. <7>[   61.285969] [<80033438>] (kthread+0x88/0x94) from [<8000ec20>] (kernel_thread_exit+0x0/0x8)
  12. <7>[   61.285979] lj:shadow_protect_win:0
  13. <7>[   61.285984] lj:shadow_protect_win:1
  14. <7>[   61.285990] lj:shadow_protect_win:0
  15. <7>[   61.285995] lj:shadow_protect_win:1
  16. <7>[   61.286001] lj:s3c_fb_set_par
  17. <7>[   61.286005] lj:shadow_protect_win:0

找到了调用关系
console_callback--->do_blank_screen--->fb_blank--->s3c_fb_blank.
按照http://blog.csdn.net/zanget/article/details/6569743修改方法
将vt.c   179行
static int blankinterval = 10*60;
修改为
static int blankinterval = 0;
这样就不会出现黑屏的现象了。

LCD 每隔10分钟 自动熄灭 --打开Framebuffer console的时候【转】的更多相关文章

  1. Linux下LCD 10分钟自动关屏的问题总结

    Linux下的LCD驱动默认10分钟后会自动关闭屏幕,我们可以修改一下代码让其不自动关屏 在有一个 drivers/char/vt.c 文件其中有一个变量(blankinterval)可以设置它来修改 ...

  2. 每隔10秒自动更新svn 定时更新svn 脚本

    任务: */1 * * * * /opt/adobe/fms/webroot/api/svn.sh 这个命令的问题:只更新了版本号,没有更新实际内容,但是直接运行上面shell脚本能更新. 解决:需要 ...

  3. DB2输出每隔10分钟的数据

    一.输出1-100的数据 此处参考 https://bbs.csdn.net/topics/390516027 with t(id) as ( as id from sysibm.sysdummy1 ...

  4. xxl-job踩坑记录——执行器,执行10分钟自动失败

    问题描述 上一篇Docker 部署xxl-job 报错:xxl-rpc remoting error(connect timed out), for url : xxxxxx - 这行代码没Bug - ...

  5. 解决win10隔几分钟自动黑屏睡眠的方法

    来源:win10总是很快自动休眠怎么解决? - 风格不空格的回答 - 知乎 https://www.zhihu.com/question/39263412/answer/87430653 1.运行注册 ...

  6. 用ab每隔30分钟并发一次休息10分钟

    linux脚本监控程序运行情况(重启程序)主要有两种情况:一种是一个可执行文件:如shell脚本文件:另一种是使用python打开的多个程序.第一种:它的进程名字由路径名字和程序名字组成,比如:我有个 ...

  7. 10分钟uniapp实现即时通讯,腾讯云IM的正确打开方式get

    官方的demo基本上覆盖了所有功能点 今天在使用uniapp开发即时通讯IM的时候遇到了瓶颈,便在uniapp的插件市场搜寻一波看看有没有成熟的轮子借鉴,终于发现了这个宝藏插件--"智密 - ...

  8. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...

  9. UWP开发入门(十九)——10分钟学会在VS2015中使用Git

    写程序必然需要版本控制,哪怕是个人项目也是必须的.我们在开发UWP APP的时候,VS2015默认提供了对微软TFS和Git的支持.考虑到现在Git很火,作为微软系的程序员也不得不学一点防身,以免被开 ...

随机推荐

  1. MVC 上传文件实例

    http://www.cnblogs.com/leiOOlei/archive/2011/08/17/2143221.html

  2. POJ 2785 4 Values whose Sum is 0(折半枚举)

    给出四个长度为n的数列a,b,c,d,求从这四个数列中每个选取一个元素后的和为0的方法数.n<=4000,abs(val)<=2^28. 考虑直接暴力,复杂度O(n^4).显然超时. # ...

  3. BZOJ 1202 狡猾的商人(带权并查集)

    给出了l,r,w.我们就得知了s[r]-s[l-1]=w.也就是说,点l-1和点r的距离为w. 于是可以使用带权并查集,定义dis[i]表示点i到根节点的距离.查询和合并的时候维护一下就OK了. 如果 ...

  4. 【bzoj4698】[Sdoi2008] Sandy的卡片 后缀数组

    题目描述 Sandy和Sue的热衷于收集干脆面中的卡片.然而,Sue收集卡片是因为卡片上漂亮的人物形象,而Sandy则是为了积攒卡片兑换超炫的人物模型.每一张卡片都由一些数字进行标记,第i张卡片的序列 ...

  5. BZOJ4771 七彩树(dfs序+树上差分+主席树)

    考虑没有深度限制怎么做.显然的做法是直接转成dfs序上主席树,但如果拓展到二维变成矩形数颜色数肯定没法做到一个log. 另一种做法是利用树上差分.对于同种颜色的点,在每个点处+1,dfs序相邻点的lc ...

  6. [洛谷P3931]SAC E#1 - 一道难题 Tree

    题目大意:给你一棵带权有根树,可以切断一些边,问使得根和叶子节点不连通的最小代价. 题解:做了一天的网络流,这道题显然可以用最小割来做,但是也可以用树形$DP$,基本同[SDOI2011]消耗战,这道 ...

  7. [洛谷P4847]银河英雄传说V2

    题目大意:有$n(n\leqslant2\times10^5)$个序列,有$m(m\leqslant2\times10^5)$个操作,分三种: 1. $M\;x\;y:$把$x$所在的序列放在$y$所 ...

  8. BZOJ1096:[ZJOI2007]仓库建设——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=1096 L公司有N个工厂,由高到底分布在一座山上.如图所示,工厂1在山顶,工厂N在山脚.由于这座山处于 ...

  9. POJ.2739 Sum of Consecutive Prime Numbers(水)

    POJ.2739 Sum of Consecutive Prime Numbers(水) 代码总览 #include <cstdio> #include <cstring> # ...

  10. bzoj2733: [HNOI2012]永无乡(splay+启发式合并/线段树合并)

    这题之前写过线段树合并,今天复习Splay的时候想起这题,打算写一次Splay+启发式合并. 好爽!!! 写了长长的代码(其实也不长),只凭着下午的一点记忆(没背板子...),调了好久好久,过了样例, ...