显
金
锐
锐
Fusion_IR 配置说明
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
锐
金
金
显
显
Paul.liao
V0.1
MStar Semiconductor makes no representations or warranties including, for example but not limited to,
warranties of merchantability, fitness for a particular purpose, infringement of any intellectual property right or
the accuracy or completeness of this document, and reserves the right to make changes without further notice to
any products herein to improve reliability, function or design. No responsibility is assumed by MStar
Semiconductor arising out of the application or user of any product or circuit described herein; neither does it
convey any license under its patent rights, nor the rights of others.
MStar is a trademark of MStar Semiconductor, Inc. Other trademarks or names herein are only for identification
purposes only and owned by their respective owners.
锐
显
显
金
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
金
锐
显
© 2019 MStar Semiconductor, Inc. All rights reserved.
F-
3697
REVISION HISTORY
Revision
Description
No.
Rev 0.1
Security Level: Confidential A
- i -
9/24/2019
Copyright © 2019 MStar Semiconductor, Inc. All rights reserved.
{MStar Part Name}
{Product Description}
{Document Name + Version}
Date
2019/06/17
显
金
锐
锐
The 1st draft
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
金
显
显
F-
3697
目录
Security Level: Confidential A
- ii -
9/24/2019
Copyright © 2019 MStar Semiconductor, Inc. All rights reserved.
1.1.
1.2.
1.3.
IR 简介....................................................................................................................................... 1
IR 框架介绍 ............................................................................................................. 1
疑问:decoder list 和 map list 怎么来的? ................................................................... 2
IR 目录结构 ............................................................................................................. 2
系统 IR 配置介绍 ......................................................................................................................... 3
2.1 原则:(硬解码优先原则) .................................................................................................. 3
2.2 Ir_config.h 介绍 ................................................................................................................ 3
2.2.1. 配置客户 IR ..................................................................................................... 3
2.2.2. 新增遥控器 ...................................................................................................... 4
2.2.3. 配置 IR debug 级别........................................................................................... 4
2.2.4. 配置 IR Speed .................................................................................................. 4
2.3 ir_config.ini 介绍 .............................................................................................................. 5
2.3.1. 编译 kernel ......................................................................................................... 5
2.3.2. Ir_config.ini 的配置 .............................................................................................. 6
2.3.3. 支持公版 ir 的 ini 文件 .......................................................................................... 8
{MStar Part Name}
{Product Description}
{Document Name + Version}
显
金
锐
锐
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
金
显
显
2.4 Kl 文件的介绍 ................................................................................................................... 9
PM 配置 dynamic ir ................................................................................................................... 11
3.1 开 dynamic ir .................................................................................................................. 11
3.2 开对应的协议 .................................................................................................................. 12
3.3 开 ir debug ..................................................................................................................... 12
新增协议流程 ............................................................................................................................. 14
4.1. 增加解析文件(例如:ir_nec_decoder.c) ......................................................................... 14
4.2. 修改 makefile ................................................................................................................. 15
4.3. 新增 keymap 映射 ........................................................................................................... 15
4.4 修改 ini 文件 .................................................................................................................. 16
新 ir 框架 debug 思路 ................................................................................................................. 17
5.1. 开 debug log .................................................................................................................. 17
5.2. 借助 getevent ................................................................................................................ 17
F-
3697
IR 简介
{MStar Part Name}
{Product Description}
{Document Name + Version}
上面的图中重要细节解释:
Security Level: Confidential A
- 1 -
9/24/2019
Copyright © 2019 MStar Semiconductor, Inc. All rights reserved.
拿来一个遥控器,我们需要拿到他对应的 spec,从 spec 中我们可以知道他是什么协议,头码是多少,每个
按键的键值是多少?这些都表示遥控器的属性。
那我们怎么让系统识别遥控器的不同按键呢? 就需要 kernel 针对协议进行解析(ir decoder),解析完后要
告诉 kernel 这个键值映射成了什么功能(ir map),这样上层就知道接下来要做什么了。
所以,配置一款遥控器重点在于 decoder + map。
1.1. IR 框架介绍
1. IR 框架分为四层:IR Driver 层,IR core 层,Decoder 层,Keymap 层。
2. IR Driver 层: 需要实现 IR Driver 的一些 init,interrupt 处理,file_operations 操作等。
3. IR core 层:需要实现提供给 decoder 层,keymap 层的相关接口,raw 数据处理接口,input 相关接口
等。
4. Decoder 层:需要实现不同 protocols 的解析函数。
5. Keymap 层:需要实现针对不同 IR 的 keymap 映射关系。
锐
金
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
金
锐
显
显
显
F-
3697
{MStar Part Name}
{Product Description}
{Document Name + Version}
Security Level: Confidential A
- 2 -
9/24/2019
Copyright © 2019 MStar Semiconductor, Inc. All rights reserved.
1.2. 疑问:decoder list 和 map list 怎么来的?
从前面介绍,我们需要配置一款遥控器,需要有 decoder + map,所以 fusion 关于 ir 的配置就是要围绕
decoder list 和 map list 进行配置。
1.3. IR 目录结构
protocols/ ====》常见的 IR 协议(NEC/RC5/RC6/TOSHIBA/PANASONIC/等等)
linaro/mstar2/drv/ir ==》老的 ir 框架(老的 chip 在用)
linaro/mstar2/drv/ir_mirc ==》新 ir 框架(fusion 平台 + 新 chip)
1. Ir_config.h 进行配置出来
2. Ir_config.ini 进行 parse 出来。
① 中断处理程序获取 register data 保存到 fifo,kthread 读取 fifo 数据。
② kthread 取 fifo 数据后送给 decoder 匹配协议解析过程
③ decoder 链表注册和销毁
④ 解析得到 keycode 匹配 keymap 的过程,这里用 keymapnumber 来匹配
⑤ keymap 链表注册和销毁
⑥ keycode 传给/dev/ir read 的过程,供上层 polling 方式取 key
⑦ keycode 传给 input 过程,以 event 的方式传递给 Android 层
锐
显
金
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
金
锐
显
显
keymaps/ ====》常见 cus 用到的 keymaps
ir_dynamic_config/ ==》支持 ir_config.ini 的配置
其他文件是 ir 驱动文件。
F-
3697
{MStar Part Name}
{Product Description}
{Document Name + Version}
// protocol_type, Headcode, IRSpeed ,enable
Security Level: Confidential A
- 3 -
9/24/2019
Copyright © 2019 MStar Semiconductor, Inc. All rights reserved.
系统 IR 配置介绍
IR 的配置有两种:
1.
2.
显
锐
Ir_config.h 进行配置,在编译阶段配置好客户要使用的遥控器。
Ir_config.ini 进行配置,可以动态配置客户要使用的遥控器。
两种配置方式可以单独配置使用,也可以同时配置使用。
2.1 原则:(硬解码优先原则)
支持下面这些模式
#define IR_TYPE_FULLDECODE_MODE 0 //nec full 解码,支持两个头码遥控器
#define IR_TYPE_RAWDATA_MODE 1 //nec raw 解码
#define IR_TYPE_HWRC5_MODE 2 //rc5 硬解码
#define IR_TYPE_HWRC5X_MODE 3 // rc5x 硬解码
#define IR_TYPE_HWRC6_MODE 4 //rc6 硬解码 支持 mode0
#define IR_TYPE_SWDECODE_MODE 5 //软解码,支持多种不同协议的解码
金
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
锐
显
显
1. 如果客户配置了一个或者 2 个 NEC 协议的遥控,走的是 fulldecoder mode
2. 如果客户配置了多个 NEC 协议的遥控,走的是 RAW decoder mode
3. 如果客户配置了多个协议,走的是 sw decoder mode
金
//Number of IR should this chip supported
#define IR_SUPPORT_NUM 1
//Add & Modify Customer IR with Differ Headcode Here
static IR_Profile_t ir_config[IR_SUPPORT_NUM]=
Ir_config.h 这个文件是提供给客户进行配置 IR 的文件,路径 mstar2/drv/ir_mirc/ ir_config.h
{
2.2 Ir_config.h 介绍
2.2.1. 配置客户 IR
一般情况下 irq interrupt 跑的时间不会太长,而且可以立马响应过来,但当系统负载过大的情况下或者其他
中断优先级比 IR 大的中断程序一直运行的时候,这个情况需要开 SW FIFO 来保证 IR shotcount 不被丢失,导致
key 解析失败。(公版 fusion 新 ir 都是有开 sw fifo 的)
F-
3697
CT-90436 IR customer code
{MStar Part Name}
{Product Description}
{Document Name + Version}
{IR_TYPE_NEC,NUM_KEYMAP_MSTAR_TV,0,1}, // Mstar IR customer code
//{IR_TYPE_NEC,NUM_KEYMAP_HISENSE_TV,0,1}, // Hisense IR customer code
//{IR_TYPE_RCA,NUM_KEYMAP_TCL_RCA_TV,0,1}, // TCL RCA customer code
//{IR_TYPE_P7051,NUM_KEYMAP_P7051_STB,0,1}, // Panasonic 7051 IR customer code
//{IR_TYPE_RC5,NUM_KEYMAP_RC5_TV,0,1}, // RC5 customer code
//{IR_TYPE_METZ,NUM_KEYMAP_METZ_RM18_TV,0,1}, // metz rm18 IR customer code
//{IR_TYPE_METZ,NUM_KEYMAP_METZ_RM19_TV,0,1}, // metz rm19 IR customer code
//{IR_TYPE_TOSHIBA,NUM_KEYMAP_SKYWORTH_TV,0,1}, //skyworth toshiba ir
//{IR_TYPE_NEC,NUM_KEYMAP_CHANGHONG_TV,0,1}, // changhong_RL78B /Toshiba
//{IR_TYPE_RC6,NUM_KEYMAP_KATHREIN_TV,0,1}, //Kathrein RC6 customer code
};上面的就是配置的客户需要支持的遥控器。
#define IR_SUPPORT_NUM 1
表示这个系统支持 1 款遥控器如结构体描述。
以{0, IR_TYPE_NEC, NUM_KEYMAP_MSTAR_TV, 0x807F}, // Mstar IR customer code 为例
0:表示支持遥控器的下标 index
IR_TYPE_NEC:表示要添加的遥控是 NEC 协议(假设 NEC 协议解码已经实现,换其他解码类似)
NUM_KEYMAP_MSTAR_TV: 表示针对公版遥控器的键值映射关系是对应这个 keymap
0x807F: 表示公版遥控器的头码
锐
金
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
M edia T ek C onfidential R elease for
金
锐
金
锐
显
显
显
static IR_DBG_LEVEL_e ir_dbglevel = IR_DBG_ERR;
默认设置成 error 打印。
如果系统 IR 运行的时候不正常,可以打开 IR 的打印级别来抓 log debug。
find / -name IRDebug
echo 4 > xxxx/IRDebug //修改打印级别 xxxx 为 find 到的 IRDebug 路径
cat xxxx /IRDebug //查看支持的打印级别和当前的打印级别
在这个框架中,除了_MDrv_IR_ISR 里面,可以在任何地方加 log 进行 debug。
默认设置成 IR_SPEED_FAST_N,这个是针对不同的遥控器灵敏度来客制化设置的,有些遥控器短按键的时
2.2.4. 配置 IR Speed
//IR Speed level for customer setting
static IR_SPEED_LEVEL_e ir_speed = IR_SPEED_FAST_N;
如果客户在上面的基础上还需要增加一个 NEC 协议的头码为 0x5566 的遥控器,则添加下面的 code。
{ IR_TYPE_NEC, 0x5566, 0, 1}, // xxxxx IR
2.2.2. 新增遥控器
2.2.3. 配置 IR debug 级别
//IR Debug level for customer setting
Security Level: Confidential A
- 4 -
9/24/2019
Copyright © 2019 MStar Semiconductor, Inc. All rights reserved.