@@ -78,14 +78,10 @@ int snd_motu_protocol_v2_set_clock_rate(struct snd_motu *motu,
78
78
sizeof (reg ));
79
79
}
80
80
81
- static int get_clock_source (struct snd_motu * motu , u32 data ,
82
- enum snd_motu_clock_source * src )
81
+ static int detect_clock_source_optical_model (struct snd_motu * motu , u32 data ,
82
+ enum snd_motu_clock_source * src )
83
83
{
84
- unsigned int index = data & V2_CLOCK_SRC_MASK ;
85
- if (index > 5 )
86
- return - EIO ;
87
-
88
- switch (index ) {
84
+ switch (data ) {
89
85
case 0 :
90
86
* src = SND_MOTU_CLOCK_SOURCE_INTERNAL ;
91
87
break ;
@@ -118,12 +114,48 @@ static int get_clock_source(struct snd_motu *motu, u32 data,
118
114
* src = SND_MOTU_CLOCK_SOURCE_ADAT_ON_DSUB ;
119
115
break ;
120
116
default :
121
- return - EIO ;
117
+ * src = SND_MOTU_CLOCK_SOURCE_UNKNOWN ;
118
+ break ;
119
+ }
120
+
121
+ return 0 ;
122
+ }
123
+
124
+ static int v2_detect_clock_source (struct snd_motu * motu , u32 data ,
125
+ enum snd_motu_clock_source * src )
126
+ {
127
+ switch (data ) {
128
+ case 0 :
129
+ * src = SND_MOTU_CLOCK_SOURCE_INTERNAL ;
130
+ break ;
131
+ case 2 :
132
+ * src = SND_MOTU_CLOCK_SOURCE_SPDIF_ON_COAX ;
133
+ break ;
134
+ case 3 :
135
+ * src = SND_MOTU_CLOCK_SOURCE_SPH ;
136
+ break ;
137
+ case 4 :
138
+ * src = SND_MOTU_CLOCK_SOURCE_WORD_ON_BNC ;
139
+ break ;
140
+ default :
141
+ * src = SND_MOTU_CLOCK_SOURCE_UNKNOWN ;
142
+ break ;
122
143
}
123
144
124
145
return 0 ;
125
146
}
126
147
148
+ static int get_clock_source (struct snd_motu * motu , u32 data ,
149
+ enum snd_motu_clock_source * src )
150
+ {
151
+ data &= V2_CLOCK_SRC_MASK ;
152
+ if (motu -> spec == & snd_motu_spec_828mk2 ||
153
+ motu -> spec == & snd_motu_spec_traveler )
154
+ return detect_clock_source_optical_model (motu , data , src );
155
+ else
156
+ return v2_detect_clock_source (motu , data , src );
157
+ }
158
+
127
159
int snd_motu_protocol_v2_get_clock_source (struct snd_motu * motu ,
128
160
enum snd_motu_clock_source * src )
129
161
{
0 commit comments