devs.c 或者 dev-device_type.c里面是放device的地方,在三星平台上。

想在板子上面写个背光驱动,但是估计自己写的又是IOCTL之类,接口肯定不标准,先看看kernel里面有没有标准的接口。

先在头文件里面看了相关的结构体:

struct backlight_ops {
 /* Notify the backlight driver some property has changed */
 int (*update_status)(struct backlight_device *);
 /* Return the current backlight brightness (accounting for power,
    fb_blank etc.) */
 int (*get_brightness)(struct backlight_device *);
 /* Check if given framebuffer device is the one bound to this backlight;
    return 0 if not, !=0 if it is. If NULL, backlight always matches the fb. */
 int (*check_fb)(struct fb_info *);
};

/* This structure defines all the properties of a backlight */
struct backlight_properties {
 /* Current User requested brightness (0 - max_brightness) */
 int brightness;
 /* Maximal value for brightness (read-only) */
 int max_brightness;
 /* Current FB Power mode (0: full on, 1..3: power saving
    modes; 4: full off), see FB_BLANK_XXX */
 int power;
 /* FB Blanking active? (values as for power) */
 int fb_blank;
};

struct backlight_device {
 /* Backlight properties */
 struct backlight_properties props;

/* Serialise access to update_status method */
 struct mutex update_lock;

/* This protects the 'ops' field. If 'ops' is NULL, the driver that
    registered this device has been unloaded, and if class_get_devdata()
    points to something in the body of that driver, it is also invalid. */
 struct mutex ops_lock;
 struct backlight_ops *ops;

/* The framebuffer notifier block */
 struct notifier_block fb_notif;

struct device dev;
};

pwm有两套写法,

一套是走PWM device support(PWM device support)(in System Type)【宏CONFIG_HAVE_PWM】

在mach-smdk6410.c中

#ifdef CONFIG_HAVE_PWM
 &s3c_device_timer[0],
 &s3c_device_timer[1],
#endif

#define DEFINE_S3C_TIMER(_tmr_no, _irq)   /
 .name  = "s3c24xx-pwm",  /
 .id  = _tmr_no,   /
 .num_resources = TIMER_RESOURCE_SIZE,  /
 .resource = TIMER_RESOURCE(_tmr_no, _irq), /

也就是说打开了s3c24xx-pwm设备。

对应的obj-$(CONFIG_HAVE_PWM)  += pwm.o, 在arch/arm/plat-s3c24xx中,pwm.c被编译。

static struct platform_driver s3c_pwm_driver = {
 .driver  = {
  .name = "s3c24xx-pwm",
  .owner = THIS_MODULE,
 },
 .probe  = s3c_pwm_probe,
 .remove  = __devexit_p(s3c_pwm_remove),
};
这个driver被注册。

driver即可和device绑定。

另外一套

一套是走PWM device support(Support old API)(in System Type)【宏CONFIG_S3C6410_PWM】

在s3cfb_fimd4x.c中,

#if  defined(CONFIG_S3C6410_PWM)
void s3cfb_set_brightness(int val)

生效,即可在smdk_bl.c(2.6.24版本中有)调用。

先选择走第一套,因为发现smdk_backlight_device已经实现了,可以用现成的,现在只需要改pwm的频率,占空比。我们使用的pwm_id是0。

6410 PWM原理

TCNTB TCMPB

start的时候这两个值load到TCNT和TCMP中,然后开始递减,等TCNT的值与TCMP相同的时候,产生中断。

如果想增大PWM的输出占空比,就减小TCMP。

前提是output inverter没有打开。

其余的像什么DMA, double buffer之类的没有看了。

s3c24xx-pwm s3c24xx-pwm.0: config bits 04
s3c24xx-pwm s3c24xx-pwm.0: tin at 33250000, tdiv at 33250000, tin=divclk, base 0
s3c24xx-pwm s3c24xx-pwm.1: config bits 04
s3c24xx-pwm s3c24xx-pwm.1: tin at 33250000, tdiv at 33250000, tin=divclk, base 8

最初的PWM clock信息

PWM的clock source 是PCLK, 首先经过8-bit prescale,然后可以选择1/2/4/8/16的分频或者外部频率TCLK0/TCLK1,最后再通过TCMPB和TCNTB来决定输出波形。如下图:

结合

S3C64XX: HCLKx2=266000000, HCLK=133000000, PCLK=66500000

s3c24xx-pwm s3c24xx-pwm.0: tin at 33250000, tdiv at 33250000, tin=divclk, base 0

可以发现是二分频。

如果再往下分析应该也可以出来,但是因为别人已经有现成的可以用了,所以还是决定走第二套方法。因为lcd的屏参文件中间有backlight中的函数。另外老的一套API简单易懂,图稳妥还是先走老的一套,新的以后再说。

记录一下被我修改的文件,暂时不改回来。

#if defined(CONFIG_HAVE_PWM)
static struct platform_pwm_backlight_data smdk_backlight_data = {
// .pwm_id  = 1,  //zhangq modify
 .pwm_id  = 0,
 .max_brightness = 255,
 .dft_brightness = 255,
 .pwm_period_ns = 78770,
};

