1 .注册部分

 kernel/msm-3.18/drivers/leds/leds-qpnp-wled.c

------------------------------------------------------------------------------

static int qpnp_wled_probe(struct spmi_device *spmi)

{

.................................

INIT_WORK(&wled->work, qpnp_wled_work);
        wled->ramp_ms = QPNP_WLED_RAMP_DLY_MS;
        wled->ramp_step = 1;

wled->cdev.brightness_set = qpnp_wled_set;
        wled->cdev.brightness_get = qpnp_wled_get;

wled->cdev.max_brightness = WLED_MAX_LEVEL_4095;

rc = led_classdev_register(&spmi->dev, &wled->cdev);

.................................

}

2. 应用部分

kernel/msm-3.18/drivers/leds/leds-qpnp-wled.c

-------------------------------------------------------------------------------

static void qpnp_wled_set(struct led_classdev *led_cdev,  enum led_brightness level)
    {

.................................

schedule_work(&wled->work);

................................

}

static void qpnp_wled_work(struct work_struct *work)
    {

...........................................

// 设置亮度

rc = qpnp_wled_set_level(wled, level);

..........................................

// 当打开或关闭背光时,设置使能寄存器

rc = qpnp_wled_module_en(wled, wled->ctrl_base, !!level);

.........................................

}

static int qpnp_wled_set_level(struct qpnp_wled *wled, int level)
   {

................................

// 写低位

reg = level & QPNP_WLED_BRIGHT_LSB_MASK;
        rc = qpnp_wled_write_reg(wled, &reg, QPNP_WLED_BRIGHT_LSB_REG(wled->sink_base, wled->strings[i]));

// 写高位

reg = level >> QPNP_WLED_BRIGHT_MSB_SHIFT;
        reg = reg & QPNP_WLED_BRIGHT_MSB_MASK;
        rc = qpnp_wled_write_reg(wled, &reg, QPNP_WLED_BRIGHT_MSB_REG(wled->sink_base, wled->strings[i]));

...................................
   }

static int qpnp_wled_module_en(struct qpnp_wled *wled,  u16 base_addr, bool state)
   {

rc = qpnp_wled_read_reg(wled, &reg,
                        QPNP_WLED_MODULE_EN_REG(base_addr));
        if (rc < 0)
                return rc;
        reg &= QPNP_WLED_MODULE_EN_MASK;
        reg |= (state << QPNP_WLED_MODULE_EN_SHIFT);
        rc = qpnp_wled_write_reg(wled, &reg,
                        QPNP_WLED_MODULE_EN_REG(base_addr));
        if (rc)
                return rc;

}

static int qpnp_wled_write_reg(struct qpnp_wled *wled, u8 *data, u16 addr)
  {

// 写 pmi 寄存器

rc = spmi_ext_register_writel(wled->spmi->ctrl, wled->spmi->sid, addr, data, 1);

}

kernel/msm-3.18/drivers/platform/msm/spmi/spmi.c

----------------------------------------------------------------------------

int spmi_ext_register_writel(struct spmi_controller *ctrl,  u8 sid, u16 addr, u8 *buf, int len)
  {

}

