diff options
Diffstat (limited to 'sound/soc/intel/boards/bytcr_rt5640.c')
| -rw-r--r-- | sound/soc/intel/boards/bytcr_rt5640.c | 62 |
1 files changed, 47 insertions, 15 deletions
diff --git a/sound/soc/intel/boards/bytcr_rt5640.c b/sound/soc/intel/boards/bytcr_rt5640.c index 9caa4407c1ca..103e0b445603 100644 --- a/sound/soc/intel/boards/bytcr_rt5640.c +++ b/sound/soc/intel/boards/bytcr_rt5640.c @@ -68,7 +68,8 @@ enum { BYT_RT5640_OVCD_SF_1P5 = (RT5640_OVCD_SF_1P5 << 13), }; -#define BYT_RT5640_MAP(quirk) ((quirk) & GENMASK(3, 0)) +#define BYT_RT5640_MAP_MASK GENMASK(3, 0) +#define BYT_RT5640_MAP(quirk) ((quirk) & BYT_RT5640_MAP_MASK) #define BYT_RT5640_JDSRC(quirk) (((quirk) & GENMASK(7, 4)) >> 4) #define BYT_RT5640_OVCD_TH(quirk) (((quirk) & GENMASK(12, 8)) >> 8) #define BYT_RT5640_OVCD_SF(quirk) (((quirk) & GENMASK(14, 13)) >> 13) @@ -140,7 +141,9 @@ static void log_quirks(struct device *dev) dev_info(dev, "quirk NO_INTERNAL_MIC_MAP enabled\n"); break; default: - dev_err(dev, "quirk map 0x%x is not supported, microphone input will not work\n", map); + dev_warn_once(dev, "quirk sets invalid input map: 0x%x, default to DMIC1_MAP\n", map); + byt_rt5640_quirk &= ~BYT_RT5640_MAP_MASK; + byt_rt5640_quirk |= BYT_RT5640_DMIC1_MAP; break; } if (byt_rt5640_quirk & BYT_RT5640_HSMIC2_ON_IN1) @@ -254,7 +257,7 @@ static int byt_rt5640_prepare_and_enable_pll1(struct snd_soc_dai *codec_dai, static struct snd_soc_dai *byt_rt5640_get_codec_dai(struct snd_soc_dapm_context *dapm) { - struct snd_soc_card *card = dapm->card; + struct snd_soc_card *card = snd_soc_dapm_to_card(dapm); struct snd_soc_dai *codec_dai; codec_dai = snd_soc_card_get_codec_dai(card, BYT_CODEC_DAI1); @@ -270,7 +273,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w, struct snd_kcontrol *k, int event) { struct snd_soc_dapm_context *dapm = w->dapm; - struct snd_soc_card *card = dapm->card; + struct snd_soc_card *card = snd_soc_dapm_to_card(dapm); struct snd_soc_dai *codec_dai; struct byt_rt5640_private *priv = snd_soc_card_get_drvdata(card); int ret; @@ -576,6 +579,19 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = { BYT_RT5640_SSP0_AIF2 | BYT_RT5640_MCLK_EN), }, + { /* Acer Aspire SW3-013 */ + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Acer"), + DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW3-013"), + }, + .driver_data = (void *)(BYT_RT5640_DMIC1_MAP | + BYT_RT5640_JD_SRC_JD2_IN4N | + BYT_RT5640_OVCD_TH_2000UA | + BYT_RT5640_OVCD_SF_0P75 | + BYT_RT5640_DIFF_MIC | + BYT_RT5640_SSP0_AIF1 | + BYT_RT5640_MCLK_EN), + }, { .matches = { DMI_MATCH(DMI_SYS_VENDOR, "Acer"), @@ -1132,7 +1148,22 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = { BYT_RT5640_SSP0_AIF2 | BYT_RT5640_MCLK_EN), }, - { /* Vexia Edu Atla 10 tablet */ + { + /* Vexia Edu Atla 10 tablet 5V version */ + .matches = { + /* Having all 3 of these not set is somewhat unique */ + DMI_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."), + DMI_MATCH(DMI_PRODUCT_NAME, "To be filled by O.E.M."), + DMI_MATCH(DMI_BOARD_NAME, "To be filled by O.E.M."), + /* Above strings are too generic, also match on BIOS date */ + DMI_MATCH(DMI_BIOS_DATE, "05/14/2015"), + }, + .driver_data = (void *)(BYTCR_INPUT_DEFAULTS | + BYT_RT5640_JD_NOT_INV | + BYT_RT5640_SSP0_AIF1 | + BYT_RT5640_MCLK_EN), + }, + { /* Vexia Edu Atla 10 tablet 9V version */ .matches = { DMI_MATCH(DMI_BOARD_VENDOR, "AMI Corporation"), DMI_MATCH(DMI_BOARD_NAME, "Aptio CRB"), @@ -1286,6 +1317,7 @@ put_adev: static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime) { struct snd_soc_card *card = runtime->card; + struct snd_soc_dapm_context *dapm = snd_soc_card_to_dapm(card); struct byt_rt5640_private *priv = snd_soc_card_get_drvdata(card); struct rt5640_set_jack_data *jack_data = &priv->jack_data; struct snd_soc_component *component = snd_soc_rtd_to_codec(runtime, 0)->component; @@ -1293,7 +1325,7 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime) int num_routes = 0; int ret; - card->dapm.idle_bias_off = true; + snd_soc_dapm_set_idle_bias(dapm, false); jack_data->use_platform_clock = true; /* Start with RC clk for jack-detect (we disable MCLK below) */ @@ -1336,12 +1368,12 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime) break; } - ret = snd_soc_dapm_add_routes(&card->dapm, custom_map, num_routes); + ret = snd_soc_dapm_add_routes(dapm, custom_map, num_routes); if (ret) return ret; if (byt_rt5640_quirk & BYT_RT5640_HSMIC2_ON_IN1) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_hsmic2_in1_map, ARRAY_SIZE(byt_rt5640_hsmic2_in1_map)); if (ret) @@ -1349,19 +1381,19 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime) } if (byt_rt5640_quirk & BYT_RT5640_SSP2_AIF2) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_ssp2_aif2_map, ARRAY_SIZE(byt_rt5640_ssp2_aif2_map)); } else if (byt_rt5640_quirk & BYT_RT5640_SSP0_AIF1) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_ssp0_aif1_map, ARRAY_SIZE(byt_rt5640_ssp0_aif1_map)); } else if (byt_rt5640_quirk & BYT_RT5640_SSP0_AIF2) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_ssp0_aif2_map, ARRAY_SIZE(byt_rt5640_ssp0_aif2_map)); } else { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_ssp2_aif1_map, ARRAY_SIZE(byt_rt5640_ssp2_aif1_map)); } @@ -1369,11 +1401,11 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime) return ret; if (byt_rt5640_quirk & BYT_RT5640_MONO_SPEAKER) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_mono_spk_map, ARRAY_SIZE(byt_rt5640_mono_spk_map)); } else if (!(byt_rt5640_quirk & BYT_RT5640_NO_SPEAKERS)) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_stereo_spk_map, ARRAY_SIZE(byt_rt5640_stereo_spk_map)); } @@ -1381,7 +1413,7 @@ static int byt_rt5640_init(struct snd_soc_pcm_runtime *runtime) return ret; if (byt_rt5640_quirk & BYT_RT5640_LINEOUT) { - ret = snd_soc_dapm_add_routes(&card->dapm, + ret = snd_soc_dapm_add_routes(dapm, byt_rt5640_lineout_map, ARRAY_SIZE(byt_rt5640_lineout_map)); if (ret) |
