Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/sound/pci/ice1712/amp.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-or-later
2
/*
3
* ALSA driver for ICEnsemble VT1724 (Envy24HT)
4
*
5
* Lowlevel functions for Advanced Micro Peripherals Ltd AUDIO2000
6
*
7
* Copyright (c) 2000 Jaroslav Kysela <[email protected]>
8
*/
9
10
#include <linux/delay.h>
11
#include <linux/interrupt.h>
12
#include <linux/init.h>
13
#include <sound/core.h>
14
15
#include "ice1712.h"
16
#include "envy24ht.h"
17
#include "amp.h"
18
19
static void wm_put(struct snd_ice1712 *ice, int reg, unsigned short val)
20
{
21
unsigned short cval;
22
cval = (reg << 9) | val;
23
snd_vt1724_write_i2c(ice, WM_DEV, cval >> 8, cval & 0xff);
24
}
25
26
static int snd_vt1724_amp_init(struct snd_ice1712 *ice)
27
{
28
static const unsigned short wm_inits[] = {
29
WM_ATTEN_L, 0x0000, /* 0 db */
30
WM_ATTEN_R, 0x0000, /* 0 db */
31
WM_DAC_CTRL, 0x0008, /* 24bit I2S */
32
WM_INT_CTRL, 0x0001, /* 24bit I2S */
33
};
34
35
unsigned int i;
36
37
/* only use basic functionality for now */
38
39
/* VT1616 6ch codec connected to PSDOUT0 using packed mode */
40
ice->num_total_dacs = 6;
41
ice->num_total_adcs = 2;
42
43
/* Chaintech AV-710 has another WM8728 codec connected to PSDOUT4
44
(shared with the SPDIF output). Mixer control for this codec
45
is not yet supported. */
46
if (ice->eeprom.subvendor == VT1724_SUBDEVICE_AV710) {
47
for (i = 0; i < ARRAY_SIZE(wm_inits); i += 2)
48
wm_put(ice, wm_inits[i], wm_inits[i+1]);
49
}
50
51
return 0;
52
}
53
54
static int snd_vt1724_amp_add_controls(struct snd_ice1712 *ice)
55
{
56
if (ice->ac97)
57
/* we use pins 39 and 41 of the VT1616 for left and right
58
read outputs */
59
snd_ac97_write_cache(ice->ac97, 0x5a,
60
snd_ac97_read(ice->ac97, 0x5a) & ~0x8000);
61
return 0;
62
}
63
64
65
/* entry point */
66
struct snd_ice1712_card_info snd_vt1724_amp_cards[] = {
67
{
68
.subvendor = VT1724_SUBDEVICE_AV710,
69
.name = "Chaintech AV-710",
70
.model = "av710",
71
.chip_init = snd_vt1724_amp_init,
72
.build_controls = snd_vt1724_amp_add_controls,
73
},
74
{
75
.subvendor = VT1724_SUBDEVICE_AUDIO2000,
76
.name = "AMP Ltd AUDIO2000",
77
.model = "amp2000",
78
.chip_init = snd_vt1724_amp_init,
79
.build_controls = snd_vt1724_amp_add_controls,
80
},
81
{ } /* terminator */
82
};
83
84
85