diff options
author | Vic Yang <victoryang@chromium.org> | 2013-08-05 11:17:35 +0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2013-08-27 23:20:33 +0000 |
commit | 5d014fd2dd5e92ad35a4f2dd1b58e0b1baebb65e (patch) | |
tree | 2078f9831177392f22ba202cbea4b09d69a9a710 /board | |
parent | 99f06c39aabd262653c96c589c5cd26fc1fb8389 (diff) | |
download | chrome-ec-5d014fd2dd5e92ad35a4f2dd1b58e0b1baebb65e.tar.gz |
Refactor PWM module
This unifies the PWM module interface for LM4 and STM32. Now PWM
channels are defined in board.h/board.c. Instead of calling functions
named pwm_set_fan_duty(x), one can now use pwm_set_duty(PWM_CH_FAN, x),
which prevents additional functions added when we have a new PWM
channel.
BUG=chrome-os-partner:18343
TEST=Limit input current on Spring.
TEST=Check power LED in S0/S3/S5 on Snow.
TEST=Check keyboard backlight functionality on Link.
TEST=Check fan speed control/detecting on Link.
BRANCH=None
Change-Id: Ibac4d79f72e65c94776d503558a7592f7db859dc
Signed-off-by: Vic Yang <victoryang@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/64450
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'board')
-rw-r--r-- | board/bds/board.h | 4 | ||||
-rw-r--r-- | board/bolt/board.c | 8 | ||||
-rw-r--r-- | board/bolt/board.h | 18 | ||||
-rw-r--r-- | board/falco/board.c | 8 | ||||
-rw-r--r-- | board/falco/board.h | 16 | ||||
-rw-r--r-- | board/host/board.h | 7 | ||||
-rw-r--r-- | board/link/board.c | 8 | ||||
-rw-r--r-- | board/link/board.h | 17 | ||||
-rw-r--r-- | board/peppy/board.c | 8 | ||||
-rw-r--r-- | board/peppy/board.h | 18 | ||||
-rw-r--r-- | board/pit/board.c | 9 | ||||
-rw-r--r-- | board/pit/board.h | 7 | ||||
-rw-r--r-- | board/puppy/board.c | 9 | ||||
-rw-r--r-- | board/puppy/board.h | 7 | ||||
-rw-r--r-- | board/slippy/board.c | 8 | ||||
-rw-r--r-- | board/slippy/board.h | 16 | ||||
-rw-r--r-- | board/snow/board.c | 9 | ||||
-rw-r--r-- | board/snow/board.h | 7 | ||||
-rw-r--r-- | board/spring/board.c | 9 | ||||
-rw-r--r-- | board/spring/board.h | 9 |
20 files changed, 181 insertions, 21 deletions
diff --git a/board/bds/board.h b/board/bds/board.h index b35cf0445b..f2e7c3d75b 100644 --- a/board/bds/board.h +++ b/board/bds/board.h @@ -40,6 +40,10 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_COUNT +}; + /* I2C ports */ #define I2C_PORT_LIGHTBAR 5 // port 5 / PA6:7 on link, but PG6:7 on badger /* Number of I2C ports used */ diff --git a/board/bolt/board.c b/board/bolt/board.c index 55c22f2f7b..4fc4b2fc49 100644 --- a/board/bolt/board.c +++ b/board/bolt/board.c @@ -22,6 +22,7 @@ #include "peci.h" #include "power_button.h" #include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "switch.h" #include "temp_sensor.h" @@ -179,6 +180,13 @@ const struct adc_t adc_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_FAN] = {FAN_CH_CPU, PWM_CONFIG_HAS_RPM_MODE}, + [PWM_CH_KBLIGHT] = {FAN_CH_KBLIGHT, 0}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + /* I2C ports */ const struct i2c_port_t i2c_ports[] = { /* Note: battery and charger share a port. Only include it once in diff --git a/board/bolt/board.h b/board/bolt/board.h index 2133701812..a9c417f73b 100644 --- a/board/bolt/board.h +++ b/board/bolt/board.h @@ -35,10 +35,11 @@ #define CONFIG_CHARGER_SENSE_RESISTOR_AC 10 /* External Charger maximum current. */ #define CONFIG_CHARGER_INPUT_CURRENT 5000 -#define CONFIG_PWM_FAN -#define CONFIG_PWM_FAN_RPM_MIN 1000 -#define CONFIG_PWM_FAN_RPM_MAX 5050 -#define CONFIG_PWM_FAN_POWER_GOOD GPIO_PP5000_PGOOD +#define CONFIG_FAN +#define CONFIG_FAN_RPM_MIN 1000 +#define CONFIG_FAN_RPM_MAX 5050 +#define CONFIG_FAN_POWER_GOOD GPIO_PP5000_PGOOD +#define CONFIG_PWM #define CONFIG_PWM_KBLIGHT #define CONFIG_TEMP_SENSOR #define CONFIG_UART_HOST 2 @@ -177,6 +178,7 @@ enum x86_signal { /* Number of X86 signals */ X86_SIGNAL_COUNT }; + enum adc_channel { /* EC internal die temperature in degrees K. */ ADC_CH_EC_TEMP = 0, @@ -187,6 +189,14 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_FAN, + PWM_CH_KBLIGHT, + + /* Number of PWM channels */ + PWM_CH_COUNT +}; + enum temp_sensor_id { /* HEY - need two I2C sensor values, and put PECI first */ diff --git a/board/falco/board.c b/board/falco/board.c index e65e68dae0..c43c3d08f5 100644 --- a/board/falco/board.c +++ b/board/falco/board.c @@ -23,6 +23,8 @@ #include "lm4_adc.h" #include "peci.h" #include "power_button.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "switch.h" #include "temp_sensor.h" @@ -182,6 +184,12 @@ const struct adc_t adc_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_FAN] = {FAN_CH_CPU, PWM_CONFIG_HAS_RPM_MODE}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + /* I2C ports */ const struct i2c_port_t i2c_ports[] = { /* Note: battery and charger share a port. Only include it once in diff --git a/board/falco/board.h b/board/falco/board.h index 1a75037284..63b14b1b3a 100644 --- a/board/falco/board.h +++ b/board/falco/board.h @@ -18,14 +18,15 @@ #define CONFIG_CHIPSET_X86 #define CONFIG_EXTPOWER_FALCO #define CONFIG_EXTPOWER_GPIO +#define CONFIG_FAN +#define CONFIG_FAN_RPM_MIN 1000 +#define CONFIG_FAN_RPM_MAX 5050 +#define CONFIG_FAN_POWER_GOOD GPIO_PP5000_PGOOD #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_KEYBOARD_PROTOCOL_8042 #define CONFIG_POWER_BUTTON #define CONFIG_POWER_BUTTON_X86 -#define CONFIG_PWM_FAN -#define CONFIG_PWM_FAN_RPM_MIN 1000 -#define CONFIG_PWM_FAN_RPM_MAX 5050 -#define CONFIG_PWM_FAN_POWER_GOOD GPIO_PP5000_PGOOD +#define CONFIG_PWM #define CONFIG_TEMP_SENSOR #define CONFIG_TEMP_SENSOR_G781 #define CONFIG_UART_HOST 2 @@ -177,6 +178,13 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_FAN, + + /* Number of PWM channels */ + PWM_CH_COUNT +}; + enum temp_sensor_id { /* CPU die temperature via PECI */ TEMP_SENSOR_CPU_PECI = 0, diff --git a/board/host/board.h b/board/host/board.h index 1af8db0c5d..9301d24e00 100644 --- a/board/host/board.h +++ b/board/host/board.h @@ -14,6 +14,7 @@ #define CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_POWER_BUTTON #undef CONFIG_WATCHDOG +#define CONFIG_PWM #undef CONFIG_CONSOLE_HISTORY #define CONFIG_CONSOLE_HISTORY 4 @@ -53,4 +54,10 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_FAN, + + PWM_CH_COUNT +}; + #endif /* __BOARD_H */ diff --git a/board/link/board.c b/board/link/board.c index 3a00d16a03..618700f388 100644 --- a/board/link/board.c +++ b/board/link/board.c @@ -20,6 +20,7 @@ #include "peci.h" #include "power_button.h" #include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "switch.h" #include "temp_sensor.h" @@ -181,6 +182,13 @@ const struct adc_t adc_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_FAN] = {FAN_CH_CPU, PWM_CONFIG_HAS_RPM_MODE}, + [PWM_CH_KBLIGHT] = {FAN_CH_KBLIGHT, 0}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + /* I2C ports */ const struct i2c_port_t i2c_ports[] = { /* Note: battery and charger share a port. Only include it once in diff --git a/board/link/board.h b/board/link/board.h index b45de1981a..7d0a8ae268 100644 --- a/board/link/board.h +++ b/board/link/board.h @@ -18,6 +18,10 @@ #define CONFIG_CHIPSET_IVYBRIDGE #define CONFIG_CHIPSET_X86 #define CONFIG_EXTPOWER_GPIO +#define CONFIG_FAN +#define CONFIG_FAN_RPM_MIN 1500 +#define CONFIG_FAN_RPM_MAX 9300 +#define CONFIG_FAN_POWER_GOOD GPIO_PGOOD_5VALW #define CONFIG_I2C_PASSTHRU_RESTRICTED #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_KEYBOARD_PROTOCOL_8042 @@ -25,10 +29,7 @@ #define CONFIG_ONEWIRE #define CONFIG_POWER_BUTTON #define CONFIG_POWER_BUTTON_X86 -#define CONFIG_PWM_FAN -#define CONFIG_PWM_FAN_RPM_MIN 1500 -#define CONFIG_PWM_FAN_RPM_MAX 9300 -#define CONFIG_PWM_FAN_POWER_GOOD GPIO_PGOOD_5VALW +#define CONFIG_PWM #define CONFIG_PWM_KBLIGHT #define CONFIG_TEMP_SENSOR #define CONFIG_TEMP_SENSOR_TMP006 @@ -64,6 +65,14 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_FAN, + PWM_CH_KBLIGHT, + + /* Number of PWM channels */ + PWM_CH_COUNT +}; + /* Charger module */ #define CONFIG_CHARGER_SENSE_RESISTOR 10 /* Charge sense resistor, mOhm */ #define CONFIG_CHARGER_SENSE_RESISTOR_AC 20 /* Input sensor resistor, mOhm */ diff --git a/board/peppy/board.c b/board/peppy/board.c index 9b30ac8865..0a782230bf 100644 --- a/board/peppy/board.c +++ b/board/peppy/board.c @@ -20,6 +20,8 @@ #include "lm4_adc.h" #include "peci.h" #include "power_button.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "switch.h" #include "temp_sensor.h" @@ -172,6 +174,12 @@ const struct adc_t adc_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_FAN] = {FAN_CH_CPU, PWM_CONFIG_HAS_RPM_MODE}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + /* I2C ports */ const struct i2c_port_t i2c_ports[] = { /* Note: battery and charger share a port. Only include it once in diff --git a/board/peppy/board.h b/board/peppy/board.h index 7c3a385071..2be2988aa6 100644 --- a/board/peppy/board.h +++ b/board/peppy/board.h @@ -19,15 +19,16 @@ #define CONFIG_CHIPSET_HASWELL #define CONFIG_CHIPSET_X86 #define CONFIG_EXTPOWER_GPIO +#define CONFIG_FAN +#define CONFIG_FAN_EN_GPIO GPIO_PP5000_FAN_EN +#define CONFIG_FAN_RPM_MIN 1000 +#define CONFIG_FAN_RPM_MAX 5050 +#define CONFIG_FAN_POWER_GOOD GPIO_PP5000_PGOOD #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_KEYBOARD_PROTOCOL_8042 #define CONFIG_POWER_BUTTON #define CONFIG_POWER_BUTTON_X86 -#define CONFIG_PWM_FAN -#define CONFIG_PWM_FAN_EN_GPIO GPIO_PP5000_FAN_EN -#define CONFIG_PWM_FAN_RPM_MIN 1000 -#define CONFIG_PWM_FAN_RPM_MAX 5050 -#define CONFIG_PWM_FAN_POWER_GOOD GPIO_PP5000_PGOOD +#define CONFIG_PWM #define CONFIG_TEMP_SENSOR #define CONFIG_TEMP_SENSOR_G781 #define CONFIG_UART_HOST 2 @@ -181,6 +182,13 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_FAN, + + /* Number of PWM channels */ + PWM_CH_COUNT +}; + enum temp_sensor_id { /* CPU die temperature via PECI */ TEMP_SENSOR_CPU_PECI = 0, diff --git a/board/pit/board.c b/board/pit/board.c index 6a5dc07c15..da85dafcb8 100644 --- a/board/pit/board.c +++ b/board/pit/board.c @@ -13,6 +13,8 @@ #include "keyboard_raw.h" #include "lid_switch.h" #include "pmu_tpschrome.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "spi.h" #include "task.h" @@ -107,6 +109,13 @@ const struct i2c_port_t i2c_ports[] = { }; BUILD_ASSERT(ARRAY_SIZE(i2c_ports) == I2C_PORTS_USED); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_POWER_LED] = {STM32_TIM(2), STM32_TIM_CH(3), + PWM_CONFIG_ACTIVE_LOW, GPIO_LED_POWER_L}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + int pmu_board_init(void) { int ver, failure = 0; diff --git a/board/pit/board.h b/board/pit/board.h index c9f4e5d51e..89c54951b9 100644 --- a/board/pit/board.h +++ b/board/pit/board.h @@ -21,6 +21,7 @@ #define CONFIG_PMU_POWERINFO #define CONFIG_PMU_TPS65090 #define CONFIG_SPI +#define CONFIG_PWM #ifndef __ASSEMBLER__ @@ -120,6 +121,12 @@ enum gpio_signal { GPIO_COUNT }; +enum pwm_channel { + PWM_CH_POWER_LED = 0, + /* Number of PWM channels */ + PWM_CH_COUNT +}; + #endif /* !__ASSEMBLER__ */ #endif /* __BOARD_H */ diff --git a/board/puppy/board.c b/board/puppy/board.c index be011561ac..3570789c50 100644 --- a/board/puppy/board.c +++ b/board/puppy/board.c @@ -13,6 +13,8 @@ #include "keyboard_raw.h" #include "lid_switch.h" #include "pmu_tpschrome.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "spi.h" #include "task.h" @@ -107,6 +109,13 @@ const struct i2c_port_t i2c_ports[] = { }; BUILD_ASSERT(ARRAY_SIZE(i2c_ports) == I2C_PORTS_USED); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_POWER_LED] = {STM32_TIM(2), STM32_TIM_CH(3), + PWM_CONFIG_ACTIVE_LOW, GPIO_LED_POWER_L}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + int pmu_board_init(void) { int ver, failure = 0; diff --git a/board/puppy/board.h b/board/puppy/board.h index d6f6de4480..f3b1135852 100644 --- a/board/puppy/board.h +++ b/board/puppy/board.h @@ -21,6 +21,7 @@ #define CONFIG_PMU_HARD_RESET #define CONFIG_PMU_TPS65090 #define CONFIG_SPI +#define CONFIG_PWM #ifndef __ASSEMBLER__ @@ -116,6 +117,12 @@ enum gpio_signal { GPIO_COUNT }; +enum pwm_channel { + PWM_CH_POWER_LED = 0, + /* Number of PWM channels */ + PWM_CH_COUNT +}; + #endif /* !__ASSEMBLER__ */ #endif /* __BOARD_H */ diff --git a/board/slippy/board.c b/board/slippy/board.c index 12de82d8a6..2ed4320902 100644 --- a/board/slippy/board.c +++ b/board/slippy/board.c @@ -20,6 +20,8 @@ #include "lm4_adc.h" #include "peci.h" #include "power_button.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "switch.h" #include "temp_sensor.h" @@ -172,6 +174,12 @@ const struct adc_t adc_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_FAN] = {FAN_CH_CPU, PWM_CONFIG_HAS_RPM_MODE}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + /* I2C ports */ const struct i2c_port_t i2c_ports[] = { /* Note: battery and charger share a port. Only include it once in diff --git a/board/slippy/board.h b/board/slippy/board.h index 0047aa58d0..ace4cdd464 100644 --- a/board/slippy/board.h +++ b/board/slippy/board.h @@ -19,15 +19,16 @@ #define CONFIG_CHIPSET_HASWELL #define CONFIG_CHIPSET_X86 #define CONFIG_EXTPOWER_GPIO +#define CONFIG_FAN +#define CONFIG_FAN_RPM_MIN 1000 +#define CONFIG_FAN_RPM_MAX 5050 +#define CONFIG_FAN_POWER_GOOD GPIO_PP5000_PGOOD #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_KEYBOARD_PROTOCOL_8042 #define CONFIG_LED_SLIPPY #define CONFIG_POWER_BUTTON #define CONFIG_POWER_BUTTON_X86 -#define CONFIG_PWM_FAN -#define CONFIG_PWM_FAN_RPM_MIN 1000 -#define CONFIG_PWM_FAN_RPM_MAX 5050 -#define CONFIG_PWM_FAN_POWER_GOOD GPIO_PP5000_PGOOD +#define CONFIG_PWM #define CONFIG_TEMP_SENSOR #define CONFIG_TEMP_SENSOR_G781 #define CONFIG_UART_HOST 2 @@ -175,6 +176,13 @@ enum adc_channel { ADC_CH_COUNT }; +enum pwm_channel { + PWM_CH_FAN, + + /* Number of PWM channels */ + PWM_CH_COUNT +}; + enum temp_sensor_id { /* CPU die temperature via PECI */ TEMP_SENSOR_CPU_PECI = 0, diff --git a/board/snow/board.c b/board/snow/board.c index 55e8012972..8a4e89667e 100644 --- a/board/snow/board.c +++ b/board/snow/board.c @@ -17,6 +17,8 @@ #include "lid_switch.h" #include "pmu_tpschrome.h" #include "power_led.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "spi.h" #include "task.h" @@ -120,6 +122,13 @@ const struct i2c_port_t i2c_ports[] = { }; BUILD_ASSERT(ARRAY_SIZE(i2c_ports) == I2C_PORTS_USED); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_POWER_LED] = {STM32_TIM(2), STM32_TIM_CH(2), + PWM_CONFIG_ACTIVE_LOW, GPIO_LED_POWER_L}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + void board_config_pre_init(void) { uint32_t val; diff --git a/board/snow/board.h b/board/snow/board.h index 2c56d9d02a..363a0490a6 100644 --- a/board/snow/board.h +++ b/board/snow/board.h @@ -28,6 +28,7 @@ #define CONFIG_KEYBOARD_SUPPRESS_NOISE #define CONFIG_PMU_HARD_RESET #define CONFIG_PMU_TPS65090 +#define CONFIG_PWM /* use STOP mode when we have nothing to do */ #define CONFIG_LOW_POWER_IDLE @@ -120,6 +121,12 @@ enum gpio_signal { GPIO_COUNT }; +enum pwm_channel { + PWM_CH_POWER_LED = 0, + /* Number of PWM channels */ + PWM_CH_COUNT +}; + #endif /* !__ASSEMBLER__ */ #endif /* __BOARD_H */ diff --git a/board/spring/board.c b/board/spring/board.c index 44c231ad79..31c5484b7e 100644 --- a/board/spring/board.c +++ b/board/spring/board.c @@ -19,6 +19,8 @@ #include "keyboard_raw.h" #include "lid_switch.h" #include "pmu_tpschrome.h" +#include "pwm.h" +#include "pwm_data.h" #include "registers.h" #include "stm32_adc.h" #include "timer.h" @@ -129,6 +131,13 @@ const struct adc_t adc_channels[] = { }; BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); +/* PWM channels */ +const struct pwm_t pwm_channels[] = { + [PWM_CH_ILIM] = {STM32_TIM(3), STM32_TIM_CH(1), 0, + GPIO_ILIM}, +}; +BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); + /* I2C ports */ const struct i2c_port_t i2c_ports[] = { {"host", I2C_PORT_HOST, 100}, diff --git a/board/spring/board.h b/board/spring/board.h index 2046ed9fd9..d95bfce81e 100644 --- a/board/spring/board.h +++ b/board/spring/board.h @@ -33,6 +33,7 @@ #define CONFIG_PMU_HARD_RESET #define CONFIG_PMU_TPS65090 #define CONFIG_USB_SWITCH_TSU6721 +#define CONFIG_PWM #ifndef __ASSEMBLER__ @@ -41,6 +42,7 @@ enum module_id { MODULE_I2C, MODULE_UART, + MODULE_EXTPOWER_USB, }; /* By default, enable all console messages except keyboard */ @@ -73,6 +75,13 @@ enum adc_channel { ADC_CH_COUNT }; +/* PWM signal */ +enum pwm_channel { + PWM_CH_ILIM = 0, + /* Number of PWM channels */ + PWM_CH_COUNT +}; + /* GPIO signal list */ enum gpio_signal { /* Inputs with interrupt handlers are first for efficiency */ |