转自: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. CentOS 安装MariaDB

    1.安装 #同时安装mariadb和mariadb-server [root@bigdata-senior01 yum.repos.d]# yum -y install mariadb mariadb ...

  2. [洛谷P1552][APIO2012]派遣

    题目大意:有一棵$n$个点的树,和一个费用$m$,每个点有一个费用和价值,请选一个点,再从它的子树中选取若干个点,使得那个点的价值乘上选的点的个数最大,要求选的点费用总和小于等于$m$ 题解:树形$d ...

  3. Android View 绘制刷新流程分析

    Android中对View的更新有很多种方式,使用时要区分不同的应用场合.1.不使用多线程和双缓冲      这种情况最简单,一般只是希望在View发生改变时对UI进行重绘.你只需显式地调用View对 ...

  4. POJ1228:Grandpa's Estate——题解

    http://poj.org/problem?id=1228 题目大意:给一个凸包,问是否为稳定凸包. ———————————————————————— 稳定凸包的概念为:我任意添加一个点都不能使这个 ...

  5. BZOJ4311:向量——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4311 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 ...

  6. cf 443 D. Teams Formation](细节模拟题)

    cf 443 D. Teams Formation(细节模拟题) 题意: 给出一个长为\(n\)的序列,重复\(m\)次形成一个新的序列,动态消除所有k个连续相同的数字,问最后会剩下多少个数(题目保证 ...

  7. python2.6升级2.7导致yum无法使用 No module named yum

    这里有解决方法:https://teddysun.com/473.html 记住旧版本 Python 2.6.6 的重要路径如下所示,在运行 yum 命令的时候,会提示你哪个 module 不存在,不 ...

  8. c++模板类编译错误

    最近想写一个c++模板类,实现一个有向图.依据惯例,类在头文件中声明,类的实现写在源文件中.可是编译的时候出现了如下错误: undefined reference to 通过谷歌发现,这是一个很常见的 ...

  9. ACM1198Farm Irrigation

    这个题目好吓人呀!嘿嘿--- 不过仔细分析下就可以啦! #include<iostream> #include<cstring> using namespace std; ; ...

  10. git--------------bug修复流程

    当前所有分支: master:主分支 test:测试分支 zs:开发人员分支 ls:开发人员分支 场景:zs正在开发A模块功能,线上环境产生了一个bug. zs的操作流程(当前分支为zs分支): 1. ...