Loading Documentation/devicetree/bindings/sound/fsl-asoc-card.txt +2 −0 Original line number Diff line number Diff line Loading @@ -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. Loading sound/soc/amd/acp-pcm-dma.c +1 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading sound/soc/codecs/arizona.c +42 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } } Loading @@ -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; } } Loading @@ -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"); Loading sound/soc/dwc/designware_i2s.c +2 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading sound/soc/fsl/fsl_ssi.c +22 −20 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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; }; Loading Loading @@ -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, }; Loading Loading @@ -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); /* 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 Loading Loading @@ -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) Loading Loading @@ -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"); Loading Loading
Documentation/devicetree/bindings/sound/fsl-asoc-card.txt +2 −0 Original line number Diff line number Diff line Loading @@ -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. Loading
sound/soc/amd/acp-pcm-dma.c +1 −0 Original line number Diff line number Diff line Loading @@ -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; } Loading
sound/soc/codecs/arizona.c +42 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } } Loading @@ -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; } } Loading @@ -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"); Loading
sound/soc/dwc/designware_i2s.c +2 −3 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 { Loading
sound/soc/fsl/fsl_ssi.c +22 −20 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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, Loading @@ -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; }; Loading Loading @@ -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, }; Loading Loading @@ -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); /* 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 Loading Loading @@ -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) Loading Loading @@ -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"); Loading