From: Nicolin Chen Date: Thu, 12 Sep 2013 06:56:36 +0000 (+0800) Subject: ENGR00279368-3 mxc: asrc: Add missing clock control X-Git-Tag: KARO-TX6-2014-08-21~1^2~219 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a6abaf11083f6699c87c41e048032f893fddd66c;p=karo-tx-linux.git ENGR00279368-3 mxc: asrc: Add missing clock control * Add missing clock control * Set ASRC clock to 7.5MHz as 3.0.35 does * Use the same divisor for ideal ratio mode as 3.0.35 does Acked-by: Wang Shengjiu Signed-off-by: Nicolin Chen --- diff --git a/arch/arm/mach-imx/clk-imx6q.c b/arch/arm/mach-imx/clk-imx6q.c index f90b62f12c07..a7996f63a014 100644 --- a/arch/arm/mach-imx/clk-imx6q.c +++ b/arch/arm/mach-imx/clk-imx6q.c @@ -515,6 +515,8 @@ static void __init imx6q_clocks_init(struct device_node *ccm_node) /* Audio-related clocks configuration */ clk_set_parent(clk[spdif_sel], clk[pll3_pfd3_454m]); + clk_set_parent(clk[asrc_sel], clk[pll3_usb_otg]); + clk_set_rate(clk[asrc_sel], 7500000); /* All existing boards with PCIe use LVDS1 */ if (IS_ENABLED(CONFIG_PCI_IMX6)) diff --git a/drivers/mxc/asrc/mxc_asrc.c b/drivers/mxc/asrc/mxc_asrc.c index 3bba8f46980a..5ae42217b77c 100644 --- a/drivers/mxc/asrc/mxc_asrc.c +++ b/drivers/mxc/asrc/mxc_asrc.c @@ -680,6 +680,8 @@ EXPORT_SYMBOL(asrc_get_per_addr); static int mxc_init_asrc(void) { + clk_enable(asrc->asrc_clk); + /* Halt ASRC internal FP when input FIFO needs data for pair A, B, C */ asrc_regmap_write(asrc->regmap, REG_ASRCTR, ASRCTR_ASRCEN); @@ -708,6 +710,8 @@ static int mxc_init_asrc(void) /* Set the processing clock for 56KHz, 133M */ asrc_regmap_write(asrc->regmap, REG_ASR56K, 0x0947); + clk_disable(asrc->asrc_clk); + return 0; } @@ -1927,7 +1931,7 @@ static int mxc_asrc_probe(struct platform_device *pdev) goto err_iomap; } #ifndef ASRC_USE_REGMAP - clk_prepare_enable(asrc->asrc_clk); + clk_prepare(asrc->asrc_clk); #endif ret = of_property_read_u32_array(pdev->dev.of_node, @@ -1984,6 +1988,9 @@ err_iomap: static int mxc_asrc_remove(struct platform_device *pdev) { +#ifndef ASRC_USE_REGMAP + clk_unprepare(asrc->asrc_clk); +#endif asrc_proc_remove(); misc_deregister(&asrc_miscdev); diff --git a/include/linux/mxc_asrc.h b/include/linux/mxc_asrc.h index 9f742a9da80e..ecee963193af 100644 --- a/include/linux/mxc_asrc.h +++ b/include/linux/mxc_asrc.h @@ -30,7 +30,7 @@ /* Ideal Ratio mode doesn't care the outclk frequency, so be fixed */ -#define ASRC_PRESCALER_IDEAL_RATIO 7 +#define ASRC_PRESCALER_IDEAL_RATIO 5 /* SPDIF rxclk pulse rate is 128 * samplerate, so 2 ^ 7 */ #define ASRC_PRESCALER_SPDIF_RX 7 /* SPDIF txclk pulse rate is 64 * samplerate, so 2 ^ 6 */