mirror of https://gitee.com/openkylin/linux.git
ASoC: rt5645: change gpio to gpiod APIs
Move gpio to gpio_desc and use gpiod APIs in codec driver. Signed-off-by: Bard Liao <bardliao@realtek.com> Signed-off-by: Oder Chiou <oder_chiou@realtek.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
5ae4f63b50
commit
0b0cefc8fd
|
@ -20,9 +20,6 @@ struct rt5645_platform_data {
|
||||||
unsigned int dmic2_data_pin;
|
unsigned int dmic2_data_pin;
|
||||||
/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
|
/* 0 = IN2P; 1 = GPIO6; 2 = GPIO10; 3 = GPIO12 */
|
||||||
|
|
||||||
unsigned int hp_det_gpio;
|
|
||||||
bool gpio_hp_det_active_high;
|
|
||||||
|
|
||||||
unsigned int jd_mode;
|
unsigned int jd_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2944,17 +2944,11 @@ static int rt5645_irq_detection(struct rt5645_priv *rt5645)
|
||||||
|
|
||||||
switch (rt5645->pdata.jd_mode) {
|
switch (rt5645->pdata.jd_mode) {
|
||||||
case 0: /* Not using rt5645 JD */
|
case 0: /* Not using rt5645 JD */
|
||||||
if (gpio_is_valid(rt5645->pdata.hp_det_gpio)) {
|
if (rt5645->gpiod_hp_det) {
|
||||||
gpio_state = gpio_get_value(rt5645->pdata.hp_det_gpio);
|
gpio_state = gpiod_get_value(rt5645->gpiod_hp_det);
|
||||||
dev_dbg(rt5645->codec->dev, "gpio = %d(%d)\n",
|
dev_dbg(rt5645->codec->dev, "gpio_state = %d\n",
|
||||||
rt5645->pdata.hp_det_gpio, gpio_state);
|
gpio_state);
|
||||||
}
|
report = rt5645_jack_detect(rt5645->codec, gpio_state);
|
||||||
if ((rt5645->pdata.gpio_hp_det_active_high && gpio_state) ||
|
|
||||||
(!rt5645->pdata.gpio_hp_det_active_high &&
|
|
||||||
!gpio_state)) {
|
|
||||||
report = rt5645_jack_detect(rt5645->codec, 1);
|
|
||||||
} else {
|
|
||||||
report = rt5645_jack_detect(rt5645->codec, 0);
|
|
||||||
}
|
}
|
||||||
snd_soc_jack_report(rt5645->hp_jack,
|
snd_soc_jack_report(rt5645->hp_jack,
|
||||||
report, SND_JACK_HEADPHONE);
|
report, SND_JACK_HEADPHONE);
|
||||||
|
@ -3244,7 +3238,6 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
|
||||||
struct rt5645_priv *rt5645;
|
struct rt5645_priv *rt5645;
|
||||||
int ret;
|
int ret;
|
||||||
unsigned int val;
|
unsigned int val;
|
||||||
struct gpio_desc *gpiod;
|
|
||||||
|
|
||||||
rt5645 = devm_kzalloc(&i2c->dev, sizeof(struct rt5645_priv),
|
rt5645 = devm_kzalloc(&i2c->dev, sizeof(struct rt5645_priv),
|
||||||
GFP_KERNEL);
|
GFP_KERNEL);
|
||||||
|
@ -3259,19 +3252,16 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
|
||||||
} else {
|
} else {
|
||||||
if (dmi_check_system(dmi_platform_intel_braswell)) {
|
if (dmi_check_system(dmi_platform_intel_braswell)) {
|
||||||
rt5645->pdata = *rt5645_pdata;
|
rt5645->pdata = *rt5645_pdata;
|
||||||
gpiod = devm_gpiod_get_index(&i2c->dev, "rt5645", 0);
|
|
||||||
|
|
||||||
if (IS_ERR(gpiod) || gpiod_direction_input(gpiod)) {
|
|
||||||
rt5645->pdata.hp_det_gpio = -1;
|
|
||||||
dev_err(&i2c->dev, "failed to initialize gpiod\n");
|
|
||||||
} else {
|
|
||||||
rt5645->pdata.hp_det_gpio = desc_to_gpio(gpiod);
|
|
||||||
rt5645->pdata.gpio_hp_det_active_high
|
|
||||||
= !gpiod_is_active_low(gpiod);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rt5645->gpiod_hp_det = devm_gpiod_get(&i2c->dev, "hp-detect", GPIOD_IN);
|
||||||
|
|
||||||
|
if (IS_ERR(rt5645->gpiod_hp_det)) {
|
||||||
|
rt5645->gpiod_hp_det = NULL;
|
||||||
|
dev_err(&i2c->dev, "failed to initialize gpiod\n");
|
||||||
|
}
|
||||||
|
|
||||||
rt5645->regmap = devm_regmap_init_i2c(i2c, &rt5645_regmap);
|
rt5645->regmap = devm_regmap_init_i2c(i2c, &rt5645_regmap);
|
||||||
if (IS_ERR(rt5645->regmap)) {
|
if (IS_ERR(rt5645->regmap)) {
|
||||||
ret = PTR_ERR(rt5645->regmap);
|
ret = PTR_ERR(rt5645->regmap);
|
||||||
|
@ -3433,16 +3423,6 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
|
||||||
dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret);
|
dev_err(&i2c->dev, "Failed to reguest IRQ: %d\n", ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gpio_is_valid(rt5645->pdata.hp_det_gpio)) {
|
|
||||||
ret = gpio_request(rt5645->pdata.hp_det_gpio, "rt5645");
|
|
||||||
if (ret)
|
|
||||||
dev_err(&i2c->dev, "Fail gpio_request hp_det_gpio\n");
|
|
||||||
|
|
||||||
ret = gpio_direction_input(rt5645->pdata.hp_det_gpio);
|
|
||||||
if (ret)
|
|
||||||
dev_err(&i2c->dev, "Fail gpio_direction hp_det_gpio\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5645,
|
return snd_soc_register_codec(&i2c->dev, &soc_codec_dev_rt5645,
|
||||||
rt5645_dai, ARRAY_SIZE(rt5645_dai));
|
rt5645_dai, ARRAY_SIZE(rt5645_dai));
|
||||||
}
|
}
|
||||||
|
@ -3456,9 +3436,6 @@ static int rt5645_i2c_remove(struct i2c_client *i2c)
|
||||||
|
|
||||||
cancel_delayed_work_sync(&rt5645->jack_detect_work);
|
cancel_delayed_work_sync(&rt5645->jack_detect_work);
|
||||||
|
|
||||||
if (gpio_is_valid(rt5645->pdata.hp_det_gpio))
|
|
||||||
gpio_free(rt5645->pdata.hp_det_gpio);
|
|
||||||
|
|
||||||
snd_soc_unregister_codec(&i2c->dev);
|
snd_soc_unregister_codec(&i2c->dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -2182,6 +2182,7 @@ struct rt5645_priv {
|
||||||
struct rt5645_platform_data pdata;
|
struct rt5645_platform_data pdata;
|
||||||
struct regmap *regmap;
|
struct regmap *regmap;
|
||||||
struct i2c_client *i2c;
|
struct i2c_client *i2c;
|
||||||
|
struct gpio_desc *gpiod_hp_det;
|
||||||
struct snd_soc_jack *hp_jack;
|
struct snd_soc_jack *hp_jack;
|
||||||
struct snd_soc_jack *mic_jack;
|
struct snd_soc_jack *mic_jack;
|
||||||
struct snd_soc_jack *btn_jack;
|
struct snd_soc_jack *btn_jack;
|
||||||
|
|
Loading…
Reference in New Issue