Merge remote-tracking branches 'asoc/fix/amd', 'asoc/fix/arizona', 'asoc/fix/dpcm', 'asoc/fix/dwc', 'asoc/fix/fsl' and 'asoc/fix/fsl-ssi' into asoc-linus
This commit is contained in:
commit
cf0d6dd9d3
|
@ -30,6 +30,8 @@ The compatible list for this generic sound card currently:
|
|||
"fsl,imx-audio-sgtl5000"
|
||||
(compatible with Documentation/devicetree/bindings/sound/imx-audio-sgtl5000.txt)
|
||||
|
||||
"fsl,imx-audio-wm8960"
|
||||
|
||||
Required properties:
|
||||
|
||||
- compatible : Contains one of entries in the compatible list.
|
||||
|
|
|
@ -635,6 +635,7 @@ static int acp_dma_open(struct snd_pcm_substream *substream)
|
|||
SNDRV_PCM_HW_PARAM_PERIODS);
|
||||
if (ret < 0) {
|
||||
dev_err(prtd->platform->dev, "set integer constraint failed\n");
|
||||
kfree(adata);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -1929,6 +1929,25 @@ static struct {
|
|||
{ 1000000, 13500000, 0, 1 },
|
||||
};
|
||||
|
||||
static const unsigned int pseudo_fref_max[ARIZONA_FLL_MAX_FRATIO] = {
|
||||
13500000,
|
||||
6144000,
|
||||
6144000,
|
||||
3072000,
|
||||
3072000,
|
||||
2822400,
|
||||
2822400,
|
||||
1536000,
|
||||
1536000,
|
||||
1536000,
|
||||
1536000,
|
||||
1536000,
|
||||
1536000,
|
||||
1536000,
|
||||
1536000,
|
||||
768000,
|
||||
};
|
||||
|
||||
static struct {
|
||||
unsigned int min;
|
||||
unsigned int max;
|
||||
|
@ -2042,16 +2061,32 @@ static int arizona_calc_fratio(struct arizona_fll *fll,
|
|||
/* Adjust FRATIO/refdiv to avoid integer mode if possible */
|
||||
refdiv = cfg->refdiv;
|
||||
|
||||
arizona_fll_dbg(fll, "pseudo: initial ratio=%u fref=%u refdiv=%u\n",
|
||||
init_ratio, Fref, refdiv);
|
||||
|
||||
while (div <= ARIZONA_FLL_MAX_REFDIV) {
|
||||
for (ratio = init_ratio; ratio <= ARIZONA_FLL_MAX_FRATIO;
|
||||
ratio++) {
|
||||
if ((ARIZONA_FLL_VCO_CORNER / 2) /
|
||||
(fll->vco_mult * ratio) < Fref)
|
||||
(fll->vco_mult * ratio) < Fref) {
|
||||
arizona_fll_dbg(fll, "pseudo: hit VCO corner\n");
|
||||
break;
|
||||
}
|
||||
|
||||
if (Fref > pseudo_fref_max[ratio - 1]) {
|
||||
arizona_fll_dbg(fll,
|
||||
"pseudo: exceeded max fref(%u) for ratio=%u\n",
|
||||
pseudo_fref_max[ratio - 1],
|
||||
ratio);
|
||||
break;
|
||||
}
|
||||
|
||||
if (target % (ratio * Fref)) {
|
||||
cfg->refdiv = refdiv;
|
||||
cfg->fratio = ratio - 1;
|
||||
arizona_fll_dbg(fll,
|
||||
"pseudo: found fref=%u refdiv=%d(%d) ratio=%d\n",
|
||||
Fref, refdiv, div, ratio);
|
||||
return ratio;
|
||||
}
|
||||
}
|
||||
|
@ -2060,6 +2095,9 @@ static int arizona_calc_fratio(struct arizona_fll *fll,
|
|||
if (target % (ratio * Fref)) {
|
||||
cfg->refdiv = refdiv;
|
||||
cfg->fratio = ratio - 1;
|
||||
arizona_fll_dbg(fll,
|
||||
"pseudo: found fref=%u refdiv=%d(%d) ratio=%d\n",
|
||||
Fref, refdiv, div, ratio);
|
||||
return ratio;
|
||||
}
|
||||
}
|
||||
|
@ -2068,6 +2106,9 @@ static int arizona_calc_fratio(struct arizona_fll *fll,
|
|||
Fref /= 2;
|
||||
refdiv++;
|
||||
init_ratio = arizona_find_fratio(Fref, NULL);
|
||||
arizona_fll_dbg(fll,
|
||||
"pseudo: change fref=%u refdiv=%d(%d) ratio=%u\n",
|
||||
Fref, refdiv, div, init_ratio);
|
||||
}
|
||||
|
||||
arizona_fll_warn(fll, "Falling back to integer mode operation\n");
|
||||
|
|
|
@ -645,6 +645,8 @@ static int dw_i2s_probe(struct platform_device *pdev)
|
|||
|
||||
dev->dev = &pdev->dev;
|
||||
|
||||
dev->i2s_reg_comp1 = I2S_COMP_PARAM_1;
|
||||
dev->i2s_reg_comp2 = I2S_COMP_PARAM_2;
|
||||
if (pdata) {
|
||||
dev->capability = pdata->cap;
|
||||
clk_id = NULL;
|
||||
|
@ -652,9 +654,6 @@ static int dw_i2s_probe(struct platform_device *pdev)
|
|||
if (dev->quirks & DW_I2S_QUIRK_COMP_REG_OFFSET) {
|
||||
dev->i2s_reg_comp1 = pdata->i2s_reg_comp1;
|
||||
dev->i2s_reg_comp2 = pdata->i2s_reg_comp2;
|
||||
} else {
|
||||
dev->i2s_reg_comp1 = I2S_COMP_PARAM_1;
|
||||
dev->i2s_reg_comp2 = I2S_COMP_PARAM_2;
|
||||
}
|
||||
ret = dw_configure_dai_by_pd(dev, dw_i2s_dai, res, pdata);
|
||||
} else {
|
||||
|
|
|
@ -112,20 +112,6 @@ struct fsl_ssi_rxtx_reg_val {
|
|||
struct fsl_ssi_reg_val tx;
|
||||
};
|
||||
|
||||
static const struct reg_default fsl_ssi_reg_defaults[] = {
|
||||
{CCSR_SSI_SCR, 0x00000000},
|
||||
{CCSR_SSI_SIER, 0x00003003},
|
||||
{CCSR_SSI_STCR, 0x00000200},
|
||||
{CCSR_SSI_SRCR, 0x00000200},
|
||||
{CCSR_SSI_STCCR, 0x00040000},
|
||||
{CCSR_SSI_SRCCR, 0x00040000},
|
||||
{CCSR_SSI_SACNT, 0x00000000},
|
||||
{CCSR_SSI_STMSK, 0x00000000},
|
||||
{CCSR_SSI_SRMSK, 0x00000000},
|
||||
{CCSR_SSI_SACCEN, 0x00000000},
|
||||
{CCSR_SSI_SACCDIS, 0x00000000},
|
||||
};
|
||||
|
||||
static bool fsl_ssi_readable_reg(struct device *dev, unsigned int reg)
|
||||
{
|
||||
switch (reg) {
|
||||
|
@ -190,8 +176,7 @@ static const struct regmap_config fsl_ssi_regconfig = {
|
|||
.val_bits = 32,
|
||||
.reg_stride = 4,
|
||||
.val_format_endian = REGMAP_ENDIAN_NATIVE,
|
||||
.reg_defaults = fsl_ssi_reg_defaults,
|
||||
.num_reg_defaults = ARRAY_SIZE(fsl_ssi_reg_defaults),
|
||||
.num_reg_defaults_raw = CCSR_SSI_SACCDIS / sizeof(uint32_t) + 1,
|
||||
.readable_reg = fsl_ssi_readable_reg,
|
||||
.volatile_reg = fsl_ssi_volatile_reg,
|
||||
.precious_reg = fsl_ssi_precious_reg,
|
||||
|
@ -201,6 +186,7 @@ static const struct regmap_config fsl_ssi_regconfig = {
|
|||
|
||||
struct fsl_ssi_soc_data {
|
||||
bool imx;
|
||||
bool imx21regs; /* imx21-class SSI - no SACC{ST,EN,DIS} regs */
|
||||
bool offline_config;
|
||||
u32 sisr_write_mask;
|
||||
};
|
||||
|
@ -303,6 +289,7 @@ static struct fsl_ssi_soc_data fsl_ssi_mpc8610 = {
|
|||
|
||||
static struct fsl_ssi_soc_data fsl_ssi_imx21 = {
|
||||
.imx = true,
|
||||
.imx21regs = true,
|
||||
.offline_config = true,
|
||||
.sisr_write_mask = 0,
|
||||
};
|
||||
|
@ -586,8 +573,12 @@ static void fsl_ssi_setup_ac97(struct fsl_ssi_private *ssi_private)
|
|||
*/
|
||||
regmap_write(regs, CCSR_SSI_SACNT,
|
||||
CCSR_SSI_SACNT_AC97EN | CCSR_SSI_SACNT_FV);
|
||||
regmap_write(regs, CCSR_SSI_SACCDIS, 0xff);
|
||||
regmap_write(regs, CCSR_SSI_SACCEN, 0x300);
|
||||
|
||||
/* no SACC{ST,EN,DIS} regs on imx21-class SSI */
|
||||
if (!ssi_private->soc->imx21regs) {
|
||||
regmap_write(regs, CCSR_SSI_SACCDIS, 0xff);
|
||||
regmap_write(regs, CCSR_SSI_SACCEN, 0x300);
|
||||
}
|
||||
|
||||
/*
|
||||
* Enable SSI, Transmit and Receive. AC97 has to communicate with the
|
||||
|
@ -1397,6 +1388,7 @@ static int fsl_ssi_probe(struct platform_device *pdev)
|
|||
struct resource *res;
|
||||
void __iomem *iomem;
|
||||
char name[64];
|
||||
struct regmap_config regconfig = fsl_ssi_regconfig;
|
||||
|
||||
of_id = of_match_device(fsl_ssi_ids, &pdev->dev);
|
||||
if (!of_id || !of_id->data)
|
||||
|
@ -1444,15 +1436,25 @@ static int fsl_ssi_probe(struct platform_device *pdev)
|
|||
return PTR_ERR(iomem);
|
||||
ssi_private->ssi_phys = res->start;
|
||||
|
||||
if (ssi_private->soc->imx21regs) {
|
||||
/*
|
||||
* According to datasheet imx21-class SSI
|
||||
* don't have SACC{ST,EN,DIS} regs.
|
||||
*/
|
||||
regconfig.max_register = CCSR_SSI_SRMSK;
|
||||
regconfig.num_reg_defaults_raw =
|
||||
CCSR_SSI_SRMSK / sizeof(uint32_t) + 1;
|
||||
}
|
||||
|
||||
ret = of_property_match_string(np, "clock-names", "ipg");
|
||||
if (ret < 0) {
|
||||
ssi_private->has_ipg_clk_name = false;
|
||||
ssi_private->regs = devm_regmap_init_mmio(&pdev->dev, iomem,
|
||||
&fsl_ssi_regconfig);
|
||||
®config);
|
||||
} else {
|
||||
ssi_private->has_ipg_clk_name = true;
|
||||
ssi_private->regs = devm_regmap_init_mmio_clk(&pdev->dev,
|
||||
"ipg", iomem, &fsl_ssi_regconfig);
|
||||
"ipg", iomem, ®config);
|
||||
}
|
||||
if (IS_ERR(ssi_private->regs)) {
|
||||
dev_err(&pdev->dev, "Failed to init register map\n");
|
||||
|
|
|
@ -1810,7 +1810,8 @@ int dpcm_be_dai_hw_free(struct snd_soc_pcm_runtime *fe, int stream)
|
|||
(be->dpcm[stream].state != SND_SOC_DPCM_STATE_PREPARE) &&
|
||||
(be->dpcm[stream].state != SND_SOC_DPCM_STATE_HW_FREE) &&
|
||||
(be->dpcm[stream].state != SND_SOC_DPCM_STATE_PAUSED) &&
|
||||
(be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP))
|
||||
(be->dpcm[stream].state != SND_SOC_DPCM_STATE_STOP) &&
|
||||
(be->dpcm[stream].state != SND_SOC_DPCM_STATE_SUSPEND))
|
||||
continue;
|
||||
|
||||
dev_dbg(be->dev, "ASoC: hw_free BE %s\n",
|
||||
|
|
Loading…
Reference in New Issue