support lcd and touchscreen

This commit is contained in:
wlyu
2022-06-01 14:54:42 +08:00
parent a62208c1c6
commit 7ea3b595c2
10 changed files with 2737 additions and 0 deletions
@@ -0,0 +1,109 @@
#
# This file is autogenerated: PLEASE DO NOT EDIT IT.
#
# You can use "make menuconfig" to make any modifications to the installed .config file.
# You can then do "make savedefconfig" to generate a new defconfig file that includes your
# modifications.
#
CONFIG_ADD_NUTTX_FETURES=y
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="xidatong"
CONFIG_ARCH_BOARD_XIDATONG=y
CONFIG_ARCH_CHIP="imxrt"
CONFIG_ARCH_CHIP_IMXRT=y
CONFIG_ARCH_CHIP_MIMXRT1052CVL5B=y
CONFIG_ARCH_INTERRUPTSTACK=10240
CONFIG_ARCH_STACKDUMP=y
CONFIG_ARMV7M_DCACHE=y
CONFIG_ARMV7M_DCACHE_WRITETHROUGH=y
CONFIG_ARMV7M_ICACHE=y
CONFIG_ARMV7M_USEBASEPRI=y
CONFIG_BOARD_LOOPSPERMSEC=104926
CONFIG_BUILTIN=y
CONFIG_CLOCK_MONOTONIC=y
CONFIG_EXAMPLES_HELLO=y
CONFIG_IMXRT_GPIO_IRQ=y
CONFIG_IDLETHREAD_STACKSIZE=2048
CONFIG_IMXRT_LPUART1=y
CONFIG_INTELHEX_BINARY=y
CONFIG_LPUART1_SERIAL_CONSOLE=y
CONFIG_NSH_ARCHINIT=y
CONFIG_NSH_BUILTIN_APPS=y
CONFIG_NSH_DISABLE_IFUPDOWN=y
CONFIG_NSH_FILEIOSIZE=512
CONFIG_NSH_LINELEN=64
CONFIG_NSH_READLINE=y
CONFIG_RAM_SIZE=524288
CONFIG_RAM_START=0x20200000
CONFIG_RAW_BINARY=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=14
CONFIG_START_MONTH=3
CONFIG_SYSTEM_NSH=y
CONFIG_DEV_GPIO=y
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_READLINE_CMD_HISTORY_LEN=100
CONFIG_READLINE_CMD_HISTORY_LINELEN=120
CONFIG_READLINE_TABCOMPLETION=y
CONFIG_USER_ENTRYPOINT="nsh_main"
CONFIG_IMXRT_LPI2C=y
CONFIG_IMXRT_LCD=y
CONFIG_IMXRT_LPI2C1=y
CONFIG_LPI2C1_BUSYIDLE=0
CONFIG_LPI2C1_FILTSCL=0
CONFIG_LPI2C1_FILTSDA=0
CONFIG_IMXRT_GPIO2_16_31_IRQ=y
CONFIG_IMXRT_LPI2C_DYNTIMEO=y
CONFIG_IMXRT_LPI2C_DYNTIMEO_USECPERBYTE=500
CONFIG_IMXRT_LPI2C_DYNTIMEO_STARTSTOP=1000
CONFIG_IMXRT_LPI2C_TIMEOSEC=0
CONFIG_IMXRT_LCD_VIDEO_PLL_FREQ=92000000
CONFIG_IMXRT_LCD_VRAMBASE=0x80000000
CONFIG_IMXRT_LCD_REFRESH_FREQ=60
CONFIG_IMXRT_LCD_BACKLIGHT=y
CONFIG_IMXRT_LCD_INPUT_BPP16=y
CONFIG_IMXRT_LCD_OUTPUT_16=y
CONFIG_IMXRT_LCD_BACKCOLOR=0x0
CONFIG_IMXRT_LCD_HWIDTH=480
CONFIG_IMXRT_LCD_HPULSE=41
CONFIG_IMXRT_LCD_HFRONTPORCH=4
CONFIG_IMXRT_LCD_HBACKPORCH=8
CONFIG_IMXRT_LCD_VHEIGHT=272
CONFIG_IMXRT_LCD_VPULSE=10
CONFIG_IMXRT_LCD_VFRONTPORCH=4
CONFIG_IMXRT_LCD_VBACKPORCH=2
CONFIG_IMXRT_DATAEN_ACTIVE_HIGH=y
CONFIG_IMXRT_DATA_RISING_EDGE=y
CONFIG_I2C=y
CONFIG_I2C_DRIVER=y
CONFIG_ARCH_HAVE_SPI_CS_CONTROL=y
CONFIG_SPI=y
CONFIG_SPI_EXCHANGE=y
CONFIG_FB_MODULEINFO=y
CONFIG_DRIVERS_VIDEO=y
CONFIG_VIDEO_FB=y
CONFIG_INPUT=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_INPUT_GT9XX=y
CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_MAX_TASKS=128
CONFIG_FS_PROCFS_EXCLUDE_ENVIRON=y
CONFIG_EXAMPLES_FB=y
CONFIG_EXAMPLES_FB_DEFAULTFB="/dev/fb0"
CONFIG_EXAMPLES_FB_PROGNAME="fb"
CONFIG_EXAMPLES_FB_PRIORITY=100
CONFIG_EXAMPLES_FB_STACKSIZE=2048
CONFIG_EXAMPLES_TOUCHSCREEN=y
CONFIG_EXAMPLES_TOUCHSCREEN_MINOR=0
CONFIG_EXAMPLES_TOUCHSCREEN_DEVPATH="/dev/input0"
CONFIG_EXAMPLES_TOUCHSCREEN_NSAMPLES=0
@@ -82,6 +82,10 @@ ifeq ($(CONFIG_XIDATONG_SDIO_AUTOMOUNT),y)
CSRCS += imxrt_mmcsd_automount.c
endif
ifeq ($(CONFIG_INPUT_GT9XX),y)
CSRCS += imxrt_gt9xx.c
endif
ifeq ($(CONFIG_BSP_USING_CH438),y)
CSRCS += imxrt_ch438.c ch438_demo.c
endif
@@ -51,6 +51,10 @@
# include "imxrt_ch438.h"
#endif
#ifdef CONFIG_INPUT_GT9XX
#include "imxrt_gt9xx.h"
#endif
#include "xidatong.h"
#include <arch/board/board.h> /* Must always be included last */
@@ -187,6 +191,19 @@ int imxrt_bringup(void)
board_ch438_initialize();
#endif
#ifdef CONFIG_INPUT_GT9XX
/* Initialize the GT9XX touchscreen driver */
ret = imxrt_gt9xx_register();
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: imxrt_ft5x06_register() failed: %d\n", ret);
}
syslog(LOG_NOTICE, "Start initialize %d ok ...\n", ret);
#endif
UNUSED(ret);
return OK;
}
@@ -0,0 +1,328 @@
/****************************************************************************
* boards/arm/imxrt/xidatong/src/imxrt_gt9xx.c
*
* Copyright 2019 ElFaro LAB S.L. All rights reserved.
* Author: Fabio Balzano <fabio@elfarolab.com>
*
* Based on boards/arm/lpc54xx/lpcxpresso-lpc54628/src/lpc54_ft5x06.c
* Copyright (C) 2017 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.
*
****************************************************************************/
/**
* @file imxrt_gt9xx.c
* @brief gt9xx touch driver refer to imxrt_ft5x06.c
* @version 1.0
* @author AIIT XUOS Lab
* @date 2022.5.31
*/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <syslog.h>
#include <assert.h>
#include <errno.h>
#include <nuttx/arch.h>
#include <nuttx/i2c/i2c_master.h>
#include <nuttx/input/gt9xx.h>
#include "imxrt_config.h"
#include "imxrt_gpio.h"
#include "imxrt_lpi2c.h"
#include "arch/chip/irq.h"
#include "imxrt_iomuxc.h"
#define gt_print printf
#define GT9XX_I2C_ADDRESS 0x5D
#define GPIO_GT9XX_INTR IMXRT_IRQ_GPIO2_30
#define IOMUX_GT9XX_RST (IOMUX_PULL_NONE | IOMUX_CMOS_OUTPUT | \
IOMUX_DRIVE_40OHM | IOMUX_SPEED_MEDIUM | \
IOMUX_SLEW_SLOW)
#define GPIO_GT9XX_CTRSTN (GPIO_OUTPUT | GPIO_OUTPUT_ZERO | \
GPIO_PORT2 | GPIO_PIN30 | IOMUX_GT9XX_RST)
#define GPIO_GT9XX_CTINTN (GPIO_INTERRUPT | GPIO_INT_RISINGEDGE | \
IOMUX_SW_DEFAULT | GPIO_PORT2 | GPIO_PIN30 )
#ifdef CONFIG_INPUT_GT9XX
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define GT9XX_FREQUENCY 400000
/****************************************************************************
* Private Function Ptototypes
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static int imxrt_gt9xx_attach(FAR const struct gt9xx_config_s *config,
xcpt_t isr, FAR void *arg);
static void imxrt_gt9xx_enable(FAR const struct gt9xx_config_s *config,
bool enable);
static void imxrt_gt9xx_clear(FAR const struct gt9xx_config_s *config);
#endif
static void imxrt_gt9xx_wakeup(FAR const struct gt9xx_config_s *config);
static void imxrt_gt9xx_nreset(FAR const struct gt9xx_config_s *config,
bool state);
/****************************************************************************
* Private Data
****************************************************************************/
static const struct gt9xx_config_s g_gt9xx_config =
{
.address = GT9XX_I2C_ADDRESS,
.frequency = GT9XX_FREQUENCY,
#ifndef CONFIG_GT9XX_POLLMODE
.attach = imxrt_gt9xx_attach,
.enable = imxrt_gt9xx_enable,
.clear = imxrt_gt9xx_clear,
#endif
.wakeup = imxrt_gt9xx_wakeup,
.nreset = imxrt_gt9xx_nreset
};
#ifndef CONFIG_GT9XX_POLLMODE
static uint8_t g_gt9xx_irq;
#endif
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Name: imxrt_gt9xx_attach
*
* Description:
* Attach an GT9XX interrupt handler to a GPIO interrupt
*
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static int imxrt_gt9xx_attach(FAR const struct gt9xx_config_s *config,
xcpt_t isr, FAR void *arg)
{
return irq_attach(g_gt9xx_irq, isr, arg);
}
#endif
/****************************************************************************
* Name: imxrt_gt9xx_enable
*
* Description:
* Enable or disable a GPIO interrupt
*
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static void imxrt_gt9xx_enable(FAR const struct gt9xx_config_s *config,
bool enable)
{
if (enable)
{
up_enable_irq(g_gt9xx_irq);
}
else
{
up_disable_irq(g_gt9xx_irq);
}
}
#endif
/****************************************************************************
* Name: imxrt_gt9xx_clear
*
* Description:
* Acknowledge/clear any pending GPIO interrupt
*
****************************************************************************/
#ifndef CONFIG_GT9XX_POLLMODE
static void imxrt_gt9xx_clear(FAR const struct gt9xx_config_s *config)
{
imxrt_gpioirq_disable(g_gt9xx_irq);
}
#endif
/****************************************************************************
* Name: imxrt_gt9xx_wakeup
*
* Description:
* Issue WAKE interrupt to GT9XX to change the GT9XX from Hibernate to
* Active mode.
*
****************************************************************************/
static void imxrt_gt9xx_wakeup(FAR const struct gt9xx_config_s *config)
{
/* We do not have access to the WAKE pin in the implementation */
}
/****************************************************************************
* Name: imxrt_gt9xx_nreset
*
* Description:
* Control the chip reset pin (active low)
*
****************************************************************************/
static void imxrt_gt9xx_nreset(FAR const struct gt9xx_config_s *config,
bool nstate)
{
imxrt_gpio_write(GPIO_GT9XX_CTRSTN, nstate);
}
/****************************************************************************
* Public Functions
****************************************************************************/
#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK (0x7U)
#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT (0U)
#define IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_MUX_MODE_MASK)
#define IOMUXC_SW_MUX_CTL_PAD_SION_MASK (0x10U)
#define IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT (4U)
#define IOMUXC_SW_MUX_CTL_PAD_SION(x) (((uint32_t)(((uint32_t)(x)) << IOMUXC_SW_MUX_CTL_PAD_SION_SHIFT)) & IOMUXC_SW_MUX_CTL_PAD_SION_MASK)
#define IOMUXC_GPIO_B1_14_GPIO2_IO30 0x401F81B4U, 0x5U, 0, 0, 0x401F83A4U
static inline void IOMUXC_SetPinMux(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t inputOnfield)
{
*((volatile uint32_t *)muxRegister) =
IOMUXC_SW_MUX_CTL_PAD_MUX_MODE(muxMode) | IOMUXC_SW_MUX_CTL_PAD_SION(inputOnfield);
if (inputRegister)
{
*((volatile uint32_t *)inputRegister) = inputDaisy;
}
}
static inline void IOMUXC_SetPinConfig(uint32_t muxRegister,
uint32_t muxMode,
uint32_t inputRegister,
uint32_t inputDaisy,
uint32_t configRegister,
uint32_t configValue)
{
if (configRegister)
{
*((volatile uint32_t *)configRegister) = configValue;
}
}
void imxrt_config_gt9xx_pins(void)
{
IOMUXC_SetPinMux(
IOMUXC_GPIO_B1_14_GPIO2_IO30, /* WAKEUP is configured as GPIO5_IO00 */
0U); /* Software Input On Field: Input Path is determined by functionality */
IOMUXC_SetPinConfig(
IOMUXC_GPIO_B1_14_GPIO2_IO30,
0x10B0u);
}
/****************************************************************************
* Name: imxrt_gt9xx_register
*
* Description:
* Register the GT9XX touch panel driver
*
****************************************************************************/
int imxrt_gt9xx_register(void)
{
FAR struct i2c_master_s *i2c;
int ret;
/* Initialize CTRSTN pin */
imxrt_config_gpio(GPIO_GT9XX_CTRSTN);
imxrt_gpio_write(GPIO_GT9XX_CTRSTN, false);
#ifndef CONFIG_GT9XX_POLLMODE
int irq;
/* Initialize GPIO interrupt pin. */
imxrt_config_gpio(GPIO_GT9XX_CTINTN);
irq = GPIO_GT9XX_INTR;
DEBUGASSERT(irq > 0 && irq < UINT8_MAX);
g_gt9xx_irq = (uint8_t)irq;
/* Make sure that the interrupt is disabled at the NVIC */
imxrt_gpioirq_disable(irq);
up_disable_irq(irq);
#endif
/* Take the GT9XX out of reset */
/* The GT9XX is on LPI2C1. Get the handle and register the GT9XX device */
i2c = imxrt_i2cbus_initialize(1);
if (i2c == NULL)
{
syslog(LOG_ERR, "ERROR: Failed to get LPI2C1 interface\n");
return -ENODEV;
}
else
{
ret = gt9xx_register(i2c, &g_gt9xx_config, 0);
if (ret < 0)
{
syslog(LOG_ERR, "ERROR: Failed to register GT9XX driver: %d\n", ret);
imxrt_gpio_write(GPIO_GT9XX_CTRSTN, false);
imxrt_i2cbus_uninitialize(i2c);
return ret;
}
}
return OK;
}
#endif /* CONFIG_INPUT_GT9XX*/
@@ -0,0 +1,27 @@
/*
* Copyright (c) 2022 AIIT XUOS Lab
* XiUOS is licensed under Mulan PSL v2.
* You can use this software according to the terms and conditions of the Mulan PSL v2.
* You may obtain a copy of Mulan PSL v2 at:
* http://license.coscl.org.cn/MulanPSL2
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PSL v2 for more details.
*/
/**
* @file imxrt_gt9xx.h
* @brief API for imxrt gt9xx.
* @version 1.0
* @author AIIT XUOS Lab
* @date 2022.5.31
*/
#ifndef __IMXRT_GT9XX_H_
#define __IMXRT_GT9XX_H_
int imxrt_gt9xx_register(void);
#endif /* __IMXRT_GT9XX_H__ */