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";
};
};
if (rtc_unipi_can_wakeup_device && !want_irq) {
dev_info(rtc_unipi->dev,
"'wakeup-source' is set, request for an IRQ is disabled!\n");
- /* We cannot support UIE mode if we do not have an IRQ line */
- rtc_unipi->rtc->uie_unsupported = 1;
}
if (want_irq) {
((struct neuronspi_analog_data*)iio_priv(iio_driver))->parent = spi;
((struct neuronspi_analog_data*)iio_priv(iio_driver))->index = 0;
iio_driver->modes = INDIO_DIRECT_MODE;
- iio_driver->currentmode = INDIO_DIRECT_MODE;
iio_driver->name = "ai_type_a";
iio_driver->dev.parent = &(board_device->dev);
dev_set_name(&iio_driver->dev, "ai_%d_1", neuron_index + 1);
((struct neuronspi_analog_data*)iio_priv(iio_driver))->parent = spi;
((struct neuronspi_analog_data*)iio_priv(iio_driver))->index = 0;
iio_driver->modes = INDIO_DIRECT_MODE;
- iio_driver->currentmode = INDIO_DIRECT_MODE;
iio_driver->name = "ao_type_a";
iio_driver->dev.parent = &(board_device->dev);
dev_set_name(&iio_driver->dev, "ao_%d_1", neuron_index + 1);
((struct neuronspi_analog_data*)iio_priv(iio_driver_arr[i]))->parent = spi;
((struct neuronspi_analog_data*)iio_priv(iio_driver_arr[i]))->index = i;
iio_driver_arr[i]->modes = INDIO_DIRECT_MODE;
- iio_driver_arr[i]->currentmode = INDIO_DIRECT_MODE;
iio_driver_arr[i]->name = "ai_type_b";
iio_driver_arr[i]->dev.parent = &(board_device->dev);
dev_set_name(&iio_driver_arr[i]->dev, "ai_%d_%d", neuron_index + 1, i + 1);
((struct neuronspi_analog_data*)iio_priv(iio_driver_arr[i]))->parent = spi;
((struct neuronspi_analog_data*)iio_priv(iio_driver_arr[i]))->index = i;
iio_driver_arr[i]->modes = INDIO_DIRECT_MODE;
- iio_driver_arr[i]->currentmode = INDIO_DIRECT_MODE;
iio_driver_arr[i]->name = "ao_type_b";
iio_driver_arr[i]->dev.parent = &(board_device->dev);
dev_set_name(&iio_driver_arr[i]->dev, "ao_%d_%d", neuron_index + 1, i + 1);
return ret;
}
-s32 neuronspi_spi_remove(struct spi_device *spi)
+void neuronspi_spi_remove(struct spi_device *spi)
{
int neuron_index;
struct neuronspi_driver_data *n_spi = spi_get_drvdata(spi);
kfree(n_spi);
printk(KERN_INFO "UNIPISPI: UniPi Board nspi%d removed\n", neuron_index);
}
- return 0;
}
const char *fp, int count);
static int (*alias_n_tty_receive_buf2)(struct tty_struct *tty, const unsigned char *cp,
const char *fp, int count);
-static int (*alias_n_tty_ioctl)(struct tty_struct *tty, struct file *file,
+static int (*alias_n_tty_ioctl)(struct tty_struct *tty,
unsigned int cmd, unsigned long arg);
static void unipi_tty_receive_buf(struct tty_struct *tty, const unsigned char *cp,
return ret;
}
-static int unipi_tty_ioctl(struct tty_struct *tty, struct file *file,
+static int unipi_tty_ioctl(struct tty_struct *tty,
unsigned int cmd, unsigned long arg)
{
int retval;
return retval;
}
}
- return alias_n_tty_ioctl(tty, file, cmd, arg);
+ return alias_n_tty_ioctl(tty, cmd, arg);
}
int __init unipi_tty_init(void)
}
-void neuronspi_uart_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old)
+void neuronspi_uart_set_termios(struct uart_port *port, struct ktermios *termios, const struct ktermios *old)
{
struct neuronspi_port *n_port;
n_port = to_neuronspi_port(port, port);
neuronspi_uart_update_timeout(n_port, termios->c_cflag, n_port->baud);
}
-s32 neuronspi_uart_config_rs485(struct uart_port *port, struct serial_rs485 *rs485)
+s32 neuronspi_uart_config_rs485(struct uart_port *port, struct ktermios *termios, struct serial_rs485 *rs485)
{
port->rs485 = *rs485;
return 0;
struct neuronspi_port* port;
int i, ret = 0;
+ if (neuronspi_uart_data_global->p == NULL) {
+ neuronspi_uart_data_global->p = kzalloc(sizeof(struct neuronspi_port[NEURONSPI_MAX_UART]), GFP_ATOMIC);
+ unipi_uart_trace("Allocated port structure for %d ttyNS devices", NEURONSPI_MAX_UART);
+ }
+
if (n_spi->uart_count_to_probe) {
n_spi->uart_pindex = neuronspi_uart_data_global->p_count;
for (i=0; i<n_spi->uart_count_to_probe; i++) {