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 70 struct 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