/*
* This file is only included exactly once!
*
* The tables here are derived from the tas3004 datasheet,
* modulo typo corrections and some smoothing...
*/
#define TAS3004_TREBLE_MIN 0
#define TAS3004_TREBLE_MAX 72
#define TAS3004_BASS_MIN 0
#define TAS3004_BASS_MAX 72
#define TAS3004_TREBLE_ZERO 36
#define TAS3004_BASS_ZERO 36
static u8 tas3004_treble_table[] = {
150, /* -18 dB */
149,
148,
147,
146,
145,
144,
143,
142,
141,
140,
139,
138,
137,
136,
135,
134,
133,
132,
131,
130,
129,
128,
127,
126,
125,
124,
123,
122,
121,
120,
119,
118,
117,
116,
115,
114, /* 0 dB */
113,
112,
111,
109,
108,
107,
105,
104,
103,
101,
99,
98,
96,
93,
91,
89,
86,
83,
81,
77,
74,
71,
67,
63,
59,
54,
49,
44,
38,
32,
26,
19,
10,
4,
2,
1, /* +18 dB */
};
static inline u8 tas3004_treble(int idx)
{
return tas3004_treble_table[idx];
}
/* I only save the difference here to the treble table
* so that the binary is smaller...
* I have also ignored completely differences of
* +/- 1
*/
static s8 tas3004_bass_diff_to_treble[] = {
2, /* 7 dB, offset 50 */
2,
2,
2,
2,
1,
2,
2,
2,
3,
4,
4,
5,
6,
7,
8,
9,
10,
11,
14,
13,
8,
1, /* 18 dB */
};
static inline u8 tas3004_bass(int idx)
{
u8 result = tas3004_treble_table[idx];
if (idx >= 50)
result += tas3004_bass_diff_to_treble[idx-50];
return result;
}
net-next plumbings | Tobias Klauser |
PCI/ASPM: Handle PCI-to-PCIe bridges as roots of PCIe hierarchies
In a struct pcie_link_state, link->root points to the pcie_link_state of
the root of the PCIe hierarchy. For the topmost link, this points to
itself (link->root = link). For others, we copy the pointer from the
parent (link->root = link->parent->root).
Previously we recognized that Root Ports originated PCIe hierarchies, but
we treated PCI/PCI-X to PCIe Bridges as being in the middle of the
hierarchy, and when we tried to copy the pointer from link->parent->root,
there was no parent, and we dereferenced a NULL pointer:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000090
IP: [<ffffffff9e424350>] pcie_aspm_init_link_state+0x170/0x820
Recognize that PCI/PCI-X to PCIe Bridges originate PCIe hierarchies just
like Root Ports do, so link->root for these devices should also point to
itself.
Fixes: 51ebfc92b72b ("PCI: Enumerate switches below PCI-to-PCIe bridges")
Link: https://bugzilla.kernel.org/show_bug.cgi?id=193411
Link: https://bugzilla.opensuse.org/show_bug.cgi?id=1022181
Tested-by: lists@ssl-mail.com
Tested-by: Jayachandran C. <jnair@caviumnetworks.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
CC: stable@vger.kernel.org # v4.2+