Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01fb2939 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge 61a85f86 on remote branch

Change-Id: Iaf40c8b197c4952b7a1f65b7f82b348b858efac8
parents 0b9a5592 61a85f86
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -208,9 +208,9 @@ static int camera_v4l2_reqbufs(struct file *filep, void *fh,
	session = msm_session_find(session_id);
	if (WARN_ON(!session))
		return -EIO;
	mutex_lock(&session->lock);
	mutex_lock(&session->lock_q);
	ret = vb2_reqbufs(&sp->vb2_q, req);
	mutex_unlock(&session->lock);
	mutex_unlock(&session->lock_q);
	return ret;
}

@@ -231,9 +231,9 @@ static int camera_v4l2_qbuf(struct file *filep, void *fh,
	session = msm_session_find(session_id);
	if (WARN_ON(!session))
		return -EIO;
	mutex_lock(&session->lock);
	mutex_lock(&session->lock_q);
	ret = vb2_qbuf(&sp->vb2_q, pb);
	mutex_unlock(&session->lock);
	mutex_unlock(&session->lock_q);
	return ret;
}

@@ -248,9 +248,9 @@ static int camera_v4l2_dqbuf(struct file *filep, void *fh,
	session = msm_session_find(session_id);
	if (WARN_ON(!session))
		return -EIO;
	mutex_lock(&session->lock);
	mutex_lock(&session->lock_q);
	ret = vb2_dqbuf(&sp->vb2_q, pb, filep->f_flags & O_NONBLOCK);
	mutex_unlock(&session->lock);
	mutex_unlock(&session->lock_q);
	return ret;
}

+2 −0
Original line number Diff line number Diff line
@@ -389,6 +389,7 @@ int msm_create_session(unsigned int session_id, struct video_device *vdev)
	msm_init_queue(&session->stream_q);
	msm_enqueue(msm_session_q, &session->list);
	mutex_init(&session->lock);
	mutex_init(&session->lock_q);
	return 0;
}

@@ -546,6 +547,7 @@ int msm_destroy_session(unsigned int session_id)
	msm_destroy_session_streams(session);
	msm_remove_session_cmd_ack_q(session);
	mutex_destroy(&session->lock);
	mutex_destroy(&session->lock_q);
	msm_delete_entry(msm_session_q, struct msm_session,
		list, session);
	buf_mgr_subdev = msm_buf_mngr_get_subdev();
+1 −0
Original line number Diff line number Diff line
@@ -103,6 +103,7 @@ struct msm_session {
	 * session struct msm_stream */
	struct msm_queue_head stream_q;
	struct mutex lock;
	struct mutex lock_q;
};

void msm_pm_qos_update_request(int val);
+69 −11
Original line number Diff line number Diff line
@@ -648,12 +648,12 @@ static void msm8x16_wcd_boost_on(struct snd_soc_codec *codec)
	snd_soc_update_bits(codec,
		MSM8X16_WCD_A_DIGITAL_PERPH_RESET_CTL3,
		0x0F, 0x0F);
	snd_soc_update_bits(codec,
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_SEC_ACCESS,
		0xA5, 0xA5);
	snd_soc_update_bits(codec,
		0xA5);
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3,
		0x0F, 0x0F);
		0x0F);
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_MASTER_BIAS_CTL,
		0x30);
@@ -697,12 +697,12 @@ static void msm8x16_wcd_boost_off(struct snd_soc_codec *codec)

static void msm8x16_wcd_bypass_on(struct snd_soc_codec *codec)
{
	snd_soc_update_bits(codec,
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_SEC_ACCESS,
		0xA5, 0xA5);
	snd_soc_update_bits(codec,
		0xA5);
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3,
		0x07, 0x07);
		0x07);
	snd_soc_update_bits(codec,
		MSM8X16_WCD_A_ANALOG_BYPASS_MODE,
		0x02, 0x02);
@@ -4010,8 +4010,22 @@ static void msm8x16_wcd_codec_init_reg(struct snd_soc_codec *codec)

