partial change, need to initialize spi_data first, add spinlock etc