版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、Display1.1CM相关概念1.1)MIPI 接口:一共有三种接口:DBI(也做 CPU 或 MCU 接口)、DPI(也叫 RGB 接口)、DSI.在使用DSI 接口时,目前 75/77 都只支持到 2 条 datalane,加上一条 clocklane.使用 DPI 接口时,根据 LCMIC 支持的情况,可以选择 16bus、18bus 传输 RGB 格式文件,在 GPIO 部分分为 R、G、B 分别对应 8 个 GPIO(GPIO2046 期间),客户采用 DPI 接口需要根据选择的 bus 方式进行配置,推荐 RGB 端口全部配置为对应的复选模式,并设置为 OUT 输出。采用 D
2、BI 接口,有两种模式选择,一种是选择共用 DPI 的 bus 脚+DPI 控制线,另一种是共用nanddatapin+CPU 控制线。1.2)DSI 接口有两种 sync 模式:videomode 和 commandmode,其中 videomode 是 BB 端一直刷数据到 LCM,cmdmode 是在有数据更新时刷数据到 LCMGRAM 中)和 DSIcommandmode 相比,videomode 是需要实时传输 imagedata 到 Icm 端,DSI 的 refreshrate 决定了 Icm 的 refreshrate。1.3)EDS 机制:92 平台 LCMdriver 中定
3、义了 esd_check 和 esd_recovery 的接口,但 ESD 线程不工作。目前在 MT6589 之前平台, videomode 的 ESD 实现有三种模式, 分别是: extTE (外部 TE 信号检测)、 intTE(内部 TE 信号检测)、noncoutelk不同 ESD 方式需要注意的方面a)intTE 和 extTE 的检测,都不需要实现 lcm_esd_check 函数,而需要实现 lcm_esdecover 函数。noncontelk 则不需要实现 lcm_esd_check 函数和 lcm_esd_recover 函数,而只需要在上面params 中配置为 TRUE
4、 即可b)extTE 的实现,需要 LCM 外接 TEpin 到 BB 端,同时在 initalcode 中配置寄存器打开 TE 信号的输出(一般是写 0 x35 寄存器,具体需要和 LCMICFAE 确认)1.4)HDMI/MHL:目前我司 HDMI/MHL 的相关 code 和 driver 都是有集成在 codebase 中的,要使用的话,只需要只需要在对应的 ProjectConfig.mk 文件中开启,并且在 det 中配置好对应的引脚定义即可。以下以 MHL 为例:ProjectConfig 中配置:MTK_HDMI_SUPPORT=yes#表明开启 HDMI/MHL 功能CUST
5、OM_KERNEL_HDMI=Sii8338#表明配置为 MHL 的 IC 型号1.4)TE 信号:大部分 TE 问题是由于没有正常开启 TE 所导致,首先检查 TE 是否开启。89 平台使用内部 TE,Icmdriver 中只需要在 init 过程中打开 LCMTE 即可,一般是写 0 x35 寄存器,部分 IC 需要额外写其他寄存器,可与 FAE 确认。检查 TE 是否正常开启,如果是工版,则可使用如下方式打开 fps 的 log,查看 TE 信息:adbshellcdsys/kernel/debugechofps:onmtkfb然后查看 mtklog,搜索“FPS”若看到等待 TE 时间
6、为 0,表示 TE 未正常开启,需要与 LCMIC 的 FAE 进一步确认开启流程。若 TE 已经成功开启,依然有 Teering 现象,可从如下方面思考分析。1) 是否使用了竖屏横用,导致对 GRAM 的读写方向不一致,一般会出现斜线切屏现象。2) 是否 clock 速度过低,FPS 低于 LCM 自刷新率的 1/2?3) 是否 clock 速率过快,超过 LCM 的自刷新率,导致写 GRAM 时可能从后面赶上读,导致 Teering 发生。1.5) HS/LP:HS:highspeed,clock 切为 HS 模式,高速模式。LP:lowpower,低电平有些 LCM 在开机的时候,如果使
7、用 LP 下发 initcode,可能会不准确或者导致花屏等问题,这时候需要使用HSmode 发送 initcode,比如三星的某款 OLED(D53D6EA8061V-Amoled)。continuousclock/no-continuousclock 模式1.6)dithering:抖动显示技术:MT6572 如所用 lcm 不支持 RGB888colorformat,显示效果差需要开启 dithering 的。1.7)其他概念:AAL:BB 端 CABC(即 AAL),为 1 种方式控制背光continuousclock/Non-continuousclock:Switchclockla
8、nefromHStoLP2.LCM 时钟配置MT6582LCMDriver 中配置:params-dsi.PLL_CLOCK=234;计算方法:展频开关:如果 MIPIClock 对 RF/WCN 产生干扰,并且在尝试寻找相应的频点依然无法解除 EMI,可以尝试做FrequencyHopping;82 平台默认打开展频开关,不同于 72/89 平台,将展频的开关以及展频幅度的选择,都开放到 LCMDriver 中,以如下为例:params-dsi.ssc_range=4;params-dsi.ssc_disable=0;代表:展频打开,ssc_range=4%3.AAL 与 CABC 背光选择
9、(两种方式控制背光):参考FAQ0596689 平台支持 BB 端 CABC(即 AAL)或 LCM 端 CABC 方式控制背光,两种方式使用方法如下【BB 端 CABC(即 AAL)】-打开功能,向 MTK 申请 patch,并在 ProjectConfig.mk 中打开 MTK_AAL_SUPPORT=yes【LCM 端 CABC】-对于 VideoMode,ALPS.JB2.MP.V1.3(包括 1.3)之前的版本,请向 MTK 申请 patch-lcmdriver 中实现 set_backlight 接口-cust_leds.c(包括 lk 与 kernel 中的两支文件)设置如下4.
10、 调整 Display 消耗的 BW(bandwidth 带宽)方法:LCMdriver 建议如下:-MIPI 的 clock 尽量低,建议 60fps-ForDSIVideomode,建议不要使用 burstmode(比较能吃 BW)params-dsi.mode=BURST_VDO_MODE;-Videomode 的时序,blank 区间(如 VBP/VFP/HBP/HFP)尽量少(当然也需要满足 LCMmodule 的 spec)5. DSIvideomode 相关参数配置方法:对应配置文件:alpsmediatekcustomcommonkernellcmxxxx.c 中 lcm_ge
11、t_params()函数1, datalane 每帧回 LP11(LowPowerstate,dp,dn 都为高电平),clk 一直 HS(HighSpeed),对应配置:params-dsi.cont_clock=1;params-dsi.clk_lp_per_line_enable=O;2, datalane 每一行回一次 LP11,clklane 每一帧回一次 LP,对应配置:params-dsi.cont_clock=0;params-dsi.clk_lp_per_line_enable=O;3,datalane 和 clklane 都是每行回一次 LP11,对应配置:params-d
12、si.cont_clock=0;params-dsi.clk_lp_per_line_enable=1;6.LCMCABC 配置参考FAQ124137.MHL 卡顿问题8.ESD 机制各个平台的差异:对于 89/72/82 等新平台,Display 架构做了调整,ESD 的实现方式与之前的 75/77 等平台稍有差异。对于之前 75/77 平台,可以参考 FAQ03210 及 FAQ05163.新旧架构下,主要是 DSIVideoMode 下 ESD 方式不一样。之前的架构下 VideoMode 的屏采用检测外部 TE 或者内部 TE 来做 ESDCheck,因此需要在 lcmdriver 中
13、配置相应的参数。新架构下不支持外部 TE 或内部 TE 来做 ESDcheck,lcm_get_params 中关于 esd 的参数不用再配置。女口lcm_int_te_monitor、lcm_int_te_period、lcm_ext_te_monitor 等无需配置。SOLUTION新的 Display 架构下,DSIVideoMode 及 DSICommandMode 都采用读寄存器的方式来进行 esdcheck.因此都只需要在 lcmdriver 中实现 esd_check 和 esdecover 函数即可。对于具体读取哪些寄存器来进行 esdcheck,需要与屏厂确认。ESD 实现后
14、如果出现每两秒闪屏的问题,可以按如下流程处理:1. 首先检查 esdcheck 中是否添了过多的 log 信息或者有 delay 操作,建议先去掉所有 log 测试。2. 如果依然出现每两秒闪屏,可参考 FAQ05680 和 FAQ05681 进行处理。9.DBI/DPI 接口的 GPIO 的配置情况DBI:DBI 接口分为串行和并行两种。由 lcm_params-ctrl 这个参数控制。LCM_CTRL_SERIAL_DBI/LCM_CTRL_PARALLEL_DBI1. )如果是 serial 类型的,是通过 MT6572datasheet 里面的 0 x14012028DBI_SCNF(
15、DBISerialInterfaceConfigurationRegister)这个寄存器来 config 串行接口。比如使用 LSDI 还是 LSDA丄 SCK 上升沿还是下降沿发送数据,LSCK 在没有数据的时候是 LOW/HIGH.配置几个 GPIOpin:LSCE0B(相当于数据使能信号,低电平有效),LSCK,LSDA/LSDI 传送 command 时用),DBIXX:0(传送 data 时用)CSS,CSH:chipselectsetuptime/chipselectholdtime(这两个时间之内是不会传数据的Invaliddata)2. )如果是 Parallel 类型的,配
16、置几个 GPIOpin:LPCE0B(相当于 CS 信号,低电平有效),LPA0(RS 信号,MTK 平台上面和 CS 信号是同步的) ,LCDCLK, LPWRB/LPRDB (类似数据使能信号) 和 DBIXX:0 (复用 DPI 的 datapin, 传送 data和 command 时用)写的时候用 LPWRB,读的时候用 LPRDB有 C2WS 和 C2WH 两个变量:chipselectiontowritesetuptime 和 chipselectiontowriteholdtime同理 C2RS 和 C2RH.硬件连接:DBIParallel 类型:BB 端需要打开 LRDB、
17、LWRB、LPA0pin 脚复用功能,并连接到 LCM 的 RD、WR、RSDBIserial 类型:BB 端需要打开 LSCEOB、LSCK、LSDA/LSDIpin 脚复用功能,并连接至 ULCM 的CSX,SCL,SDA/DOUT/DINIcmDriver 里面变量 writewaitstatetime,是处于 wait 状态的时间。比如大于等于 C2WS,参考MT6572datasheetPAGE1659 原理图note:89 和 72 的 DBI 的 clock 都是不可调整的,都是 130Mhz.但是如果需要调整 DBI 的 FPS 的话,可以调整 C2WS/C2WH/WST,分别
18、对应write_setup/write_hold/write_waitDPI:使用 DPI 接口时,根据 LCMIC 支持的情况,可以选择 16bus、18bus 传输 RGB 格式文件,在 GPIO 部分分为 R、G、B 分别对应 8 个 GPIO(GPIO2046 期间),客户采用 DPI 接口需要根据选择的 bus 方式进行配置,推荐 RGB 端口全部配置为对应的复选模式,并设置为 OUT 输出。同时 DPI 的接口需要 BB 端打开 DPIHSYNC、DPIVSYNC、DPIDE、DPICK 复用功能,并分别连接到对应的 LCM 控制端另注:其实 DPI 和 DBI 一样,都是可以通过
19、 lcm_params-ctrl 这个变量来控制是使用 Parallel 还是 serial 还是GPIO 的类型来下 commando但是一般 DPI 都会选择使用 LCM_CTRL_SERIAL_DBI 这个类型,因为 DPI 的屏,DB17.O只是会用来做数据传输,控制线是会通过 LSDA/LSDI 传输。10.LCMPorting 时如何配置 Clockclock 配置方法:lcmdriver 中配置 clock 有不同的方式,曾经使用过的配置方法有如下几种:Type1:配置倍频与分频参数:dsi.pll_div1(倍频),dsi.pll_div2(分频)-(适用于 75/77 等之前
20、的平台)Type2:配置倍频与分频参数:dsi.pll_fbk_div(倍频),dsi.pll_div1&dsi.pll_div2 分频)-(适用于 89/72等前期版本)Type3:直接配置 clocklane 频率:dsi.PLL_CLOCK(前期配置成枚举值,后期将直接配置成对应的频率常数值)-(适用于 89/72/82.)11.如何使用 PMIC 的 LDO 方式供给 LCM 端 1.8/2.8V 的电压参考FAQ100381. 如何在开机阶段使用 PMIC 的 LDO 方式供给 LCM 端 1.8/2.8V 的电压?2. 如何在 suspend/resume 的时候,断掉/供给 LC
21、M 端 1.8/2.8v 的电压?1.)在开机的时候,建议在 preloader 或者 LK 阶段就通过 PMIC 的 LDO 方式来给 LCM 端上电,比如可以在 alpsmediatekplatformmt6589preloadersrcdriversmtk_pmic_6320.c 文件里面的pmic6320_init 函数中做上电 1.8/2.8v 的操作。AOSP 版本 mtk_pmic_6320.c 的路径:alps/bootable/bootloader/preloader/platform/mt6572/src/drivers/mtk_pmic_6320.c下面是在 LK 阶段的
22、上电/掉电方法:使用 upmu_common.c 文件里面 API 来分别控制每一个 LDO_VGPX.比如:upmu_set_rg_vgp6_vosel 用来控制上电的电压值;upmu_set_rg_vgp6_en 用来控制 enableVGP6 这个 pin2.)因为在 suspend/resume 的时候,kernel 都是跑起来的,所以上电/掉电 1.8/2.8v 的操作都应该放在kernel 里面。下面是在 kernel 里面的上电/掉电方法,在 kernel 里面有统一的上电/掉电的接口函数:上电接口函数:hwPowerOn 掉电接口函数 hwPowerDown以下以 PMIC63
23、20 的 VGP6 为例。请在您要上电的文件#include上电请调用 hwPowerOn,掉电请调用hwPowerDownhwPowerOn(MT65XX_POWER_LDO_VGP6,VOL_2800,ldo_test);boolhwPowerDown(MT65XX_POWER_LDO_VGP6,ldo_test);12.如何拉低并保持 LCMRESETPIN 脚为低电平平台默认 RESETPIN 脚输出为高平的, 如果一定需要拉低, 可以配置 RESETPIN 脚为 GPIO 模式, 再通过 GPIO方式拉低。使用 mediatek/dct 目录下的 DCT 工具,使用其打开 custo
24、m/XXX/kernel/dct/dct 目录下的 DWS 文件,将 GPIO131 配置成 O:GPIO131.对 GPIOPIN 脚的控制有如下一些方法:lcm_util.set_gpio_mode(GPIO131,GPIO_MODE_OO);lcm_util.set_gpio_dir(GPIO131,GPIO_DIR_OUT);lcm_util.set_gpio_out(GPIO131,0);13. 如何调节 MIPI 接口驱动能力在使用 DBI、DPI 的 MIPI 接口时,可以在 lcm_get_params 函数中设置参数 io_driving_current 的值来配置 IO 的
25、驱动电流(6589 上面不支持)DSI 的 MIPI 接口,不支持 IO 驱动电路的调节,其可选值的大小可以在 lcm_drv.h 看到定义。其可选值的大小可以在 lcm_drv.h 看到定义:typedefenumLCM_DRIVING_CURRENT;该值的会在 lcd_drv.c 文件中写到寄存器中:LCD_STATUSLCD_Set_DrivingCurrent();14. 如何通过检测外部 TE 实现 esdcheck 的功能在 72/82/92 的 JB/KK 版本,我们都是通过读取 esd 寄存器的方式实现 esdcheck,但是由于 esdcheck的时候会切换到 cmdmod
26、e 去读,所以屏的玻璃存在最大 1 帧时间的等待,如果这个 vdomode 屏的玻璃延时等待时间较小(小于切换的时间),就会出现闪屏,所以不能使用读 esd 寄存器的方式做esdcheck。如果这个屏有 externalTE 管脚的话, 可以通过检测 ext.TE 的方式来做 esdcheck, 具体原理为: 把原来的 esd流程全部关闭,启动一个新的线程,循环检测外部 TE 中断,如果检测失败,就recovery。新的 esd 流程里面需要做三件事:1)物理连接一根外部 TEpin,然后在 dws 文件里面配置一个 GPIO 口为 DSI_TE 模式。2)在 DSI 初始化的时候,注册该 e
27、xt.TE 的 irq 处理函数,收到中断则设置 irq_flag 为 TRUE。3)启动线程定时去 waitflag=1,如果超时,则做 esdrecovery。15.如何配置 DSI 时钟频率1、)DSIvdomode 下的数据速率 data_rate 的大致计算公式为:Datarate=(Height+VSA+VBP+VFP)*(Width+HSA+HBP+HFP)*total_bit_per_pixel*frame_per_second/total_lane_num2、)DSIcmdmode 下的数据速率 data_rate 的大致计算公式为:Datarate=width*height
28、*1.2*total_bit_per_pixel*frame_per_second/total_lane_num参数注释:data_rate:表示的是数据速率width,height:屏幕分辨率VSAVBPVFP:DSIvdomode 的 verticalporch 配置参数HSAHBPHFP:DSIvdomode 的 horizontalporch 配置参数total_bit_per_pixel:表示的是一个 pixel 需要用几个 bit 来表示,比如 RGB565 的话就是 16 个bitframe_per_second:就是我们通常看到的 fps,叫做帧率,表示每秒发送多少个帧,一般是
29、 60 帧每秒total_lane_num:表示的是 datalane 的对数。3、)DSI 采用的是双边采样,则 clk 等于数据速率的一半,因此:clk=data_rate/2有两种配置 clk 的方式,第一种方式配置四个参数得到,第二种配置方式直接配置频率,建议采用第二种。第一种方式,通过 div 分频倍频实现,各个平台略有差异,但是原理基本一致,请参考 portingguide,=;配置范围为 0,1,2,3 的时候,对应的 div1_real 等于 1,2,4,4=;配置范围为 0,1,2,3 的时候,对应的 div2_real 等于 1,2,4,4=;范围 0.63=;配置范围为
30、0,1,2,3 的时候,对应的 fbk_sel_real 等于 1,2,4,4输出频率=26MHz*(fbk_div+1)*(2*fbk_sel_real)/(div1_real*div2_real)第二种方式,直接配置 clk 大小:params-dsi.PLL_CLOCK=LCM_DSI_6589_PLL_CLOCK_234;/这里举例 89 平台,使用一个宏,表示配置的 clk 等于 234MHz。但是在 89 之后的平台,使用直接配置一个频率数字的方式,比如 params-dsi.PLL_CLOCK=234,表示 234MHZ)4、在 lcmporting 过程中,这些参数都定义在 l
31、cm_drv.h 文件中的 LCM_DSI_PARAMS 结构体中,随着平台的发展,或许有所不同,但是基本原理都是一致的,如何配置 clk 的大小,请先根据自己的帧率、如下举例 89 平台:params-dsi.pll_div1params-dsi.pll_div2params-dsi.fbk_divparams-dsi.fbk_sel像素格式、porch 值、屏的分辨率、datalane 对数等计算出 data_rate,然后计算出 elk。16.背光模式设置成 T65XX_LED_MODE_CUST_BLS_PWM,如何修改 PWM 的工作频率前提:cust_leds.c 文件里面使用的背
32、光模式是 MT65XX_LED_MODE_CUST_BLS_PWMMT6582 版本工作频率计算公式如下:PWM 工作频率计算公式:26MHz(clockfreq.)/(PWM_CLKDIV+1)/1024(period)26KHz 所以需要修改PWM 的工作频率,可以通过修改 PWM_CLKDIV,clockfreq,或者 period 的值来达到修改 PWM 的工作频率的效果。以下的三种方法可以任选 12 种来达到想要的 PWM 工作频率:1.修改分频参数方法,修改 config_data 里面的第二个参数:lcd-backlight,MT65XX_LED_MODE_CUST_BLS_PW
33、M,(int)disp_bls_set_backlight,0,1, 0,0,0/设置 div=12. 修改 clockfreq:在 alpsmediatekplatformmt6582kerneldriversdispsysddp_bls.c 文件的 disp_bls_init 和disp_bls_config 函数中设置 CLK_CFG_1 这个寄存器的值,来选择合适的时钟源,加入如下代码:mt65xx_reg_sync_writel(DRV_Reg32(CLK_CFG_1)|(0 x00000003),CLK_CFG_1);/设置 156MHz的时钟源转载请注明出处:http:/ PMI
34、C 直接充电:驱动代码位于:mediatekplatformmt6592kerneldriverspowercharging_hw_pmic.cb. switchcharge 方式充电(switchcharger 是功率转换型的芯片)。驱动代码位于:mediatekplatformmt6592kerneldriverspowercharging_hw_xxxx.c 比如: fan5405 对应的文件就是 charging_hw_fan5405.cbq24158 对应的文件就是 charging_hw_bq24158.c具体配置位于:MTK_FAN5405_SUPPORT=noMTK_FASTB
35、OOT_SUPPORT=no2.driver 中 mdelay()与 msleep()的区别使用:在 LinuxDriver 开发中,经常要用到延迟函数:msleep,mdelay/udelay.虽然 msleep 和 mdelay 都有延迟的作用,但他们是有区别的.1.)对于模块本身mdelay 是忙等待函数,在延迟过程中无法运行其他任务.这个延迟的时间是准确的.是需要等待多少时间就会真正等待多少时间.msleep 是休眠函数, 它不涉及忙等待你如果是 msleep(10), 那实际上延迟的时间, 大部分时候是要多于 10ms的,是个不定的时间值.他们的差异,平时我也讲的出来,可是真正用起来
36、的时候,就忘记了.曾在两个 driver 的 i2c 的 code 中,需要用到 delay 函数,而我用了 msleep 函数,一直 I2C 速度超慢而我又不知道哪里出了问题,我潜意识中,认为我只 delay 了 1ms,可是,实际上是十几毫秒.2. )对于系统:mdelay()会占用 cpu 资源,导致其他功能此时也无法使用 cpu 资源。msleep()则不会占住 cpu 资源,其他模块此时也可以使用 cpu 资源。delay 函数是忙则等待,占用 CPU 时间;而 sleep 函数使调用的进程进行休眠。3. )udelay()mdelay()ndelay()区别:udelay();md
37、elay();ndelay();实现的原理本质上都是忙等待, ndelay 和 mdelay 都是通过 udelay 衍生出来的。我们使用这些函数的实现往往会碰到编译器的警告 implicitdeclarationoffunctionudelay,这往往是由于头文件的使用不当造成的。在include/asm-*/delay.h中定义了udelay(), 而在include/linux/delay.h中定义了mdelay和ndelay.udelay一般适用于一个比较小的delay, 如果你填的数大于2000,系统会认为你这个是一个错误的delay函数,因此如果需要 2ms 以上的 delay 需
38、要使用 mdelay 函数。4. )msleep,ssleep 区别:休眠单位不同5. )秒的单位ms 是毫秒=0.001 秒us 是微秒=0.000001 秒ns 是纳秒=0.000000001 秒3如何配置关机充电(KPOC)中的长按开机时间filepath:alps/mediatek/platform/mt6589/kernel/drivers/power/pmic_mt6320.cmodify#defineLONG_PWRKEY_PRESS_TIME2000*10000004.电池充电报警克制化手机充电出现异常的报警主要有:1. 充电电压超过正常允许的电压范围2. 电池温度超过允许的电
39、池温度3. 长时间的超过 1A 的大电流充电4. 电池电压超过允许的电池电压范围5总的充电时间超过 24hr.配置文件:alpsmediatekcustomprojectkernelbatterybatterycust_battery.h与上述 5 个报警相对应的宏:# defineBATTERY_N0TIFY_CASE_0001# defineBATTERY_N0TIFY_CASE_0002# defineBATTERY_N0TIFY_CASE_0003# defineBATTERY_NOTIFY_CASE_0004# defineBATTERY_NOTIFY_CASE_00055.如何读取
40、及设置 PMICregisters1) 进入工程模式,读取和设置拨号界面输入*#*#3646633#*#*进入工程模式 powerpmupmuregister或则 hardwaretestingpowerpmupmuregister,所有读写都是 16 进制2) 程序运行时,如何通过 ADBcmd 获取及设置 pmicregisters?adbshellcd/sys/devices/platform/mt-pmic6关于功耗问题:1) 第三方 apk 引起的,先予以排除;2) wakeupbyRTC:kernel_log 中查找 wakeupbyRTC,分析唤醒源;3) wakeupbyCCI
41、F_MD:4) wakeupbyEINT7.高温高压后如何恢复充电参考FAQ10404在充电的过程中,如果出现高温或者高压的情况下,系统会停止充电,当温度或者充电器的电压值恢复正常后,如何恢复充电。转载请注明出处:http:/ kernel 模块:参考FAQ08517(1) createnewfolderalpsmediatekcustomcommonkernelnewdevicedevice_a-noticeneedcreate2folder:newdevicedevice_a(2) copyyourcodeindevice_a(codecannotincludemakefilefile)(
42、3) AddCUSTOM_KERNEL_NEWDEVICE=device_atoprojectconfig.mk(4) compilingkernel2时钟周期和时钟频率的换算问题F 代表频率,单位是 Hz;T 代表周期,单位是 s频率等于一除以周期,写成公式就是:F(Hz)=1/T(s),所以倒过来就有周期等于一除以频率,写成公式就是:T=1/F120MHZ=120 x10人6HZ所以 T=1/(120 x10人6)=8.3x10人(-9)s=8.3ns执行时间/时钟周期=周期数执行时间*时钟频率=周期数时钟周期=1/时钟频率举例说明:dws 中的 Keypress_Perio 是消抖周期,
43、基准时钟是 32K。如果是 1024 个周期,则消抖时间是 32ms;即:消抖时间=(1/32000)*1024s=0.032s=32ms3触摸屏的供电配置VDDVGP 供电区别4. TP 上实现虚拟按键功能:参考FAQ02518添加 tp 的 virtualkey,需在 tp 对应的头文件中添加如下设置:1. 定义宏 TPD_HAVE_BUTTON;2. 定义 TPD_BUTTON_HEIGHT,TPD_KEY_COUNT,TPD_KEYS 和 TPD_KEYS_DIM,分别用于定义button 被识别的纵向坐标,button 的个数,对应的功能键,和每个功能键的坐标。配置示例:#defin
44、eTPD_HAVE_BUTTON#defineTPD_BUTTON_HEIGHT480这个不小于 LCD 的分辨率的 height# defineTPD_KEY_COUNT4# defineTPD_KEYSKEY_MENU,KEY_HOME,KEY_BACK,KEY_SEARCH# defineTPD_KEYS_DIM40,500,40,60,120,500,40,60,200,500,40,60,280,500,40,60其中,40,500,40,60对应了 KEY_MENU 的坐标,(40,50)是该 keycenter 的坐标,40 是该键的宽度,60 是该键的高度3. button 定
45、义初始化成功后,通过 adbshell,可以在/sys/board_properties/virtualkeys.mtk-tpd 中看到这些 button 的定义5. TP 虚拟按键背光灯时间控制:adjustpowermanagerservice.javadefineLONG_KEYLIGHT_DELAYvalue6.I2C 传输数据速率设定方式:在进行 i2c 传输前设置,i2c_client-timing=timing_number;备注:1. 当设备不支持快速 modetiming_number=100;2. 当设备支持快速 modetiming_numbermt_gpio_set_d
46、efault();3.读取和修改 GPIO 配置参数的 ADB 命令4耳机检测82 以及之后的平台,请一定要用 EINT+ACCDET 方式进行耳机检测。5.Headsetaccdet 常用宏:在 accdet.c 和 accdet_custome.h 为了实现一些功能有用到很多宏开关,把目前相应的宏开关介绍如下:1:ACCDET_EINT是否启用了外部中断来侦测是否有耳机插入和拔出2:ACCDET_MULTI_KEY_FEATURE是否支持使用 A/D 来侦测 key,这里要注意的是即使耳机只有一个 key 若是在 89 的平台也需打开此宏开关3:ACCDET_LOW_POWER当插入三段耳
47、机 6s 后自动关闭 micbias,达到省电的目的以上三个宏可以看成一个宏4:ACCDET_28v_MODE在我们内部有一个 switch 是针对外部耳机是用 2.8 还是 1.9V 的切换开关,美标的是 2.8V,国标的是1.9V5:ACCDET_PIN_RECOGNIZATION美标的插孔识别国标的耳机,国标的耳机识别美标的插孔,目前这个功能还没有实现,此宏不能打开6:ACCDET_SHORT_PLUGOUT_DEBOUNCEACCDET_SHORT_PLUGOUT_DEBOUNCE_CN25拔出耳机后有时候图标会再弹出后在消失,主要解决类似 bug7:ACCDET_PIN_SWAP美标
48、的插孔识别国标的耳机,这个时候需要借助 accdet 的一个上拉电阻,当有这种情形的时候 AB 一直为 0,达到检测到的目的,当然也有误判的时候,4 段耳机按住按键插入后会有误判6.如何配置 PMIC 上的 RST_KEYalps/mediatek/custom/$PRJ/kernel/kpd/kpd/mtk_kpd.h配成 vol-:#defineKPD_PMIC_RSTKEY_MAPKEY_VOLUMEDOWN配成 homekey:#defineKPD_PMIC_RSTKEY_MAPKEY_HOME7怎样添加一个自定义的 LED 灯1.修改如下两个文件:alps/mediatek/cust
49、om/common/kernel/leds/inc/cust_leds.henummt65xx_led_typeMT65XX_LED_TYPE_RED=0,MT65XX_LED_TYPE_LCD,MT65XX_LED_TYPE_ABC,/AddanewLEDtypeMT65XX_LED_TYPE_TOTAL,;alps/mediatek/custom/YOUR_PRJ/kernel/leds/mt65xx/cust_leds.cstaticstructcust_mt65xx_ledcust_led_listMT65XX_LED_TYPE_TOTAL=red,MT65XX_LED_MODE_NO
50、NE,-1,0,lcd-backlight,MT65XX_LED_MODE_CUST,(int)Cust_SetBacklight,0,/SetLEDparams,Pleaserefertoabc-backlight,MT65XX_LED_MODE_CUST,(int)Cust_SetBacklight_abc,0,;8. BB 端 PWMFIFOmode 配置参数说明9. 如何配置 UART1/UART4 为 Log 输出端口?mediateksourceexternalmhalsrccustomcommonpreloaderinccust_bldr.h#defineCFG_LOG_BAUD
51、RATE921600#defineCFG_UART_LOG(UART1)可以修改如下宏定义切换 log 输出口:mediatek/custom/project_name/preloader/inc/cust_bldr.h:CFG_UART_LOG 定义为 1or4如何修改 UART 输出数据的波特率有以下 3 个地方分别控制不同的部分的波特率1.设置 preloader 波特率,这里不会设置到 uboot 和 kernel文件为 mediatek/custom/proj/preloader/inc/cus_bldr.h# defineCFG_LOG_BAUDRATE(115200)2.修改 u
52、boot 波特率mediatek/custom/proj/uboot/inc/configs/ubconfigs.h# defineCFG_LOG_BAUDRATE(115200)3.修改 kernel 波特率mediatek/config/mt6575/autoconfig/kconfig/platformCONFIG_CMDLINE=console=ttyMt3,11520010.如何通过 adbshell 命令调试 Vibrator下面的命令是用于调试,请试着用它找出你想要的时间和震动强度。1000 毫秒=1 秒adbshellecho1000/sys/devices/virtual/t
53、imed_output/vibrator/enable11. ACCDET 模块耳机检测的原理ACCDET 内部有两个比较器, 会根据传入的电压判断并产生中断。 ACCDET 的输入电压即耳机 MICPIN 的电压,内部比较器的输出分别对应 A/B 两个寄存器。ACCDET 内部两个比较器的 Vref 分别是 1.77V 和 0.4V(硬件决定的,不能修改),所以,对应的电压有 3 个范围:1.77V-1.9V:未插入耳机的状态(AB=B11)0.4V-1.77V:插入 4 段式(有 Mic)耳机时的状态(AB=B01)0-0.4V:插入 3 段式耳机时的状态,或者 4 段式按键按下时的状态(
54、AB=B00)耳机的状态会保存到 ACCDET 的寄存器中,当电压在任意 2 个范围间切换时,状态发生变化,ACCDET 产生中断,中断处理中读取状态寄存器的值,并根据状态的变化做相应的处理.12. 如何调整不同 sensor 驱动的加载顺序在 mt6575_devs.c/mt6577_devs.c 文件内 mt6577_board_init 函数,修改不同设备的注册顺序。如platform_device_register(&sensor_alsps);platform_device_register(&sensor_gsensor);调整上述的注册顺序,即可调整驱动中 probe 的加载顺序
55、。13.SIM1 和 SIM2 两个卡槽交换:修改 modem 的相关代码,请做如下修改,即可交换 SIM1SIM2Modem:icc_switchControl_al.c(MOLYdriverstorage引 msrc)kal_boolsim_physicalSlotChanged=KAL_TRUE;转载请注明出处:http:/ FM 支持哪些音频方式Linein 模拟方式和 I2S 数字方式。硬件工程师要确定原理图上选择的是哪种方式,然后进行如下配置。lLineinMTK_FM_RX_AUDIO=FM_ANALOG_INPUTMTK_FM_TX_AUDIO=FM_ANALOG_OUTPUT
56、lI2SMTK_FM_RX_AUDIO=FM_DIGTAL_INPUTMTK_FM_TX_AUDIO=FM_DIGTAL_OUTPUT使用 dws 配置 I2S 管脚,可以参考 FAQ03803 中的配置进行。2. fm 如何打开支持 50K 的 feature修改 alps/mediatek/config/Project/ProjectConfig.mk 文件中的 MTK_FM_50KHZ_SUPPORT 变量。设置 MTK_FM_50KHZ_SUPPORT=yespatch3. 如何修改 6620/6626/6628 的 FMRSSI 门限RSSI:ReceiveSignalStrengt
57、hIndicator 接收信号强度指示Rx:Recieivedpower 接收功率两者意思一样,具体指(前向或者反向)接收机接收到信道带宽上的宽带接收功率。实际上中,前向链路接收机(指手机)接收到的通常用 Rx 表示,反向链路接收机(指基站侧)通常用反向 RSSI 表示。4. 如何关闭 RDS由于没有宏用来切换 RDS 的开启与关闭,直接修改上层 APK 上的接口 isRDSSupported 即可。RDS 是数字广播系统,主要在欧洲运用很广泛它的主要作用是这样的:它有一个优先权的设定特点你可以设定你喜欢的电台频道,如体育,新闻或军事等,当你的机子收到你所设定的频道信号时,机子正在工作的内容会
58、中止,转而播出这方面的信息它是数字可字母显示的,没有声音还有一种功能就是警告中断,当路面有事故发生(如堵车等),电台会播送信号,机子收到就会显示出来,你就可以走别的路了一般在欧洲的车载电子设备中要求要有这个 RDS 功能.5.FM 调试文档alpsmediatekconfig$ProjectProjectConfig.mkalpsmediatekconfig$Projectautoconfigkconfigproject 这两支文件中和 fm 相关的变量设置,例如 MTK_FM_SUPPORT、MTK_FM_CHIP、CONFIG_MTK_FM(这个变量十分重要,决定 FM 模块是否编译)。1
59、.1JNI 层编译编译命令:mk$projectmmmediatekexternalfmradio1.1.1alpsmediatekexternalfmradioAndroid.mk 负责产生 linux 文件系统中/system/etc/firmware 下的 fm 的 bin 文件,目前只针对 6628。1.1.2alpsmediatekexternalfmradiofmrAndroid.mk负责产生libfmjni.so和libfmar1000.so、libfmmt6616.so、libfmmt6620.so、libfmmt6626.so、libfmmt6626.so、libfmmt66
60、28.so。1.1.3alpsmediatekexternalfmradiocustomAndroid.mk 负责产生 libfmcust.so。1.2Kernel 层编译编译命令:lMT6620mk$projectnkmediatekkerneldriverscombodrv_fmlMT6628/6626mk$projectnkmediatekkerneldriversfmradio1.2.1MT66alpsmediatekkerneldriverscomboMakefilealpsmediatekkerneldriverscombodrv_fmMakefil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年废旧材料销售框架合同
- 文书模板-装卸货高空作业合同
- 2024年建筑工程分包合同
- 玫瑰的课件教学课件
- 2024年人工智能教育平台开发合同
- 2024医疗设备维修公司关于超声波机器保修服务合同
- 停电停气应急预案(6篇)
- 2024年建筑工程机电安装分包协议
- 2024年库房租赁与无人机测试存放合同
- 2024年专业咨询合作协议
- 2024年公安智能外呼项目合同
- 河南省信阳市2024-2025学年七年级上学期期中历史试题(含答案)
- GB/T 44570-2024塑料制品聚碳酸酯板材
- 2024年学校食堂管理工作计划(六篇)
- 体育赛事组织服务协议
- 天车工竞赛考核题
- 民办非企业单位理事会制度
- 临床输血的护理课件
- 民生银行在线测评真题
- 人教版(PEP)小学六年级英语上册全册教案
- 第二章 旅游线路类型及设计原则
评论
0/150
提交评论