backlight驱动 acpibacklight.kext

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

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

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

struct backlight_ops {

int (*update_status)(struct backlight_device*);

int (*get_brightness)(struct backlight_device*);

int (*check_fb)(struct fb_info *);
};


struct backlight_properties {

int brightness;

int max_brightness;

int power;

int fb_blank;
};

struct backlight_device {

struct backlight_properties props;


struct mutex update_lock;


struct mutex ops_lock;
struct backlight_ops *ops;


struct notifier_block fb_notif;

struct device dev;
};

pwm有两套写法,

一套是走PWM device support(PWM device support)(in SystemType)【宏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 SystemType)【宏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-bitprescale,然后可以选择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, //zhangqmodify
.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函数用的开关背光的函数


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhangqingsup/archive/2010/02/25 /5325039.aspx

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/281734.html

更多阅读

显卡驱动如何更新 精 如何更新显卡驱动程序

显卡驱动如何更新 精——简介这里介绍几个常用的显卡驱动更新的方法。显卡驱动如何更新 精——工具/原料PC 电脑可能互连网连接显卡驱动如何更新 精——方法一、通过显卡官方网站下载最新驱动显卡驱动如何更新 精 1、这里以下载

驱动加载失败怎么解决? 代练猫加载驱动失败

源:U大师当我们想要重新去更新加载驱动,难免会遇到驱动加载失败的情况,此时该如何处理?今天小编就来教大家在驱动出现加载失败时如何解决的方法。故障原因一、驱动加载失败可能原因是驱动程序本身不完全,其次就是在下载更新

建行u盾驱动安装可以自己手动安装! 建行u盾驱动

建行u盾驱动安装可以自己手动安装!——简介在电脑上安装了“中国建设银行E路护航网银安全组件”后建行u盾检测不到怎么办~找到建行网银U盾的驱动文件~自己手动装!建行u盾驱动安装可以自己手动安装!——工具/原料C:Program FilesCCBCom

声明:《backlight驱动 acpibacklight.kext》为网友淡淡的优雅分享!如侵犯到您的合法权益请联系我们删除