1.在配置这些传感器之前,建议项目中用不到的sensor宏给关掉(只是建议)
device/mediateksample/$(yourprojectname)/ProjectConfig.mk
$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_debug_defconfig
$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_defconfig
# CONFIG_MTK_ACCELHUB is not set
# CONFIG_MTK_ALSPSHUB is not set
# CONFIG_CUSTOM_KERNEL_MAGNETOMETER is not set
# CONFIG_MTK_MAGHUB is not set
# CONFIG_CUSTOM_KERNEL_BAROMETER is not set
# CONFIG_MTK_BAROHUB is not set
# CONFIG_CUSTOM_KERNEL_STEP_COUNTER is not set
# CONFIG_MTK_STEPSIGNHUB is not set
# CONFIG_CUSTOM_KERNEL_SITUATION is not set
# CONFIG_MTK_STATHUB is not set
# CONFIG_MTK_WAKEHUB is not set
# CONFIG_MTK_GLGHUB is not set
# CONFIG_MTK_PICKUPHUB is not set
# CONFIG_MTK_DEVICE_ORIENTATION_HUB is not set
# CONFIG_MTK_TILTDETECTHUB is not set
# CONFIG_CUSTOM_KERNEL_SENSORHUB is not set
# CONFIG_NANOHUB is not set
# CONFIG_NANOHUB_MTK_IPI is not set
# CONFIG_CUSTOM_KERNEL_SENSOR_FUSION is not set
# CONFIG_CUSTOM_KERNEL_GMRV_SENSOR is not set
# CONFIG_CUSTOM_KERNEL_RV_SENSOR is not set
# CONFIG_CUSTOM_KERNEL_LINEARACCEL_SENSOR is not set
# CONFIG_CUSTOM_KERNEL_GRAVITY_SENSOR is not set
# CONFIG_CUSTOM_KERNEL_UNCALI_ACC_SENSOR is not set
# CONFIG_CUSTOM_KERNEL_UNCALI_MAG_SENSOR is not set
# CONFIG_MTK_UNCALI_ACCHUB is not set
2.配置config文件,设置sensor的宏
$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_debug_defconfig
$(LINUX_KERNEL_VERSION)/arch/arm/configs/$(yourprojectname)_defconfig
CONFIG_CUSTOM_KERNEL_ACCELEROMETER=y //gsensor
CONFIG_MTK_STK8BAXX=y
CONFIG_MTK_MIR3DA=y
CONFIG_CUSTOM_KERNEL_ALSPS=y //alsps
CONFIG_MTK_STK3338=y
2.配置项目所属平台dts与项目dts
看你项目具体的i2c通道,我项目使用的i2c1,给的仅供参考
$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/$(MTK_PLATFORM).dts
//gsensor
gse_1: gse_1 {
};
gsensor@0 {
compatible = "mediatek,gsensor";
};
cust_accel_mir3da:cust_accel_mir3da@0 {
compatible = "mediatek,mir3da"; //节点,与具体驱动对应
};
cust_accel_stk8bxx:cust_accel_stk8bxx@1 {
compatible = "mediatek,stk8bxx";
};
//alsps
alsps@48 {
compatible = "mediatek,alsps";
};
$(LINUX_KERNEL_VERSION)/arch/arm/boot/dts/$(yourprojectname).dts
//gsensor
&cust_accel_mir3da{
i2c_num = <1>;
i2c_addr = <0x18 0 0 0>;
direction = <5>;
power_id = <0xffff>;
power_vol = <0>;
firlen = <0>;
is_batch_supported = <0>;
};
&cust_accel_stk8bxx{
i2c_num = <1>;
i2c_addr = <0x4c 0 0 0>;
direction = <5>;
power_id = <0xffff>;
power_vol = <0>;
firlen = <0>;
is_batch_supported = <0>;
};
&i2c1 {
gsensor_mir3da@18 {
compatible = "mediatek,gsensor_mir3da";
reg = <0x18>;
status = "okay";
};
gsensor_stk8bxx@4c {
compatible = "mediatek,gsensor_stk8bxx";
reg = <0x4c>;
status = "okay";
};
};
//alsps
&i2c1 {
alsps@48 {
pinctrl-names = "pin_default", "pin_cfg";
pinctrl-0 = <&alsps_intpin_default>;
pinctrl-1 = <&alsps_intpin_cfg>;
status = "okay";
/* customization */
i2c_num = <1>;
i2c_addr = <0x67 0 0 0>;//使用的sensor地址,stk3338是0x67和0x47两种,其他ic不一定
polling_mode_ps = <0>;
polling_mode_als = <1>;
power_id = <0xffff>;
power_vol = <0>;
als_level = <0 125 319 525 1091 2480 3058 5115 8589 10769 12857 17807 22091 65535 65535>;
als_value = <0 133 303 504 1002 2003 3006 5003 8002 10000 12000 16000 20000 20000 20000 20000>;
ps_threshold_high = <26>;
ps_threshold_low = <21>;
is_batch_supported_ps = <0>;
is_batch_supported_als = <0>;
};
};
&pio {
alsps_intpin_cfg: alspspincfg {
pins_cmd_dat {
pinmux = <PINMUX_GPIO6__FUNC_GPIO6>;//中断引脚对应的gpio
slew-rate = <0>;
bias-pull-up = <00>;
};
};
alsps_intpin_default: alspsdefaultcfg {
};
};
3.配置dws里面i2c设备的中断和定义
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/dws/$(MTK_PLATFORM)/$(yourprojectname).dws
vendor/mediatek/proprietary/bootable/bootloader/preloader/custom/$(yourprojectname)/dct/dct/codegen.dws
vendor/mediatek/proprietary/custom/$(yourprojectname)/kernel/dct/dct/codegen.dws
<eint6>
<varName>ALSPS_MTK</varName>
<debounce_time>256</debounce_time>
<polarity>Low</polarity>
<sensitive_level>Level</sensitive_level>
<debounce_en>Disable</debounce_en>
</eint6>
<gpio6>
<eint_mode>true</eint_mode>
<def_mode>0</def_mode>
<inpull_en>true</inpull_en>
<inpull_selhigh>true</inpull_selhigh>
<def_dir>IN</def_dir>
<out_high>false</out_high>
<varName0>GPIO_ALS_EINT_PIN</varName0>
<smt>false</smt>
<ies>true</ies>
</gpio6>
<gpio12>
<eint_mode>true</eint_mode>
<def_mode>0</def_mode>
<inpull_en>true</inpull_en>
<inpull_selhigh>true</inpull_selhigh>
<def_dir>IN</def_dir>
<out_high>false</out_high>
<varName0>GPIO_GSE_1_EINT_PIN</varName0>
<smt>false</smt>
<ies>true</ies>
</gpio12>
<device0>
<varName>ALSPS</varName>
<channel>I2C_CHANNEL_1</channel>
<address>0x48</address>
</device0>
<device1>
<varName>GSENSOR_1</varName>
<channel>I2C_CHANNEL_1</channel>
<address>0x26</address>
</device1>
<device2>
<varName>GSENSOR</varName>
<channel>I2C_CHANNEL_1</channel>
<address>0x18</address>
</device2>
4.添加驱动
gsensor
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/accelerometer/Makefile
obj-$(CONFIG_MTK_STK8BAXX) += stk8baxx/
obj-$(CONFIG_MTK_MIR3DA) += mir3da/
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/accelerometer/Kconfig
source "drivers/misc/mediatek/sensors-1.0/accelerometer/stk8baxx/Kconfig"
source "drivers/misc/mediatek/sensors-1.0/accelerometer/mir3da/Kconfig"
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/accelerometer/mir3da/
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/accelerometer/stk8baxx/
gsensor方向有问题修改hw_direction值,参考这篇gsensor direction调试_mtk gsensor 方向 调整 驱动_吐泡的土豆的博客-CSDN博客
als/ps
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/alsps/stk3x3x/Makefile
obj-$(CONFIG_MTK_STK3x3x) += stk3x3x/
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/alsps/stk3x3x/Kconfig
source "drivers/misc/mediatek/sensors-1.0/alsps/stk3x3x/Kconfig"
$(LINUX_KERNEL_VERSION)/drivers/misc/mediatek/sensors-1.0/alsps/stk3x3x/
5.使用了两个gsensor,如果原来dws工具配置里没有gsensor1词条,则需加上
vendor/mediatek/proprietary/tools/dct/YuSu.cmp
+GSENSOR_1