{
struct neuronspi_led_driver *led = container_of(ldev, struct neuronspi_led_driver, ldev);
struct neuronspi_driver_data *n_spi = spi_get_drvdata(led->spi);
- spin_lock(&led->lock);
+ unsigned long flags;
+ spin_lock_irqsave(&led->lock, flags);
led->brightness = brightness;
kthread_queue_work(&n_spi->primary_worker, &led->led_work);
- spin_unlock(&led->lock);
+ spin_unlock_irqrestore(&led->lock, flags);
}
s32 transmit_len = len - NEURONSPI_HEADER_LENGTH;
s32 send_header = 0;
s32 delay = 25;
+ unsigned long flags;
struct neuronspi_file_data* private_data;
struct spi_device* spi_driver_data;
struct neuronspi_driver_data* driver_data;
memcpy(private_data->send_buf, buffer, len);
memset(private_data->recv_buf, 0, NEURONSPI_BUFFER_MAX );
private_data->message_len = transmit_len;
- spin_lock(neuronspi_spi_w_spinlock);
+ spin_lock_irqsave(neuronspi_spi_w_spinlock, flags);
neuronspi_spi_w_flag = 1;
- spin_unlock(neuronspi_spi_w_spinlock);
+ spin_unlock_irqrestore(neuronspi_spi_w_spinlock, flags);
neuronspi_spi_send_message(spi_driver_data, &private_data->send_buf[NEURONSPI_HEADER_LENGTH], private_data->recv_buf,
transmit_len, frequency, delay, send_header, buffer[7]);
mutex_unlock(&private_data->lock);
struct neuronspi_driver_data *n_spi;
s32 ret, i, no_irq = 0;
u8 uart_count = 0;
+ unsigned long flags;
n_spi = kzalloc(sizeof *n_spi, GFP_ATOMIC);
- spin_lock(neuronspi_probe_spinlock);
+ spin_lock_irqsave(neuronspi_probe_spinlock, flags);
neuronspi_probe_count++;
- spin_unlock(neuronspi_probe_spinlock);
+ spin_unlock_irqrestore(neuronspi_probe_spinlock, flags);
if (!n_spi)
return -ENOMEM;
printk(KERN_INFO "NEURONSPI: Neuronspi Probe Started\n");
#if NEURONSPI_DETAILED_DEBUG > 0
printk(KERN_DEBUG "NEURONSPI: CHIP SELECT %d\n", spi->chip_select);
#endif
- spin_lock(neuronspi_probe_spinlock);
+ spin_lock_irqsave(neuronspi_probe_spinlock, flags);
neuronspi_s_dev[n_spi->neuron_index] = spi;
spi_set_drvdata(neuronspi_s_dev[n_spi->neuron_index], n_spi);
if (neuronspi_probe_count == NEURONSPI_MAX_DEVS) {
neuronspi_model_id = neuronspi_find_model_id(neuronspi_probe_count);
}
- spin_unlock(neuronspi_probe_spinlock);
+ spin_unlock_irqrestore(neuronspi_probe_spinlock, flags);
if (neuronspi_model_id != -1) {
printk(KERN_INFO "NEURONSPI: Detected Neuron board combination corresponding to %s\n", NEURONSPI_MODELTABLE[neuronspi_model_id].model_name);
}
int read_length;
ssize_t ret = 0;
u16 val = 0;
+ unsigned long flags;
struct neuronspi_driver_data *n_spi;
struct spi_device *spi;
struct platform_device *plat = to_platform_device(dev);
n_spi = platform_get_drvdata(plat);
spi = neuronspi_s_dev[n_spi->neuron_index];
if (n_spi && n_spi->reg_map) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
read_length = neuronspi_spi_compose_single_register_read(n_spi->sysfs_register_target, &inp_buf, &outp_buf);
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
neuronspi_spi_send_message(spi, inp_buf, outp_buf, read_length, n_spi->ideal_frequency, 125, 1, 0);
memcpy(&val, &outp_buf[NEURONSPI_HEADER_LENGTH], sizeof(u16));
ret = scnprintf(buf, 255, "%x\n", (u32)val);
{
ssize_t err = 0;
unsigned int val = 0;
+ unsigned long flags;
struct neuronspi_driver_data *n_spi;
struct platform_device *plat = to_platform_device(dev);
n_spi = platform_get_drvdata(plat);
err = kstrtouint(buf, 0, &val);
if (err < 0) goto err_end;
if (n_spi && n_spi->reg_map && val < 65536) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
n_spi->sysfs_register_target = val;
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
}
err_end:
return count;
int write_length;
ssize_t err = 0;
unsigned int val = 0;
+ unsigned long flags;
struct neuronspi_driver_data *n_spi;
struct spi_device *spi;
struct platform_device *plat = to_platform_device(dev);
err = kstrtouint(buf, 0, &val);
if (err < 0) goto err_end;
if (n_spi && n_spi->reg_map && val < 65536) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
write_length = neuronspi_spi_compose_single_register_read(n_spi->sysfs_register_target, &inp_buf, &outp_buf);
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
neuronspi_spi_send_message(spi, inp_buf, outp_buf, write_length, n_spi->ideal_frequency, 125, 1, 0);
}
err_end:
{
ssize_t ret = 0;
u32 val = 0;
+ unsigned long flags;
struct neuronspi_driver_data *n_spi;
struct spi_device *spi;
struct platform_device *plat = to_platform_device(dev);
n_spi = platform_get_drvdata(plat);
spi = neuronspi_s_dev[n_spi->neuron_index];
if (n_spi && n_spi->reg_map) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
regmap_read(n_spi->reg_map, n_spi->sysfs_regmap_target, &val);
ret = scnprintf(buf, 255, "%x\n", val);
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
}
return ret;
}
{
ssize_t err = 0;
unsigned int val = 0;
+ unsigned long flags;
struct neuronspi_driver_data *n_spi;
struct platform_device *plat = to_platform_device(dev);
n_spi = platform_get_drvdata(plat);
err = kstrtouint(buf, 0, &val);
if (err < 0) goto err_end;
if (n_spi && n_spi->reg_map && val < 65536) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
n_spi->sysfs_regmap_target = val;
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
}
err_end:
return count;
{
ssize_t err = 0;
unsigned int val = 0;
+ unsigned long flags;
struct neuronspi_driver_data *n_spi;
struct platform_device *plat = to_platform_device(dev);
n_spi = platform_get_drvdata(plat);
err = kstrtouint(buf, 0, &val);
if (err < 0) goto err_end;
if (n_spi && n_spi->reg_map && val < 65536) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
regmap_write(n_spi->reg_map, n_spi->sysfs_regmap_target, val);
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
}
err_end:
return count;
static ssize_t neuronspi_spi_gpio_show_di_count(struct device *dev, struct device_attribute *attr, char *buf)
{
ssize_t ret = 0;
+ unsigned long flags;
struct neuronspi_di_driver *n_di;
struct neuronspi_driver_data *n_spi;
struct platform_device *plat = to_platform_device(dev);
n_di = platform_get_drvdata(plat);
n_spi = spi_get_drvdata(n_di->spi);
if (n_spi->features && n_spi->features->di_count > 0 && n_spi->di_driver) {
- spin_lock(&n_spi->sysfs_regmap_lock);
+ spin_lock_irqsave(&n_spi->sysfs_regmap_lock, flags);
ret = scnprintf(buf, 255, "%d\n", n_spi->di_driver[n_di->di_index]->gpio_c.ngpio);
- spin_unlock(&n_spi->sysfs_regmap_lock);
+ spin_unlock_irqrestore(&n_spi->sysfs_regmap_lock, flags);
}
return ret;
}
void neuronspi_uart_handle_tx(struct neuronspi_port *port)
{
u32 max_txlen, to_send, to_send_packet, i;
+ unsigned long flags;
struct spi_device *spi;
struct neuronspi_driver_data *d_data;
struct circ_buf *xmit;
spi = neuronspi_s_dev[port->dev_index];
d_data = spi_get_drvdata(spi);
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
xmit = &port->port.state->xmit;
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
if (unlikely(port->port.x_char)) {
neuronspi_spi_uart_write(spi, &port->port.x_char, 1, port->dev_port);
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
port->port.icount.tx++;
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
port->port.x_char = 0;
- spin_lock(&port->tx_lock);
+ spin_lock_irqsave(&port->tx_lock, flags);
port->tx_work_count--;
- spin_unlock(&port->tx_lock);
+ spin_unlock_irqrestore(&port->tx_lock, flags);
return;
}
if (uart_circ_empty(xmit) || uart_tx_stopped(&port->port)) {
- spin_lock(&port->tx_lock);
+ spin_lock_irqsave(&port->tx_lock, flags);
port->tx_work_count--;
- spin_unlock(&port->tx_lock);
+ spin_unlock_irqrestore(&port->tx_lock, flags);
return;
}
/* Get length of data pending in circular buffer */
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
to_send = uart_circ_chars_pending(xmit);
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
printk(KERN_INFO "NEURONSPI UART_HANDLE_TX A, to_send:%d, tx_work_count:%d\n", to_send, port->tx_work_count);
if (likely(to_send)) {
/* Limit to size of (TX FIFO / 2) */
to_send_packet = (to_send > max_txlen) ? max_txlen : to_send;
/* Add data to send */
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
port->port.icount.tx += to_send_packet;
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
/* Convert to linear buffer */
for (i = 0; i < to_send_packet; ++i) {
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
port->buf[i] = xmit->buf[xmit->tail];
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
}
printk(KERN_INFO "NEURONSPI UART_HANDLE_TX B, to_send:%d, tx_work_count:%d\n", to_send_packet, port->tx_work_count);
neuronspi_uart_fifo_write(port, to_send_packet);
to_send = (to_send > NEURONSPI_FIFO_SIZE - NEURONSPI_FIFO_MIN_CONTINUOUS) ? NEURONSPI_FIFO_SIZE - NEURONSPI_FIFO_MIN_CONTINUOUS : to_send;
/* Add data to send */
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
port->port.icount.tx += to_send;
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
/* Convert to linear buffer */
for (i = 0; i < to_send; ++i) {
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
port->buf[i] = xmit->buf[xmit->tail];
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE - 1);
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
}
printk(KERN_INFO "NEURONSPI UART_HANDLE_TX C, to_send:%d, tx_work_count:%d\n", to_send, port->tx_work_count);
neuronspi_uart_fifo_write(port, to_send);
}
- spin_lock(&port->tx_lock);
+ spin_lock_irqsave(&port->tx_lock, flags);
port->tx_work_count--;
- spin_unlock(&port->tx_lock);
+ spin_unlock_irqrestore(&port->tx_lock, flags);
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS) {
- spin_lock(&port->port.lock);
+ spin_lock_irqsave(&port->port.lock, flags);
uart_write_wakeup(&port->port);
- spin_unlock(&port->port.lock);
+ spin_unlock_irqrestore(&port->port.lock, flags);
}
}
void neuronspi_uart_start_tx(struct uart_port *port)
{
struct neuronspi_port *n_port = to_neuronspi_port(port,port);
+ unsigned long flags;
#if NEURONSPI_DETAILED_DEBUG > 0
printk(KERN_INFO "NEURONSPI: Start TX\n");
#endif
- spin_lock(&n_port->tx_lock);
+ spin_lock_irqsave(&n_port->tx_lock, flags);
if (n_port->tx_work_count > NEURONSPI_MAX_TX_WORK) {
spin_unlock(&n_port->tx_lock);
printk(KERN_INFO "NEURONSPI: TX WORK OVERFLOW\n");
} else {
n_port->tx_work_count++;
}
- spin_unlock(&n_port->tx_lock);
+ spin_unlock_irqrestore(&n_port->tx_lock, flags);
kthread_queue_work(&n_port->parent->kworker, &n_port->tx_work);
}
-Repository:neuron-kernel ActiveBranch:[uart_timeout] PrecedingRelease:v.0.12 PrecedingRevision:64(a816c68) LatestCommit:Wed Jun 27 14:59:12 CEST 2018
+Repository:neuron-kernel ActiveBranch:[uart_timeout] PrecedingRelease:v.0.12 PrecedingRevision:65(9168070) LatestCommit:Wed Jun 27 15:24:18 CEST 2018