Platform: IMX6DL
OS: Android 4.4
Kernel branch: 3.0.35
说明:
1. 硬件基于HC-SR04模块,可自行查找。
2. 代码PWM模块用于测试中断响应性能, 背光部分注释掉是因为和PWM复用了。
3. 测试中断响应性能时不要使用在中断上半部使用printk()方式,否则延时会到ms级。
4. 代码中注册的字符设备可不需要,创建的内核线程用于控制时序。
3. 由于超声波采用的是普通的GPIO中断,而且精度需要达到us级,当有许多高优先级的中断需要处理时,
驱动响应会延迟导致得到的时间不同,稳定性会大大下降,只可作为参考,如果要商用最好使用专用单片机模块处理测距。
源代码:
配置:
diff --git a/arch/arm/configs/imx6_tek_android_defconfig b/arch/arm/configs/imx6_tek_android_defconfig
index d26fe73..18125d0 100644
--- a/arch/arm/configs/imx6_tek_android_defconfig
+++ b/arch/arm/configs/imx6_tek_android_defconfig
@@ -12,7 +12,7 @@ CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
CONFIG_KTIME_SCALAR=y
CONFIG_HAVE_PROC_CPU=y
-CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_STACKTRACE_SUPPOR100T=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
@@ -1189,7 +1189,8 @@ CONFIG_MXS_PERFMON=m
# CONFIG_C2PORT is not set
#Kris,20160226,Add MIC driver.
CONFIG_XMF10411=y
-
+#Kris, 20160325, add ultrasnoic device.
+CONFIG_ULTRASONIC=y
#
# EEPROM support
#
diff --git a/arch/arm/mach-mx6/board-mx6-tek.c b/arch/arm/mach-mx6/board-mx6-tek.c
index bea16af..8b0327f 100644
--- a/arch/arm/mach-mx6/board-mx6-tek.c
+++ b/arch/arm/mach-mx6/board-mx6-tek.c
@@ -84,6 +84,12 @@
#include <sound/tlv320aic32x4.h>
#include <mach/imx_rfkill.h>
+/*Kris, 20160325, add ultrasnoic device. {*/
+#ifdef CONFIG_ULTRASONIC
+#include <linux/ultrasonic.h>
+#endif
+/*Kris, 20160325, add ultrasnoic device. }*/
+
#define KD() printk("[DEBUG]%d\n", __LINE__);
/**
#define TEK_ANDROID_POWER IMX_GPIO_NR(1, 4)
@@ -110,7 +116,7 @@
/*Kris, 20160302, Add head key. }*/
/*Kris, 20160317, Add human sense key. {*/
-#define TEK_HUMEM_SENSE IMX_GPIO_NR(2, 7)
+#define TEK_HUMAM_SENSE IMX_GPIO_NR(2, 7)
/*Kris, 20160317, Add human sense key. }*/
/*Kris, 20150604, add touchscreen driver. {*/
@@ -152,6 +158,16 @@
#define TEK_HEADPHONE_DET IMX_GPIO_NR(7, 8)
#define TEK_PFUZE_INT IMX_GPIO_NR(7, 13)
+
+/*Kris, 20160325, add ultrasnoic device. {*/
+#ifdef CONFIG_ULTRASONIC
+#define ULTRASONIC_DET IMX_GPIO_NR(2, 6)
+#define ULTRASONIC_CTRL_GPIO IMX_GPIO_NR(2, 3)
+#endif
+/*Kris, 20160325, add ultrasnoic device. }*/
+
+
@@ -664,6 +680,27 @@ static struct platform_device tek_battery_device = {
#endif
/*Kris, 20150611, add pseudo battery device. }*/
+/*Kris, 20160325, add ultrasnoic device. {*/
+#ifdef CONFIG_ULTRASONIC
+struct ultrasonic_platform_data ultrasonic_data = {
+ .pwm_id = 0,
+ .pwm_duty_ns = 250000,
+ .pwm_period_ns = 500000,
+ .irq = gpio_to_irq(ULTRASONIC_DET),
+ .ctrl_gpio = ULTRASONIC_CTRL_GPIO,
+};
+
+static struct platform_device ultrasonic_device = {
+ .name = "e-ultrasonic",
+ .id = -1,
+ .dev = {
+ .platform_data = &ultrasonic_data,
+ }
+};
+#endif
+/*Kris, 20160325, add ultrasnoic device. }*/
+
+
struct imx_vout_mem {
resource_size_t res_mbase;
@@ -719,12 +756,16 @@ static void daogou_power_