1:查看主板原理图获取硬件信息
系统硬件平台是sdm450/msm8953
在主板原理图上可以找到指纹相关的原理图部分如下:
该IC使用两路电, LDO6 1.8v, LDO10 2.8v。
- SPI通讯,追到模块上是 BLSP7 spi7 这组管脚,具体的管脚信息如下:
- FP_RST 脚硬件上悬空。
- FP_INIT 中断引脚,追到模块上,是gpio44。
2:驱动加载
2.1:添加驱动 code
a)配置编译选项
modified: msm-3.18/arch/arm64/configs/msmcortex-perf_defconfig
modified: msm-3.18/arch/arm64/configs/msmcortex_defconfig
modified: msm-3.18/drivers/input/Kconfig
modified: msm-3.18/drivers/input/Makefile
--- a/kernel/msm-3.18/arch/arm64/configs/msmcortex_defconfig
+++ b/kernel/msm-3.18/arch/arm64/configs/msmcortex_defconfig
+CONFIG_MICROARRAY_FINGERPRINT=y
--- a/kernel/msm-3.18/arch/arm64/configs/msmcortex-perf_defconfig
+++ b/kernel/msm-3.18/arch/arm64/configs/msmcortex-perf_defconfig
+CONFIG_MICROARRAY_FINGERPRINT=y
--- a/kernel/msm-3.18/drivers/input/Kconfig
+++ b/kernel/msm-3.18/drivers/input/Kconfig
+config MICROARRAY_FINGERPRINT
+ tristate "MICROARRAY fingerprint IC"
+ depends on SPI_MASTER
+ help
+ MICROARRAY fingerprint ic
+#yujixuan modify
+source "drivers/input/fingerprint/Kconfig"
--- a/kernel/msm-3.18/drivers/input/Makefile
+++ b/kernel/msm-3.18/drivers/input/Makefile
+obj-$(CONFIG_MICROARRAY_FINGERPRINT) += fingerprint/
b)添加驱动源码文件
fingerprint
├── Kconfig
├── Makefile
└── microarray
├── ioctl_cmd.h
├── Kconfig
├── madev.c
├── madev.h
├── Makefile
├── qualcomm-settings.c
└── qualcomm-settings.h
2.1.1:配置设备树信息
在获取硬件的硬件信息中,可知该指纹使用的 spi是 spi7, msm8953平台默认情况下,spi7是被配置在TZ端安全环境中, 被限制不能在AP侧使用的,
如果我们在AP侧使用spi7,需要解除限制,并且修改设备树种的 spi7 相关配置。
a)添加spi7 的设备树配置
--- a/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi
+++ b/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsi
@@ -1543,6 +1543,67 @@
+ /* start for fingerprint spi end */
+ spi7 {
+ spi7_default: spi7_default {
+ /* active state */
+ mux {
+ /* MOSI, MISO, CLK */
+ pins = "gpio137", "gpio138", "gpio135";
+ function = "blsp_spi7";
+ };
+ config {
+ pins = "gpio137", "gpio138", "gpio135";
+ drive-strength = <12>; /* 12 MA */
+ bias-disable = <0>; /* No PULL */
+ };
+ };
+ spi7_sleep: spi7_sleep {
+ /* suspended state */
+ mux {
+ /* MOSI, MISO, CLK */
+ pins = "gpio137", "gpio138", "gpio135";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio137", "gpio138", "gpio135";
+ drive-strength = <2>; /* 2 MA */
+ bias-pull-down; /* PULL Down */
+ };
+ };
+ spi7_cs0_active: cs0_active {
+ /* CS */
+ mux {
+ pins = "gpio136";
+ function = "blsp_spi7";
+ };
+ config {
+ pins = "gpio136";
+ drive-strength = <2>;
+ bias-disable = <0>;
+ };
+ };
+ spi7_cs0_sleep: cs0_sleep {
+ /* CS */
+ mux {
+ pins = "gpio136";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio136";
+ drive-strength = <2>;
+ bias-disable = <0>;
+ };
+ };
+ };
--- a/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953.dtsi
+++ b/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953.dtsi
aliases {
+ spi7 = &spi_7;
};
+ spi_7: spi@7af7000 { /* BLSP1 QUP7 */
+ compatible = "qcom,spi-qup-v2";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg-names = "spi_physical", "spi_bam_physical";
+ reg = <0x7af7000 0x600>,
+ <0x7AC4000 0x1f000>;
+ interrupt-names = "spi_irq", "spi_bam_irq";
+ interrupts = <0 301 0>, <0 239 0>;
+ spi-max-frequency = <19200000>;
+ pinctrl-names = "spi_default", "spi_sleep";
+ pinctrl-0 = <&spi7_default &spi7_cs0_active>;
+ pinctrl-1 = <&spi7_sleep &spi7_cs0_sleep>;
+ clocks = <&clock_gcc clk_gcc_blsp2_ahb_clk>,
+ <&clock_gcc clk_gcc_blsp2_qup3_spi_apps_clk>;
+ clock-names = "iface_clk", "core_clk";
+ qcom,infinite-mode = <0>;
+ qcom,use-bam;
+ qcom,use-pinctrl;
+ qcom,ver-reg-exists;
+ qcom,bam-consumer-pipe-index = <8>;
+ qcom,bam-producer-pipe-index = <9>;
+ qcom,master-id = <84>;
+ status = "disabled";
+ };
b)添加改指纹驱动设备树节点
如果是REE环境 spi在AP端控制,配置如下:
--- a/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953.dtsi
+++ b/kernel/msm-3.18/arch/arm64/boot/dts/qcom/msm8953.dtsi
+ +&spi_7 {
+ status = "ok";
+ microarray_fp@0 {
+ status = "ok";
+ compatible = "microarray,fingerprint";
+ reg = <0x0>;
&