Skip to content

Commit b942a50

Browse files
yihsin-hungasus-leslieyu
authored andcommitted
ASoC: rockchip: i2s: add pcm transfer mode support.
usage: add i2s dts property "rockchip,xfer-mode" rockchip,xfer-mode = <0>: i2s transfer mode. rockchip,xfer-mode = <1>: pcm transfer mode. i2s transfer mode is default. pcm transfer mode is usually used for bt voice. Change-Id: Ice04a180c72141d854ffeaa55b8a7b9738597936 Signed-off-by: Nickey Yang <nickey.yang@rock-chips.com> Signed-off-by: yi-hsin_hung <yi-hsin_hung@asus.com>
1 parent 15a5310 commit b942a50

2 files changed

Lines changed: 26 additions & 0 deletions

File tree

sound/soc/rockchip/rockchip_i2s.c

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@
2323

2424
#include "rockchip_i2s.h"
2525

26+
#define I2S_XFER_MODE 0
27+
#define PCM_XFER_MODE 1
28+
2629
#define DRV_NAME "rockchip-i2s"
2730

2831
struct rk_i2s_pins {
@@ -50,6 +53,7 @@ struct rk_i2s_dev {
5053
bool tx_start;
5154
bool rx_start;
5255
bool is_master_mode;
56+
int xfer_mode; /* 0: i2s, 1: pcm */
5357
const struct rk_i2s_pins *pins;
5458
};
5559

@@ -638,6 +642,18 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
638642
return ret;
639643
}
640644

645+
ret = of_property_read_u32(node, "rockchip,xfer-mode", &i2s->xfer_mode);
646+
if (ret < 0)
647+
i2s->xfer_mode = I2S_XFER_MODE;
648+
649+
if (PCM_XFER_MODE == i2s->xfer_mode) {
650+
regmap_update_bits(i2s->regmap, I2S_TXCR,
651+
I2S_TXCR_TFS_MASK,
652+
I2S_TXCR_TFS_PCM);
653+
regmap_update_bits(i2s->regmap, I2S_RXCR,
654+
I2S_RXCR_TFS_MASK,
655+
I2S_RXCR_TFS_PCM);
656+
}
641657
return 0;
642658

643659
err_suspend:
@@ -682,6 +698,14 @@ static int rockchip_i2s_resume(struct device *dev)
682698
if (ret < 0)
683699
return ret;
684700
ret = regcache_sync(i2s->regmap);
701+
if (PCM_XFER_MODE == i2s->xfer_mode) {
702+
regmap_update_bits(i2s->regmap, I2S_TXCR,
703+
I2S_TXCR_TFS_MASK,
704+
I2S_TXCR_TFS_PCM);
705+
regmap_update_bits(i2s->regmap, I2S_RXCR,
706+
I2S_RXCR_TFS_MASK,
707+
I2S_RXCR_TFS_PCM);
708+
}
685709
pm_runtime_put(dev);
686710

687711
return ret;

sound/soc/rockchip/rockchip_i2s.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
#define I2S_TXCR_TFS_SHIFT 5
4242
#define I2S_TXCR_TFS_I2S (0 << I2S_TXCR_TFS_SHIFT)
4343
#define I2S_TXCR_TFS_PCM (1 << I2S_TXCR_TFS_SHIFT)
44+
#define I2S_TXCR_TFS_MASK (1 << I2S_TXCR_TFS_SHIFT)
4445
#define I2S_TXCR_VDW_SHIFT 0
4546
#define I2S_TXCR_VDW(x) ((x - 1) << I2S_TXCR_VDW_SHIFT)
4647
#define I2S_TXCR_VDW_MASK (0x1f << I2S_TXCR_VDW_SHIFT)
@@ -70,6 +71,7 @@
7071
#define I2S_RXCR_TFS_SHIFT 5
7172
#define I2S_RXCR_TFS_I2S (0 << I2S_RXCR_TFS_SHIFT)
7273
#define I2S_RXCR_TFS_PCM (1 << I2S_RXCR_TFS_SHIFT)
74+
#define I2S_RXCR_TFS_MASK (1 << I2S_RXCR_TFS_SHIFT)
7375
#define I2S_RXCR_VDW_SHIFT 0
7476
#define I2S_RXCR_VDW(x) ((x - 1) << I2S_RXCR_VDW_SHIFT)
7577
#define I2S_RXCR_VDW_MASK (0x1f << I2S_RXCR_VDW_SHIFT)

0 commit comments

Comments
 (0)