|
@@ -73,6 +73,7 @@ enum {
|
|
#define BYT_RT5651_SSP2_AIF2 BIT(19) /* default is using AIF1 */
|
|
#define BYT_RT5651_SSP2_AIF2 BIT(19) /* default is using AIF1 */
|
|
#define BYT_RT5651_SSP0_AIF1 BIT(20)
|
|
#define BYT_RT5651_SSP0_AIF1 BIT(20)
|
|
#define BYT_RT5651_SSP0_AIF2 BIT(21)
|
|
#define BYT_RT5651_SSP0_AIF2 BIT(21)
|
|
|
|
+#define BYT_RT5651_HP_LR_SWAPPED BIT(22)
|
|
|
|
|
|
#define BYT_RT5651_DEFAULT_QUIRKS (BYT_RT5651_MCLK_EN | \
|
|
#define BYT_RT5651_DEFAULT_QUIRKS (BYT_RT5651_MCLK_EN | \
|
|
BYT_RT5651_JD1_1 | \
|
|
BYT_RT5651_JD1_1 | \
|
|
@@ -359,6 +360,17 @@ static const struct dmi_system_id byt_rt5651_quirk_table[] = {
|
|
.driver_data = (void *)(BYT_RT5651_DEFAULT_QUIRKS |
|
|
.driver_data = (void *)(BYT_RT5651_DEFAULT_QUIRKS |
|
|
BYT_RT5651_IN1_IN2_MAP),
|
|
BYT_RT5651_IN1_IN2_MAP),
|
|
},
|
|
},
|
|
|
|
+ {
|
|
|
|
+ /* Chuwi Hi8 Pro (CWI513) */
|
|
|
|
+ .callback = byt_rt5651_quirk_cb,
|
|
|
|
+ .matches = {
|
|
|
|
+ DMI_MATCH(DMI_SYS_VENDOR, "Hampoo"),
|
|
|
|
+ DMI_MATCH(DMI_PRODUCT_NAME, "X1D3_C806N"),
|
|
|
|
+ },
|
|
|
|
+ .driver_data = (void *)(BYT_RT5651_DEFAULT_QUIRKS |
|
|
|
|
+ BYT_RT5651_IN1_MAP |
|
|
|
|
+ BYT_RT5651_HP_LR_SWAPPED),
|
|
|
|
+ },
|
|
{
|
|
{
|
|
/* Chuwi Vi8 Plus (CWI519) */
|
|
/* Chuwi Vi8 Plus (CWI519) */
|
|
.callback = byt_rt5651_quirk_cb,
|
|
.callback = byt_rt5651_quirk_cb,
|
|
@@ -367,7 +379,8 @@ static const struct dmi_system_id byt_rt5651_quirk_table[] = {
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "D2D3_Vi8A1"),
|
|
DMI_MATCH(DMI_PRODUCT_NAME, "D2D3_Vi8A1"),
|
|
},
|
|
},
|
|
.driver_data = (void *)(BYT_RT5651_DEFAULT_QUIRKS |
|
|
.driver_data = (void *)(BYT_RT5651_DEFAULT_QUIRKS |
|
|
- BYT_RT5651_IN1_MAP),
|
|
|
|
|
|
+ BYT_RT5651_IN1_MAP |
|
|
|
|
+ BYT_RT5651_HP_LR_SWAPPED),
|
|
},
|
|
},
|
|
{
|
|
{
|
|
/* VIOS LTH17 */
|
|
/* VIOS LTH17 */
|
|
@@ -662,7 +675,7 @@ static struct snd_soc_card byt_rt5651_card = {
|
|
static char byt_rt5651_codec_name[SND_ACPI_I2C_ID_LEN];
|
|
static char byt_rt5651_codec_name[SND_ACPI_I2C_ID_LEN];
|
|
static char byt_rt5651_codec_aif_name[12]; /* = "rt5651-aif[1|2]" */
|
|
static char byt_rt5651_codec_aif_name[12]; /* = "rt5651-aif[1|2]" */
|
|
static char byt_rt5651_cpu_dai_name[10]; /* = "ssp[0|2]-port" */
|
|
static char byt_rt5651_cpu_dai_name[10]; /* = "ssp[0|2]-port" */
|
|
-static char byt_rt5651_long_name[40]; /* = "bytcr-rt5651-*-mic" */
|
|
|
|
|
|
+static char byt_rt5651_long_name[40]; /* = "bytcr-rt5651-*-mic[-swapped-hp]" */
|
|
|
|
|
|
static bool is_valleyview(void)
|
|
static bool is_valleyview(void)
|
|
{
|
|
{
|
|
@@ -687,6 +700,7 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
|
struct byt_rt5651_private *priv;
|
|
struct byt_rt5651_private *priv;
|
|
struct snd_soc_acpi_mach *mach;
|
|
struct snd_soc_acpi_mach *mach;
|
|
const char *i2c_name = NULL;
|
|
const char *i2c_name = NULL;
|
|
|
|
+ const char *hp_swapped;
|
|
bool is_bytcr = false;
|
|
bool is_bytcr = false;
|
|
int ret_val = 0;
|
|
int ret_val = 0;
|
|
int dai_index = 0;
|
|
int dai_index = 0;
|
|
@@ -829,9 +843,14 @@ static int snd_byt_rt5651_mc_probe(struct platform_device *pdev)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (byt_rt5651_quirk & BYT_RT5651_HP_LR_SWAPPED)
|
|
|
|
+ hp_swapped = "-hp-swapped";
|
|
|
|
+ else
|
|
|
|
+ hp_swapped = "";
|
|
|
|
+
|
|
snprintf(byt_rt5651_long_name, sizeof(byt_rt5651_long_name),
|
|
snprintf(byt_rt5651_long_name, sizeof(byt_rt5651_long_name),
|
|
- "bytcr-rt5651-%s-mic",
|
|
|
|
- mic_name[BYT_RT5651_MAP(byt_rt5651_quirk)]);
|
|
|
|
|
|
+ "bytcr-rt5651-%s-mic%s",
|
|
|
|
+ mic_name[BYT_RT5651_MAP(byt_rt5651_quirk)], hp_swapped);
|
|
byt_rt5651_card.long_name = byt_rt5651_long_name;
|
|
byt_rt5651_card.long_name = byt_rt5651_long_name;
|
|
|
|
|
|
ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_rt5651_card);
|
|
ret_val = devm_snd_soc_register_card(&pdev->dev, &byt_rt5651_card);
|