Skip to content

Commit 44cb08f

Browse files
committed
ASoC: Convert remaining Realtek codecs to GPIO
Merge series from Linus Walleij <linus.walleij@linaro.org>: After dropping unused headers a few Realtek devices actually using the GPIO descriptors remain. Converting them to use optional GPIO descriptors is pretty straight-forward.
2 parents b41efc2 + 8793bee commit 44cb08f

14 files changed

Lines changed: 68 additions & 91 deletions

File tree

include/sound/rt5665.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ struct rt5665_platform_data {
3131
bool in3_diff;
3232
bool in4_diff;
3333

34-
int ldo1_en; /* GPIO for LDO1_EN */
35-
3634
enum rt5665_dmic1_data_pin dmic1_data_pin;
3735
enum rt5665_dmic2_data_pin dmic2_data_pin;
3836
enum rt5665_jd_src jd_src;

include/sound/rt5668.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,6 @@ enum rt5668_jd_src {
2525
};
2626

2727
struct rt5668_platform_data {
28-
29-
int ldo1_en; /* GPIO for LDO1_EN */
30-
3128
enum rt5668_dmic1_data_pin dmic1_data_pin;
3229
enum rt5668_dmic1_clk_pin dmic1_clk_pin;
3330
enum rt5668_jd_src jd_src;

include/sound/rt5682.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ enum rt5682_dai_clks {
3131
};
3232

3333
struct rt5682_platform_data {
34-
35-
int ldo1_en; /* GPIO for LDO1_EN */
36-
3734
enum rt5682_dmic1_data_pin dmic1_data_pin;
3835
enum rt5682_dmic1_clk_pin dmic1_clk_pin;
3936
enum rt5682_jd_src jd_src;

include/sound/rt5682s.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,6 @@ enum rt5682s_dai_clks {
3232
};
3333

3434
struct rt5682s_platform_data {
35-
36-
int ldo1_en; /* GPIO for LDO1_EN */
37-
3835
enum rt5682s_dmic1_data_pin dmic1_data_pin;
3936
enum rt5682s_dmic1_clk_pin dmic1_clk_pin;
4037
enum rt5682s_jd_src jd_src;

sound/soc/codecs/rt5640.c

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,10 @@
1212
#include <linux/init.h>
1313
#include <linux/delay.h>
1414
#include <linux/pm.h>
15-
#include <linux/gpio.h>
15+
#include <linux/gpio/consumer.h>
1616
#include <linux/i2c.h>
1717
#include <linux/regmap.h>
1818
#include <linux/of.h>
19-
#include <linux/of_gpio.h>
2019
#include <linux/platform_device.h>
2120
#include <linux/spi/spi.h>
2221
#include <linux/acpi.h>
@@ -2812,8 +2811,8 @@ static int rt5640_suspend(struct snd_soc_component *component)
28122811
rt5640_reset(component);
28132812
regcache_cache_only(rt5640->regmap, true);
28142813
regcache_mark_dirty(rt5640->regmap);
2815-
if (gpio_is_valid(rt5640->ldo1_en))
2816-
gpio_set_value_cansleep(rt5640->ldo1_en, 0);
2814+
if (rt5640->ldo1_en)
2815+
gpiod_set_value_cansleep(rt5640->ldo1_en, 0);
28172816

28182817
return 0;
28192818
}
@@ -2822,8 +2821,8 @@ static int rt5640_resume(struct snd_soc_component *component)
28222821
{
28232822
struct rt5640_priv *rt5640 = snd_soc_component_get_drvdata(component);
28242823

2825-
if (gpio_is_valid(rt5640->ldo1_en)) {
2826-
gpio_set_value_cansleep(rt5640->ldo1_en, 1);
2824+
if (rt5640->ldo1_en) {
2825+
gpiod_set_value_cansleep(rt5640->ldo1_en, 1);
28272826
msleep(400);
28282827
}
28292828

@@ -2986,22 +2985,6 @@ static const struct acpi_device_id rt5640_acpi_match[] = {
29862985
MODULE_DEVICE_TABLE(acpi, rt5640_acpi_match);
29872986
#endif
29882987

2989-
static int rt5640_parse_dt(struct rt5640_priv *rt5640, struct device_node *np)
2990-
{
2991-
rt5640->ldo1_en = of_get_named_gpio(np, "realtek,ldo1-en-gpios", 0);
2992-
/*
2993-
* LDO1_EN is optional (it may be statically tied on the board).
2994-
* -ENOENT means that the property doesn't exist, i.e. there is no
2995-
* GPIO, so is not an error. Any other error code means the property
2996-
* exists, but could not be parsed.
2997-
*/
2998-
if (!gpio_is_valid(rt5640->ldo1_en) &&
2999-
(rt5640->ldo1_en != -ENOENT))
3000-
return rt5640->ldo1_en;
3001-
3002-
return 0;
3003-
}
3004-
30052988
static int rt5640_i2c_probe(struct i2c_client *i2c)
30062989
{
30072990
struct rt5640_priv *rt5640;
@@ -3015,12 +2998,16 @@ static int rt5640_i2c_probe(struct i2c_client *i2c)
30152998
return -ENOMEM;
30162999
i2c_set_clientdata(i2c, rt5640);
30173000

3018-
if (i2c->dev.of_node) {
3019-
ret = rt5640_parse_dt(rt5640, i2c->dev.of_node);
3020-
if (ret)
3021-
return ret;
3022-
} else
3023-
rt5640->ldo1_en = -EINVAL;
3001+
rt5640->ldo1_en = devm_gpiod_get_optional(&i2c->dev,
3002+
"realtek,ldo1-en",
3003+
GPIOD_OUT_HIGH);
3004+
if (IS_ERR(rt5640->ldo1_en))
3005+
return PTR_ERR(rt5640->ldo1_en);
3006+
3007+
if (rt5640->ldo1_en) {
3008+
gpiod_set_consumer_name(rt5640->ldo1_en, "RT5640 LDO1_EN");
3009+
msleep(400);
3010+
}
30243011

30253012
rt5640->regmap = devm_regmap_init_i2c(i2c, &rt5640_regmap);
30263013
if (IS_ERR(rt5640->regmap)) {
@@ -3030,18 +3017,6 @@ static int rt5640_i2c_probe(struct i2c_client *i2c)
30303017
return ret;
30313018
}
30323019

3033-
if (gpio_is_valid(rt5640->ldo1_en)) {
3034-
ret = devm_gpio_request_one(&i2c->dev, rt5640->ldo1_en,
3035-
GPIOF_OUT_INIT_HIGH,
3036-
"RT5640 LDO1_EN");
3037-
if (ret < 0) {
3038-
dev_err(&i2c->dev, "Failed to request LDO1_EN %d: %d\n",
3039-
rt5640->ldo1_en, ret);
3040-
return ret;
3041-
}
3042-
msleep(400);
3043-
}
3044-
30453020
regmap_read(rt5640->regmap, RT5640_VENDOR_ID2, &val);
30463021
if (val != RT5640_DEVICE_ID) {
30473022
dev_err(&i2c->dev,

sound/soc/codecs/rt5640.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2138,7 +2138,7 @@ struct rt5640_priv {
21382138
struct regmap *regmap;
21392139
struct clk *mclk;
21402140

2141-
int ldo1_en; /* GPIO for LDO1_EN */
2141+
struct gpio_desc *ldo1_en; /* GPIO for LDO1_EN */
21422142
int irq;
21432143
int jd_gpio_irq;
21442144
int sysclk;

sound/soc/codecs/rt5665.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
#include <linux/platform_device.h>
1616
#include <linux/spi/spi.h>
1717
#include <linux/acpi.h>
18-
#include <linux/gpio.h>
19-
#include <linux/of_gpio.h>
18+
#include <linux/gpio/consumer.h>
2019
#include <linux/regulator/consumer.h>
2120
#include <linux/mutex.h>
2221
#include <sound/core.h>
@@ -4659,9 +4658,6 @@ static int rt5665_parse_dt(struct rt5665_priv *rt5665, struct device *dev)
46594658
of_property_read_u32(dev->of_node, "realtek,jd-src",
46604659
&rt5665->pdata.jd_src);
46614660

4662-
rt5665->pdata.ldo1_en = of_get_named_gpio(dev->of_node,
4663-
"realtek,ldo1-en-gpios", 0);
4664-
46654661
return 0;
46664662
}
46674663

@@ -4795,10 +4791,13 @@ static int rt5665_i2c_probe(struct i2c_client *i2c)
47954791
return ret;
47964792
}
47974793

4798-
if (gpio_is_valid(rt5665->pdata.ldo1_en)) {
4799-
if (devm_gpio_request_one(&i2c->dev, rt5665->pdata.ldo1_en,
4800-
GPIOF_OUT_INIT_HIGH, "rt5665"))
4801-
dev_err(&i2c->dev, "Fail gpio_request gpio_ldo\n");
4794+
4795+
rt5665->gpiod_ldo1_en = devm_gpiod_get_optional(&i2c->dev,
4796+
"realtek,ldo1-en",
4797+
GPIOD_OUT_HIGH);
4798+
if (IS_ERR(rt5665->gpiod_ldo1_en)) {
4799+
dev_err(&i2c->dev, "Failed gpio request ldo1_en\n");
4800+
return PTR_ERR(rt5665->gpiod_ldo1_en);
48024801
}
48034802

48044803
/* Sleep for 300 ms miniumum */

sound/soc/codecs/rt5668.c

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
#include <linux/platform_device.h>
1616
#include <linux/spi/spi.h>
1717
#include <linux/acpi.h>
18-
#include <linux/gpio.h>
19-
#include <linux/of_gpio.h>
18+
#include <linux/gpio/consumer.h>
2019
#include <linux/regulator/consumer.h>
2120
#include <linux/mutex.h>
2221
#include <sound/core.h>
@@ -43,6 +42,7 @@ static const char *rt5668_supply_names[RT5668_NUM_SUPPLIES] = {
4342
struct rt5668_priv {
4443
struct snd_soc_component *component;
4544
struct rt5668_platform_data pdata;
45+
struct gpio_desc *ldo1_en;
4646
struct regmap *regmap;
4747
struct snd_soc_jack *hs_jack;
4848
struct regulator_bulk_data supplies[RT5668_NUM_SUPPLIES];
@@ -2393,9 +2393,6 @@ static int rt5668_parse_dt(struct rt5668_priv *rt5668, struct device *dev)
23932393
of_property_read_u32(dev->of_node, "realtek,jd-src",
23942394
&rt5668->pdata.jd_src);
23952395

2396-
rt5668->pdata.ldo1_en = of_get_named_gpio(dev->of_node,
2397-
"realtek,ldo1-en-gpios", 0);
2398-
23992396
return 0;
24002397
}
24012398

@@ -2497,10 +2494,12 @@ static int rt5668_i2c_probe(struct i2c_client *i2c)
24972494
return ret;
24982495
}
24992496

2500-
if (gpio_is_valid(rt5668->pdata.ldo1_en)) {
2501-
if (devm_gpio_request_one(&i2c->dev, rt5668->pdata.ldo1_en,
2502-
GPIOF_OUT_INIT_HIGH, "rt5668"))
2503-
dev_err(&i2c->dev, "Fail gpio_request gpio_ldo\n");
2497+
rt5668->ldo1_en = devm_gpiod_get_optional(&i2c->dev,
2498+
"realtek,ldo1-en",
2499+
GPIOD_OUT_HIGH);
2500+
if (IS_ERR(rt5668->ldo1_en)) {
2501+
dev_err(&i2c->dev, "Fail gpio request ldo1_en\n");
2502+
return PTR_ERR(rt5668->ldo1_en);
25042503
}
25052504

25062505
/* Sleep for 300 ms miniumum */

sound/soc/codecs/rt5682-i2c.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@
1515
#include <linux/platform_device.h>
1616
#include <linux/spi/spi.h>
1717
#include <linux/acpi.h>
18-
#include <linux/gpio.h>
19-
#include <linux/of_gpio.h>
18+
#include <linux/gpio/consumer.h>
2019
#include <linux/mutex.h>
2120
#include <sound/core.h>
2221
#include <sound/pcm.h>
@@ -170,11 +169,9 @@ static int rt5682_i2c_probe(struct i2c_client *i2c)
170169
return ret;
171170
}
172171

173-
if (gpio_is_valid(rt5682->pdata.ldo1_en)) {
174-
if (devm_gpio_request_one(&i2c->dev, rt5682->pdata.ldo1_en,
175-
GPIOF_OUT_INIT_HIGH, "rt5682"))
176-
dev_err(&i2c->dev, "Fail gpio_request gpio_ldo\n");
177-
}
172+
ret = rt5682_get_ldo1(rt5682, &i2c->dev);
173+
if (ret)
174+
return ret;
178175

179176
/* Sleep for 300 ms miniumum */
180177
usleep_range(300000, 350000);

sound/soc/codecs/rt5682-sdw.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,11 @@ static int rt5682_sdw_init(struct device *dev, struct regmap *regmap,
320320
return ret;
321321
}
322322

323+
324+
ret = rt5682_get_ldo1(rt5682, dev);
325+
if (ret)
326+
return ret;
327+
323328
regcache_cache_only(rt5682->sdw_regmap, true);
324329
regcache_cache_only(rt5682->regmap, true);
325330

0 commit comments

Comments
 (0)