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: Adrian Knoth <adi@drcomp.erfurt.thur.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
b2ed632687
commit
ce13f3f33a
1 changed files with 23 additions and 4 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue