Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ce13f3f3 authored by Adrian Knoth's avatar Adrian Knoth Committed by Takashi Iwai
Browse files

ALSA: hdspm - Augment HDSPM_TOGGLE_SETTING for AIO/RayDAT



The HDSPM_TOGGLE_SETTING functions alter the control_register on older
cards. On newer cards (AIO/RayDAT), they have to operate on the
settings_register instead.

This patch augments the existing functions to work with AIO/RayDAT, too.

Signed-off-by: default avatarAdrian Knoth <adi@drcomp.erfurt.thur.de>
Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent b2ed6326
Loading
Loading
Loading
Loading
+23 −4
Original line number Diff line number Diff line
@@ -3092,16 +3092,35 @@ static int snd_hdspm_get_tco_ltc_frames(struct snd_kcontrol *kcontrol,

static int hdspm_toggle_setting(struct hdspm *hdspm, u32 regmask)
{
	return (hdspm->control_register & regmask) ? 1 : 0;
	u32 reg;

	if (hdspm_is_raydat_or_aio(hdspm))
		reg = hdspm->settings_register;
	else
		reg = hdspm->control_register;

	return (reg & regmask) ? 1 : 0;
}

static int hdspm_set_toggle_setting(struct hdspm *hdspm, u32 regmask, int out)
{
	u32 *reg;
	u32 target_reg;

	if (hdspm_is_raydat_or_aio(hdspm)) {
		reg = &(hdspm->settings_register);
		target_reg = HDSPM_WR_SETTINGS;
	} else {
		reg = &(hdspm->control_register);
		target_reg = HDSPM_controlRegister;
	}

	if (out)
		hdspm->control_register |= regmask;
		*reg |= regmask;
	else
		hdspm->control_register &= ~regmask;
	hdspm_write(hdspm, HDSPM_controlRegister, hdspm->control_register);
		*reg &= ~regmask;

	hdspm_write(hdspm, target_reg, *reg);

	return 0;
}