From 09c8278b8677125f5160be9593fccfd53286bbfc Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 14 Apr 2014 12:26:49 -0600 Subject: examples/touchscreen: Add a configuration option to indicate that there is or is not an architecture-specific initialization function --- apps/examples/touchscreen/Kconfig | 21 +++++++++++++++++++++ apps/examples/touchscreen/tc_main.c | 6 ++++++ 2 files changed, 27 insertions(+) (limited to 'apps/examples/touchscreen') diff --git a/apps/examples/touchscreen/Kconfig b/apps/examples/touchscreen/Kconfig index 5e7739c35..b75546c8b 100644 --- a/apps/examples/touchscreen/Kconfig +++ b/apps/examples/touchscreen/Kconfig @@ -43,4 +43,25 @@ config EXAMPLES_TOUCHSCREEN_MOUSE The touchscreen test can also be configured to work with a mouse driver by setting this option. +config EXAMPLES_TOUCHSCREEN_ARCHINIT + bool "Architecture-specific initialization" + default y + ---help--- + By default, the touchscreen example will call arch_tcinitialize() to + register the touchscreen device before it attempts to open it. + Similarly, it will call arch_tcuninitialize() to unregister the + touchscreen device when it is finished. + + This works well for the typical touchscreen controller but there are + other devices that cannot be initialized and uninitialized in this + fashion. Consider a USB mouse, fo example. The USB mouse will be + registered when the mouse is connected and unregistered when the + mouse is disconnected. + + So, in cases like this, there are two options: (1) provide dummy + arch_tcinitialize() and arch_tcuninitialize() just to satisfy the + linking requirements or, (2) select this option. if this option is + de-selected, then the arch_tcinitialize() and arch_tcuninitialize() will + never be called. + endif diff --git a/apps/examples/touchscreen/tc_main.c b/apps/examples/touchscreen/tc_main.c index 0eb83ca4e..1c20712a3 100644 --- a/apps/examples/touchscreen/tc_main.c +++ b/apps/examples/touchscreen/tc_main.c @@ -118,6 +118,7 @@ int tc_main(int argc, char *argv[]) message("tc_main: nsamples: %d\n", CONFIG_EXAMPLES_TOUCHSCREEN_NSAMPLES); #endif +#ifdef CONFIG_EXAMPLES_TOUCHSCREEN_ARCHINIT /* Initialization of the touchscreen hardware is performed by logic * external to this test. */ @@ -130,6 +131,7 @@ int tc_main(int argc, char *argv[]) errval = 1; goto errout; } +#endif /* Open the touchscreen device for reading */ @@ -249,8 +251,12 @@ int tc_main(int argc, char *argv[]) errout_with_dev: close(fd); + errout_with_tc: +#ifdef CONFIG_EXAMPLES_TOUCHSCREEN_ARCHINIT arch_tcuninitialize(); +#endif + errout: message("Terminating!\n"); msgflush(); -- cgit v1.2.3