From e213fba1c483a255a272a2eef6454f7fa9e788b0 Mon Sep 17 00:00:00 2001 From: Heesub Shin Date: Fri, 7 Apr 2017 14:44:54 +0900 Subject: [PATCH] s5j/adc: check the number of configured channels S5J has 4 ADC channels maximum. If it is requested to be configured greater than that, s5j_adc_initialize() should return an error. Change-Id: I4dd071c288b530b90c86b55dca78a12b9cc1bde6 Signed-off-by: Heesub Shin --- os/arch/arm/src/s5j/s5j_adc.c | 8 +++++++- os/arch/arm/src/s5j/s5j_adc.h | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/os/arch/arm/src/s5j/s5j_adc.c b/os/arch/arm/src/s5j/s5j_adc.c index e63b7ac..24941d4 100644 --- a/os/arch/arm/src/s5j/s5j_adc.c +++ b/os/arch/arm/src/s5j/s5j_adc.c @@ -84,7 +84,7 @@ struct s5j_dev_s uint8_t current; /* Current ADC channel being converted */ struct work_s work; /* Supports the IRQ handling */ - uint8_t chanlist[4]; + uint8_t chanlist[S5J_ADC_MAX_CHANNELS]; }; /**************************************************************************** @@ -470,6 +470,12 @@ struct adc_dev_s *s5j_adc_initialize(FAR const uint8_t *chanlist, priv->dev = &g_adcdev; priv->cchannels = cchannels; + if (cchannels > S5J_ADC_MAX_CHANNELS) { + lldbg("S5J has maximum %d ADC channels.\n", + S5J_ADC_MAX_CHANNELS); + return NULL; + } + memcpy(priv->chanlist, chanlist, cchannels); return &g_adcdev; diff --git a/os/arch/arm/src/s5j/s5j_adc.h b/os/arch/arm/src/s5j/s5j_adc.h index d0c58b2..8ad80a5 100644 --- a/os/arch/arm/src/s5j/s5j_adc.h +++ b/os/arch/arm/src/s5j/s5j_adc.h @@ -65,6 +65,7 @@ /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ +#define S5J_ADC_MAX_CHANNELS 4 #ifndef __ASSEMBLY__ -- 2.7.4