summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorTao Huang <huangtao@rock-chips.com>2018-03-21 10:39:44 +0800
committerTao Huang <huangtao@rock-chips.com>2018-03-21 10:45:13 +0800
commit3fa24cc5405206a785acc2022e8ddad574ed9083 (patch)
tree844e8c55ca9b2ea85b01b7ebd8f1293e9eba27b8 /sound
parent2aec6208816753d83a262a00e0d34e608be627c8 (diff)
Revert "ASoC: rockchip: i2s: protect I2S_XFER_TXS/I2S_XFER_RXS with mutex"
This reverts commit 686662c6f15d52318821d449787eea75432940f6. BUG: sleeping function called from invalid context at kernel/locking/mutex.c:620 in_atomic(): 1, irqs_disabled(): 128, pid: 385, name: FastMixer 2 locks held by FastMixer/385: #0: (snd_pcm_link_rwlock){......}, at: [<ffffff9008f4130c>] snd_pcm_stream_lock+0x5c/0x68 #1: (&(&substream->self_group.lock)->rlock){......}, at: [<ffffff9008f41314>] snd_pcm_stream_lock+0x64/0x68 CPU: 4 PID: 385 Comm: FastMixer Not tainted 4.4.120 #4996 Hardware name: Rockchip RK3399 Excavator Board edp (Android) (DT) Call trace: [<ffffff900808cf7c>] dump_backtrace+0x0/0x2b4 [<ffffff900808d244>] show_stack+0x14/0x1c [<ffffff90085670bc>] dump_stack+0xa8/0xd8 [<ffffff90080ead48>] ___might_sleep+0x178/0x17c [<ffffff90080eae08>] __might_sleep+0xbc/0xd4 [<ffffff900935a6d0>] mutex_lock_nested+0xa4/0x504 [<ffffff9008fa431c>] rockchip_i2s_trigger+0x164/0x3d0 [<ffffff9008f89960>] soc_pcm_trigger+0x188/0x1b8 [<ffffff9008f3df74>] snd_pcm_do_start+0x54/0x68 [<ffffff9008f3ddcc>] snd_pcm_action_single+0x50/0x98 [<ffffff9008f3eafc>] snd_pcm_action+0x50/0x150 [<ffffff9008f49824>] snd_pcm_start+0x20/0x28 [<ffffff9008f4f5e0>] snd_pcm_lib_write1+0x4a4/0x508 [<ffffff9008f4f6d0>] snd_pcm_lib_write+0x8c/0xac [<ffffff9008f3fd0c>] snd_pcm_ioctl_xferi_compat+0x188/0x35c [<ffffff9008f49374>] snd_pcm_ioctl_compat+0x32c/0x7bc [<ffffff90082f2de8>] compat_SyS_ioctl+0x1f4/0x258 [<ffffff90080832f0>] el0_svc_naked+0x24/0x28 Change-Id: Id4ad668bb5b8cdbb79aecc1d00fed200acf0d6da
Diffstat (limited to 'sound')
-rw-r--r--sound/soc/rockchip/rockchip_i2s.c13
1 files changed, 2 insertions, 11 deletions
diff --git a/sound/soc/rockchip/rockchip_i2s.c b/sound/soc/rockchip/rockchip_i2s.c
index 650f6b5200ab..7687368779db 100644
--- a/sound/soc/rockchip/rockchip_i2s.c
+++ b/sound/soc/rockchip/rockchip_i2s.c
@@ -32,7 +32,6 @@ struct rk_i2s_pins {
struct rk_i2s_dev {
struct device *dev;
- struct mutex lock; /* txctrl/rxctrl lock */
struct clk *hclk;
struct clk *mclk;
@@ -96,7 +95,6 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
unsigned int val = 0;
int retry = 10;
- mutex_lock(&i2s->lock);
if (on) {
regmap_update_bits(i2s->regmap, I2S_DMACR,
I2S_DMACR_TDE_ENABLE, I2S_DMACR_TDE_ENABLE);
@@ -131,14 +129,12 @@ static void rockchip_snd_txctrl(struct rk_i2s_dev *i2s, int on)
regmap_read(i2s->regmap, I2S_CLR, &val);
retry--;
if (!retry) {
- dev_warn(i2s->dev, "%s: fail to clear\n",
- __func__);
+ dev_warn(i2s->dev, "fail to clear\n");
break;
}
}
}
}
- mutex_unlock(&i2s->lock);
}
static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
@@ -146,7 +142,6 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
unsigned int val = 0;
int retry = 10;
- mutex_lock(&i2s->lock);
if (on) {
regmap_update_bits(i2s->regmap, I2S_DMACR,
I2S_DMACR_RDE_ENABLE, I2S_DMACR_RDE_ENABLE);
@@ -181,14 +176,12 @@ static void rockchip_snd_rxctrl(struct rk_i2s_dev *i2s, int on)
regmap_read(i2s->regmap, I2S_CLR, &val);
retry--;
if (!retry) {
- dev_warn(i2s->dev, "%s: fail to clear\n",
- __func__);
+ dev_warn(i2s->dev, "fail to clear\n");
break;
}
}
}
}
- mutex_unlock(&i2s->lock);
}
static int rockchip_i2s_set_fmt(struct snd_soc_dai *cpu_dai,
@@ -608,8 +601,6 @@ static int rockchip_i2s_probe(struct platform_device *pdev)
i2s->dev = &pdev->dev;
- mutex_init(&i2s->lock);
-
i2s->grf = syscon_regmap_lookup_by_phandle(node, "rockchip,grf");
if (!IS_ERR(i2s->grf)) {
of_id = of_match_device(rockchip_i2s_match, &pdev->dev);