6b13f685e
김민수
BSP 최초 추가
|
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
|
#ifndef __USBAUDIO_CARD_H
#define __USBAUDIO_CARD_H
#define MAX_NR_RATES 1024
#define MAX_PACKS 6 /* per URB */
#define MAX_PACKS_HS (MAX_PACKS * 8) /* in high speed mode */
#define MAX_URBS 12
#define SYNC_URBS 4 /* always four urbs for sync */
#define MAX_QUEUE 18 /* try not to exceed this queue length, in ms */
struct audioformat {
struct list_head list;
u64 formats;
unsigned int channels;
unsigned int fmt_type;
unsigned int frame_size;
int iface;
unsigned char altsetting;
unsigned char altset_idx;
unsigned char attributes;
unsigned char endpoint;
unsigned char ep_attr;
unsigned char datainterval;
unsigned char protocol;
unsigned int maxpacksize;
unsigned int rates;
unsigned int rate_min, rate_max;
unsigned int nr_rates;
unsigned int *rate_table;
unsigned char clock;
struct snd_pcm_chmap_elem *chmap;
bool dsd_dop;
bool dsd_bitrev;
};
struct snd_usb_substream;
struct snd_usb_endpoint;
struct snd_urb_ctx {
struct urb *urb;
unsigned int buffer_size;
struct snd_usb_substream *subs;
struct snd_usb_endpoint *ep;
int index;
int packets;
int packet_size[MAX_PACKS_HS];
struct list_head ready_list;
};
struct snd_usb_endpoint {
struct snd_usb_audio *chip;
int use_count;
int ep_num;
int type;
unsigned long flags;
void (*prepare_data_urb) (struct snd_usb_substream *subs,
struct urb *urb);
void (*retire_data_urb) (struct snd_usb_substream *subs,
struct urb *urb);
struct snd_usb_substream *data_subs;
struct snd_usb_endpoint *sync_master;
struct snd_usb_endpoint *sync_slave;
struct snd_urb_ctx urb[MAX_URBS];
struct snd_usb_packet_info {
uint32_t packet_size[MAX_PACKS_HS];
int packets;
} next_packet[MAX_URBS];
int next_packet_read_pos, next_packet_write_pos;
struct list_head ready_playback_urbs;
unsigned int nurbs;
unsigned long active_mask;
unsigned long unlink_mask;
char *syncbuf;
dma_addr_t sync_dma;
unsigned int pipe;
unsigned int freqn;
unsigned int freqm;
int freqshift;
unsigned int freqmax;
unsigned int phase;
unsigned int maxpacksize;
unsigned int maxframesize;
unsigned int max_urb_frames;
unsigned int curpacksize;
unsigned int curframesize;
unsigned int syncmaxsize;
unsigned int fill_max:1;
unsigned int udh01_fb_quirk:1;
unsigned int datainterval;
unsigned int syncinterval;
unsigned char silence_value;
unsigned int stride;
int iface, altsetting;
int skip_packets;
spinlock_t lock;
struct list_head list;
};
struct snd_usb_substream {
struct snd_usb_stream *stream;
struct usb_device *dev;
struct snd_pcm_substream *pcm_substream;
int direction;
int interface;
int endpoint;
struct audioformat *cur_audiofmt;
snd_pcm_format_t pcm_format;
unsigned int channels;
unsigned int channels_max;
unsigned int cur_rate;
unsigned int period_bytes;
unsigned int period_frames;
unsigned int buffer_periods;
unsigned int altset_idx;
unsigned int txfr_quirk:1;
unsigned int fmt_type;
unsigned int pkt_offset_adj;
unsigned int running: 1;
unsigned int hwptr_done;
unsigned int transfer_done;
unsigned int frame_limit;
unsigned int ep_num;
struct snd_usb_endpoint *data_endpoint;
struct snd_usb_endpoint *sync_endpoint;
unsigned long flags;
bool need_setup_ep;
unsigned int speed;
u64 formats;
unsigned int num_formats;
struct list_head fmt_list;
struct snd_pcm_hw_constraint_list rate_list;
spinlock_t lock;
int last_frame_number;
int last_delay;
struct {
int marker;
int channel;
int byte_idx;
} dsd_dop;
};
struct snd_usb_stream {
struct snd_usb_audio *chip;
struct snd_pcm *pcm;
int pcm_index;
unsigned int fmt_type;
struct snd_usb_substream substream[2];
struct list_head list;
};
#endif /* __USBAUDIO_CARD_H */
|