// SPDX-License-Identifier: GPL-2.0
/* Fixes for HP X360 laptops with top B&O speakers
* to be included from codec driver
*/
static void alc295_fixup_hp_top_speakers(struct hda_codec *codec,
const struct hda_fixup *fix, int action)
{
static const struct hda_pintbl pincfgs[] = {
{ 0 x17, 0 x90170110 },
{ }
};
static const struct coef_fw alc295_hp_speakers_coefs[] = {
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0000), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003f), WRITE_COEF(0 x28, 0 x1000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0004), WRITE_COEF(0 x28, 0 x0600), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006a), WRITE_COEF(0 x28, 0 x0006), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006c), WRITE_COEF(0 x28, 0 xc0c0), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0008), WRITE_COEF(0 x28, 0 xb000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x002e), WRITE_COEF(0 x28, 0 x0800), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006a), WRITE_COEF(0 x28, 0 x00c1), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006c), WRITE_COEF(0 x28, 0 x0320), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0039), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003b), WRITE_COEF(0 x28, 0 xffff), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003c), WRITE_COEF(0 x28, 0 xffd0), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003a), WRITE_COEF(0 x28, 0 x1dfe), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0080), WRITE_COEF(0 x28, 0 x0880), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003a), WRITE_COEF(0 x28, 0 x0dfe), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0018), WRITE_COEF(0 x28, 0 x0219), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006a), WRITE_COEF(0 x28, 0 x005d), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006c), WRITE_COEF(0 x28, 0 x9142), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c0), WRITE_COEF(0 x28, 0 x01ce), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c1), WRITE_COEF(0 x28, 0 xed0c), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c2), WRITE_COEF(0 x28, 0 x1c00), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c3), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c4), WRITE_COEF(0 x28, 0 x0200), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c5), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c6), WRITE_COEF(0 x28, 0 x0399), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c7), WRITE_COEF(0 x28, 0 x2330), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c8), WRITE_COEF(0 x28, 0 x1e5d), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00c9), WRITE_COEF(0 x28, 0 x6eff), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00ca), WRITE_COEF(0 x28, 0 x01c0), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00cb), WRITE_COEF(0 x28, 0 xed0c), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00cc), WRITE_COEF(0 x28, 0 x1c00), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00cd), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00ce), WRITE_COEF(0 x28, 0 x0200), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00cf), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00d0), WRITE_COEF(0 x28, 0 x0399), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00d1), WRITE_COEF(0 x28, 0 x2330), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00d2), WRITE_COEF(0 x28, 0 x1e5d), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x00d3), WRITE_COEF(0 x28, 0 x6eff), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0062), WRITE_COEF(0 x28, 0 x8000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0063), WRITE_COEF(0 x28, 0 x5f5f), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0064), WRITE_COEF(0 x28, 0 x1000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0065), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0066), WRITE_COEF(0 x28, 0 x4004), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0067), WRITE_COEF(0 x28, 0 x0802), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0068), WRITE_COEF(0 x28, 0 x890f), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0069), WRITE_COEF(0 x28, 0 xe021), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0070), WRITE_COEF(0 x28, 0 x8012), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0071), WRITE_COEF(0 x28, 0 x3450), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0072), WRITE_COEF(0 x28, 0 x0123), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0073), WRITE_COEF(0 x28, 0 x4543), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0074), WRITE_COEF(0 x28, 0 x2100), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0075), WRITE_COEF(0 x28, 0 x4321), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0076), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0050), WRITE_COEF(0 x28, 0 x8200), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003a), WRITE_COEF(0 x28, 0 x1dfe), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0051), WRITE_COEF(0 x28, 0 x0707), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0052), WRITE_COEF(0 x28, 0 x4090), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006a), WRITE_COEF(0 x28, 0 x0090), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006c), WRITE_COEF(0 x28, 0 x721f), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0012), WRITE_COEF(0 x28, 0 xebeb), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x009e), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0060), WRITE_COEF(0 x28, 0 x2213), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006a), WRITE_COEF(0 x28, 0 x0006), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x006c), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x003f), WRITE_COEF(0 x28, 0 x3000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0004), WRITE_COEF(0 x28, 0 x0500), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0040), WRITE_COEF(0 x28, 0 x800c), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0046), WRITE_COEF(0 x28, 0 xc22e), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x004b), WRITE_COEF(0 x28, 0 x0000), WRITE_COEF(0 x29, 0 xb024),
WRITE_COEF(0 x24, 0 x0012), WRITE_COEF(0 x26, 0 x0050), WRITE_COEF(0 x28, 0 x82ec), WRITE_COEF(0 x29, 0 xb024),
};
switch (action) {
case HDA_FIXUP_ACT_PRE_PROBE:
snd_hda_apply_pincfgs(codec, pincfgs);
alc295_fixup_disable_dac3(codec, fix, action);
break ;
case HDA_FIXUP_ACT_INIT:
alc_process_coef_fw(codec, alc295_hp_speakers_coefs);
break ;
}
}
Messung V0.5 in Prozent C=98 H=98 G=97