ifx6x60: SPI protocol driver for Infineon 6x60 modem
Prototype driver for the IFX6x60 series of SPI attached modems by Jim Stanley and Russ Gorby Signed-off-by: Russ Gorby <richardx.r.gorby@intel.com> [Some reworking and a major cleanup] Signed-off-by: Alan Cox <alan@linux.intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
a7bcf21e60
commit
af3b8881f4
|
@ -1632,4 +1632,10 @@ config SERIAL_ALTERA_UART_CONSOLE
|
||||||
help
|
help
|
||||||
Enable a Altera UART port to be the system console.
|
Enable a Altera UART port to be the system console.
|
||||||
|
|
||||||
|
config SERIAL_IFX6X60
|
||||||
|
tristate "SPI protocol driver for Infineon 6x60 modem (EXPERIMENTAL)"
|
||||||
|
depends on GPIOLIB && EXPERIMENTAL
|
||||||
|
help
|
||||||
|
Support for the IFX6x60 modem devices on Intel MID platforms.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
|
@ -89,3 +89,4 @@ obj-$(CONFIG_SERIAL_ALTERA_UART) += altera_uart.o
|
||||||
obj-$(CONFIG_SERIAL_MRST_MAX3110) += mrst_max3110.o
|
obj-$(CONFIG_SERIAL_MRST_MAX3110) += mrst_max3110.o
|
||||||
obj-$(CONFIG_SERIAL_MFD_HSU) += mfd.o
|
obj-$(CONFIG_SERIAL_MFD_HSU) += mfd.o
|
||||||
obj-$(CONFIG_SERIAL_OMAP) += omap-serial.o
|
obj-$(CONFIG_SERIAL_OMAP) += omap-serial.o
|
||||||
|
obj-$(CONFIG_SERIAL_IFX6X60) += ifx6x60.o
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,129 @@
|
||||||
|
/****************************************************************************
|
||||||
|
*
|
||||||
|
* Driver for the IFX spi modem.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009, 2010 Intel Corp
|
||||||
|
* Jim Stanley <jim.stanley@intel.com>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
|
||||||
|
* USA
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
#ifndef _IFX6X60_H
|
||||||
|
#define _IFX6X60_H
|
||||||
|
|
||||||
|
#define DRVNAME "ifx6x60"
|
||||||
|
#define TTYNAME "ttyIFX"
|
||||||
|
|
||||||
|
/* #define IFX_THROTTLE_CODE */
|
||||||
|
|
||||||
|
#define IFX_SPI_MAX_MINORS 1
|
||||||
|
#define IFX_SPI_TRANSFER_SIZE 2048
|
||||||
|
#define IFX_SPI_FIFO_SIZE 4096
|
||||||
|
|
||||||
|
#define IFX_SPI_HEADER_OVERHEAD 4
|
||||||
|
#define IFX_RESET_TIMEOUT msecs_to_jiffies(50)
|
||||||
|
|
||||||
|
/* device flags bitfield definitions */
|
||||||
|
#define IFX_SPI_STATE_PRESENT 0
|
||||||
|
#define IFX_SPI_STATE_IO_IN_PROGRESS 1
|
||||||
|
#define IFX_SPI_STATE_IO_READY 2
|
||||||
|
#define IFX_SPI_STATE_TIMER_PENDING 3
|
||||||
|
|
||||||
|
/* flow control bitfields */
|
||||||
|
#define IFX_SPI_DCD 0
|
||||||
|
#define IFX_SPI_CTS 1
|
||||||
|
#define IFX_SPI_DSR 2
|
||||||
|
#define IFX_SPI_RI 3
|
||||||
|
#define IFX_SPI_DTR 4
|
||||||
|
#define IFX_SPI_RTS 5
|
||||||
|
#define IFX_SPI_TX_FC 6
|
||||||
|
#define IFX_SPI_RX_FC 7
|
||||||
|
#define IFX_SPI_UPDATE 8
|
||||||
|
|
||||||
|
#define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \
|
||||||
|
IFX_SPI_HEADER_OVERHEAD)
|
||||||
|
|
||||||
|
#define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING
|
||||||
|
#define IFX_SPI_GPIO_TARGET 0
|
||||||
|
#define IFX_SPI_GPIO0 0x105
|
||||||
|
|
||||||
|
#define IFX_SPI_STATUS_TIMEOUT (2000*HZ)
|
||||||
|
|
||||||
|
/* values for bits in power status byte */
|
||||||
|
#define IFX_SPI_POWER_DATA_PENDING 1
|
||||||
|
#define IFX_SPI_POWER_SRDY 2
|
||||||
|
|
||||||
|
struct ifx_spi_device {
|
||||||
|
/* Our SPI device */
|
||||||
|
struct spi_device *spi_dev;
|
||||||
|
|
||||||
|
/* Port specific data */
|
||||||
|
struct kfifo tx_fifo;
|
||||||
|
spinlock_t fifo_lock;
|
||||||
|
unsigned long signal_state;
|
||||||
|
|
||||||
|
/* TTY Layer logic */
|
||||||
|
struct tty_port tty_port;
|
||||||
|
struct device *tty_dev;
|
||||||
|
int minor;
|
||||||
|
|
||||||
|
/* Low level I/O work */
|
||||||
|
struct tasklet_struct io_work_tasklet;
|
||||||
|
unsigned long flags;
|
||||||
|
dma_addr_t rx_dma;
|
||||||
|
dma_addr_t tx_dma;
|
||||||
|
|
||||||
|
int is_6160; /* Modem type */
|
||||||
|
|
||||||
|
spinlock_t write_lock;
|
||||||
|
int write_pending;
|
||||||
|
spinlock_t power_lock;
|
||||||
|
unsigned char power_status;
|
||||||
|
|
||||||
|
unsigned char *rx_buffer;
|
||||||
|
unsigned char *tx_buffer;
|
||||||
|
dma_addr_t rx_bus;
|
||||||
|
dma_addr_t tx_bus;
|
||||||
|
unsigned char spi_more;
|
||||||
|
unsigned char spi_slave_cts;
|
||||||
|
|
||||||
|
struct timer_list spi_timer;
|
||||||
|
|
||||||
|
struct spi_message spi_msg;
|
||||||
|
struct spi_transfer spi_xfer;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
/* gpio lines */
|
||||||
|
unsigned short srdy; /* slave-ready gpio */
|
||||||
|
unsigned short mrdy; /* master-ready gpio */
|
||||||
|
unsigned short reset; /* modem-reset gpio */
|
||||||
|
unsigned short po; /* modem-on gpio */
|
||||||
|
unsigned short reset_out; /* modem-in-reset gpio */
|
||||||
|
/* state/stats */
|
||||||
|
int unack_srdy_int_nb;
|
||||||
|
} gpio;
|
||||||
|
|
||||||
|
/* modem reset */
|
||||||
|
unsigned long mdm_reset_state;
|
||||||
|
#define MR_START 0
|
||||||
|
#define MR_INPROGRESS 1
|
||||||
|
#define MR_COMPLETE 2
|
||||||
|
wait_queue_head_t mdm_reset_wait;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _IFX6X60_H */
|
|
@ -0,0 +1,14 @@
|
||||||
|
#ifndef LINUX_IFX_MODEM_H
|
||||||
|
#define LINUX_IFX_MODEM_H
|
||||||
|
|
||||||
|
struct ifx_modem_platform_data {
|
||||||
|
unsigned short rst_out; /* modem reset out */
|
||||||
|
unsigned short pwr_on; /* power on */
|
||||||
|
unsigned short rst_pmu; /* reset modem */
|
||||||
|
unsigned short tx_pwr; /* modem power threshold */
|
||||||
|
unsigned short srdy; /* SRDY */
|
||||||
|
unsigned short mrdy; /* MRDY */
|
||||||
|
unsigned short is_6160; /* Modem type */
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue