Skip to content

Commit

Permalink
ALSA: hdspm - Augment HDSPM_TOGGLE_SETTING for AIO/RayDAT
Browse files Browse the repository at this point in the history
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 <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
adiknoth authored and tiwai committed Jul 5, 2013
1 parent b2ed632 commit ce13f3f
Showing 1 changed file with 23 additions and 4 deletions.
27 changes: 23 additions & 4 deletions sound/pci/rme9652/hdspm.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit ce13f3f

Please sign in to comment.