diff --git a/configs/arduino-due/src/sam_touchscreen.c b/configs/arduino-due/src/sam_touchscreen.c index b03ba31fb8..48dae4c162 100644 --- a/configs/arduino-due/src/sam_touchscreen.c +++ b/configs/arduino-due/src/sam_touchscreen.c @@ -355,50 +355,36 @@ static FAR struct spi_dev_s *sam_tsc_spiinitialize(void) int sam_tsc_setup(int minor) { FAR struct spi_dev_s *dev; - static bool initialized = false; int ret; iinfo("minor %d\n", minor); DEBUGASSERT(minor == 0); - /* Have we already initialized? Since we never uninitialize we must prevent - * multiple initializations. This is necessary, for example, when the - * touchscreen example is used as a built-in application in NSH and can be - * called numerous time. It will attempt to initialize each time. - */ + /* Configure and enable the XPT2046 interrupt pin as an input */ - if (!initialized) + (void)sam_configgpio(GPIO_TSC_IRQ); + + /* Configure the PIO interrupt */ + + sam_gpioirq(SAM_TSC_IRQ); + + /* Get an instance of the SPI interface for the touchscreen chip select */ + + dev = sam_tsc_spiinitialize(); + if (!dev) { - /* Configure and enable the XPT2046 interrupt pin as an input */ + ierr("ERROR: Failed to initialize bit bang SPI\n"); + return -ENODEV; + } - (void)sam_configgpio(GPIO_TSC_IRQ); + /* Initialize and register the SPI touschscreen device */ - /* Configure the PIO interrupt */ - - sam_gpioirq(SAM_TSC_IRQ); - - /* Get an instance of the SPI interface for the touchscreen chip select */ - - dev = sam_tsc_spiinitialize(); - if (!dev) - { - ierr("ERROR: Failed to initialize bit bang SPI\n"); - return -ENODEV; - } - - /* Initialize and register the SPI touschscreen device */ - - ret = ads7843e_register(dev, &g_tscinfo, CONFIG_ADS7843E_DEVMINOR); - if (ret < 0) - { - ierr("ERROR: Failed to register touchscreen device\n"); - /* up_spiuninitialize(dev); */ - return -ENODEV; - } - - /* Now we are initialized */ - - initialized = true; + ret = ads7843e_register(dev, &g_tscinfo, CONFIG_ADS7843E_DEVMINOR); + if (ret < 0) + { + ierr("ERROR: Failed to register touchscreen device\n"); + /* up_spiuninitialize(dev); */ + return -ENODEV; } return OK; diff --git a/configs/open1788/src/lpc17_touchscreen.c b/configs/open1788/src/lpc17_touchscreen.c index 6c72a9205e..65a0f33fae 100644 --- a/configs/open1788/src/lpc17_touchscreen.c +++ b/configs/open1788/src/lpc17_touchscreen.c @@ -272,50 +272,40 @@ static bool tsc_pendown(FAR struct ads7843e_config_s *state) int open1788_tsc_setup(int minor) { - static bool initialized = false; FAR struct spi_dev_s *dev; int ret; - iinfo("initialized:%d minor:%d\n", initialized, minor); + iinfo("minor:%d\n", minor); DEBUGASSERT(minor == 0); - /* Since there is no uninitialized logic, this initialization can be - * performed only one time. - */ + /* Configure and enable the XPT2046 PENIRQ pin as an interrupting input. */ - if (!initialized) - { - /* Configure and enable the XPT2046 PENIRQ pin as an interrupting input. */ + (void)lpc17_configgpio(GPIO_TC_PENIRQ); - (void)lpc17_configgpio(GPIO_TC_PENIRQ); - - /* Configure the XPT2046 BUSY pin as a normal input. */ + /* Configure the XPT2046 BUSY pin as a normal input. */ #ifndef XPT2046_NO_BUSY - (void)lpc17_configgpio(GPIO_TC_BUSY); + (void)lpc17_configgpio(GPIO_TC_BUSY); #endif - /* Get an instance of the SPI interface */ + /* Get an instance of the SPI interface */ - dev = lpc17_sspbus_initialize(CONFIG_ADS7843E_SPIDEV); - if (!dev) - { - ierr("ERROR: Failed to initialize SPI bus %d\n", CONFIG_ADS7843E_SPIDEV); - return -ENODEV; - } + dev = lpc17_sspbus_initialize(CONFIG_ADS7843E_SPIDEV); + if (!dev) + { + ierr("ERROR: Failed to initialize SPI bus %d\n", CONFIG_ADS7843E_SPIDEV); + return -ENODEV; + } - /* Initialize and register the SPI touchscreen device */ + /* Initialize and register the SPI touchscreen device */ - ret = ads7843e_register(dev, &g_tscinfo, CONFIG_ADS7843E_DEVMINOR); - if (ret < 0) - { - ierr("ERROR: Failed to register touchscreen device minor=%d\n", - CONFIG_ADS7843E_DEVMINOR); - /* up_spiuninitialize(dev); */ - return -ENODEV; - } - - initialized = true; + ret = ads7843e_register(dev, &g_tscinfo, CONFIG_ADS7843E_DEVMINOR); + if (ret < 0) + { + ierr("ERROR: Failed to register touchscreen device minor=%d\n", + CONFIG_ADS7843E_DEVMINOR); + /* up_spiuninitialize(dev); */ + return -ENODEV; } return OK; diff --git a/configs/sama5d3x-ek/src/sam_touchscreen.c b/configs/sama5d3x-ek/src/sam_touchscreen.c index cbeba1ec02..e22f991121 100644 --- a/configs/sama5d3x-ek/src/sam_touchscreen.c +++ b/configs/sama5d3x-ek/src/sam_touchscreen.c @@ -88,38 +88,28 @@ int sam_tsc_setup(int minor) { struct sam_adc_s *adc; - static bool initialized = false; int ret; - iinfo("initialized:%d minor:%d\n", initialized, minor); + iinfo("minor:%d\n", minor); DEBUGASSERT(minor == 0); - /* Since there is no uninitialized logic, this initialization can be - * performed only one time. - */ + /* Initialize the ADC driver */ - if (!initialized) + adc = sam_adc_initialize(); + if (!adc) { - /* Initialize the ADC driver */ + ierr("ERROR: Failed to initialize the ADC driver\n"); + return -ENODEV; + } - adc = sam_adc_initialize(); - if (!adc) - { - ierr("ERROR: Failed to initialize the ADC driver\n"); - return -ENODEV; - } + /* Initialize and register the SPI touchscreen device */ - /* Initialize and register the SPI touchscreen device */ - - ret = sam_tsd_register(adc, CONFIG_SAMA5D3xEK_TSD_DEVMINOR); - if (ret < 0) - { - ierr("ERROR: Failed to register touchscreen device /dev/input%d: %d\n", - CONFIG_SAMA5D3xEK_TSD_DEVMINOR, ret); - return -ENODEV; - } - - initialized = true; + ret = sam_tsd_register(adc, CONFIG_SAMA5D3xEK_TSD_DEVMINOR); + if (ret < 0) + { + ierr("ERROR: Failed to register touchscreen device /dev/input%d: %d\n", + CONFIG_SAMA5D3xEK_TSD_DEVMINOR, ret); + return -ENODEV; } return OK; diff --git a/configs/sama5d4-ek/src/sam_maxtouch.c b/configs/sama5d4-ek/src/sam_maxtouch.c index 3a2e3f5f37..0790caa711 100644 --- a/configs/sama5d4-ek/src/sam_maxtouch.c +++ b/configs/sama5d4-ek/src/sam_maxtouch.c @@ -238,52 +238,38 @@ static int mxt_interrupt(int irq, FAR void *context, FAR void *arg) int sam_tsc_setup(int minor) { FAR struct i2c_master_s *i2c; - static bool initialized = false; int ret; iinfo("minor %d\n", minor); DEBUGASSERT(minor == 0); - /* Have we already initialized? Since we never uninitialize we must prevent - * multiple initializations. This is necessary, for example, when the - * touchscreen example is used as a built-in application in NSH and can be - * called numerous time. It will attempt to initialize each time. - */ + /* Configure the maXTouch CHG interrupt pin */ - if (!initialized) + (void)sam_configpio(PIO_CHG_MXT); + + /* Get an instance of the I2C interface for the touchscreen chip select */ + + i2c = sam_i2cbus_initialize(MXT_TWI_BUS); + if (!i2c) { - /* Configure the maXTouch CHG interrupt pin */ + ierr("ERROR: Failed to initialize I2C%d\n", MXT_TWI_BUS); + return -ENODEV; + } - (void)sam_configpio(PIO_CHG_MXT); + /* Configure maXTouch CHG interrupts */ - /* Get an instance of the I2C interface for the touchscreen chip select */ + sam_pioirq(PIO_CHG_MXT); + (void)irq_attach(IRQ_CHG_MXT, mxt_interrupt, NULL); - i2c = sam_i2cbus_initialize(MXT_TWI_BUS); - if (!i2c) - { - ierr("ERROR: Failed to initialize I2C%d\n", MXT_TWI_BUS); - return -ENODEV; - } + /* Initialize and register the I2C touchscreen device */ - /* Configure maXTouch CHG interrupts */ - - sam_pioirq(PIO_CHG_MXT); - (void)irq_attach(IRQ_CHG_MXT, mxt_interrupt, NULL); - - /* Initialize and register the I2C touchscreen device */ - - ret = mxt_register(i2c, &g_mxtinfo.lower, CONFIG_SAMA5D4EK_MXT_DEVMINOR); - if (ret < 0) - { - ierr("ERROR: Failed to register touchscreen device\n"); - irq_detach(IRQ_CHG_MXT); - /* sam_i2cbus_uninitialize(i2c); */ - return -ENODEV; - } - - /* Now we are initialized */ - - initialized = true; + ret = mxt_register(i2c, &g_mxtinfo.lower, CONFIG_SAMA5D4EK_MXT_DEVMINOR); + if (ret < 0) + { + ierr("ERROR: Failed to register touchscreen device\n"); + irq_detach(IRQ_CHG_MXT); + /* sam_i2cbus_uninitialize(i2c); */ + return -ENODEV; } return OK; diff --git a/configs/samv71-xult/src/sam_maxtouch.c b/configs/samv71-xult/src/sam_maxtouch.c index 7db38fd551..e368d5958d 100644 --- a/configs/samv71-xult/src/sam_maxtouch.c +++ b/configs/samv71-xult/src/sam_maxtouch.c @@ -237,52 +237,38 @@ static int mxt_interrupt(int irq, FAR void *context, FAR void *arg) int sam_tsc_setup(int minor) { FAR struct i2c_master_s *i2c; - static bool initialized = false; int ret; iinfo("minor %d\n", minor); DEBUGASSERT(minor == 0); - /* Have we already initialized? Since we never uninitialize we must prevent - * multiple initializations. This is necessary, for example, when the - * touchscreen example is used as a built-in application in NSH and can be - * called numerous time. It will attempt to initialize each time. - */ + /* Configure the maXTouch CHG interrupt pin */ - if (!initialized) + (void)sam_configgpio(GPIO_MXT_CHG); + + /* Get an instance of the I2C interface for the touchscreen chip select */ + + i2c = sam_i2cbus_initialize(MXT_TWI_BUS); + if (!i2c) { - /* Configure the maXTouch CHG interrupt pin */ + ierr("ERROR: Failed to initialize I2C%d\n", MXT_TWI_BUS); + return -ENODEV; + } - (void)sam_configgpio(GPIO_MXT_CHG); + /* Configure maXTouch CHG interrupts */ - /* Get an instance of the I2C interface for the touchscreen chip select */ + sam_gpioirq(GPIO_MXT_CHG); + (void)irq_attach(IRQ_MXT_CHG, mxt_interrupt, NULL); - i2c = sam_i2cbus_initialize(MXT_TWI_BUS); - if (!i2c) - { - ierr("ERROR: Failed to initialize I2C%d\n", MXT_TWI_BUS); - return -ENODEV; - } + /* Initialize and register the I2C touchscreen device */ - /* Configure maXTouch CHG interrupts */ - - sam_gpioirq(GPIO_MXT_CHG); - (void)irq_attach(IRQ_MXT_CHG, mxt_interrupt, NULL); - - /* Initialize and register the I2C touchscreen device */ - - ret = mxt_register(i2c, &g_mxtinfo.lower, CONFIG_SAMV71XULT_MXT_DEVMINOR); - if (ret < 0) - { - ierr("ERROR: Failed to register touchscreen device\n"); - irq_detach(IRQ_MXT_CHG); - /* sam_i2cbus_uninitialize(i2c); */ - return -ENODEV; - } - - /* Now we are initialized */ - - initialized = true; + ret = mxt_register(i2c, &g_mxtinfo.lower, CONFIG_SAMV71XULT_MXT_DEVMINOR); + if (ret < 0) + { + ierr("ERROR: Failed to register touchscreen device\n"); + irq_detach(IRQ_MXT_CHG); + /* sam_i2cbus_uninitialize(i2c); */ + return -ENODEV; } return OK; diff --git a/configs/viewtool-stm32f107/src/stm32_touchscreen.c b/configs/viewtool-stm32f107/src/stm32_touchscreen.c index afac08aa2b..39130e7893 100644 --- a/configs/viewtool-stm32f107/src/stm32_touchscreen.c +++ b/configs/viewtool-stm32f107/src/stm32_touchscreen.c @@ -258,46 +258,32 @@ static bool tsc_pendown(FAR struct ads7843e_config_s *state) int stm32_tsc_setup(int minor) { FAR struct spi_dev_s *dev; - static bool initialized = false; int ret; iinfo("minor %d\n", minor); DEBUGASSERT(minor == 0); - /* Have we already initialized? Since we never uninitialize we must prevent - * multiple initializations. This is necessary, for example, when the - * touchscreen example is used as a built-in application in NSH and can be - * called numerous time. It will attempt to initialize each time. - */ + /* Configure the XPT2046 interrupt pin as an input */ - if (!initialized) + (void)stm32_configgpio(GPIO_LCDTP_IRQ); + + /* Get an instance of the SPI interface for the touchscreen chip select */ + + dev = stm32_spibus_initialize(TSC_DEVNUM); + if (!dev) { - /* Configure the XPT2046 interrupt pin as an input */ + ierr("ERROR: Failed to initialize SPI%d\n", TSC_DEVNUM); + return -ENODEV; + } - (void)stm32_configgpio(GPIO_LCDTP_IRQ); + /* Initialize and register the SPI touchscreen device */ - /* Get an instance of the SPI interface for the touchscreen chip select */ - - dev = stm32_spibus_initialize(TSC_DEVNUM); - if (!dev) - { - ierr("ERROR: Failed to initialize SPI%d\n", TSC_DEVNUM); - return -ENODEV; - } - - /* Initialize and register the SPI touchscreen device */ - - ret = ads7843e_register(dev, &g_tscinfo.config, CONFIG_ADS7843E_DEVMINOR); - if (ret < 0) - { - ierr("ERROR: Failed to register touchscreen device\n"); - /* up_spiuninitialize(dev); */ - return -ENODEV; - } - - /* Now we are initialized */ - - initialized = true; + ret = ads7843e_register(dev, &g_tscinfo.config, CONFIG_ADS7843E_DEVMINOR); + if (ret < 0) + { + ierr("ERROR: Failed to register touchscreen device\n"); + /* up_spiuninitialize(dev); */ + return -ENODEV; } return OK;