Unverified Commit 3701d2cb authored by Mark Brown's avatar Mark Brown
Browse files

Merge branch 'asoc-5.4' into asoc-linus

parents af42d346 ef8e1479
Loading
Loading
Loading
Loading
+5 −1
Original line number Original line Diff line number Diff line
@@ -3270,6 +3270,9 @@ static void rt5645_jack_detect_work(struct work_struct *work)
		snd_soc_jack_report(rt5645->mic_jack,
		snd_soc_jack_report(rt5645->mic_jack,
				    report, SND_JACK_MICROPHONE);
				    report, SND_JACK_MICROPHONE);
		return;
		return;
	case 4:
		val = snd_soc_component_read32(rt5645->component, RT5645_A_JD_CTRL1) & 0x0020;
		break;
	default: /* read rt5645 jd1_1 status */
	default: /* read rt5645 jd1_1 status */
		val = snd_soc_component_read32(rt5645->component, RT5645_INT_IRQ_ST) & 0x1000;
		val = snd_soc_component_read32(rt5645->component, RT5645_INT_IRQ_ST) & 0x1000;
		break;
		break;
@@ -3603,7 +3606,7 @@ static const struct rt5645_platform_data intel_braswell_platform_data = {
static const struct rt5645_platform_data buddy_platform_data = {
static const struct rt5645_platform_data buddy_platform_data = {
	.dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
	.dmic1_data_pin = RT5645_DMIC_DATA_GPIO5,
	.dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
	.dmic2_data_pin = RT5645_DMIC_DATA_IN2P,
	.jd_mode = 3,
	.jd_mode = 4,
	.level_trigger_irq = true,
	.level_trigger_irq = true,
};
};


@@ -3999,6 +4002,7 @@ static int rt5645_i2c_probe(struct i2c_client *i2c,
					   RT5645_JD1_MODE_1);
					   RT5645_JD1_MODE_1);
			break;
			break;
		case 3:
		case 3:
		case 4:
			regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1,
			regmap_update_bits(rt5645->regmap, RT5645_A_JD_CTRL1,
					   RT5645_JD1_MODE_MASK,
					   RT5645_JD1_MODE_MASK,
					   RT5645_JD1_MODE_2);
					   RT5645_JD1_MODE_2);
+4 −24
Original line number Original line Diff line number Diff line
@@ -1002,6 +1002,7 @@ static int rt5682_set_jack_detect(struct snd_soc_component *component,
				   RT5682_JD1_EN_MASK, RT5682_JD1_DIS);
				   RT5682_JD1_EN_MASK, RT5682_JD1_DIS);
		regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
		regmap_update_bits(rt5682->regmap, RT5682_RC_CLK_CTRL,
				   RT5682_POW_JDH | RT5682_POW_JDL, 0);
				   RT5682_POW_JDH | RT5682_POW_JDL, 0);
		cancel_delayed_work_sync(&rt5682->jack_detect_work);
		return 0;
		return 0;
	}
	}


@@ -1450,28 +1451,6 @@ static const struct snd_kcontrol_new hpor_switch =
	SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5682_HP_CTRL_1,
	SOC_DAPM_SINGLE_AUTODISABLE("Switch", RT5682_HP_CTRL_1,
					RT5682_R_MUTE_SFT, 1, 1);
					RT5682_R_MUTE_SFT, 1, 1);


static int rt5682_charge_pump_event(struct snd_soc_dapm_widget *w,
	struct snd_kcontrol *kcontrol, int event)
{
	struct snd_soc_component *component =
		snd_soc_dapm_to_component(w->dapm);

	switch (event) {
	case SND_SOC_DAPM_PRE_PMU:
		snd_soc_component_update_bits(component,
			RT5682_HP_CHARGE_PUMP_1, RT5682_PM_HP_MASK, RT5682_PM_HP_HV);
		break;
	case SND_SOC_DAPM_POST_PMD:
		snd_soc_component_update_bits(component,
			RT5682_HP_CHARGE_PUMP_1, RT5682_PM_HP_MASK, RT5682_PM_HP_LV);
		break;
	default:
		return 0;
	}

	return 0;
}

