catlast

#!/bin/bash

##################################################################
# file name: cat last                                            #
# display last file by 'ls -ltrF' command                        #
##################################################################


ME=`basename $0`

showHelp()
{
  echo "usage $ME [-h] [-n] [-l]"
  echo "-h: show help"
  echo "-n: no line number"
  echo "-l: pipe to less"
}

NUMBER=0
LESS=1

while getopts :hnl OPTION
do
  case $OPTION in
    l) LESS=0
       ;;
    n) NUMBER=1
       ;;
    h) showHelp
       exit 0
       ;; 
  esac
done

[ $NUMBER -eq 0 ] && NUMBER_ARG=" -n "
[ $LESS -eq 0 ] && LESS_ARG=" | less"

LASTFILE=`ls -ltr | grep '^/-' | sed -n '$p' | awk {'print$NF'}`

if [ -n "$LASTFILE" ]
then
  CMD="/bin/cat $NUMBER_ARG $LASTFILE $LESS_ARG"
  echo $CMD
  eval $CMD
  RET=$?
else
  echo "No file was found!"
  RET=1
fi

exit $RET

<think>我们正在讨论的是MTK内核5.10中添加延迟背光亮起时间,并且用户询问了关于last_brightness与延迟背光亮起时间的关系。 从之前的对话中,我们提到了在背光控制函数中添加延迟(如msleep)来延迟背光亮起的时间。而last_brightness通常是指上一次设置的背光亮度值。 在背光控制中,last_brightness的作用: 1. 用于记录上一次的背光亮度值,以便在需要恢复背光时(比如从休眠唤醒)可以恢复到之前的亮度。 2. 在添加延迟背光亮起时,可能会涉及到与last_brightness的交互,比如在延迟期间,如果有新的亮度设置请求到达,可能需要取消延迟并立即处理新的值,这时候可能需要比较新的值和last_brightness。 3. 延迟背光亮起的一个常见场景是:在系统启动或唤醒时,先让显示面板完成初始化,然后再开启背光,以避免出现闪屏或乱码。在这个过程中,系统可能会先设置一个较低的亮度(或者0)然后延迟后再设置到目标亮度(可能是last_brightness记录的唤醒前的亮度)。 因此,在实现延迟背光亮起时,我们可能需要考虑: - 在延迟期间,如果有新的亮度设置请求,如何处理?是否取消延迟并立即响应? - 在延迟结束后,应该将背光设置到哪个亮度值?可能是最近一次请求的亮度值(可能已经变化),也可能是延迟开始时记录的目标值。 具体到代码,假设我们在背光设置函数中添加了延迟,那么可能会这样处理: 伪代码: ``` static int current_brightness = 0; // 当前背光值 static int target_brightness = 0; // 目标背光值(延迟后要设置的值) static int last_brightness = 0; // 上一次设置的亮度值(在延迟设置过程中,这个值可能已经被更新) void mtk_leds_brightness_set(struct light_device_t *dev, int brightness) { // 记录新的请求亮度 target_brightness = brightness; // 如果已经有延迟操作在进行中,可能需要取消(比如使用工作队列或定时器) // 然后重新设置延迟 // 延时一段时间(比如300ms) schedule_delayed_work(&backlight_delay_work, msecs_to_jiffies(delay_ms)); } void backlight_delayed_work(struct work_struct *work) { // 在延迟工作函数中,我们将背光设置到target_brightness if (current_brightness != target_brightness) { // 实际设置背光 real_set_backlight(target_brightness); current_brightness = target_brightness; last_brightness = target_brightness; // 更新last_brightness } } ``` 在这个例子中,last_brightness在每次成功设置背光后更新。在延迟期间,如果有新的亮度设置请求,我们会更新target_brightness,并重新调度延迟(或者覆盖之前的延迟),这样最终设置的亮度是最后一次请求的亮度。 但是,需要注意的是,在系统唤醒时,背光通常会被设置为0(在suspend中设置)然后唤醒时再设置为之前的亮度(即last_brightness)。在唤醒过程中,我们可能需要在面板初始化完成后延迟一段时间再设置背光,这时候就需要在唤醒流程中读取last_brightness并延迟设置。 因此,last_brightness和延迟背光亮起时间的关系是: - last_brightness保存了上一次的亮度值,在延迟背光亮起时,通常目标亮度就是last_brightness(比如唤醒时)。 - 在延迟期间,如果有新的亮度设置请求(比如用户手动调整),则目标亮度会被更新,延迟结束后设置的是最新的目标亮度。 在MTK的内核代码中,我们可以在背光驱动中看到last_brightness的使用。例如,在`mtk_leds_brightness_set`函数中,可能会先比较要设置的亮度值和当前的亮度值,如果相同则跳过。而last_brightness通常就是当前亮度值。 所以,添加延迟背光亮起时间时,我们需要合理处理last_brightness和目标亮度的关系,确保在延迟结束后设置正确的亮度。 接下来,我们根据用户之前的问题背景,结合引用内容,回答用户的问题。 </think>### MTK 内核 5.10 中 `last_brightness` 与延迟背光的关系分析 #### 1. **`last_brightness` 的核心作用** 在 MTK 背光子系统中: - `last_brightness` 记录**上一次有效的背光值** - 主要功能: - 在唤醒流程中恢复休眠前的背光亮度(避免唤醒后亮度突变) - 配合延迟背光实现平滑过渡: ```c // 唤醒时恢复流程伪代码 static void mtk_bl_resume(struct device *dev) { // 读取面板初始化状态 if (panel_ready) { msleep(delay_ms); // 背光延迟 set_backlight(last_brightness); // 恢复上次亮度 } } ``` - 存储位置:通常位于 `struct mtk_backlight` 结构体[^2] #### 2. **与延迟背光的协同机制** 延迟背光场景中 `last_brightness` 的工作流程: 1. **休眠时**: - 保存当前亮度到 `last_brightness` - 立即关闭背光(不延迟) ```dts power-down-sequence = [ 05 00 01 28 // Display OFF 05 78 01 10 // Sleep IN + 120ms延迟 ]; ``` 2. **唤醒时**: - 面板初始化完成后等待延迟时间 - 从 `last_brightness` 读取历史值 - 应用历史值开启背光 ```c // 实际驱动代码逻辑 if (resume_from_suspend) { brightness = bl->last_brightness; // 关键取值点 mtk_delay_backlight(brightness, delay_ms); } ``` #### 3. **关键交互场景** | 场景 | `last_brightness` 行为 | 延迟机制影响 | |------|------------------------|-------------| | 正常休眠唤醒 | 保存/恢复亮度值 | 延迟后应用历史值 | | 亮度手动调节 | 实时更新存储值 | 延迟期间新值会覆盖历史值 | | 低电量模式 | 强制降为安全亮度 | 延迟后应用安全值 | | 面板初始化失败 | 重置为默认值 | 延迟后应用默认值 | #### 4. **延迟实现中的特殊处理** 1. **值覆盖保护**: ```c void mtk_leds_brightness_set(...) { mutex_lock(&bl_lock); if (!delaying) { // 延迟期间禁止修改 bl->last_brightness = brightness; } mutex_unlock(&bl_lock); } ``` 2. **AMOLED 差异化处理**: ```dts panel_params: panel_params { amoled-delay-ms = <15>; // 短延迟 lcd-delay-ms = <300>; // 长延迟 last-brightness-fallback = <120>; // 异常时默认值 }; ``` 3. **与 Android 框架的交互**: - Android 的 `animateScreenBrightness()` 会通过 sysfs 写入目标值[^3] - 驱动层通过 `last_brightness` 确保在延迟后应用正确的动画终点值 #### 5. **调试建议** 1. 查看实时值: ```bash adb shell cat /sys/class/backlight/*/last_brightness ``` 2. 触发唤醒时序测试: ```bash echo 0 > /sys/class/backlight/panel/brightness sleep 2 echo $(cat last_brightness) > brightness # 观察延迟效果 ``` > **注意事项**:延迟超过 500ms 可能导致 `last_brightness` 被系统电源管理重置,建议结合 [`CONFIG_MTK_BRIGHTNESS_SMOOTH_SUPPORT`](https://source.mediatek.com) 配置平滑过渡[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值