Simplify the SPI driver.
This commit is contained in:
+45
-1
@@ -12,6 +12,9 @@
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
/*
|
||||
* User-level interface to the SPI port.
|
||||
*/
|
||||
#define SPICTL_SETMODE _IO ('p', 0) /* set SPI mode */
|
||||
#define SPICTL_SETRATE _IO ('p', 1) /* set clock rate, kHz */
|
||||
#define SPICTL_SETSELPIN _IO ('p', 2) /* set select pin */
|
||||
@@ -35,13 +38,54 @@
|
||||
#ifdef KERNEL
|
||||
#include "conf.h"
|
||||
|
||||
extern const struct devspec spidevs[];
|
||||
/*
|
||||
* Kernel-level interface to the SPI port.
|
||||
*/
|
||||
struct spiio {
|
||||
struct spireg *bus;
|
||||
unsigned int *cs_tris;
|
||||
unsigned int cs_pin;
|
||||
unsigned int baud;
|
||||
unsigned int mode;
|
||||
};
|
||||
|
||||
extern int spi_setup(struct spiio *io, int channel, unsigned int *tris, unsigned int pin);
|
||||
extern void spi_set_cspin(struct spiio *io, unsigned int *tris, unsigned int pin);
|
||||
extern void spi_select(struct spiio *io);
|
||||
extern void spi_deselect(struct spiio *io);
|
||||
extern void spi_set(struct spiio *io, unsigned int set);
|
||||
extern void spi_clr(struct spiio *io, unsigned int set);
|
||||
extern unsigned int spi_status(struct spiio *io);
|
||||
extern unsigned char spi_transfer(struct spiio *io, unsigned char data);
|
||||
extern void spi_bulk_write_32_be(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_write_32(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_write_16(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_write(struct spiio *io, unsigned int len, unsigned char *data);
|
||||
extern void spi_bulk_read_32_be(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_read_32(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_read_16(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_read(struct spiio *io, unsigned int len, unsigned char *data);
|
||||
extern void spi_bulk_rw_32_be(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_rw_32(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_rw_16(struct spiio *io, unsigned int len, char *data);
|
||||
extern void spi_bulk_rw(struct spiio *io, unsigned int len, unsigned char *data);
|
||||
extern void spi_brg(struct spiio *io, unsigned int baud);
|
||||
extern char *spi_name(struct spiio *io);
|
||||
extern char spi_csname(struct spiio *io);
|
||||
extern int spi_cspin(struct spiio *io);
|
||||
extern unsigned int spi_get_brg(struct spiio *io);
|
||||
|
||||
/*
|
||||
* Routines of the SPI device driver.
|
||||
*/
|
||||
int spidev_open (dev_t dev, int flag, int mode);
|
||||
int spidev_close (dev_t dev, int flag, int mode);
|
||||
int spidev_read (dev_t dev, struct uio *uio, int flag);
|
||||
int spidev_write (dev_t dev, struct uio *uio, int flag);
|
||||
int spidev_ioctl (dev_t dev, u_int cmd, caddr_t addr, int flag);
|
||||
|
||||
extern const struct devspec spidevs[];
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
#ifndef _SPI_BUS_H
|
||||
#define _SPI_BUS_H
|
||||
|
||||
#ifdef KERNEL
|
||||
|
||||
struct spireg {
|
||||
volatile unsigned con; /* Control */
|
||||
volatile unsigned conclr;
|
||||
volatile unsigned conset;
|
||||
volatile unsigned coninv;
|
||||
volatile unsigned stat; /* Status */
|
||||
volatile unsigned statclr;
|
||||
volatile unsigned statset;
|
||||
volatile unsigned statinv;
|
||||
volatile unsigned buf; /* Transmit and receive buffer */
|
||||
volatile unsigned unused1;
|
||||
volatile unsigned unused2;
|
||||
volatile unsigned unused3;
|
||||
volatile unsigned brg; /* Baud rate generator */
|
||||
volatile unsigned brgclr;
|
||||
volatile unsigned brgset;
|
||||
volatile unsigned brginv;
|
||||
};
|
||||
|
||||
struct spi_dev {
|
||||
struct spireg *bus;
|
||||
unsigned int *cs_tris;
|
||||
unsigned int cs_pin;
|
||||
unsigned int baud;
|
||||
unsigned int mode;
|
||||
};
|
||||
|
||||
extern int spi_open(unsigned int bus, unsigned int *tris, unsigned int pin);
|
||||
extern void spi_close(int dno);
|
||||
extern void spi_set_cspin(int dno, unsigned int *tris, unsigned int pin);
|
||||
extern void spi_select(int dno);
|
||||
extern void spi_deselect(int dno);
|
||||
extern void spi_set(int dno, unsigned int set);
|
||||
extern void spi_clr(int dno, unsigned int set);
|
||||
extern unsigned int spi_status(int dno);
|
||||
extern unsigned char spi_transfer(int dno, unsigned char data);
|
||||
extern void spi_bulk_write_32_be(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_write_32(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_write_16(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_write(int dno, unsigned int len, unsigned char *data);
|
||||
extern void spi_bulk_read_32_be(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_read_32(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_read_16(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_read(int dno, unsigned int len, unsigned char *data);
|
||||
extern void spi_bulk_rw_32_be(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_rw_32(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_rw_16(int dno, unsigned int len, char *data);
|
||||
extern void spi_bulk_rw(int dno, unsigned int len, unsigned char *data);
|
||||
extern void spi_brg(int dno, unsigned int baud);
|
||||
extern char *spi_name(int dno);
|
||||
extern char spi_csname(int dno);
|
||||
extern int spi_cspin(int dno);
|
||||
extern unsigned int spi_get_brg(int dno);
|
||||
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user