aboutsummaryrefslogtreecommitdiff
path: root/include/linux/intel_mid_i2s_if.h
blob: a8625f525f2130178bb0c38da60aede670512513 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
 * <Driver for I2S protocol on SSP (Moorestown and Medfield hardware)>
 * Copyright (c) 2010, Intel Corporation.
 * Louis LE GALL <louis.le.gall intel.com>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope 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 St - Fifth Floor, Boston, MA 02110-1301 USA.
 */

#ifndef MID_I2S_IF_H_
#define MID_I2S_IF_H_

#include <linux/types.h>

#include <linux/intel_mid_i2s_common.h>
#include <linux/intel_mid_dma.h>

#ifdef CONFIG_SND_INTEL_MID_I2S_ENABLE_LLI
#define _LLI_ENABLED_
#endif /* CONFIG_SND_INTEL_MID_I2S_ENABLE_LLI */

enum intel_mid_i2s_ssp_usage {
	SSP_USAGE_UNASSIGNED = 0x00,
	SSP_USAGE_BLUETOOTH_FM = 0x01,
	SSP_USAGE_MODEM = 0x02,

	SSP_USAGE_COUNT = 0x03
};

enum intel_mid_i2s_ssp_cmd {
	SSP_CMD_UNASSIGNED = 0x00,
	SSP_CMD_SET_HW_CONFIG = 0x01,
	SSP_CMD_ENABLE_SSP = 0x02,
	SSP_CMD_DISABLE_SSP = 0x03,
	SSP_CMD_ALLOC_TX = 0x04,
	SSP_CMD_FREE_TX = 0x05,
	SSP_CMD_ALLOC_RX = 0x06,
	SSP_CMD_FREE_RX = 0x07,
	SSP_CMD_ABORT = 0x08,
#ifdef _LLI_ENABLED_
	SSP_CMD_ENABLE_DMA_RX_INTR = 0x09,
	SSP_CMD_ENABLE_DMA_TX_INTR = 0x0A,
	SSP_CMD_DISABLE_DMA_RX_INTR = 0x0B,
	SSP_CMD_DISABLE_DMA_TX_INTR = 0x0C,
#endif /* _LLI_ENABLED_ */

	SSP_CMD_COUNT = 0x0D
};

struct intel_mid_i2s_lli {
	u32 *addr;
	u32 leng;
};
enum i2s_lli_mode {
	I2S_NON_CIRCULAR_MODE,
	I2S_CIRCULAR_MODE
};

struct intel_mid_i2s_hdl *intel_mid_i2s_open(
			enum intel_mid_i2s_ssp_usage usage);

void  intel_mid_i2s_close(struct intel_mid_i2s_hdl *handle);

int intel_mid_i2s_rd_req(struct intel_mid_i2s_hdl *handle, u32 *dst,
			size_t len, void *param);
int intel_mid_i2s_wr_req(struct intel_mid_i2s_hdl *handle, u32 *src,
			size_t len, void *param);

int intel_mid_i2s_lli_rd_req(struct intel_mid_i2s_hdl *drv_data,
		struct intel_mid_i2s_lli *lli_array, int lli_length,
		enum i2s_lli_mode lli_mode, void *param);

int intel_mid_i2s_lli_wr_req(struct intel_mid_i2s_hdl *drv_data,
		struct intel_mid_i2s_lli *lli_array, int lli_length,
		enum i2s_lli_mode lli_mode, void *param);


int intel_mid_i2s_set_wr_cb(struct intel_mid_i2s_hdl *handle,
					int (*write_callback)(void *param));
int intel_mid_i2s_set_rd_cb(struct intel_mid_i2s_hdl *handle,
					int (*read_callback)(void *param));

int intel_mid_i2s_command(struct intel_mid_i2s_hdl *drv_data,
			enum intel_mid_i2s_ssp_cmd cmd,
			const struct intel_mid_i2s_settings *hw_ssp_settings);

int intel_mid_i2s_get_tx_fifo_level(struct intel_mid_i2s_hdl *handle);
int intel_mid_i2s_get_rx_fifo_level(struct intel_mid_i2s_hdl *handle);
int intel_mid_i2s_flush(struct intel_mid_i2s_hdl *handle);
void intel_mid_i2s_set_modem_probe_cb(void(*probe_cb)(void));
void intel_mid_i2s_set_modem_remove_cb(void(*remove_cb)(void));

#endif /* MID_I2S_IF_H_ */