|
@@ -16,6 +16,7 @@
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
*/
|
|
|
|
|
|
+#include <linux/acpi.h>
|
|
|
#include <linux/module.h>
|
|
|
#include <linux/platform_device.h>
|
|
|
#include <linux/gpio/consumer.h>
|
|
@@ -120,6 +121,26 @@ static struct snd_soc_jack_gpio mic_jack_gpio = {
|
|
|
.invert = 1,
|
|
|
};
|
|
|
|
|
|
+/* GPIO indexes defined by ACPI */
|
|
|
+enum {
|
|
|
+ RT5677_GPIO_PLUG_DET = 0,
|
|
|
+ RT5677_GPIO_MIC_PRESENT_L = 1,
|
|
|
+ RT5677_GPIO_HOTWORD_DET_L = 2,
|
|
|
+ RT5677_GPIO_DSP_INT = 3,
|
|
|
+ RT5677_GPIO_HP_AMP_SHDN_L = 4,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct acpi_gpio_params plug_det_gpio = { RT5677_GPIO_PLUG_DET, 0, false };
|
|
|
+static const struct acpi_gpio_params mic_present_gpio = { RT5677_GPIO_MIC_PRESENT_L, 0, false };
|
|
|
+static const struct acpi_gpio_params headphone_enable_gpio = { RT5677_GPIO_HP_AMP_SHDN_L, 0, false };
|
|
|
+
|
|
|
+static const struct acpi_gpio_mapping bdw_rt5677_gpios[] = {
|
|
|
+ { "plug-det-gpios", &plug_det_gpio, 1 },
|
|
|
+ { "mic-present-gpios", &mic_present_gpio, 1 },
|
|
|
+ { "headphone-enable-gpios", &headphone_enable_gpio, 1 },
|
|
|
+ { NULL },
|
|
|
+};
|
|
|
+
|
|
|
static int broadwell_ssp0_fixup(struct snd_soc_pcm_runtime *rtd,
|
|
|
struct snd_pcm_hw_params *params)
|
|
|
{
|
|
@@ -184,6 +205,12 @@ static int bdw_rt5677_init(struct snd_soc_pcm_runtime *rtd)
|
|
|
snd_soc_card_get_drvdata(rtd->card);
|
|
|
struct snd_soc_codec *codec = rtd->codec;
|
|
|
struct snd_soc_dapm_context *dapm = snd_soc_codec_get_dapm(codec);
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = acpi_dev_add_driver_gpios(ACPI_COMPANION(codec->dev),
|
|
|
+ bdw_rt5677_gpios);
|
|
|
+ if (ret)
|
|
|
+ dev_warn(codec->dev, "Failed to add driver gpios\n");
|
|
|
|
|
|
/* Enable codec ASRC function for Stereo DAC/Stereo1 ADC/DMIC/I2S1.
|
|
|
* The ASRC clock source is clk_i2s1_asrc.
|