status = "okay";
pinctrl-0 = <&spi0_pins &spi0_cs_pins>;
cs-gpios = <&gpio 8 1>, <&gpio 7 1>, <&gpio 24 1>, <&gpio 25 1>;
- neuronspi0: neuronspi@0 {
+ neuronspi1: neuronspi@1 {
compatible = "unipi,neuron";
reg = <1>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <12000000>;
- pinctrl-0 = <&neuron_0_irq_pin>;
+ pinctrl-0 = <&neuron_1_irq_pin>;
pinctrl-names = "default";
interrupt-parent = <&gpio>;
interrupts = <27 0x1>;
neuron-probe-always-succeeds = <0>;
neuron-always-create-tty = <0>;
};
- neuronspi1: neuronspi@1 {
+ neuronspi2: neuronspi@2 {
compatible = "unipi,neuron";
reg = <2>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <1200000>;
- pinctrl-0 = <&neuron_1_irq_pin>;
+ pinctrl-0 = <&neuron_2_irq_pin>;
pinctrl-names = "default";
interrupt-parent = <&gpio>;
interrupts = <23 0x1>;
neuron-probe-always-succeeds = <0>;
neuron-always-create-tty = <0>;
};
- neuronspi2: neuronspi@2 {
+ neuronspi3: neuronspi@3 {
compatible = "unipi,neuron";
reg = <3>;
#address-cells = <1>;
#size-cells = <0>;
spi-max-frequency = <1200000>;
pinctrl-names = "default";
- pinctrl-0 = <&neuron_2_irq_pin>;
+ pinctrl-0 = <&neuron_3_irq_pin>;
interrupt-parent = <&gpio>;
interrupts = <22 0x1>;
status = "okay";
brcm,function = <1>;
brcm,pull = <0>;
};
- neuron_0_irq_pin: neuron_0_irq_pin {
+ neuron_1_irq_pin: neuron_1_irq_pin {
brcm,pins = <27>;
brcm,function = <0>;
brcm,pull = <1>;
};
- neuron_1_irq_pin: neuron_1_irq_pin {
+ neuron_2_irq_pin: neuron_2_irq_pin {
brcm,pins = <23>;
brcm,function = <0>;
brcm,pull = <1>;
};
- neuron_2_irq_pin: neuron_2_irq_pin {
+ neuron_3_irq_pin: neuron_3_irq_pin {
brcm,pins = <22>;
brcm,function = <0>;
brcm,pull = <1>;
cs1_pin = <&frag0>,"cs-gpios:16", <&spi0_cs_pins>,"brcm,pins:4";
cs2_pin = <&frag0>,"cs-gpios:40", <&spi0_cs_pins>,"brcm,pins:12";
cs3_pin = <&frag0>,"cs-gpios:28", <&spi0_cs_pins>,"brcm,pins:8";
- neuron_irq_0 = <&neuronspi0>,"interrupts:0", <&neuron_0_irq_pin>,"brcm,pins:0";
neuron_irq_1 = <&neuronspi1>,"interrupts:0", <&neuron_1_irq_pin>,"brcm,pins:0";
neuron_irq_2 = <&neuronspi2>,"interrupts:0", <&neuron_2_irq_pin>,"brcm,pins:0";
+ neuron_irq_3 = <&neuronspi3>,"interrupts:0", <&neuron_3_irq_pin>,"brcm,pins:0";
};
};
rtc_unipi->rtc->nvram_old_abi = true;
#else
nvmem_cfg.priv = rtc_unipi;
- rtc_unipi->rtc->nvram_old_abi = true;
- rtc_nvmem_register(rtc_unipi->rtc, &nvmem_cfg);
+ devm_nvmem_register(rtc_unipi->rtc->dev.parent, &nvmem_cfg);
#endif
rtc_unipi->rtc->ops = &mcp794xx_rtc_ops; /*chip->rtc_ops ?: &ds13xx_rtc_ops;*/
- err = rtc_register_device(rtc_unipi->rtc);
+ err = devm_rtc_register_device(rtc_unipi->rtc);
if (err)
return err;
s_trans = (struct spi_transfer *)(context + 1);
spi_message_init_with_transfers(&context->message, s_trans, trans_count);
- s_trans[0].delay_usecs = NEURONSPI_EDGE_DELAY;
+ s_trans[0].delay.value = NEURONSPI_EDGE_DELAY;
+ s_trans[0].delay.unit = SPI_DELAY_UNIT_USECS;
s_trans[0].bits_per_word = 8;
s_trans[0].speed_hz = freq;
packet_crc = neuronspi_spi_crc(send_buf->first_message, 4, 0);
*((u16*)(send_buf->first_message+4)) = packet_crc;
}
- s_trans[1].delay_usecs = delay;
+ s_trans[1].delay.value = delay;
+ s_trans[1].delay.unit = SPI_DELAY_UNIT_USECS;
s_trans[1].len = NEURONSPI_FIRST_MESSAGE_LENGTH;
s_trans[1].tx_buf = send_buf->first_message;
s_trans[1].rx_buf = recv_buf->first_message;
unipi_spi_trace_1(KERN_INFO "UNIPISPI: SPI Master Write(%3d) %32ph\n", len, send_buf->second_message);
remain = len;
for (i = 2; i < trans_count; i++) {
- s_trans[i].delay_usecs = 0;
+ s_trans[i].delay.value = 0;
+ s_trans[i].delay.unit = SPI_DELAY_UNIT_USECS;
s_trans[i].bits_per_word = 8;
s_trans[i].speed_hz = freq;
s_trans[i].tx_buf = send_buf->second_message + (NEURONSPI_MAX_TX * (i - 2));
u32 always_create_uart = 0;
struct kthread_worker *worker;
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
- struct spi_delay inactive_delay;
-#endif
-
unsigned long flags;
n_spi = kzalloc(sizeof *n_spi, GFP_ATOMIC);
if (gpio_is_valid(spi->cs_gpio)) {
spi->cs_gpio = -spi->cs_gpio;
}
-#else
- inactive_delay.value = 40;
- inactive_delay.unit = SPI_DELAY_UNIT_USECS;
- spi_set_cs_timing(spi, NULL, NULL, &inactive_delay);
#endif
// Prepare worker for interrupt, LEDs, UARTs
#endif
static struct tty_ldisc_ops unipi_tty_ops = {
- .magic = TTY_LDISC_MAGIC,
+ .num = N_PROFIBUS_FDL;
.owner = THIS_MODULE,
.name = "unipi_tty",
.open = unipi_tty_open,
{
int err;
unipi_tty_trace(KERN_INFO "UNIPISPI: TTY Init\n");
- err = tty_register_ldisc(N_PROFIBUS_FDL, &unipi_tty_ops);
+ err = tty_register_ldisc(&unipi_tty_ops);
if (err) {
printk(KERN_INFO "UNIPISPI: UniPi line discipline registration failed. (%d)", err);
return err;
void __exit unipi_tty_exit(void)
{
- tty_unregister_ldisc(N_PROFIBUS_FDL);
+ tty_unregister_ldisc(&unipi_tty_ops);
}
#else
struct tty_ldisc_ops unipi_tty_ldisc;
static void (*alias_n_tty_receive_buf)(struct tty_struct *tty, const unsigned char *cp,
- char *fp, int count);
+ const char *fp, int count);
static int (*alias_n_tty_receive_buf2)(struct tty_struct *tty, const unsigned char *cp,
- char *fp, int count);
+ const char *fp, int count);
static int (*alias_n_tty_ioctl)(struct tty_struct *tty, struct file *file,
unsigned int cmd, unsigned long arg);
static void unipi_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
- char *fp, int count)
+ const char *fp, int count)
{
int is_parmrk = I_PARMRK(tty);
if (is_parmrk) {
}
static int unipi_tty_receive_buf2(struct tty_struct *tty, const unsigned char *cp,
- char *fp, int count)
+ const char *fp, int count)
{
int ret;
int is_parmrk = I_PARMRK(tty);
memset(&unipi_tty_ldisc, 0, sizeof(unipi_tty_ldisc));
n_tty_inherit_ops(&unipi_tty_ldisc);
- unipi_tty_ldisc.magic = TTY_LDISC_MAGIC;
+ unipi_tty_ldisc.num = N_PROFIBUS_FDL;
unipi_tty_ldisc.name = "unipi_tty";
unipi_tty_ldisc.owner = THIS_MODULE;
unipi_tty_ldisc.receive_buf2 = unipi_tty_receive_buf2;
unipi_tty_ldisc.ioctl = unipi_tty_ioctl;
- err = tty_register_ldisc(N_PROFIBUS_FDL, &unipi_tty_ldisc);
+ err = tty_register_ldisc(&unipi_tty_ldisc);
if (err) {
printk(KERN_INFO "UniPi line discipline registration failed. (%d)", err);
return err;
void __exit unipi_tty_exit(void)
{
- tty_unregister_ldisc(N_PROFIBUS_FDL);
+ tty_unregister_ldisc(&unipi_tty_ldisc);
}
#endif