Merge branches 'topic/asoc', 'topic/misc-fixes' and 'topic/hda' into for-linus
This commit is contained in:
commit
bfd4e66b8d
@ -159,7 +159,7 @@ static int i2sbus_add_dev(struct macio_dev *macio,
|
||||
struct i2sbus_dev *dev;
|
||||
struct device_node *child = NULL, *sound = NULL;
|
||||
struct resource *r;
|
||||
int i, layout = 0, rlen;
|
||||
int i, layout = 0, rlen, ok = force;
|
||||
static const char *rnames[] = { "i2sbus: %s (control)",
|
||||
"i2sbus: %s (tx)",
|
||||
"i2sbus: %s (rx)" };
|
||||
@ -192,7 +192,7 @@ static int i2sbus_add_dev(struct macio_dev *macio,
|
||||
layout = *layout_id;
|
||||
snprintf(dev->sound.modalias, 32,
|
||||
"sound-layout-%d", layout);
|
||||
force = 1;
|
||||
ok = 1;
|
||||
}
|
||||
}
|
||||
/* for the time being, until we can handle non-layout-id
|
||||
@ -201,7 +201,7 @@ static int i2sbus_add_dev(struct macio_dev *macio,
|
||||
* When there are two i2s busses and only one has a layout-id,
|
||||
* then this depends on the order, but that isn't important
|
||||
* either as the second one in that case is just a modem. */
|
||||
if (!force) {
|
||||
if (!ok) {
|
||||
kfree(dev);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
@ -194,7 +194,7 @@ int __pxa2xx_pcm_open(struct snd_pcm_substream *substream)
|
||||
goto out;
|
||||
|
||||
ret = -ENOMEM;
|
||||
rtd = kmalloc(sizeof(*rtd), GFP_KERNEL);
|
||||
rtd = kzalloc(sizeof(*rtd), GFP_KERNEL);
|
||||
if (!rtd)
|
||||
goto out;
|
||||
rtd->dma_desc_array =
|
||||
|
@ -4996,7 +4996,7 @@ static struct hda_verb alc260_test_init_verbs[] = {
|
||||
*/
|
||||
|
||||
static int alc260_add_playback_controls(struct alc_spec *spec, hda_nid_t nid,
|
||||
const char *pfx)
|
||||
const char *pfx, int *vol_bits)
|
||||
{
|
||||
hda_nid_t nid_vol;
|
||||
unsigned long vol_val, sw_val;
|
||||
@ -5018,10 +5018,14 @@ static int alc260_add_playback_controls(struct alc_spec *spec, hda_nid_t nid,
|
||||
} else
|
||||
return 0; /* N/A */
|
||||
|
||||
snprintf(name, sizeof(name), "%s Playback Volume", pfx);
|
||||
err = add_control(spec, ALC_CTL_WIDGET_VOL, name, vol_val);
|
||||
if (err < 0)
|
||||
return err;
|
||||
if (!(*vol_bits & (1 << nid_vol))) {
|
||||
/* first control for the volume widget */
|
||||
snprintf(name, sizeof(name), "%s Playback Volume", pfx);
|
||||
err = add_control(spec, ALC_CTL_WIDGET_VOL, name, vol_val);
|
||||
if (err < 0)
|
||||
return err;
|
||||
*vol_bits |= (1 << nid_vol);
|
||||
}
|
||||
snprintf(name, sizeof(name), "%s Playback Switch", pfx);
|
||||
err = add_control(spec, ALC_CTL_WIDGET_MUTE, name, sw_val);
|
||||
if (err < 0)
|
||||
@ -5035,6 +5039,7 @@ static int alc260_auto_create_multi_out_ctls(struct alc_spec *spec,
|
||||
{
|
||||
hda_nid_t nid;
|
||||
int err;
|
||||
int vols = 0;
|
||||
|
||||
spec->multiout.num_dacs = 1;
|
||||
spec->multiout.dac_nids = spec->private_dac_nids;
|
||||
@ -5042,21 +5047,22 @@ static int alc260_auto_create_multi_out_ctls(struct alc_spec *spec,
|
||||
|
||||
nid = cfg->line_out_pins[0];
|
||||
if (nid) {
|
||||
err = alc260_add_playback_controls(spec, nid, "Front");
|
||||
err = alc260_add_playback_controls(spec, nid, "Front", &vols);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
nid = cfg->speaker_pins[0];
|
||||
if (nid) {
|
||||
err = alc260_add_playback_controls(spec, nid, "Speaker");
|
||||
err = alc260_add_playback_controls(spec, nid, "Speaker", &vols);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
||||
nid = cfg->hp_pins[0];
|
||||
if (nid) {
|
||||
err = alc260_add_playback_controls(spec, nid, "Headphone");
|
||||
err = alc260_add_playback_controls(spec, nid, "Headphone",
|
||||
&vols);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
|
@ -1282,7 +1282,7 @@ static int stac92xx_build_controls(struct hda_codec *codec)
|
||||
return err;
|
||||
spec->multiout.share_spdif = 1;
|
||||
}
|
||||
if (spec->dig_in_nid && (!spec->gpio_dir & 0x01)) {
|
||||
if (spec->dig_in_nid && !(spec->gpio_dir & 0x01)) {
|
||||
err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
@ -863,17 +863,21 @@ static int aic3x_set_dai_fmt(struct snd_soc_dai *codec_dai,
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
/* interface format */
|
||||
switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) {
|
||||
case SND_SOC_DAIFMT_I2S:
|
||||
/*
|
||||
* match both interface format and signal polarities since they
|
||||
* are fixed
|
||||
*/
|
||||
switch (fmt & (SND_SOC_DAIFMT_FORMAT_MASK |
|
||||
SND_SOC_DAIFMT_INV_MASK)) {
|
||||
case (SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF):
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_A:
|
||||
case (SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_IB_NF):
|
||||
iface_breg |= (0x01 << 6);
|
||||
break;
|
||||
case SND_SOC_DAIFMT_RIGHT_J:
|
||||
case (SND_SOC_DAIFMT_RIGHT_J | SND_SOC_DAIFMT_NB_NF):
|
||||
iface_breg |= (0x02 << 6);
|
||||
break;
|
||||
case SND_SOC_DAIFMT_LEFT_J:
|
||||
case (SND_SOC_DAIFMT_LEFT_J | SND_SOC_DAIFMT_NB_NF):
|
||||
iface_breg |= (0x03 << 6);
|
||||
break;
|
||||
default:
|
||||
|
@ -265,7 +265,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
break;
|
||||
case SND_SOC_DAIFMT_DSP_A:
|
||||
regs->srgr2 |= FPER(wlen * 2 - 1);
|
||||
regs->srgr1 |= FWID(0);
|
||||
regs->srgr1 |= FWID(wlen * 2 - 2);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -284,7 +284,6 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
{
|
||||
struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data);
|
||||
struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs;
|
||||
unsigned int temp_fmt = fmt;
|
||||
|
||||
if (mcbsp_data->configured)
|
||||
return 0;
|
||||
@ -307,8 +306,6 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
/* 0-bit data delay */
|
||||
regs->rcr2 |= RDATDLY(0);
|
||||
regs->xcr2 |= XDATDLY(0);
|
||||
/* Invert bit clock and FS polarity configuration for DSP_A */
|
||||
temp_fmt ^= SND_SOC_DAIFMT_IB_IF;
|
||||
break;
|
||||
default:
|
||||
/* Unsupported data format */
|
||||
@ -332,7 +329,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai,
|
||||
}
|
||||
|
||||
/* Set bit clock (CLKX/CLKR) and FS polarities */
|
||||
switch (temp_fmt & SND_SOC_DAIFMT_INV_MASK) {
|
||||
switch (fmt & SND_SOC_DAIFMT_INV_MASK) {
|
||||
case SND_SOC_DAIFMT_NB_NF:
|
||||
/*
|
||||
* Normal BCLK + FS.
|
||||
|
Loading…
Reference in New Issue
Block a user