diff --git a/sound/soc/codecs/es8323.c b/sound/soc/codecs/es8323.c index 4a2b6b897592..523c6320300d 100644 --- a/sound/soc/codecs/es8323.c +++ b/sound/soc/codecs/es8323.c @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include @@ -26,15 +25,8 @@ #include #include #include -#include -#include -#include -#include #include "es8323.h" -#define ES8323_CODEC_SET_SPK 1 -#define ES8323_CODEC_SET_HP 2 -#define ES8323_EXTCON_ID EXTCON_JACK_HEADPHONE #define NR_SUPPORTED_MCLK_LRCK_RATIOS 5 static const unsigned int supported_mclk_lrck_ratios[NR_SUPPORTED_MCLK_LRCK_RATIOS] = { 256, 384, 512, 768, 1024 @@ -101,57 +93,8 @@ struct es8323_priv { struct snd_pcm_hw_constraint_list sysclk_constraints; struct snd_soc_component *component; struct regmap *regmap; - - struct gpio_desc *hp_ctl_gpio; - struct gpio_desc *spk_ctl_gpio; - struct gpio_desc *hp_det_gpio; - bool hp_inserted; - struct notifier_block extcon_nb; - - bool muted; }; -static int es8323_set_gpio(struct es8323_priv *es8323, int gpio, bool level) -{ - if ((gpio & ES8323_CODEC_SET_SPK) && es8323->spk_ctl_gpio) - gpiod_set_value(es8323->spk_ctl_gpio, level); - - if ((gpio & ES8323_CODEC_SET_HP) && es8323->hp_ctl_gpio) - gpiod_set_value(es8323->hp_ctl_gpio, level); - return 0; -} - -static int es8323_extcon_notifier(struct notifier_block *self, unsigned long event, void *ptr) -{ - struct es8323_priv *es8323 = container_of(self, struct es8323_priv, - extcon_nb); - /* Note: Don't enable speaker or headset here - * If headset removed or insert, The system will close sound card - * And Then reopening, those enable steps will be done in es8323_mute - */ - if (event) - es8323->hp_inserted = true; - else - es8323->hp_inserted = false; - return NOTIFY_DONE; -} - -static irqreturn_t hp_det_irq_handler(int irq, void *dev_id) -{ - struct es8323_priv *es8323 = dev_id; - - if (es8323->muted == 0) { - if (gpiod_get_value(es8323->hp_det_gpio)) { - es8323_set_gpio(es8323, ES8323_CODEC_SET_SPK, 0); - es8323_set_gpio(es8323, ES8323_CODEC_SET_HP, 1); - } else { - es8323_set_gpio(es8323, ES8323_CODEC_SET_SPK, 1); - es8323_set_gpio(es8323, ES8323_CODEC_SET_HP, 0); - } - } - return IRQ_HANDLED; -} - static int es8323_reset(struct snd_soc_component *component) { snd_soc_component_write(component, ES8323_CONTROL1, 0x80); @@ -288,12 +231,6 @@ static const struct snd_kcontrol_new es8323_right_mixer_controls[] = { SOC_DAPM_SINGLE("Right Bypass Switch", ES8323_DACCONTROL20, 6, 1, 0), }; -/* Differential Mux */ -//static const struct snd_kcontrol_new es8323_diffmux_controls = -//SOC_DAPM_ENUM("Route", es8323_enum[10]); - - - static const struct snd_soc_dapm_widget es8323_dapm_widgets[] = { SND_SOC_DAPM_INPUT("LINPUT1"), SND_SOC_DAPM_INPUT("LINPUT2"), @@ -679,26 +616,6 @@ static int es8323_pcm_hw_params(struct snd_pcm_substream *substream, static int es8323_mute(struct snd_soc_dai *dai, int mute, int stream) { - struct snd_soc_component *component = dai->component; - struct es8323_priv *es8323 = snd_soc_component_get_drvdata(component); - - es8323->muted = mute; - if (mute) { - es8323_set_gpio(es8323, ES8323_CODEC_SET_SPK, 0); - es8323_set_gpio(es8323, ES8323_CODEC_SET_HP, 0); - usleep_range(18000, 20000); - snd_soc_component_write(component, ES8323_DACCONTROL3, 0x06); - } else { - snd_soc_component_write(component, ES8323_DACCONTROL3, 0x02); - snd_soc_component_write(component, 0x30, es8323_DEF_VOL); - snd_soc_component_write(component, 0x31, es8323_DEF_VOL); - msleep(50); - if (!es8323->hp_inserted) - es8323_set_gpio(es8323, ES8323_CODEC_SET_SPK, 1); - else - es8323_set_gpio(es8323, ES8323_CODEC_SET_HP, 1); - usleep_range(18000, 20000); - } return 0; } @@ -913,10 +830,8 @@ static int es8323_i2c_probe(struct i2c_client *i2c, { struct es8323_priv *es8323; int ret = -1; - int hp_irq = 0; struct i2c_adapter *adapter = to_i2c_adapter(i2c->dev.parent); char reg; - struct extcon_dev *edev; if (!i2c_check_functionality(adapter, I2C_FUNC_I2C)) { dev_warn(&adapter->dev, @@ -941,64 +856,6 @@ static int es8323_i2c_probe(struct i2c_client *i2c, return ret; } - es8323->spk_ctl_gpio = devm_gpiod_get_optional(&i2c->dev, - "spk-con", - GPIOD_OUT_LOW); - if (IS_ERR(es8323->spk_ctl_gpio)) - return PTR_ERR(es8323->spk_ctl_gpio); - - es8323->hp_ctl_gpio = devm_gpiod_get_optional(&i2c->dev, - "hp-con", - GPIOD_OUT_LOW); - if (IS_ERR(es8323->hp_ctl_gpio)) - return PTR_ERR(es8323->hp_ctl_gpio); - - es8323->hp_det_gpio = devm_gpiod_get_optional(&i2c->dev, "hp-det", GPIOD_IN); - if (IS_ERR(es8323->hp_det_gpio)) - return PTR_ERR(es8323->hp_det_gpio); - - if (device_property_read_bool(&i2c->dev, "extcon")) { - edev = extcon_get_edev_by_phandle(&i2c->dev, 0); - if (IS_ERR(edev)) { - if (PTR_ERR(edev) == -EPROBE_DEFER) - return -EPROBE_DEFER; - dev_err(&i2c->dev, "Invalid or missing extcon\n"); - return PTR_ERR(edev); - } - es8323->extcon_nb.notifier_call = es8323_extcon_notifier; - ret = devm_extcon_register_notifier(&i2c->dev, edev, - EXTCON_JACK_HEADPHONE, - &es8323->extcon_nb); - if (ret < 0) { - dev_err(&i2c->dev, "register headphone notifier fail\n"); - return ret; - } - ret = devm_extcon_register_notifier(&i2c->dev, edev, - EXTCON_JACK_MICROPHONE, - &es8323->extcon_nb); - if (ret < 0) { - dev_err(&i2c->dev, "register micphone notifier fail\n"); - return ret; - } - es8323->hp_inserted = extcon_get_state(edev, EXTCON_JACK_HEADPHONE) || - extcon_get_state(edev, EXTCON_JACK_MICROPHONE); - dev_info(&i2c->dev, "probe:hp_inserted %d", es8323->hp_inserted); - } - - hp_irq = gpiod_to_irq(es8323->hp_det_gpio); - - if (hp_irq > 0) { - ret = devm_request_threaded_irq(&i2c->dev, hp_irq, NULL, - hp_det_irq_handler, - IRQ_TYPE_EDGE_BOTH | - IRQF_ONESHOT, - "ES8323", es8323); - if (ret < 0) { - dev_err(&i2c->dev, "request_irq failed: %d\n", ret); - return ret; - } - } - ret = devm_snd_soc_register_component(&i2c->dev, &soc_codec_dev_es8323, &es8323_dai, 1); @@ -1022,9 +879,6 @@ static void es8323_i2c_shutdown(struct i2c_client *client) { struct es8323_priv *es8323 = i2c_get_clientdata(client); - es8323_set_gpio(es8323, ES8323_CODEC_SET_SPK, 0); - es8323_set_gpio(es8323, ES8323_CODEC_SET_HP, 0); - mdelay(20); regmap_write(es8323->regmap, ES8323_CONTROL2, 0x58); regmap_write(es8323->regmap, ES8323_CONTROL1, 0x32); regmap_write(es8323->regmap, ES8323_CHIPPOWER, 0xf3);