1. 硬件连接
看原理图可知,指纹芯片有六个只要功能引脚,POWER, RST, MI, MO,CLK, EINT,再dws中将spi的四个引脚和中断脚配置好,mt6753只有一组spi即spi0,65-68脚。
2.软件代码
(1) 拿到代码后将代码放在Z:\heqian\53_m_base\alps\kernel-3.18\drivers\input\fingerprint文件夹,如果没有此文件夹,新建fingerprint,并解决编译中出现的各种错误
这里出现了几个错误,都是头文件引用找不到的问题,再makefile中将索要包含的头文件目录指定一下就可以解决
ccflags-y +=-I$(srctree)/drivers/spi/mediatek/$(MTK_PLATFORM)
ccflags-y +=-I$(srctree)/drivers/misc/mediatek/include
ccflags-y +=-I$(srctree)/drivers/misc/mediatek/include/mt-plat
ccflags-y+=-I$(srctree)/drivers/misc/mediatek/include/mt-plat/$(MTK_PLATFORM)/include
ccflags-y+=-I$(srctree)/drivers/misc/mediatek/mach/mt6735/magc6753_65u_1_m0/dct/dct/
ccflags-y += -I$(srctree)/drivers/spi/mediatek/mt6735/
ccflags-y += -DMT6735
其他头文件未包含错误,可通过搜索将函数所在的.h文件找到并在C文件中include
将驱动中的spi总线号写为0,否则无法加载spi驱动
(2) 将库文件替换Z:\heqian\53_m_base\alps\out\target\product\magc6753_65u_1_m0\system\lib64\hw\fingerprint.default.so
在.fc_spi.c中将char* uevent_env_str[2] = {"FC909_STATE=WAKEUP", NULL};
改为char* uevent_env_str[2] = {"FC909_STATE=WAKEUP", NULL};
因为库里面写的节点是jmt101,指纹模块启动后会通过库去度这个字段,匹配之后才能开始采集数据
(3)在Z:\heqian\53_m_base\alps\device\mediatek\mt6735\device.mk中加入PRODUCT_PACKAGES +=fingerprintd
可自动编译至system/bin目录下
(4)解决完编译问题后配置dts和dtsi文件,由于mt6753只有一组spi0,所以dtsi文件里面我们最多只能配一组,通过查看代码后发现,spi0平台驱动挂载会在指纹驱动初始化的时候自动加载, dts里每一个&后面的节点再dtsi里面都要对应定义
/* fingerprint start */
&fc909{
debounce = <86 0>;
pinctrl-names="finger_rst_low","finger_rst_high","default";
pinctrl-0 = <&finger_rst_low>;
pinctrl-1 = <&finger_rst_high>;
pinctrl-2 = <&finger_pins_default>;
status = "okay";
};
&pio {
finger_rst_low: finger_rst_low@