static struct platform_device smdk_backlight_device = {
 .name  = "pwm-backlight",
 .dev  = {
//  .parent = &s3c_device_timer[1].dev,  //zhangq modify
  .parent = &s3c_device_timer[0].dev,
  .platform_data = &smdk_backlight_data,
 },
};

就是从1改到0.

现在又发现保持lcd与backlight一致意义不大,还不如尝试用pwm,更符合整个kernel架构。

而且以前公司里面的做法也是这样的,在已有的pwm_backlight上制造一个给lcd函数用的开关背光的函数。

backlight驱动相关推荐

  1. Linux 驱动 – Backlight 驱动

    Linux 驱动 – Backlight 驱动 一.Backlight 驱动 backlight 背光控制的子驱动,用于控制lcd亮度,他只提供了backlight的框架,硬件操作由继承backlig ...

  2. [RK3288][Android6.0] PWM backlight 驱动流程小结

    Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背光的亮暗通过pwm控制,驱动在文件pwm-rockchip.c中,这里不做描述. dts各个配置参数 ...

  3. [Android6.0][RK3399] PWM Backlight 驱动分析

    DTS 分析 backlight: backlight {status = "disabled";compatible = "pwm-backlight";pw ...

  4. 【SemiDrive源码分析】【驱动BringUp】41 - LCM 驱动 backlight 背光控制原理分析

    [SemiDrive源码分析][驱动BringUp]41 - LCM 驱动 backlight 背光控制原理分析 一.屏背光硬件原理(以中控主屏 MIPI DSI1为例) 二.RTOS侧 BACKLI ...

  5. Linux驱动:基于imx6ull分析PWM驱动及backlight屏幕背光驱动

    文章目录 1.PWM驱动 1.1 驱动分析 1.2 使用方法 2.backlight驱动 2.1 驱动分析 2.2 调试方法 1.PWM驱动 1.1 驱动分析 先看设备树文件imx6ull.dtsi的 ...

  6. android 休眠唤醒驱动流程分析,Android 电源管理——gotosleep和userActivity关注

    一.Android power management应用层分析 Android提供了android.os.PowerManager类,该类用于控制设备的电源状态的切换. 该类对外有三个接口函数: 1. ...

  7. 走过2011,展望2012

    光阴似箭,时光如梭,2011年又将成为历史.回顾这将近一年的工作,在领导的的指导下,在同事的帮助下,通过自身的不懈努力,在工作上取得了一定的成果,但也存在了一些不足,现总结如下. 1.  工作内容 主 ...

  8. WinCE启动界面的定制

    本文将以模拟器为例,简单介绍如何定制WinCE的启动界面,实现动画效果.在实际硬件平台上一般在BOOTLOADER中定制开机界面.如果BOOT从Flash加载NK到内存的时间较长,通常也会加一个进度条 ...

  9. android电源管理

    Android 的电源管理也是很重要的一部分.比如在待机的时候关掉不用的设备,timeout之后的屏幕和键盘背光的关闭,用户操作的时候该打开多少设备等等,这些都直接关系到产品的待机时间,以及用户体验. ...

最新文章

  1. 学习spring1--跟我一起学Spring 3(2)–开发环境配置
  2. 如何添加java环境变量_如何配置java环境变量
  3. Cesium学习笔记(四)Camera
  4. sharepoint页面嵌入_在其他系统Iframe中显示SharePoint 页面
  5. echarts 柱状图如何不顶格_echarts柱状图如何中间对齐而不是底部对齐?
  6. CCF201512-1 数位之和(100分)【进制+文本】
  7. Lucene多字段排序备忘(Sorting by multiple fields)
  8. django基础入门(3)django中模板
  9. awgn信道matlab,AWGN信道下数字通信系统的蒙特卡洛仿真(基于matlab).doc
  10. python 串口助手 简书_pySerial 串口工具简介
  11. 怎样把pdf转换成jpg文件
  12. ucenter安装指南及问题解决
  13. openrov,bluerov(树莓派代码)水下机器人树莓派、BBB板--组装自己的rov(准备篇)
  14. Android学习——APP内容共享
  15. Android 音乐APP(一)扫描本地音乐
  16. 十六进制转换为ASC码
  17. 企业防病毒体系建设的探讨
  18. Java虚拟机学习笔记(一)—Java虚拟机概述
  19. DELL XPS15 9570 32GB内存升级记
  20. 机器人需要怎样的计算平台

热门文章

  1. 小学英语与计算机技术整合,小学英语课程与信息技术的整合
  2. UWB室内高精度定位在物联网的“C”位
  3. 使用fiddler抓取HTTPS协议数据与疑难杂症终极解决方案
  4. 【O2O领域】外卖订餐APP用户端Axure原型作品(覆盖外卖APP主流功能)
  5. DxO PhotoLab 2.2.2完整精华汉化版|顶级RAW数码后期软件
  6. (8.1.5.5)Android Testing Support Library翻译之Espresso 意图
  7. CSDN如何上传视频?
  8. 【建筑类】各级钢筋符号直接打出来的简单方法
  9. 互联网最值得加入的173家国企汇总!!
  10. linux apache python wsgi,linux下apache2+django+mod_wsgi方式配置web站点