1 From 3de372324ab5583d40e5eb111ab7134d2824d131 Mon Sep 17 00:00:00 2001
2 From: Charles Keepax <ckeepax@opensource.cirrus.com>
3 Date: Thu, 4 Apr 2019 17:27:20 +0100
4 Subject: ASoC: cs35l35: Disable regulators on driver removal
6 [ Upstream commit 47c4cc08cb5b34e93ab337b924c5ede77ca3c936 ]
8 The chips main power supplies VA and VP are enabled during probe but
9 then never disabled, this will cause warnings from the regulator
10 framework on driver removal. Fix this by adding a remove callback and
11 disabling the supplies, whilst doing so follow best practice and put the
12 chip back into reset as well.
14 Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
15 Signed-off-by: Mark Brown <broonie@kernel.org>
16 Signed-off-by: Sasha Levin <sashal@kernel.org>
18 sound/soc/codecs/cs35l35.c | 11 +++++++++++
19 1 file changed, 11 insertions(+)
21 diff --git a/sound/soc/codecs/cs35l35.c b/sound/soc/codecs/cs35l35.c
22 index bd6226bde45f6..17e0101081ef6 100644
23 --- a/sound/soc/codecs/cs35l35.c
24 +++ b/sound/soc/codecs/cs35l35.c
25 @@ -1634,6 +1634,16 @@ static int cs35l35_i2c_probe(struct i2c_client *i2c_client,
29 +static int cs35l35_i2c_remove(struct i2c_client *i2c_client)
31 + struct cs35l35_private *cs35l35 = i2c_get_clientdata(i2c_client);
33 + regulator_bulk_disable(cs35l35->num_supplies, cs35l35->supplies);
34 + gpiod_set_value_cansleep(cs35l35->reset_gpio, 0);
39 static const struct of_device_id cs35l35_of_match[] = {
40 {.compatible = "cirrus,cs35l35"},
42 @@ -1654,6 +1664,7 @@ static struct i2c_driver cs35l35_i2c_driver = {
44 .id_table = cs35l35_id,
45 .probe = cs35l35_i2c_probe,
46 + .remove = cs35l35_i2c_remove,
49 module_i2c_driver(cs35l35_i2c_driver);