From 5701019e405ade6a82d45ab334d248f4c4426010 Mon Sep 17 00:00:00 2001 From: Miroslav Ondra Date: Wed, 22 Jan 2020 13:53:24 +0100 Subject: [PATCH] Add sysled support --- modules/unipi/src/unipi_common.h | 4 +++- modules/unipi/src/unipi_misc.c | 9 +++++++-- modules/unipi/src/unipi_misc.h | 2 +- modules/unipi/src/unipi_platform.c | 30 ++++++++++++++++++++++++++---- modules/unipi/src/unipi_platform.h | 3 +++ 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/modules/unipi/src/unipi_common.h b/modules/unipi/src/unipi_common.h index 5cd0505..84320ed 100644 --- a/modules/unipi/src/unipi_common.h +++ b/modules/unipi/src/unipi_common.h @@ -52,7 +52,7 @@ #if NEURONSPI_SCHED_REQUIRED > 0 #include #endif -#define NEURONSPI_MAJOR_VERSIONSTRING "Version 1.33:2019:09:26" +#define NEURONSPI_MAJOR_VERSIONSTRING "Version 1.33:2020:01:22" #define NEURONSPI_MAX_DEVS 3 #define NEURONSPI_MAX_UART 16 @@ -65,6 +65,8 @@ #define NEURONSPI_DEFAULT_FREQ 600000 #define NEURONSPI_COMMON_FREQ 12000000 +#define NEURONSPI_SYSLED_REGISTER 509 + #if defined(CONFIG_ARM64) /* on NanoPi there are only 12MHz and 6MHz available, not in between */ #define NEURONSPI_SLOWER_FREQ 6000000 diff --git a/modules/unipi/src/unipi_misc.c b/modules/unipi/src/unipi_misc.c index dc286a5..f774f29 100644 --- a/modules/unipi/src/unipi_misc.c +++ b/modules/unipi/src/unipi_misc.c @@ -51,12 +51,13 @@ void neuronspi_led_set_brightness(struct led_classdev *ldev, enum led_brightness -struct neuronspi_led_driver * neuronspi_led_probe(int led_count, int neuron_index, struct platform_device *board_device) +struct neuronspi_led_driver * neuronspi_led_probe(int uled_count, int sysled_count, int neuron_index, struct platform_device *board_device) { struct spi_device* spi = neuronspi_s_dev[neuron_index]; struct neuronspi_driver_data *n_spi = spi_get_drvdata(spi); struct neuronspi_led_driver * led_driver = kzalloc(sizeof(struct neuronspi_led_driver) * led_count, GFP_ATOMIC); int i, coil; + int led_count = uled_count + sysled_count; if (n_spi->features != NULL) { coil = n_spi->features->di_count + n_spi->features->do_count + n_spi->features->ro_count; @@ -65,7 +66,11 @@ struct neuronspi_led_driver * neuronspi_led_probe(int led_count, int neuron_inde } for (i = 0; i < led_count; i++) { - scnprintf(led_driver[i].name, sizeof(led_driver[i].name), "unipi:green:uled-x%x", i); + if (i < uled_count) { + scnprintf(led_driver[i].name, sizeof(led_driver[i].name), "unipi:green:uled-x%x", i); + { else { + scnprintf(led_driver[i].name, sizeof(led_driver[i].name), "unipi:green:sysled-x%x", i-uled_count); + } // Initialise the rest of the structure led_driver[i].id = i; led_driver[i].coil = coil+i; diff --git a/modules/unipi/src/unipi_misc.h b/modules/unipi/src/unipi_misc.h index 6305ec2..2a0ba68 100644 --- a/modules/unipi/src/unipi_misc.h +++ b/modules/unipi/src/unipi_misc.h @@ -41,6 +41,6 @@ struct neuronspi_led_driver void neuronspi_led_proc(struct kthread_work *ws); void neuronspi_led_set_brightness(struct led_classdev *ldev, enum led_brightness brightness); -struct neuronspi_led_driver * neuronspi_led_probe(int led_count, int neuron_index, struct platform_device *board_device); +struct neuronspi_led_driver * neuronspi_led_probe(int uled_count, int sysled_count, int neuron_index, struct platform_device *board_device); #endif /* MODULES_NEURON_SPI_SRC_UNIPI_MISC_H_ */ diff --git a/modules/unipi/src/unipi_platform.c b/modules/unipi/src/unipi_platform.c index e49759d..856165a 100644 --- a/modules/unipi/src/unipi_platform.c +++ b/modules/unipi/src/unipi_platform.c @@ -92,7 +92,7 @@ static u32 NEURONSPI_BOARD_B1000_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_B1000_HW_DE .ro_count = 0, \ .ds_count = 4, \ .di_count = 4, \ - .led_count = 16, \ + .led_count = 4, \ .stm_ai_count = 1, \ .stm_ao_count = 1, \ .sec_ai_count = 0, \ @@ -104,6 +104,7 @@ static u32 NEURONSPI_BOARD_B1000_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_B1000_HW_DE .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 1, \ + .sysled_count = 16, \ } #define NEURONSPI_BOARD_B1000_HW_DEFINITION { \ @@ -182,6 +183,7 @@ static u32 NEURONSPI_BOARD_E8DI8RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E8DI8RO_H .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E8DI8RO_HW_DEFINITION { \ @@ -233,6 +235,7 @@ static u32 NEURONSPI_BOARD_E14RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E14RO_HW_DE .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E14RO_HW_DEFINITION { \ @@ -331,6 +334,7 @@ static u32 NEURONSPI_BOARD_E16DI_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E16DI_HW_DE .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E16DI_HW_DEFINITION { \ @@ -412,6 +416,7 @@ static u32 NEURONSPI_BOARD_E8DI8ROP11DIR485_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_ .extension_sys_count = 1, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E8DI8ROP11DIR485_HW_DEFINITION { \ @@ -517,6 +522,7 @@ static u32 NEURONSPI_BOARD_E14ROP11DIR485_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E1 .extension_sys_count = 1, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E14ROP11DIR485_HW_DEFINITION { \ @@ -643,6 +649,7 @@ static u32 NEURONSPI_BOARD_E16DIP11DIR485_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E1 .extension_sys_count = 1, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E16DIP11DIR485_HW_DEFINITION { \ @@ -694,6 +701,7 @@ static u32 NEURONSPI_BOARD_E14ROU14RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E14ROU .extension_sys_count = 1, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E14ROU14RO_HW_DEFINITION { \ @@ -796,6 +804,7 @@ static u32 NEURONSPI_BOARD_E16DIU14RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E16DIU .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E16DIU14RO_HW_DEFINITION { \ @@ -892,6 +901,7 @@ static u32 NEURONSPI_BOARD_E14ROU14DI_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E14ROU .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E14ROU14DI_HW_DEFINITION { \ @@ -1034,6 +1044,7 @@ static u32 NEURONSPI_BOARD_E16DIU14DI_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E16DIU .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E16DIU14DI_HW_DEFINITION { \ @@ -1099,6 +1110,7 @@ static u32 NEURONSPI_BOARD_E4AI4AO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E4AI4AO_H .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 16, \ } @@ -1190,6 +1202,7 @@ static u32 NEURONSPI_BOARD_E4AI4AOP6DI5RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E4 .extension_sys_count = 1, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E4AI4AOP6DI5RO_HW_DEFINITION { \ @@ -1239,6 +1252,7 @@ static u32 NEURONSPI_BOARD_B485_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_B485_HW_DEFI .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_B485_HW_DEFINITION { \ @@ -1308,6 +1322,7 @@ static u32 NEURONSPI_BOARD_E4LIGHT_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E4LIGHT_H .extension_sys_count = 0, \ .light_count = 4, \ .owire_count = 0, \ + .sysled_count = 16, \ } #define NEURONSPI_BOARD_E4LIGHT_HW_DEFINITION { \ @@ -1398,6 +1413,7 @@ static u32 NEURONSPI_BOARD_E4AI4AOU6DI5RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E4 .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E4AI4AOU6DI5RO_HW_DEFINITION { \ @@ -1482,6 +1498,7 @@ static u32 NEURONSPI_BOARD_E4AI4AOP4DI5RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E4 .extension_sys_count = 1, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E4AI4AOP4DI5RO_HW_DEFINITION { \ @@ -1566,6 +1583,7 @@ static u32 NEURONSPI_BOARD_E4AI4AOU4DI5RO_HW_DEFINITION_BLOCK[NEURONSPI_BOARD_E4 .extension_sys_count = 0, \ .light_count = 0, \ .owire_count = 0, \ + .sysled_count = 0, \ } #define NEURONSPI_BOARD_E4AI4AOU4DI5RO_HW_DEFINITION { \ @@ -2037,6 +2055,9 @@ int neuronspi_create_reg_starts(struct neuronspi_board_regstart_table *out_table if (board->features.led_count > 0) { out_table->led_val_reg = neuronspi_find_reg_start(board, NEURONSPI_REGFUN_LED_RW); } + if (board->features.sysled_count > 0) { + out_table->sysled_val_reg = NEURONSPI_SYSLED_REGISTER; + } if (board->features.light_count > 0) { // TODO: Fill in light bus registers } @@ -2275,9 +2296,10 @@ struct platform_device * neuronspi_board_device_probe(struct neuronspi_driver_da platform_set_drvdata(board_device, board_data); if (n_spi->features) { - if (n_spi->features->led_count) { - printk(KERN_INFO "UNIPISPI: %d User LEDs detected at nspi%d\n", n_spi->features->led_count, n_spi->neuron_index); - board_data->led_driver = neuronspi_led_probe(n_spi->features->led_count, n_spi->neuron_index, board_device); + if ((n_spi->features->led_count>0) || (n_spi->features->sysled_count>0)) { + if (n_spi->features->led_count) printk(KERN_INFO "UNIPISPI: %d User LEDs detected at nspi%d\n", n_spi->features->led_count, n_spi->neuron_index); + if (n_spi->features->sysled_count) printk(KERN_INFO "UNIPISPI: %d System LEDs detected at nspi%d\n", n_spi->features->sysled_count, n_spi->neuron_index); + board_data->led_driver = neuronspi_led_probe(n_spi->features->led_count, n_spi->features->sysled_count, n_spi->neuron_index, board_device); } #ifdef CONFIG_GPIOLIB if (n_spi->features->di_count) { diff --git a/modules/unipi/src/unipi_platform.h b/modules/unipi/src/unipi_platform.h index 0b21926..c90f69a 100644 --- a/modules/unipi/src/unipi_platform.h +++ b/modules/unipi/src/unipi_platform.h @@ -62,6 +62,7 @@ struct neuronspi_board_features u32 extension_sys_count; u32 light_count; u32 owire_count; + u32 sysled_count; }; struct neuronspi_board_regstart_table @@ -114,6 +115,8 @@ struct neuronspi_board_regstart_table u32 sys_hw_ver; u32 sys_hw_flash_ver; u32 sys_sw_ver; + u32 sysled_val_coil; + u32 sysled_val_reg; }; struct neuronspi_board_combination -- 2.34.1