Merge tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux
Pull clk updates from Stephen Boyd: "The diff is dominated by the Allwinner A10/A20 SoCs getting converted to the sunxi-ng framework. Otherwise, the heavy hitters are various drivers for SoCs like AT91, Amlogic, Renesas, and Rockchip. There are some other new clk drivers in here too but overall this is just a bunch of clk drivers for various different pieces of hardware and a collection of non-critical fixes for clk drivers. New Drivers: - Allwinner R40 SoCs - Renesas R-Car Gen3 USB 2.0 clock selector PHY - Atmel AT91 audio PLL - Uniphier PXs3 SoCs - ARC HSDK Board PLLs - AXS10X Board PLLs - STMicroelectronics STM32H743 SoCs Removed Drivers: - Non-compiling mb86s7x support Updates: - Allwinner A10/A20 SoCs converted to sunxi-ng framework - Allwinner H3 CPU clk fixes - Renesas R-Car D3 SoC - Renesas V2H and M3-W modules - Samsung Exynos5420/5422/5800 audio fixes - Rockchip fractional clk approximation fixes - Rockchip rk3126 SoC support within the rk3128 driver - Amlogic gxbb CEC32 and sd_emmc clks - Amlogic meson8b reset controller support - IDT VersaClock 5P49V5925/5P49V6901 support - Qualcomm MSM8996 SMMU clks - Various 'const' applications for struct clk_ops - si5351 PLL reset bugfix - Uniphier audio on LD11/LD20 and ethernet support on LD11/LD20/Pro4/PXs2 - Assorted Tegra clk driver fixes" * tag 'clk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/clk/linux: (120 commits) clk: si5351: fix PLL reset ASoC: atmel-classd: remove aclk clock ASoC: atmel-classd: remove aclk clock from DT binding clk: at91: clk-generated: make gclk determine audio_pll rate clk: at91: clk-generated: create function to find best_diff clk: at91: add audio pll clock drivers dt-bindings: clk: at91: add audio plls to the compatible list clk: at91: clk-generated: remove useless divisor loop clk: mb86s7x: Drop non-building driver clk: ti: check for null return in strrchr to avoid null dereferencing clk: Don't write error code into divider register clk: uniphier: add video input subsystem clock clk: uniphier: add audio system clock clk: stm32h7: Add stm32h743 clock driver clk: gate: expose clk_gate_ops::is_enabled clk: nxp: clk-lpc32xx: rename clk_gate_is_enabled() clk: uniphier: add PXs3 clock data clk: hi6220: change watchdog clock source clk: Kconfig: Name RK805 in Kconfig for COMMON_CLK_RK808 clk: cs2000: Add cs2000_set_saved_rate ...
这个提交包含在:
@@ -32,7 +32,6 @@ struct atmel_classd {
|
||||
struct regmap *regmap;
|
||||
struct clk *pclk;
|
||||
struct clk *gclk;
|
||||
struct clk *aclk;
|
||||
int irq;
|
||||
const struct atmel_classd_pdata *pdata;
|
||||
};
|
||||
@@ -330,11 +329,6 @@ static int atmel_classd_codec_dai_startup(struct snd_pcm_substream *substream,
|
||||
{
|
||||
struct snd_soc_pcm_runtime *rtd = substream->private_data;
|
||||
struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card);
|
||||
int ret;
|
||||
|
||||
ret = clk_prepare_enable(dd->aclk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return clk_prepare_enable(dd->gclk);
|
||||
}
|
||||
@@ -357,31 +351,31 @@ static int atmel_classd_codec_dai_digital_mute(struct snd_soc_dai *codec_dai,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define CLASSD_ACLK_RATE_11M2896_MPY_8 (112896 * 100 * 8)
|
||||
#define CLASSD_ACLK_RATE_12M288_MPY_8 (12288 * 1000 * 8)
|
||||
#define CLASSD_GCLK_RATE_11M2896_MPY_8 (112896 * 100 * 8)
|
||||
#define CLASSD_GCLK_RATE_12M288_MPY_8 (12288 * 1000 * 8)
|
||||
|
||||
static struct {
|
||||
int rate;
|
||||
int sample_rate;
|
||||
int dsp_clk;
|
||||
unsigned long aclk_rate;
|
||||
unsigned long gclk_rate;
|
||||
} const sample_rates[] = {
|
||||
{ 8000, CLASSD_INTPMR_FRAME_8K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
|
||||
{ 16000, CLASSD_INTPMR_FRAME_16K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
|
||||
{ 32000, CLASSD_INTPMR_FRAME_32K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
|
||||
{ 48000, CLASSD_INTPMR_FRAME_48K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
|
||||
{ 96000, CLASSD_INTPMR_FRAME_96K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_ACLK_RATE_12M288_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_12M288, CLASSD_GCLK_RATE_12M288_MPY_8 },
|
||||
{ 22050, CLASSD_INTPMR_FRAME_22K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_ACLK_RATE_11M2896_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_GCLK_RATE_11M2896_MPY_8 },
|
||||
{ 44100, CLASSD_INTPMR_FRAME_44K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_ACLK_RATE_11M2896_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_GCLK_RATE_11M2896_MPY_8 },
|
||||
{ 88200, CLASSD_INTPMR_FRAME_88K,
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_ACLK_RATE_11M2896_MPY_8 },
|
||||
CLASSD_INTPMR_DSP_CLK_FREQ_11M2896, CLASSD_GCLK_RATE_11M2896_MPY_8 },
|
||||
};
|
||||
|
||||
static int
|
||||
@@ -410,13 +404,12 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
}
|
||||
|
||||
dev_dbg(codec->dev,
|
||||
"Selected SAMPLE_RATE of %dHz, ACLK_RATE of %ldHz\n",
|
||||
sample_rates[best].rate, sample_rates[best].aclk_rate);
|
||||
"Selected SAMPLE_RATE of %dHz, GCLK_RATE of %ldHz\n",
|
||||
sample_rates[best].rate, sample_rates[best].gclk_rate);
|
||||
|
||||
clk_disable_unprepare(dd->gclk);
|
||||
clk_disable_unprepare(dd->aclk);
|
||||
|
||||
ret = clk_set_rate(dd->aclk, sample_rates[best].aclk_rate);
|
||||
ret = clk_set_rate(dd->gclk, sample_rates[best].gclk_rate);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -426,10 +419,6 @@ atmel_classd_codec_dai_hw_params(struct snd_pcm_substream *substream,
|
||||
|
||||
snd_soc_update_bits(codec, CLASSD_INTPMR, mask, val);
|
||||
|
||||
ret = clk_prepare_enable(dd->aclk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return clk_prepare_enable(dd->gclk);
|
||||
}
|
||||
|
||||
@@ -441,7 +430,6 @@ atmel_classd_codec_dai_shutdown(struct snd_pcm_substream *substream,
|
||||
struct atmel_classd *dd = snd_soc_card_get_drvdata(rtd->card);
|
||||
|
||||
clk_disable_unprepare(dd->gclk);
|
||||
clk_disable_unprepare(dd->aclk);
|
||||
}
|
||||
|
||||
static int atmel_classd_codec_dai_prepare(struct snd_pcm_substream *substream,
|
||||
@@ -596,13 +584,6 @@ static int atmel_classd_probe(struct platform_device *pdev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
dd->aclk = devm_clk_get(dev, "aclk");
|
||||
if (IS_ERR(dd->aclk)) {
|
||||
ret = PTR_ERR(dd->aclk);
|
||||
dev_err(dev, "failed to get audio clock: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
io_base = devm_ioremap_resource(dev, res);
|
||||
if (IS_ERR(io_base)) {
|
||||
|
在新工单中引用
屏蔽一个用户