Compare commits
1 commit
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
103c23866b |
1 changed files with 8 additions and 3 deletions
11
spi_boards.c
11
spi_boards.c
|
|
@ -83,7 +83,7 @@ static int spi_board_close(board_t *board) {
|
||||||
|
|
||||||
int spi_boards_init(board_access_t *access) {
|
int spi_boards_init(board_access_t *access) {
|
||||||
settings.speed_hz = 8 * 1000 * 1000;
|
settings.speed_hz = 8 * 1000 * 1000;
|
||||||
settings.bits_per_word = 32;
|
settings.bits_per_word = 8;
|
||||||
|
|
||||||
sd = open(access->dev_addr, O_RDWR);
|
sd = open(access->dev_addr, O_RDWR);
|
||||||
if(sd == -1) {
|
if(sd == -1) {
|
||||||
|
|
@ -92,7 +92,7 @@ int spi_boards_init(board_access_t *access) {
|
||||||
}
|
}
|
||||||
spidev_set_lsb_first(sd, false);
|
spidev_set_lsb_first(sd, false);
|
||||||
spidev_set_mode(sd, 0);
|
spidev_set_mode(sd, 0);
|
||||||
spidev_set_bits_per_word(sd, 32);
|
spidev_set_bits_per_word(sd, 8);
|
||||||
spidev_set_max_speed_hz(sd, settings.speed_hz);
|
spidev_set_max_speed_hz(sd, settings.speed_hz);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
@ -105,7 +105,7 @@ void spi_boards_cleanup(board_access_t *access) {
|
||||||
int spi_read(llio_t *self, u32 addr, void *buffer, int size) {
|
int spi_read(llio_t *self, u32 addr, void *buffer, int size) {
|
||||||
if(size % 4 != 0) return -1;
|
if(size % 4 != 0) return -1;
|
||||||
u32 trxbuf[1+size/4];
|
u32 trxbuf[1+size/4];
|
||||||
trxbuf[0] = read_command(addr, size/4);
|
trxbuf[0] = htobe32(read_command(addr, size));
|
||||||
memset(trxbuf+1, 0, size);
|
memset(trxbuf+1, 0, size);
|
||||||
|
|
||||||
struct spi_ioc_transfer t;
|
struct spi_ioc_transfer t;
|
||||||
|
|
@ -116,6 +116,10 @@ int spi_read(llio_t *self, u32 addr, void *buffer, int size) {
|
||||||
int r = ioctl(sd, SPI_IOC_MESSAGE(1), &t);
|
int r = ioctl(sd, SPI_IOC_MESSAGE(1), &t);
|
||||||
if(r < 0) return r;
|
if(r < 0) return r;
|
||||||
|
|
||||||
|
usleep(1000);
|
||||||
|
int i;
|
||||||
|
for(i=0; i<size/4; i++)
|
||||||
|
trxbuf[i+1] = be32toh(trxbuf[i+1]);
|
||||||
memcpy(buffer, trxbuf+1, size);
|
memcpy(buffer, trxbuf+1, size);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -132,6 +136,7 @@ int spi_write(llio_t *self, u32 addr, void *buffer, int size) {
|
||||||
t.len = sizeof(txbuf);
|
t.len = sizeof(txbuf);
|
||||||
|
|
||||||
int r = ioctl(sd, SPI_IOC_MESSAGE(1), &t);
|
int r = ioctl(sd, SPI_IOC_MESSAGE(1), &t);
|
||||||
|
usleep(1000);
|
||||||
if(r <= 0) return r;
|
if(r <= 0) return r;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue