It actually works like this:

```rust
use embedded_hal::spi::Mode;

// these are all the available definitions:
use super::{bisync, only_async, only_sync};

#[only_async]
use embedded_hal_async::spi::SpiDevice;
#[only_sync]
use embedded_hal::spi::SpiDevice;

use crate::*;

/// SPI mode
pub const MODE: Mode = embedded_hal::spi::MODE_3;

const READ: u8 = 1 << 7;
const WRITE: u8 = 0 << 7;
const MULTI: u8 = 1 << 6;
const SINGLE: u8 = 0 << 6;

/// L3GD20 driver
pub struct L3gd20<Spi> {
    spi: Spi,
}

#[bisync]
impl<Spi: SpiDevice> L3gd20<Spi> {
    /// Creates a new driver from a SPI peripheral and a NCS pin
    ...
}
```