转自: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. AngularJS 中特性(attr)和属性(prop)的区别

    attr() 和 removeAttr() 方法是对特性进行处理的, 而 prop() 是对属性进行操作的 , 但是很多时候操作的东西是同一个 , 但是也是有区别的, 区别在于prop方法处理的是被 ...

  2. Shell中sort-cut-wc详解

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  3. 域对象 pageContext request session servletContext

    pageContext 当前页面之内有效 request   当前的请求内有效 session 当前的会话内有效 servletContext 当前这次服务器生命周期内有效

  4. 【bzoj1877】[SDOI2009]晨跑 费用流

    题目描述 Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个十字路口和M条街 ...

  5. BZOJ3990:[SDOI2015]排序——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3990 小A有一个1-2^N的排列A[1..2^N],他希望将A数组从小到大排序,小A可以执行的操作 ...

  6. [bzoj] 3673 3674 可持久化并查集 || 可持久化数组

    原题 加强版 题意: 可持久化并查集模板-- 题解: 用可持久化线段树维护一个可持久化数组,来记录每一次操作后的状态. 不能用路径压缩,但是要按置合并,使复杂度保证在O(log) #include&l ...

  7. BZOJ4815 [CQOI2017]小Q的表格 【数论 + 分块】

    题目链接 BZOJ4815 题解 根据题中的式子,手玩一下发现和\(gcd\)很像 化一下式子: \[ \begin{aligned} bf(a,a + b) &= (a + b)f(a,b) ...

  8. JavaScript中字符串与16进制之间的转换

    一.字符串转换为16进制 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. Codeforces Round #169 (Div. 2) A水 B C区间更新 D 思路

    A. Lunch Rush time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

  10. POJ3026:Borg Maze (最小生成树)

    Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18644   Accepted: 5990 题目链接:h ...