Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  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
 54struct 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 */