You would edit the file drivers/spi/spi-rspi.c
Then, you would make the following changes:
#include <linux/spinlock.h>
|
static int rspi_wait_for_interrupt(struct rspi_data *rspi, u8 wait_mask,
u8 enable_bit)
{
#ifdef DISABLE_IRQ_TEST
while(1)
{
rspi->spsr = rspi_read8(rspi, RSPI_SPSR);
if (rspi->spsr & wait_mask)
return 0;
}
#else
int ret;
rspi->spsr = rspi_read8(rspi, RSPI_SPSR);
if (rspi->spsr & wait_mask)
return 0;
rspi_enable_irq(rspi, enable_bit);
ret = wait_event_timeout(rspi->wait, rspi->spsr & wait_mask, HZ);
if (ret == 0 && !(rspi->spsr & wait_mask))
return -ETIMEDOUT;
return 0;
#endif
}
|
#ifdef DISABLE_IRQ_TEST
static DEFINE_SPINLOCK(rspi_lock);
#endif
static int rspi_rz_transfer_one(struct spi_master *master,
struct spi_device *spi,
struct spi_transfer *xfer)
{
struct rspi_data *rspi = spi_master_get_devdata(master);
int ret;
#ifdef DISABLE_IRQ_TEST
unsigned long flags;
#endif
#ifdef DISABLE_IRQ_TEST
spin_lock_irqsave(&rspi_lock, flags);
#endif
rspi_rz_receive_init(rspi);
// return rspi_common_transfer(rspi, xfer);
ret = rspi_common_transfer(rspi, xfer);
#ifdef DISABLE_IRQ_TEST
spin_unlock_irqrestore(&rspi_lock, flags);
#endif
return ret;
}
|