On Sun, Jan 30, 2022 at 03:57:26PM +1300, Paulo Miguel Almeida wrote: > @@ -1102,12 +1104,75 @@ static const struct file_operations pi433_fops = { > .llseek = no_llseek, > }; > > +static int pi433_debugfs_regs_show(struct seq_file *m, void *p) > +{ > + struct pi433_device *dev; > + u8 reg_data[114]; > + int i; > + char *fmt = "0x%02x, 0x%02x\n"; > + int ret = 0; No need to initialize. Bogus initializers just disable ten thousand person hours spent developing static analysis. > + > + dev = m->private; > + > + mutex_lock(&dev->tx_fifo_lock); > + mutex_lock(&dev->rx_lock); > + > + // wait for on-going operations to finish > + ret = wait_event_interruptible(dev->rx_wait_queue, !dev->tx_active); > + if (ret) > + return ret; Drop the two mutexes before returning. > + > + ret = wait_event_interruptible(dev->tx_wait_queue, !dev->rx_active); > + if (ret) > + return ret; Drop the mutexes. > + > + // skip FIFO register (0x0) otherwise this can affect some of uC ops > + for (i = 1; i < 0x50; i++) > + reg_data[i] = rf69_read_reg(dev->spi, i); > + > + reg_data[REG_TESTLNA] = rf69_read_reg(dev->spi, REG_TESTLNA); > + reg_data[REG_TESTPA1] = rf69_read_reg(dev->spi, REG_TESTPA1); > + reg_data[REG_TESTPA2] = rf69_read_reg(dev->spi, REG_TESTPA2); > + reg_data[REG_TESTDAGC] = rf69_read_reg(dev->spi, REG_TESTDAGC); > + reg_data[REG_TESTAFC] = rf69_read_reg(dev->spi, REG_TESTAFC); > + > + seq_puts(m, "# reg, val\n"); > + > + for (i = 1; i < 0x50; i++) > + seq_printf(m, fmt, i, reg_data[i]); > + > + seq_printf(m, fmt, REG_TESTLNA, reg_data[REG_TESTLNA]); > + seq_printf(m, fmt, REG_TESTPA1, reg_data[REG_TESTPA1]); > + seq_printf(m, fmt, REG_TESTPA2, reg_data[REG_TESTPA2]); > + seq_printf(m, fmt, REG_TESTDAGC, reg_data[REG_TESTDAGC]); > + seq_printf(m, fmt, REG_TESTAFC, reg_data[REG_TESTAFC]); > + > + mutex_unlock(&dev->rx_lock); > + mutex_unlock(&dev->tx_fifo_lock); > + > + return ret; > +} regards, dan carpenter