From: Sugar Zhang Date: Mon, 26 Dec 2016 06:11:45 +0000 (+0800) Subject: ASoC: rockchip: i2s: add support for i2s bclk fs configuration X-Git-Tag: firefly_0821_release~981 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=301447375511ed39444389ff0eabc1f25f26b9d8;p=firefly-linux-kernel-4.4.55.git ASoC: rockchip: i2s: add support for i2s bclk fs configuration this patch add support for i2s bclk fs configuration, we can configure bclk_fs by devicetree as required. Change-Id: I7e034e0466793b5b9eab6566a43e90213f219bb0 Signed-off-by: Sugar Zhang --- diff --git a/Documentation/devicetree/bindings/sound/rockchip-i2s.txt b/Documentation/devicetree/bindings/sound/rockchip-i2s.txt index 4ea29aa9af59..ebb54bd168da 100644 --- a/Documentation/devicetree/bindings/sound/rockchip-i2s.txt +++ b/Documentation/devicetree/bindings/sound/rockchip-i2s.txt @@ -22,6 +22,7 @@ Required properties: - "i2s_clk" : clock for I2S controller - rockchip,playback-channels: max playback channels, if not set, 8 channels default. - rockchip,capture-channels: max capture channels, if not set, 2 channels default. +- rockchip,bclk-fs: configure the i2s bclk fs. Required properties for controller which support multi channels playback/capture: @@ -40,4 +41,5 @@ i2s@ff890000 { clocks = <&cru HCLK_I2S0>, <&cru SCLK_I2S0>; rockchip,playback-channels = <8>; rockchip,capture-channels = <2>; + rockchip,bclk-fs = <64>; }; diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c index d2d66f0b9e1f..f66ce65c24ce 100644 --- a/sound/soc/rockchip/rockchip_i2s.c +++ b/sound/soc/rockchip/rockchip_i2s.c @@ -51,6 +51,7 @@ struct rk_i2s_dev { bool rx_start; bool is_master_mode; const struct rk_i2s_pins *pins; + unsigned int bclk_fs; }; static int i2s_runtime_suspend(struct device *dev) @@ -252,7 +253,7 @@ static int rockchip_i2s_hw_params(struct snd_pcm_substream *substream, if (i2s->is_master_mode) { mclk_rate = clk_get_rate(i2s->mclk); - bclk_rate = 2 * 32 * params_rate(params); + bclk_rate = i2s->bclk_fs * params_rate(params); if (bclk_rate && mclk_rate % bclk_rate) return -EINVAL; @@ -631,6 +632,12 @@ static int rockchip_i2s_probe(struct platform_device *pdev) soc_dai->capture.channels_max = val; } + i2s->bclk_fs = 64; + if (!of_property_read_u32(node, "rockchip,bclk-fs", &val)) { + if ((val >= 32) && (val % 2 == 0)) + i2s->bclk_fs = val; + } + ret = devm_snd_soc_register_component(&pdev->dev, &rockchip_i2s_component, soc_dai, 1);