mtk平台sensor分析三:移植ltr559光距感

一、前言

本文以ltr599光距感在MT8183平台驱动移植为例进行分析;

1、涉及文件和目录:

设备树: kernel-4.4/arch/arm64/boot/dts/mediatek/k71v1_64_bsp.dts
光距感框架:kernel-4.4/drivers/misc/mediatek/sensors-1.0/alsps/alsps.c
光距感驱动:kernel-4.4/drivers/misc/mediatek/sensors-1.0/alsps/LTR559/ltr559.c

2、在进行移植前的准备工作:

1、从光距感供应商中获取ltr599芯片数据手册和光距感驱动实例代码(优先mtk平台);
2、从硬件工程师手中获取MT8183工程项目的原理图(带光距感小板硬件接口的)和GPIO对应表格;
3、在移植前确保该项目的系统代码能完整编译,刷机后可以正常开机和打印串口log;

二、查看原理图

1、 ltr559小板原理图:

在这里插入图片描述

2、光距感引脚与主控端对应接线:

供电引脚:vcc-T —> VLDO28(MT6358)
距感红外灯供电引脚:VCC-R —> GPIO_VCC5V_RLED_EN --> AB23(MT8788)
I2C协议线:SDA1 —> SDA1(MT8788), SCL1 —> SCL1(MT8788);
光距感中断脚:EINT_ALPS —> EINT6(MT8788);
备注: MT6358为pmu,MT8788是cpu处理器;

3、供电引脚说明

3.1 光距感供电引脚需要2.8V,所以选择pmu来供电;
3.2 因为距感红外灯供电引脚需要5V电压,但cpu引脚只能输出1.8v,所以中间需要一个升压设置;当GPIO_VCC5V_RLED_EN为高电平时,VCC5V_RLED引脚电压为5V;当GPIO_VCC5V_RLED_EN为低电平时,GPIO_VCC5V_RLED_EN电压与vsys引脚一致,vsys电压与vbat电池电压
在这里插入图片描述
3.3 光距感的中断引脚在该项目中暂时没用到,不分析;

三、GPIO配置

因为中断引脚不考虑,供电VCC是有pmu控制,i2c引脚由mtk默认配置好了,所以gpio只需要配置距感红外灯供电使能引脚:GPIO_VCC5V_RLED_EN
查看GPIO对应表格:
在这里插入图片描述
可知原理图中的AB23对应GPIO18脚;

1、dws配置

打开DCT工具:vendor/mediatek/proprietary/scripts/dct/DrvGen.exe
选择DWS配置文件:vendor/mediatek/proprietary/custom/tb8788p1_64_bsp/kernel/dct/dct/codegen.dws
preloader阶段的dws:vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/tb8788p1_64_bsp/dct/dct/codegen.dws
lk阶段的dws:vendor/mediatek/proprietary/bootable/bootloader/lk/target/tb8788p1_64_bsp/dct/dct/codegen.dws
kernel阶段的dws:kernel-4.4\drivers\misc\mediatek\dws\tb8788p1_64_bsp\codegen.dws
配置GPIO18引脚为普通GPIO模式、默认输出、低电平
在这里插入图片描述

四、ltr559光距感移植

1、将ltr559驱动代码编译进内核

在调试驱动功能前需要将驱动代码编译进内核,让代码能正常的运行;

1.1、添加驱动代码

在kernel-4.4/drivers/misc/mediatek/sensors-1.0/alsps/目录下创建LTR559目录,将供应商提供的mtk平台实例代码拷贝到LTR559目录下;

1.2、修改Makefile和Kconfig配置文件

在kernel-4.4/drivers/misc/mediatek/sensors-1.0/alsps/Makefile中添加:obj-$(CONFIG_MTK_LTR559) += LTR559/
注:可以使用obj-y += LTR559/临时调试
在kernel-4.4/drivers/misc/mediatek/sensors-1.0/alsps/Kconfig中添加:source "drivers/misc/mediatek/sensors-1.0/alsps/LTR559/Kconfig"

1. 3、修改defconfig配置文件

在kernel-4.4/arch/arm64/configs/tb8788p1_64_bsp_defconfig和kernel-4.4/arch/arm64/configs/tb8788p1_64_bsp_debug_defconfig文件中加入CONFIG_MTK_LTR559=y(注:=附近不能有间隔)
提示:make bootimage编译内核,可以查看out/targer/product/tb8788p1_64_bsp/obj/KERNEL_OBJ/.config文件的配置与defconfig是否一致;

1.4、检查驱动代码是否编译进内核

在ltr559.c的入口函数ltr559_init中添加打印信息,编译内核ok后烧录固件,在开机过程中查看串口日志中是否有添加的打印信息,若有则说明成功编译进内核;

2、ltr559驱动的调试

终于到了移植ltr559驱动的重点部分,前期所有的工作都是为这一步做的准备,同样也是最关键的;ltr559驱动调试可以分成三步:1、调通ltr559驱动,确保主控端通过i2c通讯能获取到数据;2、增加sysfs用户接口,在驱动程序中增加sysfs设备节点供应用层调用,增加工厂测试中的光距感功能;3、调试ltr559驱动效果,确保主控端获取的数据范围、精度、使用场景等因素符合产品需求;

2.1 调通ltr559驱动功能

调通ltr559功能的标志是主控端能获取到光距感数据的变化;结合代码具体分析步骤:

2.1.1 dts设置

按照以下格式配置ltr559芯片在dts中的硬件信息:

//k71v1_64_bsp.dts
//GPIOI8为距感红外灯供电引脚配置
alsps: als_ps@0 {
   
        compatible = "mediatek,als_ps";
         //gpio的配置采用mtk封装好的GPIO子系统来设置
         psled-gpio = <&pio 18  0>;  //GPIO18
         status = "okay";
};
//i2c总线1下的ltr559设备信息配置
&i2c1 {
   
  alsps@3b{
   
       compatible = "mediatek,alsps"; 
	   reg = <0x3b>;  //i2c设备地址,在规格书中可以查到
	   status = "okay";
	};

注意:红外灯供电引脚和i2c设备信息分成两个节点的目的是保证光距感的兼容性,通过alsps.c架构文件获取红外灯GPIOI8的配置信息;

2.1.2 驱动程序获取dts信息

配置好dts后,驱动程序怎么获取到设备硬件信息呢?
获取GPIOI8信息的方式:

//alsps.c
static int als_ps_probe(struct platform_device *pdev)
{
   
    struct device_node *np 
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值