static int rt5682_hp_event(struct snd_soc_dapm_widget *w,
static int rt5682_hp_event(struct snd_soc_dapm_widget *w,
	struct snd_kcontrol *kcontrol, int event)
	struct snd_kcontrol *kcontrol, int event)
{
{
@@ -1755,8 +1734,7 @@ static const struct snd_soc_dapm_widget rt5682_dapm_widgets[] = {
	SND_SOC_DAPM_SUPPLY("HP Amp R", RT5682_PWR_ANLG_1,
	SND_SOC_DAPM_SUPPLY("HP Amp R", RT5682_PWR_ANLG_1,
		RT5682_PWR_HA_R_BIT, 0, NULL, 0),
		RT5682_PWR_HA_R_BIT, 0, NULL, 0),
	SND_SOC_DAPM_SUPPLY_S("Charge Pump", 1, RT5682_DEPOP_1,
	SND_SOC_DAPM_SUPPLY_S("Charge Pump", 1, RT5682_DEPOP_1,
		RT5682_PUMP_EN_SFT, 0, rt5682_charge_pump_event,
		RT5682_PUMP_EN_SFT, 0, NULL, 0),
		SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD),
	SND_SOC_DAPM_SUPPLY_S("Capless", 2, RT5682_DEPOP_1,
	SND_SOC_DAPM_SUPPLY_S("Capless", 2, RT5682_DEPOP_1,
		RT5682_CAPLESS_EN_SFT, 0, NULL, 0),
		RT5682_CAPLESS_EN_SFT, 0, NULL, 0),


@@ -2654,6 +2632,8 @@ static int rt5682_i2c_probe(struct i2c_client *i2c,
			RT5682_HPA_CP_BIAS_CTRL_MASK, RT5682_HPA_CP_BIAS_3UA);
			RT5682_HPA_CP_BIAS_CTRL_MASK, RT5682_HPA_CP_BIAS_3UA);
	regmap_update_bits(rt5682->regmap, RT5682_CHARGE_PUMP_1,
	regmap_update_bits(rt5682->regmap, RT5682_CHARGE_PUMP_1,
			RT5682_CP_CLK_HP_MASK, RT5682_CP_CLK_HP_300KHZ);
			RT5682_CP_CLK_HP_MASK, RT5682_CP_CLK_HP_300KHZ);
	regmap_update_bits(rt5682->regmap, RT5682_HP_CHARGE_PUMP_1,
			RT5682_PM_HP_MASK, RT5682_PM_HP_HV);


	INIT_DELAYED_WORK(&rt5682->jack_detect_work,
	INIT_DELAYED_WORK(&rt5682->jack_detect_work,
				rt5682_jack_detect_handler);
				rt5682_jack_detect_handler);
+1 −0
Original line number Original line Diff line number Diff line
@@ -1917,6 +1917,7 @@ static int wm8904_set_bias_level(struct snd_soc_component *component,
		snd_soc_component_update_bits(component, WM8904_BIAS_CONTROL_0,
		snd_soc_component_update_bits(component, WM8904_BIAS_CONTROL_0,
				    WM8904_BIAS_ENA, 0);
				    WM8904_BIAS_ENA, 0);


		snd_soc_component_write(component, WM8904_SW_RESET_AND_ID, 0);
		regcache_cache_only(wm8904->regmap, true);
		regcache_cache_only(wm8904->regmap, true);
		regcache_mark_dirty(wm8904->regmap);
		regcache_mark_dirty(wm8904->regmap);


+6 −4
Original line number Original line Diff line number Diff line
@@ -405,10 +405,12 @@ static const struct dmi_system_id byt_rt5640_quirk_table[] = {
			DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
			DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
			DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
			DMI_MATCH(DMI_PRODUCT_NAME, "Aspire SW5-012"),
		},
		},
		.driver_data = (void *)(BYT_RT5640_IN1_MAP |
		.driver_data = (void *)(BYT_RT5640_DMIC1_MAP |
						 BYT_RT5640_MCLK_EN |
					BYT_RT5640_JD_SRC_JD2_IN4N |
						 BYT_RT5640_SSP0_AIF1),
					BYT_RT5640_OVCD_TH_2000UA |

					BYT_RT5640_OVCD_SF_0P75 |
					BYT_RT5640_SSP0_AIF1 |
					BYT_RT5640_MCLK_EN),
	},
	},
	{
	{
		.matches = {
		.matches = {
+18 −2
Original line number Original line Diff line number Diff line
@@ -376,6 +376,17 @@ u32 rsnd_get_adinr_bit(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
 */
 */
u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
{
{
	static const u32 dalign_values[8][2] = {
		{0x76543210, 0x67452301},
		{0x00000032, 0x00000023},
		{0x00007654, 0x00006745},
		{0x00000076, 0x00000067},
		{0xfedcba98, 0xefcdab89},
		{0x000000ba, 0x000000ab},
		{0x0000fedc, 0x0000efcd},
		{0x000000fe, 0x000000ef},
	};
	int id = 0, inv;
	struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io);
	struct rsnd_mod *ssiu = rsnd_io_to_mod_ssiu(io);
	struct rsnd_mod *target;
	struct rsnd_mod *target;
	struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
	struct snd_pcm_runtime *runtime = rsnd_io_to_runtime(io);
@@ -411,13 +422,18 @@ u32 rsnd_get_dalign(struct rsnd_mod *mod, struct rsnd_dai_stream *io)
		target = cmd ? cmd : ssiu;
		target = cmd ? cmd : ssiu;
	}
	}


	if (mod == ssiu)
		id = rsnd_mod_id_sub(mod);

	/* Non target mod or non 16bit needs normal DALIGN */
	/* Non target mod or non 16bit needs normal DALIGN */
	if ((snd_pcm_format_width(runtime->format) != 16) ||
	if ((snd_pcm_format_width(runtime->format) != 16) ||
	    (mod != target))
	    (mod != target))
		return 0x76543210;
		inv = 0;
	/* Target mod needs inverted DALIGN when 16bit */
	/* Target mod needs inverted DALIGN when 16bit */
	else
	else
		return 0x67452301;
		inv = 1;

	return dalign_values[id][inv];
}
}


u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod)
u32 rsnd_get_busif_shift(struct rsnd_dai_stream *io, struct rsnd_mod *mod)
Loading