转自: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. BZOJ 1037 生日聚会(神DP)

    这题的DP很难想,定义dp[i][j][a][b]表示用了i个男生,j个女生,任一连续的后缀区间内,男生比女生最多多a人,女生比男生最多多b人. 转移就是显然了. # include <cstd ...

  2. 前端基础:HTML标签(下)

    前端基础HTML标签(下) 1.表单 表单的功能主要用于向服务器传输数据,从而实现客户端与Web服务器的交互.表单能够包含input系列标签,比如:文本字段.复选框.单选按钮.提交按钮等:表单还包含t ...

  3. Codeforces Round #521 Div. 3 玩耍记

    A:签到. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> ...

  4. 【刷题】洛谷 P4329 [COCI2006-2007#1] Bond

    题意翻译 有 \(n\) 个人去执行 \(n\) 个任务,每个人执行每个任务有不同的成功率,每个人只能执行一个任务,求所有任务都执行的总的成功率. 输入第一行,一个整数 \(n\) ( \(1\leq ...

  5. POJ3469:Dual Core CPU——题解

    http://poj.org/problem?id=3469 题目大意: 两个CPU,处理每个任务有不同的代价,有些对任务如果不在同一个CPU就会增加代价,求最小代价. ——————————————— ...

  6. POJ2115:C Looooops——题解

    http://poj.org/problem?id=2115 题目大意:for(i=A;i!=B;i+=C),i的类型的范围为0<=a<1<<k exgcd裸题目. 设a=C, ...

  7. HDU4825:Xor Sum——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=4825 Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含 ...

  8. HDU5696:区间的价值——题解

    http://acm.hdu.edu.cn/showproblem.php?pid=5696 题面是中文的我就不粘贴过来了…… ———————————————————————— 这题垃圾题!!神tm卡 ...

  9. Vue_WebPack小白入门

    Vue语法笔记 Vue项目搭建过程 Vue问题总结 去掉vue 中的代码规范检测(Eslint验证) 解决跨域请求问题 Vue推荐资料

  10. Mysql 语句优化技巧

    前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...