Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 249440
b: refs/heads/master
c: b8df15b
h: refs/heads/master
v: v3
  • Loading branch information
Lu Guanqun authored and Greg Kroah-Hartman committed May 10, 2011
1 parent 0c4b065 commit ffb0831
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: e1bfee2673b067525a48450eede263370f425182
refs/heads/master: b8df15b2a7479903eb7051ce96a5c8dac5e60a18
7 changes: 5 additions & 2 deletions trunk/drivers/staging/intel_sst/intelmid.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@
#define MAX_CHANNEL_DMIC 5
#define FIFO_SIZE 0 /* fifo not being used */
#define INTEL_MAD "Intel MAD"
#define MAX_CTRL_MRST 7
#define MAX_CTRL_MRST 8
#define MAX_CTRL_MFLD 7
#define MAX_CTRL 7
#define MAX_CTRL 8
#define MAX_VENDORS 4
/* TODO +6 db */
#define MAX_VOL 64
Expand Down Expand Up @@ -145,6 +145,8 @@ struct snd_control_val {
int playback_vol_min;
int capture_vol_max;
int capture_vol_min;
int master_vol_max;
int master_vol_min;
};

struct mad_stream_pvt {
Expand Down Expand Up @@ -175,6 +177,7 @@ enum _widget_ctrl {
PLAYBACK_MUTE,
CAPTURE_VOL,
CAPTURE_MUTE,
MASTER_VOL,
MASTER_MUTE
};
enum _widget_ctrl_mfld {
Expand Down
40 changes: 36 additions & 4 deletions trunk/drivers/staging/intel_sst/intelmid_ctrl.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,11 @@ struct snd_control_val intelmad_ctrl_val[MAX_VENDORS] = {
},
{
.playback_vol_max = 0,
.playback_vol_min = -126,
.playback_vol_min = -31,
.capture_vol_max = 0,
.capture_vol_min = -31,
.master_vol_max = 0,
.master_vol_min = -126,
},
};

Expand Down Expand Up @@ -159,6 +161,15 @@ static int snd_intelmad_playback_volume_info(struct snd_kcontrol *kcontrol,
return 0;
}

static int snd_intelmad_master_volume_info(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_info *uinfo)
{
snd_intelmad_volume_info(uinfo, STEREO_CNTL,
intelmad_ctrl_val[sst_card_vendor_id].master_vol_max,
intelmad_ctrl_val[sst_card_vendor_id].master_vol_min);
return 0;
}

/**
* snd_intelmad_device_info_mrst - provides information about the devices available
*
Expand Down Expand Up @@ -281,6 +292,11 @@ static int snd_intelmad_volume_get(struct snd_kcontrol *kcontrol,
case CAPTURE_VOL:
cntl_list[0] = PMIC_SND_CAPTURE_VOL;
break;

case MASTER_VOL:
cntl_list[0] = PMIC_SND_RIGHT_MASTER_VOL;
cntl_list[1] = PMIC_SND_LEFT_MASTER_VOL;
break;
default:
return -EINVAL;
}
Expand All @@ -291,7 +307,8 @@ static int snd_intelmad_volume_get(struct snd_kcontrol *kcontrol,
if (ret_val)
return ret_val;

if (kcontrol->id.numid == PLAYBACK_VOL) {
if (kcontrol->id.numid == PLAYBACK_VOL ||
kcontrol->id.numid == MASTER_VOL) {
ret_val = scard_ops->get_vol(cntl_list[1], &value);
uval->value.integer.value[1] = value;
}
Expand Down Expand Up @@ -399,6 +416,12 @@ static int snd_intelmad_volume_set(struct snd_kcontrol *kcontrol,
case CAPTURE_VOL:
cntl_list[0] = PMIC_SND_CAPTURE_VOL;
break;

case MASTER_VOL:
cntl_list[0] = PMIC_SND_LEFT_MASTER_VOL;
cntl_list[1] = PMIC_SND_RIGHT_MASTER_VOL;
break;

default:
return -EINVAL;
}
Expand All @@ -408,7 +431,8 @@ static int snd_intelmad_volume_set(struct snd_kcontrol *kcontrol,
if (ret_val)
return ret_val;

if (kcontrol->id.numid == PLAYBACK_VOL)
if (kcontrol->id.numid == PLAYBACK_VOL ||
kcontrol->id.numid == MASTER_VOL)
ret_val = scard_ops->set_vol(cntl_list[1],
uval->value.integer.value[1]);
return ret_val;
Expand Down Expand Up @@ -753,7 +777,6 @@ static int snd_intelmad_device_dmic_info_mfld(struct snd_kcontrol *kcontrol,
return 0;
}


struct snd_kcontrol_new snd_intelmad_controls_mrst[MAX_CTRL] __devinitdata = {
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
Expand Down Expand Up @@ -809,6 +832,15 @@ struct snd_kcontrol_new snd_intelmad_controls_mrst[MAX_CTRL] __devinitdata = {
.put = snd_intelmad_mute_set,
.private_value = 0,
},
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Master Playback Volume",
.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
.info = snd_intelmad_master_volume_info,
.get = snd_intelmad_volume_get,
.put = snd_intelmad_volume_set,
.private_value = 0,
},
{
.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
.name = "Master Playback Switch",
Expand Down
2 changes: 2 additions & 0 deletions trunk/drivers/staging/intel_sst/intelmid_snd_control.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,8 @@ enum pmic_controls {
PMIC_SND_RIGHT_SPEAKER_MUTE = 0x0015,
PMIC_SND_RECEIVER_VOL = 0x0016,
PMIC_SND_RECEIVER_MUTE = 0x0017,
PMIC_SND_LEFT_MASTER_VOL = 0x0018,
PMIC_SND_RIGHT_MASTER_VOL = 0x0019,
/* Other controls */
PMIC_SND_MUTE_ALL = 0x0020,
PMIC_MAX_CONTROLS = 0x0020,
Expand Down
48 changes: 38 additions & 10 deletions trunk/drivers/staging/intel_sst/intelmid_v2_control.c
Original file line number Diff line number Diff line change
Expand Up @@ -787,25 +787,41 @@ static int nc_set_vol(int dev_id, int value)
case PMIC_SND_LEFT_PB_VOL:
pr_debug("PMIC_SND_LEFT_HP_VOL %d\n", value);
sc_access[0].value = -value;
sc_access[0].reg_addr = AUDIOLVOL;
sc_access[0].mask =
(MASK0|MASK1|MASK2|MASK3|MASK4|MASK5|MASK6);
sc_access[0].reg_addr = HPLVOL;
sc_access[0].mask = (MASK0|MASK1|MASK2|MASK3|MASK4);
entries = 1;
break;

case PMIC_SND_RIGHT_PB_VOL:
pr_debug("PMIC_SND_RIGHT_HP_VOL value %d\n", value);
if (snd_pmic_ops_nc.num_channel == 1) {
sc_access[0].value = 0x04;
sc_access[0].reg_addr = RMUTE;
sc_access[0].reg_addr = RMUTE;
sc_access[0].mask = MASK2;
} else {
sc_access[0].value = -value;
sc_access[0].reg_addr = HPRVOL;
sc_access[0].mask = (MASK0|MASK1|MASK2|MASK3|MASK4);
}
entries = 1;
break;

case PMIC_SND_LEFT_MASTER_VOL:
pr_debug("PMIC_SND_LEFT_MASTER_VOL value %d\n", value);
sc_access[0].value = -value;
sc_access[0].reg_addr = AUDIOLVOL;
sc_access[0].mask =
(MASK0|MASK1|MASK2|MASK3|MASK4|MASK5|MASK6);
entries = 1;
break;

case PMIC_SND_RIGHT_MASTER_VOL:
pr_debug("PMIC_SND_RIGHT_MASTER_VOL value %d\n", value);
sc_access[0].value = -value;
sc_access[0].reg_addr = AUDIORVOL;
sc_access[0].reg_addr = AUDIORVOL;
sc_access[0].mask =
(MASK0|MASK1|MASK2|MASK3|MASK4|MASK5|MASK6);
entries = 1;
}
break;

