summaryrefslogtreecommitdiff
path: root/nuttx/configs/sam3u-ek/src
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-10-03 16:02:22 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-10-03 16:02:22 +0000
commitf6f82c4f12f9333ffd52e0e2ed07ac267d14a5d4 (patch)
treef572cca391ad2aeb70049d88e11dc1040d5261cf /nuttx/configs/sam3u-ek/src
parentad07b3a95eff6c444e072271cd9c9cb2adf6971f (diff)
downloadpx4-nuttx-f6f82c4f12f9333ffd52e0e2ed07ac267d14a5d4.tar.gz
px4-nuttx-f6f82c4f12f9333ffd52e0e2ed07ac267d14a5d4.tar.bz2
px4-nuttx-f6f82c4f12f9333ffd52e0e2ed07ac267d14a5d4.zip
Add hooks for the ADS7843E touchscreen controller
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4013 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/configs/sam3u-ek/src')
-rw-r--r--nuttx/configs/sam3u-ek/src/Makefile3
-rwxr-xr-xnuttx/configs/sam3u-ek/src/up_touchscreen.c197
2 files changed, 200 insertions, 0 deletions
diff --git a/nuttx/configs/sam3u-ek/src/Makefile b/nuttx/configs/sam3u-ek/src/Makefile
index 2bfa7693e..6c575e2f3 100644
--- a/nuttx/configs/sam3u-ek/src/Makefile
+++ b/nuttx/configs/sam3u-ek/src/Makefile
@@ -50,6 +50,9 @@ endif
ifeq ($(CONFIG_USBSTRG),y)
CSRCS += up_usbstrg.c
endif
+ifeq ($(CONFIG_INPUT_ADS7843E),y)
+CSRCS += up_touchscreen.c
+endif
COBJS = $(CSRCS:.c=$(OBJEXT))
SRCS = $(ASRCS) $(CSRCS)
diff --git a/nuttx/configs/sam3u-ek/src/up_touchscreen.c b/nuttx/configs/sam3u-ek/src/up_touchscreen.c
new file mode 100755
index 000000000..2d4b2ef18
--- /dev/null
+++ b/nuttx/configs/sam3u-ek/src/up_touchscreen.c
@@ -0,0 +1,197 @@
+/************************************************************************************
+ * configs/sam3u-ek/src/up_touchscreen.c
+ * arch/arm/src/board/up_touchscreen.c
+ *
+ * Copyright (C) 2011 Gregory Nutt. All rights reserved.
+ * Author: Gregory Nutt <gnutt@nuttx.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name NuttX nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ************************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <stdbool.h>
+#include <stdio.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/sdio.h>
+#include <nuttx/input/touchscreen.h>
+#include <nuttx/input/ads7843e.h>
+
+#include "sam3u_internal.h"
+#include "sam3uek_internal.h.h"
+
+/****************************************************************************
+ * Pre-Processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Static Function Prototypes
+ ****************************************************************************/
+
+/* IRQ/GPIO access callbacks. These operations all hidden behind
+ * callbacks to isolate the ADS7843E driver from differences in GPIO
+ * interrupt handling by varying boards and MCUs. If possible,
+ * interrupts should be configured on both rising and falling edges
+ * so that contact and loss-of-contact events can be detected.
+ *
+ * attach - Attach the ADS7843E interrupt handler to the GPIO interrupt
+ * enable - Enable or disable the GPIO interrupt
+ * clear - Acknowledge/clear any pending GPIO interrupt
+ * pendown - Return the state of the pen down GPIO input
+ */
+
+static int tsc_attach(FAR struct ads7843e_config_s *state, xcpt_t isr);
+static void tsc_enable(FAR struct ads7843e_config_s *state, bool enable);
+static void tsc_clear(FAR struct ads7843e_config_s *state);
+static bool tsc_pendown(FAR struct ads7843e_config_s *state);
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+/* A reference to a structure of this type must be passed to the ADS7843E
+ * driver. This structure provides information about the configuration
+ * of the ADS7843E and provides some board-specific hooks.
+ *
+ * Memory for this structure is provided by the caller. It is not copied
+ * by the driver and is presumed to persist while the driver is active. The
+ * memory must be writable because, under certain circumstances, the driver
+ * may modify frequency or X plate resistance values.
+ */
+
+static struct ads7843e_config_s g_tscinfo =
+{
+ .calib = CONFIG_INPUT_TSCCALIB,
+ .frequency = CONFIG_INPUT_TSCFREQUENCY,
+
+ .attach = tsc_attach,
+ .enable = tsc_enable,
+ .clear = tsc_clear,
+ .pendown = tsc_pendown,
+};
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/* IRQ/GPIO access callbacks. These operations all hidden behind
+ * callbacks to isolate the ADS7843E driver from differences in GPIO
+ * interrupt handling by varying boards and MCUs. If possible,
+ * interrupts should be configured on both rising and falling edges
+ * so that contact and loss-of-contact events can be detected.
+ *
+ * attach - Attach the ADS7843E interrupt handler to the GPIO interrupt
+ * enable - Enable or disable the GPIO interrupt
+ * clear - Acknowledge/clear any pending GPIO interrupt
+ * pendown - Return the state of the pen down GPIO input
+ */
+
+static int tsc_attach(FAR struct ads7843e_config_s *state, xcpt_t isr)
+{
+#warning "Missing logic"
+ return OK;
+}
+
+static void tsc_enable(FAR struct ads7843e_config_s *state, bool enable)
+{
+ /* Attach and enable, or detach and disable */
+
+ if (enable && g_tschandler)
+ {
+ /* Configure and enable the ADS7843E interrupt */
+#warning "Missing logic"
+ }
+ else
+ {
+#warning "Missing logic"
+ }
+}
+
+static void tsc_clear(FAR struct ads7843e_config_s *state)
+{
+ /* Does nothing */
+}
+
+static bool tsc_pendown(FAR struct ads7843e_config_s *state)
+{
+ /* REVISIT: This might need to be inverted */
+
+ return sam3u_gpioread(GPIO_ADS7843E);
+}
+#endif /* HAVE_TOUCHSCREEN */
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: up_tcinitialize
+ *
+ * Description:
+ * Initialize the touchscreen device
+ *
+ ****************************************************************************/
+
+int up_tcinitialize(void)
+{
+ FAR struct spi_dev_s *dev;
+ int ret;
+
+ /* Configure and enable the ADS7843E interrupt pin as an input */
+
+ (void)sam3u_configgpio(GPIO_ADS7843E_BUY);
+ (void)sam3u_configgpio(GPIO_ADS7843E_IRQ);
+
+ /* Get an instance of the SPI interface */
+
+ dev = up_spiinitialize(CONFIG_INPUT_TSCSPIDEV);
+ if (!dev)
+ {
+ dbg("Failed to initialize SPI bus %d\n", CONFIG_INPUT_TSCSPIDEV);
+ return -ENODEV;
+ }
+
+ /* Initialize and register the SPI touschscreen device */
+
+ ret = ads7843e_register(dev, &g_tscinfo, CONFIG_INPUT_TSCMINOR);
+ if (ret < 0)
+ {
+ dbg("Failed to initialize SPI bus %d\n", CONFIG_INPUT_TSCSPIDEV);
+ /* up_spiuninitialize(dev); */
+ return -ENODEV;
+ }
+
+ return OK;
+}