diff options
Diffstat (limited to 'sound/pci/oxygen')
-rw-r--r-- | sound/pci/oxygen/hifier.c | 11 | ||||
-rw-r--r-- | sound/pci/oxygen/oxygen.c | 26 | ||||
-rw-r--r-- | sound/pci/oxygen/virtuoso.c | 54 |
3 files changed, 62 insertions, 29 deletions
diff --git a/sound/pci/oxygen/hifier.c b/sound/pci/oxygen/hifier.c index 0e425d554505..6e45a58ad14b 100644 --- a/sound/pci/oxygen/hifier.c +++ b/sound/pci/oxygen/hifier.c | |||
@@ -68,15 +68,22 @@ static void update_ak4396_volume(struct oxygen *chip) | |||
68 | ak4396_write(chip, AK4396_RCH_ATT, chip->dac_volume[1]); | 68 | ak4396_write(chip, AK4396_RCH_ATT, chip->dac_volume[1]); |
69 | } | 69 | } |
70 | 70 | ||
71 | static void hifier_init(struct oxygen *chip) | 71 | static void hifier_registers_init(struct oxygen *chip) |
72 | { | 72 | { |
73 | struct hifier_data *data = chip->model_data; | 73 | struct hifier_data *data = chip->model_data; |
74 | 74 | ||
75 | data->ak4396_ctl2 = AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL; | ||
76 | ak4396_write(chip, AK4396_CONTROL_1, AK4396_DIF_24_MSB | AK4396_RSTN); | 75 | ak4396_write(chip, AK4396_CONTROL_1, AK4396_DIF_24_MSB | AK4396_RSTN); |
77 | ak4396_write(chip, AK4396_CONTROL_2, data->ak4396_ctl2); | 76 | ak4396_write(chip, AK4396_CONTROL_2, data->ak4396_ctl2); |
78 | ak4396_write(chip, AK4396_CONTROL_3, AK4396_PCM); | 77 | ak4396_write(chip, AK4396_CONTROL_3, AK4396_PCM); |
79 | update_ak4396_volume(chip); | 78 | update_ak4396_volume(chip); |
79 | } | ||
80 | |||
81 | static void hifier_init(struct oxygen *chip) | ||
82 | { | ||
83 | struct hifier_data *data = chip->model_data; | ||
84 | |||
85 | data->ak4396_ctl2 = AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL; | ||
86 | hifier_registers_init(chip); | ||
80 | 87 | ||
81 | snd_component_add(chip->card, "AK4396"); | 88 | snd_component_add(chip->card, "AK4396"); |
82 | snd_component_add(chip->card, "CS5340"); | 89 | snd_component_add(chip->card, "CS5340"); |
diff --git a/sound/pci/oxygen/oxygen.c b/sound/pci/oxygen/oxygen.c index ad8d950fddc6..800ae304a247 100644 --- a/sound/pci/oxygen/oxygen.c +++ b/sound/pci/oxygen/oxygen.c | |||
@@ -124,12 +124,11 @@ static void update_ak4396_volume(struct oxygen *chip) | |||
124 | } | 124 | } |
125 | } | 125 | } |
126 | 126 | ||
127 | static void ak4396_init(struct oxygen *chip) | 127 | static void ak4396_registers_init(struct oxygen *chip) |
128 | { | 128 | { |
129 | struct generic_data *data = chip->model_data; | 129 | struct generic_data *data = chip->model_data; |
130 | unsigned int i; | 130 | unsigned int i; |
131 | 131 | ||
132 | data->ak4396_ctl2 = AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL; | ||
133 | for (i = 0; i < 4; ++i) { | 132 | for (i = 0; i < 4; ++i) { |
134 | ak4396_write(chip, i, | 133 | ak4396_write(chip, i, |
135 | AK4396_CONTROL_1, AK4396_DIF_24_MSB | AK4396_RSTN); | 134 | AK4396_CONTROL_1, AK4396_DIF_24_MSB | AK4396_RSTN); |
@@ -139,6 +138,14 @@ static void ak4396_init(struct oxygen *chip) | |||
139 | AK4396_CONTROL_3, AK4396_PCM); | 138 | AK4396_CONTROL_3, AK4396_PCM); |
140 | } | 139 | } |
141 | update_ak4396_volume(chip); | 140 | update_ak4396_volume(chip); |
141 | } | ||
142 | |||
143 | static void ak4396_init(struct oxygen *chip) | ||
144 | { | ||
145 | struct generic_data *data = chip->model_data; | ||
146 | |||
147 | data->ak4396_ctl2 = AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL; | ||
148 | ak4396_registers_init(chip); | ||
142 | snd_component_add(chip->card, "AK4396"); | 149 | snd_component_add(chip->card, "AK4396"); |
143 | } | 150 | } |
144 | 151 | ||
@@ -149,18 +156,23 @@ static void ak5385_init(struct oxygen *chip) | |||
149 | snd_component_add(chip->card, "AK5385"); | 156 | snd_component_add(chip->card, "AK5385"); |
150 | } | 157 | } |
151 | 158 | ||
152 | static void wm8785_init(struct oxygen *chip) | 159 | static void wm8785_registers_init(struct oxygen *chip) |
153 | { | 160 | { |
154 | struct generic_data *data = chip->model_data; | 161 | struct generic_data *data = chip->model_data; |
155 | 162 | ||
156 | data->saved_wm8785_registers[0] = WM8785_MCR_SLAVE | | ||
157 | WM8785_OSR_SINGLE | WM8785_FORMAT_LJUST; | ||
158 | data->saved_wm8785_registers[1] = WM8785_WL_24; | ||
159 | |||
160 | wm8785_write(chip, WM8785_R7, 0); | 163 | wm8785_write(chip, WM8785_R7, 0); |
161 | wm8785_write(chip, WM8785_R0, data->saved_wm8785_registers[0]); | 164 | wm8785_write(chip, WM8785_R0, data->saved_wm8785_registers[0]); |
162 | wm8785_write(chip, WM8785_R1, data->saved_wm8785_registers[1]); | 165 | wm8785_write(chip, WM8785_R1, data->saved_wm8785_registers[1]); |
166 | } | ||
163 | 167 | ||
168 | static void wm8785_init(struct oxygen *chip) | ||
169 | { | ||
170 | struct generic_data *data = chip->model_data; | ||
171 | |||
172 | data->saved_wm8785_registers[0] = WM8785_MCR_SLAVE | | ||
173 | WM8785_OSR_SINGLE | WM8785_FORMAT_LJUST; | ||
174 | data->saved_wm8785_registers[1] = WM8785_WL_24; | ||
175 | wm8785_registers_init(chip); | ||
164 | snd_component_add(chip->card, "WM8785"); | 176 | snd_component_add(chip->card, "WM8785"); |
165 | } | 177 | } |
166 | 178 | ||
diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c index bd9e28583518..e95dc5717ed7 100644 --- a/sound/pci/oxygen/virtuoso.c +++ b/sound/pci/oxygen/virtuoso.c | |||
@@ -204,15 +204,11 @@ static void update_pcm1796_mute(struct oxygen *chip) | |||
204 | pcm1796_write(chip, i, 18, value); | 204 | pcm1796_write(chip, i, 18, value); |
205 | } | 205 | } |
206 | 206 | ||
207 | static void xonar_d2_init(struct oxygen *chip) | 207 | static void pcm1796_init(struct oxygen *chip) |
208 | { | 208 | { |
209 | struct xonar_data *data = chip->model_data; | 209 | struct xonar_data *data = chip->model_data; |
210 | unsigned int i; | 210 | unsigned int i; |
211 | 211 | ||
212 | data->anti_pop_delay = 300; | ||
213 | data->output_enable_bit = GPIO_D2_OUTPUT_ENABLE; | ||
214 | data->pcm1796_oversampling = PCM1796_OS_64; | ||
215 | |||
216 | for (i = 0; i < 4; ++i) { | 212 | for (i = 0; i < 4; ++i) { |
217 | pcm1796_write(chip, i, 19, PCM1796_FLT_SHARP | PCM1796_ATS_1); | 213 | pcm1796_write(chip, i, 19, PCM1796_FLT_SHARP | PCM1796_ATS_1); |
218 | pcm1796_write(chip, i, 20, data->pcm1796_oversampling); | 214 | pcm1796_write(chip, i, 20, data->pcm1796_oversampling); |
@@ -220,6 +216,17 @@ static void xonar_d2_init(struct oxygen *chip) | |||
220 | } | 216 | } |
221 | update_pcm1796_mute(chip); /* set ATLD before ATL/ATR */ | 217 | update_pcm1796_mute(chip); /* set ATLD before ATL/ATR */ |
222 | update_pcm1796_volume(chip); | 218 | update_pcm1796_volume(chip); |
219 | } | ||
220 | |||
221 | static void xonar_d2_init(struct oxygen *chip) | ||
222 | { | ||
223 | struct xonar_data *data = chip->model_data; | ||
224 | |||
225 | data->anti_pop_delay = 300; | ||
226 | data->output_enable_bit = GPIO_D2_OUTPUT_ENABLE; | ||
227 | data->pcm1796_oversampling = PCM1796_OS_64; | ||
228 | |||
229 | pcm1796_init(chip); | ||
223 | 230 | ||
224 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, GPIO_D2_ALT); | 231 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, GPIO_D2_ALT); |
225 | oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, GPIO_D2_ALT); | 232 | oxygen_clear_bits16(chip, OXYGEN_GPIO_DATA, GPIO_D2_ALT); |
@@ -272,24 +279,10 @@ static void update_cs43xx_mute(struct oxygen *chip) | |||
272 | update_cs4362a_volumes(chip); | 279 | update_cs4362a_volumes(chip); |
273 | } | 280 | } |
274 | 281 | ||
275 | static void xonar_dx_init(struct oxygen *chip) | 282 | static void cs43xx_init(struct oxygen *chip) |
276 | { | 283 | { |
277 | struct xonar_data *data = chip->model_data; | 284 | struct xonar_data *data = chip->model_data; |
278 | 285 | ||
279 | data->anti_pop_delay = 800; | ||
280 | data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE; | ||
281 | data->ext_power_reg = OXYGEN_GPI_DATA; | ||
282 | data->ext_power_int_reg = OXYGEN_GPI_INTERRUPT_MASK; | ||
283 | data->ext_power_bit = GPI_DX_EXT_POWER; | ||
284 | data->cs4398_fm = CS4398_FM_SINGLE | CS4398_DEM_NONE | CS4398_DIF_LJUST; | ||
285 | data->cs4362a_fm = CS4362A_FM_SINGLE | | ||
286 | CS4362A_ATAPI_B_R | CS4362A_ATAPI_A_L; | ||
287 | |||
288 | oxygen_write16(chip, OXYGEN_2WIRE_BUS_STATUS, | ||
289 | OXYGEN_2WIRE_LENGTH_8 | | ||
290 | OXYGEN_2WIRE_INTERRUPT_MASK | | ||
291 | OXYGEN_2WIRE_SPEED_FAST); | ||
292 | |||
293 | /* set CPEN (control port mode) and power down */ | 286 | /* set CPEN (control port mode) and power down */ |
294 | cs4398_write(chip, 8, CS4398_CPEN | CS4398_PDN); | 287 | cs4398_write(chip, 8, CS4398_CPEN | CS4398_PDN); |
295 | cs4362a_write(chip, 0x01, CS4362A_PDN | CS4362A_CPEN); | 288 | cs4362a_write(chip, 0x01, CS4362A_PDN | CS4362A_CPEN); |
@@ -311,6 +304,27 @@ static void xonar_dx_init(struct oxygen *chip) | |||
311 | /* clear power down */ | 304 | /* clear power down */ |
312 | cs4398_write(chip, 8, CS4398_CPEN); | 305 | cs4398_write(chip, 8, CS4398_CPEN); |
313 | cs4362a_write(chip, 0x01, CS4362A_CPEN); | 306 | cs4362a_write(chip, 0x01, CS4362A_CPEN); |
307 | } | ||
308 | |||
309 | static void xonar_dx_init(struct oxygen *chip) | ||
310 | { | ||
311 | struct xonar_data *data = chip->model_data; | ||
312 | |||
313 | data->anti_pop_delay = 800; | ||
314 | data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE; | ||
315 | data->ext_power_reg = OXYGEN_GPI_DATA; | ||
316 | data->ext_power_int_reg = OXYGEN_GPI_INTERRUPT_MASK; | ||
317 | data->ext_power_bit = GPI_DX_EXT_POWER; | ||
318 | data->cs4398_fm = CS4398_FM_SINGLE | CS4398_DEM_NONE | CS4398_DIF_LJUST; | ||
319 | data->cs4362a_fm = CS4362A_FM_SINGLE | | ||
320 | CS4362A_ATAPI_B_R | CS4362A_ATAPI_A_L; | ||
321 | |||
322 | oxygen_write16(chip, OXYGEN_2WIRE_BUS_STATUS, | ||
323 | OXYGEN_2WIRE_LENGTH_8 | | ||
324 | OXYGEN_2WIRE_INTERRUPT_MASK | | ||
325 | OXYGEN_2WIRE_SPEED_FAST); | ||
326 | |||
327 | cs43xx_init(chip); | ||
314 | 328 | ||
315 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, | 329 | oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, |
316 | GPIO_DX_FRONT_PANEL | GPIO_DX_INPUT_ROUTE); | 330 | GPIO_DX_FRONT_PANEL | GPIO_DX_INPUT_ROUTE); |