1/**************************************************************************** 2 * 3 * Driver for the IFX spi modem. 4 * 5 * Copyright (C) 2009, 2010 Intel Corp 6 * Jim Stanley <jim.stanley@intel.com> 7 * 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, 21 * USA 22 * 23 * 24 * 25 *****************************************************************************/ 26#ifndef _IFX6X60_H 27#define _IFX6X60_H 28 29#define DRVNAME "ifx6x60" 30#define TTYNAME "ttyIFX" 31 32#define IFX_SPI_MAX_MINORS 1 33#define IFX_SPI_TRANSFER_SIZE 2048 34#define IFX_SPI_FIFO_SIZE 4096 35 36#define IFX_SPI_HEADER_OVERHEAD 4 37#define IFX_RESET_TIMEOUT msecs_to_jiffies(50) 38 39/* device flags bitfield definitions */ 40#define IFX_SPI_STATE_PRESENT 0 41#define IFX_SPI_STATE_IO_IN_PROGRESS 1 42#define IFX_SPI_STATE_IO_READY 2 43#define IFX_SPI_STATE_TIMER_PENDING 3 44#define IFX_SPI_STATE_IO_AVAILABLE 4 45 46/* flow control bitfields */ 47#define IFX_SPI_DCD 0 48#define IFX_SPI_CTS 1 49#define IFX_SPI_DSR 2 50#define IFX_SPI_RI 3 51#define IFX_SPI_DTR 4 52#define IFX_SPI_RTS 5 53#define IFX_SPI_TX_FC 6 54#define IFX_SPI_RX_FC 7 55#define IFX_SPI_UPDATE 8 56 57#define IFX_SPI_PAYLOAD_SIZE (IFX_SPI_TRANSFER_SIZE - \ 58 IFX_SPI_HEADER_OVERHEAD) 59 60#define IFX_SPI_IRQ_TYPE DETECT_EDGE_RISING 61#define IFX_SPI_GPIO_TARGET 0 62#define IFX_SPI_GPIO0 0x105 63 64#define IFX_SPI_STATUS_TIMEOUT (2000*HZ) 65 66/* values for bits in power status byte */ 67#define IFX_SPI_POWER_DATA_PENDING 1 68#define IFX_SPI_POWER_SRDY 2 69 70struct ifx_spi_device { 71 /* Our SPI device */ 72 struct spi_device *spi_dev; 73 74 /* Port specific data */ 75 struct kfifo tx_fifo; 76 spinlock_t fifo_lock; 77 unsigned long signal_state; 78 79 /* TTY Layer logic */ 80 struct tty_port tty_port; 81 struct device *tty_dev; 82 int minor; 83 84 /* Low level I/O work */ 85 struct tasklet_struct io_work_tasklet; 86 unsigned long flags; 87 dma_addr_t rx_dma; 88 dma_addr_t tx_dma; 89 90 int modem; /* Modem type */ 91 int use_dma; /* provide dma-able addrs in SPI msg */ 92 long max_hz; /* max SPI frequency */ 93 94 spinlock_t write_lock; 95 int write_pending; 96 spinlock_t power_lock; 97 unsigned char power_status; 98 99 unsigned char *rx_buffer; 100 unsigned char *tx_buffer; 101 dma_addr_t rx_bus; 102 dma_addr_t tx_bus; 103 unsigned char spi_more; 104 unsigned char spi_slave_cts; 105 106 struct timer_list spi_timer; 107 108 struct spi_message spi_msg; 109 struct spi_transfer spi_xfer; 110 111 struct { 112 /* gpio lines */ 113 unsigned short srdy; /* slave-ready gpio */ 114 unsigned short mrdy; /* master-ready gpio */ 115 unsigned short reset; /* modem-reset gpio */ 116 unsigned short po; /* modem-on gpio */ 117 unsigned short reset_out; /* modem-in-reset gpio */ 118 /* state/stats */ 119 int unack_srdy_int_nb; 120 } gpio; 121 122 /* modem reset */ 123 unsigned long mdm_reset_state; 124#define MR_START 0 125#define MR_INPROGRESS 1 126#define MR_COMPLETE 2 127 wait_queue_head_t mdm_reset_wait; 128 void (*swap_buf)(unsigned char *buf, int len, void *end); 129}; 130 131#endif /* _IFX6X60_H */ 132