static int msm8x16_wcd_bringup(struct snd_soc_codec *codec)
{
	snd_soc_write(codec,
		MSM8X16_WCD_A_DIGITAL_SEC_ACCESS,
		0xA5);
	snd_soc_write(codec, MSM8X16_WCD_A_DIGITAL_PERPH_RESET_CTL4, 0x01);
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_SEC_ACCESS,
		0xA5);
	snd_soc_write(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL4, 0x01);
	snd_soc_write(codec,
		MSM8X16_WCD_A_DIGITAL_SEC_ACCESS,
		0xA5);
	snd_soc_write(codec, MSM8X16_WCD_A_DIGITAL_PERPH_RESET_CTL4, 0x00);
	snd_soc_write(codec,
		MSM8X16_WCD_A_ANALOG_SEC_ACCESS,
		0xA5);
	snd_soc_write(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL4, 0x00);
	return 0;
}

@@ -4043,6 +4057,47 @@ static int msm8x16_wcd_device_down(struct snd_soc_codec *codec)
		MSM8X16_WCD_A_ANALOG_TX_1_EN, 0x3);
	msm8x16_wcd_write(codec,
		MSM8X16_WCD_A_ANALOG_TX_2_EN, 0x3);
	if (msm8x16_wcd_priv->boost_option == BOOST_ON_FOREVER) {
		if ((snd_soc_read(codec, MSM8X16_WCD_A_ANALOG_SPKR_DRV_CTL)
			& 0x80) == 0) {
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_CDC_CLK_MCLK_CTL,	0x01, 0x01);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_CDC_CLK_PDM_CTL, 0x03, 0x03);
			snd_soc_write(codec,
				MSM8X16_WCD_A_ANALOG_MASTER_BIAS_CTL, 0x30);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_DIGITAL_CDC_RST_CTL, 0x80, 0x80);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_DIGITAL_CDC_TOP_CLK_CTL,
				0x0C, 0x0C);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL,
				0x84, 0x84);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_DIGITAL_CDC_ANA_CLK_CTL,
				0x10, 0x10);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_ANALOG_SPKR_PWRSTG_CTL,
				0x1F, 0x1F);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_ANALOG_RX_COM_BIAS_DAC,
				0x90, 0x90);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_ANALOG_RX_EAR_CTL,
				0xFF, 0xFF);
			usleep_range(20, 21);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_ANALOG_SPKR_PWRSTG_CTL,
				0xFF, 0xFF);
			snd_soc_update_bits(codec,
				MSM8X16_WCD_A_ANALOG_SPKR_DRV_CTL,
				0xE9, 0xE9);
		}
	}
	msm8x16_wcd_boost_off(codec);
	/* 40ms to allow boost to discharge */
	msleep(40);
	/* Disable PA to avoid pop during codec bring up */
	snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_RX_HPH_CNP_EN,
			0x30, 0x00);
@@ -4057,8 +4112,7 @@ static int msm8x16_wcd_device_down(struct snd_soc_codec *codec)
	msm8x16_wcd_write(codec,
		MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL, 0x93);

	msm8x16_wcd_write(codec, MSM8X16_WCD_A_DIGITAL_PERPH_RESET_CTL4, 0x1);
	msm8x16_wcd_write(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL4, 0x1);
	msm8x16_wcd_bringup(codec);
	atomic_set(&pdata->mclk_enabled, false);
	set_bit(BUS_DOWN, &msm8x16_wcd_priv->status_mask);
	snd_soc_card_change_online_state(codec->card, 0);
@@ -4097,13 +4151,17 @@ static int msm8x16_wcd_device_up(struct snd_soc_codec *codec)
	/* delay is required to make sure sound card state updated */
	usleep_range(5000, 5100);

	msm8x16_wcd_bringup(codec);
	msm8x16_wcd_codec_init_reg(codec);
	msm8x16_wcd_update_reg_defaults(codec);

	msm8x16_wcd_set_boost_v(codec);

	msm8x16_wcd_set_micb_v(codec);
	if (msm8x16_wcd_priv->boost_option == BOOST_ON_FOREVER)
		msm8x16_wcd_boost_on(codec);
	else if (msm8x16_wcd_priv->boost_option == BYPASS_ALWAYS)
		msm8x16_wcd_bypass_on(codec);

	msm8x16_wcd_configure_cap(codec, false, false);
	wcd_mbhc_stop(&msm8x16_wcd_priv->mbhc);
	wcd_mbhc_start(&msm8x16_wcd_priv->mbhc,