+unipi-kernel-modules (1.19) unstable; urgency=medium
+
+ * fixed frequency detection
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz> Thu, 17 Jan 2019 11:17:54 +0100
+
unipi-kernel-modules (1.18) unstable; urgency=medium
* disabled long spi tranfer
+unipi-kernel-modules (1.19.1.20181112-1) unstable; urgency=medium
+
+ * Compiled for raspberrypi-kernel 1.20181112-1
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz> Thu, 17 Jan 2019 11:18:36 +0100
+
+unipi-kernel-modules (1.19) unstable; urgency=medium
+
+ * fixed frequency detection
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz> Thu, 17 Jan 2019 11:17:54 +0100
+
+unipi-kernel-modules (1.18.1.20181112-1) unstable; urgency=medium
+
+ * Compiled for raspberrypi-kernel 1.20181112-1
+
+ -- Miroslav Ondra <bokula@bokula.faster.cz> Wed, 28 Nov 2018 09:11:02 +0100
+
unipi-kernel-modules (1.18.1.20180924-1) unstable; urgency=medium
* Compiled for raspberrypi-kernel 1.20180924-1
- -- Miroslav Ondra <bokula@bokula.faster.cz> Fri, 19 Oct 2018 10:09:57 +0200
+ -- Miroslav Ondra <bokula@bokula.faster.cz> Thu, 08 Nov 2018 09:16:26 +0100
unipi-kernel-modules (1.18) unstable; urgency=medium
#if NEURONSPI_SCHED_REQUIRED > 0
#include <uapi/linux/sched/types.h>
#endif
-#define NEURONSPI_MAJOR_VERSIONSTRING "Version 1.18:2018:10:31"
+#define NEURONSPI_MAJOR_VERSIONSTRING "Version 1.19:2019:01:17"
#define NEURONSPI_MAX_DEVS 3
#define NEURONSPI_MAX_UART 16
break;
}
}
- n_spi->ideal_frequency = neuronspi_is_slower_model(lower_board) ? NEURONSPI_SLOWER_FREQ : NEURONSPI_COMMON_FREQ;
+ //n_spi->ideal_frequency = neuronspi_is_slower_model(lower_board) ? NEURONSPI_SLOWER_FREQ : NEURONSPI_COMMON_FREQ;
+ n_spi->ideal_frequency = neuronspi_frequency_by_model(lower_board);
no_irq = neuronspi_is_noirq_model(lower_board);
- printk(KERN_INFO "UNIPISPI: UniPi Board %s (L:%x U:%x C:%x) at CS%d (nspi%d) detected.\n\t\t\tFw: v%d.%d Uarts:%d, reg1001-4: %04x %04x %04x %04x\n",
- board_name, hi(lower_board), upper_board, hardware_model, spi->chip_select, n_spi->neuron_index,
+ printk(KERN_INFO "UNIPISPI: UniPi Board %s (L:%x U:%x C:%x) at CS%d (nspi%d %dkHz) detected.\n\t\t\tFw: v%d.%d Uarts:%d, reg1001-4: %04x %04x %04x %04x\n",
+ board_name, hi(lower_board), upper_board, hardware_model, spi->chip_select, n_spi->neuron_index, n_spi->ideal_frequency/1000,
hi(n_spi->firmware_version), lo(n_spi->firmware_version), uart_count,
REG1000(first_probe,1001), REG1000(first_probe,1002), REG1000(first_probe,1003), REG1000(first_probe,1004));
0xb10, 0xc10, 0xf10
};
+struct neuronspi_frequecy_map
+{
+ u16 model;
+ u16 mask;
+ int frequency;
+};
+
+#define NEURONSPI_FREQUENCY_LEN 2
+static const struct neuronspi_frequecy_map NEURONSPI_FREQUENCY_MAP[NEURONSPI_FREQUENCY_LEN] = {
+ {model:0x0b00, mask:0xff00, frequency:NEURONSPI_SLOWER_FREQ },
+ {model:0x0000, mask:0x0000, frequency:NEURONSPI_COMMON_FREQ}
+};
#define UNIPISPI_PROBE_MESSAGE_LEN 16
static u8 _probe_message_second[UNIPISPI_PROBE_MESSAGE_LEN] =
return result;
}
-static __always_inline int neuronspi_is_slower_model(u16 model)
+static __always_inline int neuronspi_frequency_by_model(u16 model)
{
int i;
+ for (i = 0; i < NEURONSPI_FREQUENCY_LEN; i++) {
+ if ((NEURONSPI_FREQUENCY_MAP[i].mask & model) == NEURONSPI_FREQUENCY_MAP[i].model)
+ return NEURONSPI_FREQUENCY_MAP[i].frequency;
+ }
+ return NEURONSPI_COMMON_FREQ;
+/*
for (i = 0; i < NEURONSPI_SLOWER_MODELS_LEN; i++) {
if (NEURONSPI_SLOWER_MODELS[i] == model) return 1;
}
return 0;
+*/
}
static __always_inline int neuronspi_is_noirq_model(u16 model)