default:
Expand Down Expand Up @@ -970,18 +986,30 @@ static int nc_get_vol(int dev_id, int *value)
mask = (MASK0|MASK1|MASK2|MASK3|MASK4|MASK5);
break;

case PMIC_SND_RIGHT_PB_VOL:
pr_debug("GET_VOLUME_PMIC_LEFT_HP_VOL\n");
case PMIC_SND_LEFT_MASTER_VOL:
pr_debug("GET_VOLUME_PMIC_LEFT_MASTER_VOL\n");
sc_access.reg_addr = AUDIOLVOL;
mask = (MASK0|MASK1|MASK2|MASK3|MASK4|MASK5|MASK6);
break;

case PMIC_SND_LEFT_PB_VOL:
pr_debug("GET_VOLUME_PMIC_RIGHT_HP_VOL\n");
case PMIC_SND_RIGHT_MASTER_VOL:
pr_debug("GET_VOLUME_PMIC_RIGHT_MASTER_VOL\n");
sc_access.reg_addr = AUDIORVOL;
mask = (MASK0|MASK1|MASK2|MASK3|MASK4|MASK5|MASK6);
break;

case PMIC_SND_RIGHT_PB_VOL:
pr_debug("GET_VOLUME_PMIC_RIGHT_HP_VOL\n");
sc_access.reg_addr = HPRVOL;
mask = (MASK0|MASK1|MASK2|MASK3|MASK4);
break;

case PMIC_SND_LEFT_PB_VOL:
pr_debug("GET_VOLUME_PMIC_LEFT_HP_VOL\n");
sc_access.reg_addr = HPLVOL;
mask = (MASK0|MASK1|MASK2|MASK3|MASK4);
break;

default:
return -EINVAL;

Expand Down

0 comments on commit ffb0831

Please sign in to comment.