144 lines
4.8 KiB
C
144 lines
4.8 KiB
C
/* ------------------------------------------------------------------------- */
|
|
/* */
|
|
/* spi.h - definitions for the spi-bus interface */
|
|
/* */
|
|
/* ------------------------------------------------------------------------- */
|
|
/* Copyright (C) 2006 Samsung Electronics Co. ltd.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
|
/* ------------------------------------------------------------------------- */
|
|
|
|
#ifndef _LINUX_SPI_H
|
|
#define _LINUX_SPI_H
|
|
|
|
#include <linux/module.h>
|
|
#include <linux/types.h>
|
|
#include <linux/device.h> /* for struct device */
|
|
#include <asm/semaphore.h>
|
|
|
|
/* --- General options ------------------------------------------------ */
|
|
|
|
struct spi_msg;
|
|
struct spi_dev;
|
|
struct spi_algorithm;
|
|
|
|
/*
|
|
* The master routines are the ones normally used to transmit data to devices
|
|
* on a bus (or/and read from them). Apart from these basic transfer functions
|
|
* to transmit one message at a time, a more complex version can be used to
|
|
* transmit an arbitrary number of messages without interruption.
|
|
*/
|
|
extern int spi_master_send(struct spi_dev *,char* ,int);
|
|
extern int spi_master_recv(struct spi_dev *,char* ,int);
|
|
|
|
#define SPI_CHANNEL 0
|
|
|
|
/*
|
|
* A driver is capable of handling one or more physical devices present on
|
|
* SPI adapters. This information is used to inform the driver of adapter
|
|
* events.
|
|
*/
|
|
|
|
struct spi_dev {
|
|
int minor;
|
|
/* vivek, 2009-04-13 16:55 Notes: separating dmabufr and dmabufw for gspi_io*/
|
|
|
|
dma_addr_t dmabuf; /* handle for DMA transfer */
|
|
dma_addr_t dmabufr; /* handle for DMA read transfer */
|
|
dma_addr_t dmabufw; /* handle for DMA write transfer */
|
|
unsigned int flags; /* flags for the SPI operation */
|
|
struct semaphore bus_lock; /* semaphore for bus access */
|
|
|
|
struct spi_algorithm *algo; /* the algorithm to access the bus */
|
|
void *algo_data; /* the bus control struct */
|
|
|
|
int timeout;
|
|
int retries;
|
|
struct device dev; /* the adapter device */
|
|
};
|
|
|
|
/*
|
|
* The following structs are for those who like to implement new bus drivers:
|
|
* spi_algorithm is the interface to a class of hardware solutions which can
|
|
* be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
|
|
* to name two of the most common.
|
|
*/
|
|
struct spi_algorithm {
|
|
char name[32]; /* textual description */
|
|
unsigned int id;
|
|
|
|
/* If an adapter algorithm can't to SPI-level access, set master_xfer
|
|
to NULL. If an adapter algorithm can do SMBus access, set
|
|
smbus_xfer. If set to NULL, the SMBus protocol is simulated
|
|
using common SPI messages */
|
|
int (*master_xfer)(struct spi_dev *spi_dev,struct spi_msg *msgs,
|
|
int num);
|
|
|
|
/* --- ioctl like call to set div. parameters. */
|
|
int (*algo_control)(struct spi_dev *, unsigned int, unsigned long);
|
|
|
|
/* To determine what the adapter supports */
|
|
u32 (*functionality) (struct spi_dev *);
|
|
int (*close)(struct spi_dev *spi_dev);
|
|
};
|
|
|
|
/* ----- functions exported by spi.o */
|
|
|
|
/* administration...
|
|
*/
|
|
extern int spi_attach_spidev(struct spi_dev *);
|
|
extern int spi_detach_spidev(struct spi_dev *);
|
|
|
|
extern struct spi_dev *spi_dev_get_by_minor(unsigned index);
|
|
|
|
/*
|
|
* SPI Message - used for pure spi transaction, also from /dev interface
|
|
*/
|
|
|
|
#define SPI_M_MODE_MASTER 0x001
|
|
#define SPI_M_MODE_SLAVE 0x002
|
|
#define SPI_M_USE_FIFO 0x004
|
|
#define SPI_M_CPOL_ACTHIGH 0x010
|
|
#define SPI_M_CPOL_ACTLOW 0x020
|
|
#define SPI_M_CPHA_FORMATA 0x040
|
|
#define SPI_M_CPHA_FORMATB 0x080
|
|
#define SPI_M_DMA_MODE 0x100
|
|
#define SPI_M_INT_MODE 0x200
|
|
#define SPI_M_POLL_MODE 0x400
|
|
#define SPI_M_DEBUG 0x800
|
|
#define SPI_M_FIFO_POLL 0x1000
|
|
|
|
|
|
struct spi_msg {
|
|
__u16 flags;
|
|
__u16 len; /* msg length */
|
|
__u8 *wbuf; /* pointer to msg data to write */
|
|
__u8 *rbuf; /* pointer to msg data for read */
|
|
};
|
|
|
|
/* ----- commands for the ioctl call: */
|
|
/* -> spi-adapter specific ioctls */
|
|
#define SET_SPI_RETRIES 0x0701 /* number of times a device address */
|
|
/* should be polled when not */
|
|
/* acknowledging */
|
|
#define SET_SPI_TIMEOUT 0x0702 /* set timeout - call with int */
|
|
#define SET_SPI_FLAGS 0x0704 /* set flags for h/w settings */
|
|
|
|
#define SPI_MAJOR 153 /* Device major number */
|
|
/* minor 0-15 spi0 - spi15 */
|
|
|
|
#endif /* _LINUX_SPI_H */
|
|
|