Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 148289
b: refs/heads/master
c: b74bd40
h: refs/heads/master
i:
  148287: 08a258e
v: v3
  • Loading branch information
Lopez Cruz, Misael authored and Mark Brown committed May 19, 2009
1 parent bb8f33c commit 064384b
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 181da78cd048ce866b05a2e0208ea09d2f80e721
refs/heads/master: b74bd40fa4ae018898c8a6429c2a7daf61516524
47 changes: 47 additions & 0 deletions trunk/sound/soc/codecs/twl4030.c
Original file line number Diff line number Diff line change
Expand Up @@ -814,6 +814,48 @@ static int snd_soc_put_volsw_r2_twl4030(struct snd_kcontrol *kcontrol,
return err;
}

/* Codec operation modes */
static const char *twl4030_op_modes_texts[] = {
"Option 2 (voice/audio)", "Option 1 (audio)"
};

static const struct soc_enum twl4030_op_modes_enum =
SOC_ENUM_SINGLE(TWL4030_REG_CODEC_MODE, 0,
ARRAY_SIZE(twl4030_op_modes_texts),
twl4030_op_modes_texts);

int snd_soc_put_twl4030_opmode_enum_double(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
{
struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
struct twl4030_priv *twl4030 = codec->private_data;
struct soc_enum *e = (struct soc_enum *)kcontrol->private_value;
unsigned short val;
unsigned short mask, bitmask;

if (twl4030->configured) {
printk(KERN_ERR "twl4030 operation mode cannot be "
"changed on-the-fly\n");
return -EBUSY;
}

for (bitmask = 1; bitmask < e->max; bitmask <<= 1)
;
if (ucontrol->value.enumerated.item[0] > e->max - 1)
return -EINVAL;

val = ucontrol->value.enumerated.item[0] << e->shift_l;
mask = (bitmask - 1) << e->shift_l;
if (e->shift_l != e->shift_r) {
if (ucontrol->value.enumerated.item[1] > e->max - 1)
return -EINVAL;
val |= ucontrol->value.enumerated.item[1] << e->shift_r;
mask |= (bitmask - 1) << e->shift_r;
}

return snd_soc_update_bits(codec, e->reg, mask, val);
}

/*
* FGAIN volume control:
* from -62 to 0 dB in 1 dB steps (mute instead of -63 dB)
Expand Down Expand Up @@ -895,6 +937,11 @@ static const struct soc_enum twl4030_vibradir_enum =
twl4030_vibradir_texts);

static const struct snd_kcontrol_new twl4030_snd_controls[] = {
/* Codec operation mode control */
SOC_ENUM_EXT("Codec Operation Mode", twl4030_op_modes_enum,
snd_soc_get_enum_double,
snd_soc_put_twl4030_opmode_enum_double),

/* Common playback gain controls */
SOC_DOUBLE_R_TLV("DAC1 Digital Fine Playback Volume",
TWL4030_REG_ARXL1PGA, TWL4030_REG_ARXR1PGA,
Expand Down

0 comments on commit 064384b

Please sign in to comment.