Qcom wled 方式背光控制相关推荐

  1. linux蜂鸣器控制实验,【Linux公开课】蜂鸣器使用、LCD背光控制、触摸屏校准、GPIO操作...

    摘要为方便使用蜂鸣器,系统为蜂鸣器提供类似LED的操作接口,对应的操作文件是/sys/class/leds/beep/brightness.写入1使蜂鸣器鸣叫,写入0停止鸣叫- 8.12 蜂鸣器使用 ...

  2. 中断系统应用实例(1)用定时器T1工作方式1控制两个LED以不同周期闪烁

    1.控制目标 利用定时器T1工作方式1控制两个LED以不同周期闪烁,使得LED1每秒闪烁4次(即周期为250ms),LED2每秒闪烁1次(即周期为1s). 2.控制分析 2.1 LED侧分析 若要使L ...

  3. MTK 平台 CABC 背光控制机制

    转载自:LABC and CABC-MTK Platform 1.简介 显示屏在移动设备里一直的是耗电大户,显示屏的背光显然是电池杀手,所以拿背光"开刀"介绍两种实际应用较为可行省 ...

  4. LCD背光控制 brightness control

    在显示器的校正中常常会涉及Gamma值.白点坐标.色温.三原色.荧光剂色度值等参数.不同的gamma值会使显示器的亮度和颜色有较大差别.gamma值较小时亮调的等级差比较大,对表现亮度的颜色有利,反之 ...

  5. Android应用开发(21)屏幕背光控制

    Android应用开发学习笔记--目录索引 最近各手机厂商都在宣传万级调光,宣传数字越来越大,但是到底背光调节平滑度体验如何呢? 如最近realme 11 pro+ (MTK平台天玑7050),宣传2 ...

  6. android lcd 背光控制流程

    此文章是网上看到的,在MTK平台基础上的背光控制流程的分析.个人觉得写得比较详细,于是截取部分内容转载出来. 不过话说在前头,对于lcd而言,决定显示效果的有几个因素:pwm,gama(屏幕灰度),饱 ...

  7. SM4350 背光控制--关闭XBL WLED

    项目场景: 该项目背光有两种控制方式一种是PWM,还有一种是WLED.通过原理图我们知道WLED是由PM6150L控制的. 问题描述: 由于我们实际使用的是PWM,WLED只用于测试,因此如果不把WL ...

  8. linux 背光驱动程序,Linux驱动工程师成长之路 LCD背光控制RT9379B

    老大说了,下周新的手机要回来了,用的是400*800的屏,到时候就由我来调这个屏了.把屏的spec和背光的spec都给了我让我先看看. 以前分析了LCD(framebuffer)的驱动框架,但是对于背 ...

  9. 7. 【可编程定时器8253】:外部引脚、内部结构特点、计数启动方式、6种工作方式、控制字格式、应用

    文章目录 计数与定时 8253芯片特点 1. 外部引脚 2. 内部结构特点(含3个计数器.1个控制寄存器) 2. 计数启动方式(软件启动.硬件启动的定义) 3. 6种工作方式 不能自动重复计数的工作方 ...

最新文章

  1. how to force opened by browser
  2. 二十、异步调用的问题
  3. 事物传递机制、应用、加载时机
  4. hibernate jpa_JPA / Hibernate实体状态转换的初学者指南
  5. C#中打开设计视图时报未将对象引用设置到对象的实例
  6. java 模拟qq源码
  7. python数码时钟代码_python实现简易数码时钟
  8. leetcode 384 打乱数组
  9. 《纽约邮报》手机客户端推送系统被黑 黑客发送抒情诗
  10. 响应面matlab算法,结构可靠度分析的响应面法及其Matlab实现参考文件.pdf
  11. 拼多多微信登录服务器请求失败,拼多多管理后台登不上怎么回事?有何功能?...
  12. Android蓝牙通讯(服务端、客户端)
  13. 快速翻译PDF文档的免费方法
  14. 云服务器选股,【图】老师们能不能在通达信7.48中整合云行情服务器?_选股公式,股票,炒股公式,股票指标,股票论坛_股票软件技术交流论坛_理想论坛 - 股票论坛...
  15. 表格里面出现个别边框线粗细不同的解决
  16. 正交频分复用中的正交问题
  17. 即时通讯环信IM的集成使用
  18. 神经网络与深度学习(一)——机器学习基础
  19. 《CLR via C#》读书笔记---11事件
  20. linux清理页面缓存文件夹,清理Ubuntu系统的缓存、垃圾、多余内核。

热门文章

  1. 张家俊:关于ChatGPT八个技术问题的猜想
  2. latex 长公式换行括号-换行后括号大小不一致
  3. 在arm开发板上实现播放内存里所有的jpg和bmp格式图片
  4. extern “C“ 理解
  5. 利用python制作简单播放器
  6. 地址空间 (Address Space)
  7. Sql Server中and和or的优先级问题
  8. 细思恐极,黑客到底可以厉害到什么程度?
  9. Java005-二进制、八进制、十进制和十六进制之间的转换
  10. FX1N底层源码,PLSR源码,支持4路脉冲输出 总体功能和指令可能支持在RUN中下载程序,支持注释的写入和读取