• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: GPL-2.0
2 /****************************************************************************
3  *
4  * Driver for the IFX spi modem.
5  *
6  * Copyright (C) 2009, 2010 Intel Corp
7  * Jim Stanley <jim.stanley@intel.com>
8  *
9  *****************************************************************************/
10 #ifndef _IFX6X60_H
11 #define _IFX6X60_H
12 
13 #define DRVNAME				"ifx6x60"
14 #define TTYNAME				"ttyIFX"
15 
16 #define IFX_SPI_MAX_MINORS		1
17 #define IFX_SPI_TRANSFER_SIZE		2048
18 #define IFX_SPI_FIFO_SIZE		4096
19 
20 #define IFX_SPI_HEADER_OVERHEAD		4
21 #define IFX_RESET_TIMEOUT		msecs_to_jiffies(50)
22 
23 /* device flags bitfield definitions */
24 #define IFX_SPI_STATE_PRESENT		0
25 #define IFX_SPI_STATE_IO_IN_PROGRESS	1
26 #define IFX_SPI_STATE_IO_READY		2
27 #define IFX_SPI_STATE_TIMER_PENDING	3
28 #define IFX_SPI_STATE_IO_AVAILABLE	4
29 
30 /* flow control bitfields */
31 #define IFX_SPI_DCD			0
32 #define IFX_SPI_CTS			1
33 #define IFX_SPI_DSR			2
34 #define IFX_SPI_RI			3
35 #define IFX_SPI_DTR			4
36 #define IFX_SPI_RTS			5
37 #define IFX_SPI_TX_FC			6
38 #define IFX_SPI_RX_FC			7
39 #define IFX_SPI_UPDATE			8
40 
41 #define IFX_SPI_PAYLOAD_SIZE		(IFX_SPI_TRANSFER_SIZE - \
42 						IFX_SPI_HEADER_OVERHEAD)
43 
44 #define IFX_SPI_IRQ_TYPE		DETECT_EDGE_RISING
45 #define IFX_SPI_GPIO_TARGET		0
46 #define IFX_SPI_GPIO0			0x105
47 
48 #define IFX_SPI_STATUS_TIMEOUT		(2000*HZ)
49 
50 /* values for bits in power status byte */
51 #define IFX_SPI_POWER_DATA_PENDING	1
52 #define IFX_SPI_POWER_SRDY		2
53 
54 struct ifx_spi_device {
55 	/* Our SPI device */
56 	struct spi_device *spi_dev;
57 
58 	/* Port specific data */
59 	struct kfifo tx_fifo;
60 	spinlock_t fifo_lock;
61 	unsigned long signal_state;
62 
63 	/* TTY Layer logic */
64 	struct tty_port tty_port;
65 	struct device *tty_dev;
66 	int minor;
67 
68 	/* Low level I/O work */
69 	struct tasklet_struct io_work_tasklet;
70 	unsigned long flags;
71 	dma_addr_t rx_dma;
72 	dma_addr_t tx_dma;
73 
74 	int modem;		/* Modem type */
75 	int use_dma;		/* provide dma-able addrs in SPI msg */
76 	long max_hz;		/* max SPI frequency */
77 
78 	spinlock_t write_lock;
79 	int write_pending;
80 	spinlock_t power_lock;
81 	unsigned char power_status;
82 
83 	unsigned char *rx_buffer;
84 	unsigned char *tx_buffer;
85 	dma_addr_t rx_bus;
86 	dma_addr_t tx_bus;
87 	unsigned char spi_more;
88 	unsigned char spi_slave_cts;
89 
90 	struct timer_list spi_timer;
91 
92 	struct spi_message spi_msg;
93 	struct spi_transfer spi_xfer;
94 
95 	struct {
96 		/* gpio lines */
97 		unsigned short srdy;		/* slave-ready gpio */
98 		unsigned short mrdy;		/* master-ready gpio */
99 		unsigned short reset;		/* modem-reset gpio */
100 		unsigned short po;		/* modem-on gpio */
101 		unsigned short reset_out;	/* modem-in-reset gpio */
102 		/* state/stats */
103 		int unack_srdy_int_nb;
104 	} gpio;
105 
106 	/* modem reset */
107 	unsigned long mdm_reset_state;
108 #define MR_START	0
109 #define MR_INPROGRESS	1
110 #define MR_COMPLETE	2
111 	wait_queue_head_t mdm_reset_wait;
112 	void (*swap_buf)(unsigned char *buf, int len, void *end);
113 };
114 
115 #endif /* _IFX6X60_H */
116