已验证 创建 2026/06/06 更新 2026/07/14
kernel
#mtk
#hall
[MTK] 霍尔驱动(Hall Driver)移植说明
1. Kernel Config
1.1 DTS 配置
文件路径
kernel_device_modules-6.1/arch/arm64/boot/dts/mediatek/aiot8391p3_64_bsp.dts
修改内容
1. 增加 Hall GPIO 配置
kpd_gpio: kpd-gpio {
pins-cols {
- pinmux = <PINMUX_GPIO44__FUNC_KPCOL0>;
+ pinmux = <PINMUX_GPIO44__FUNC_KPCOL0>, // 保留原KPCOL0
+ <PINMUX_GPIO45__FUNC_KPCOL1>; // 新增KPCOL1
input-enable;
bias-pull-up = <MTK_PUPD_SET_R1R0_01>;
};
2. 删除 GPIO45 CAN Standby 配置
- pin-can-standby {
- pinmux = <PINMUX_GPIO45__FUNC_GPIO45>;
- output-low;
- };
3. 增加 Hall EINT 配置
+&hall {
+ hall_eint = <&pio 12 0>; // GPIO12作为Hall外部中断
+};
1.2 添加 Hall Device Node
文件路径
kernel_device_modules-6.1/arch/arm64/boot/dts/mediatek/mt8189.dts
修改内容
+hall: hall {
+ compatible = "mediatek,hall";
+};
+
touch_panel0: touch-panel0 {
compatible = "mediatek,touch-panel";
};
1.3 Kernel Config 开启 Hall Driver
文件路径
kernel_device_modules-6.1/arch/arm64/configs/mgk_64_k61_defconfig
修改内容
+CONFIG_MTK_HALL=m
说明:
m:编译为 Kernel Module- 输出文件:
hall.ko
1.4 Kconfig 添加驱动配置
文件路径
kernel_device_modules-6.1/drivers/misc/mediatek/Kconfig
修改内容
+config MTK_HALL
+ tristate "MTK HALL driver"
+ help
+ driver for mtk hall project gpio control driver
1.5 Makefile 添加 Hall 驱动目录
文件路径
kernel_device_modules-6.1/drivers/misc/mediatek/Makefile
修改内容
+obj-$(CONFIG_MTK_HALL) += hall/
1.6 Hall Driver Makefile
文件路径
kernel_device_modules-6.1/drivers/misc/mediatek/hall/Makefile
修改内容
+ccflags-$(CONFIG_DRM_MEDIATEK_V2) += \
+ -I$(DEVICE_MODULES_PATH)/drivers/gpu/drm/mediatek/mediatek_v2/
+
+$(warning "--->hall makefile")
+
+obj-m = hall.o
1.7 Hall Driver Source
文件路径
kernel_device_modules-6.1/drivers/misc/mediatek/hall/hall.c
附件:
hall.c
1.8 添加 Kernel Module
文件路径
kernel_device_modules-6.1/kernel/kleaf/mgk_64_k61.bzl
修改内容
+ "drivers/misc/mediatek/hall/hall.ko",
说明:
将生成的 hall.ko 加入 Kernel Module 列表。
2. Vendor DCT Configuration
2.1 DCT DWS 配置
文件路径
mediatek/proprietary/tools/dct/dws/mt8189/aiot8391p3_64_bsp.dws
修改内容
将 Hall GPIO 修改为 EINT 输入模式。
-<eint_mode>false</eint_mode>
+<eint_mode>true</eint_mode>
<def_mode>0</def_mode>
<inpull_en>true</inpull_en>
-<inpull_selhigh>false</inpull_selhigh>
-<def_dir>OUT</def_dir>
-<out_high>true</out_high>
+<inpull_selhigh>true</inpull_selhigh>
+<def_dir>IN</def_dir>
+<out_high>false</out_high>
2.2 Preloader Codegen DCT 同步
文件路径
mediatek/proprietary/bootable/bootloader/preloader/custom/aiot8391p3_64_bsp/dct/dct/codegen.dws
修改内容
-<eint_mode>false</eint_mode>
+<eint_mode>true</eint_mode>
<def_mode>0</def_mode>
<inpull_en>true</inpull_en>
-<inpull_selhigh>false</inpull_selhigh>
+<inpull_selhigh>true</inpull_selhigh>
2.3 客制化文件同步
同步以下文件:
mediatek/proprietary/bootable/bootloader/preloader/custom/Kamvas_Pad_12_EEA/dct/dct/codegen.dws
mediatek/proprietary/bootable/bootloader/preloader/custom/Kamvas_Pad_12_ROW/dct/dct/codegen.dws
3. Device Package
3.1 Kernel Module Package
文件路径
mediateksample/aiot8391p3_64_bsp/ko_order_table.csv
修改内容
添加 Hall Kernel Module:
+hall.ko,/../kernel_device_modules-6.1/drivers/misc/mediatek/hall/hall.ko,vendor,Y,N,user/userdebug/eng
4. 编译输出
编译完成后生成:
drivers/misc/mediatek/hall/hall.ko
加载路径:
vendor/lib/modules/
加载:
insmod hall.ko
5. 驱动验证
查看模块:
lsmod | grep hall
查看 Kernel Log:
dmesg | grep hall
Hall 触发测试:
- 磁铁靠近 Hall Sensor
- 磁铁远离 Hall Sensor
- 查看 EINT 是否触发
- 确认 Android Input Event 是否正常上报