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

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

Merge 4faacac8 on remote branch

Change-Id: Icd126d81af6ad474c2b1737160846c9d340d2324
parents 2d95e19c 4faacac8
Loading
Loading
Loading
Loading
+27 −10
Original line number Diff line number Diff line
@@ -29,8 +29,6 @@
	codec_info.type = EXT_DISPLAY_TYPE_DP; \
	codec_info.ctrl_id = codec_data->ctl[dai_id]; \
	codec_info.stream_id = codec_data->stream[dai_id]; \
	msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev, \
				&codec_info)

enum {
        DP_CONTROLLER0 = 0,
@@ -94,7 +92,9 @@ static int msm_ext_disp_edid_ctl_info(struct snd_kcontrol *kcontrol,

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai_id);
	if (!codec_data->ext_disp_ops.get_audio_edid_blk) {
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);
	if (!codec_data->ext_disp_ops.get_audio_edid_blk || rc) {
		dev_dbg(component->dev, "%s: get_audio_edid_blk() is NULL\n",
			__func__);
		uinfo->type = SNDRV_CTL_ELEM_TYPE_BYTES;
@@ -139,7 +139,9 @@ static int msm_ext_disp_edid_get(struct snd_kcontrol *kcontrol,

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai_id);
	if (!codec_data->ext_disp_ops.get_audio_edid_blk) {
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);
	if (!codec_data->ext_disp_ops.get_audio_edid_blk || rc) {
		dev_err(component->dev, "%s: codec_data or get_audio_edid_blk() is NULL\n",
			__func__);
		mutex_unlock(&codec_data->dp_ops_lock);
@@ -199,9 +201,11 @@ static int msm_ext_disp_audio_type_get(struct snd_kcontrol *kcontrol,

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai_id);
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);

	if (!codec_data->ext_disp_ops.get_audio_edid_blk ||
	    !codec_data->ext_disp_ops.get_intf_id) {
	    !codec_data->ext_disp_ops.get_intf_id || rc) {
		dev_err(component->dev, "%s: get_audio_edid_blk() or get_intf_id is NULL\n",
			__func__);
		rc = -EINVAL;
@@ -284,8 +288,10 @@ static int msm_ext_disp_audio_ack_set(struct snd_kcontrol *kcontrol,

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai_id);
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);

	if (!codec_data->ext_disp_ops.acknowledge) {
	if (!codec_data->ext_disp_ops.acknowledge || rc) {
		dev_err(component->dev,
			"%s: codec_data ops acknowledge() is NULL\n",
			__func__);
@@ -460,7 +466,7 @@ static int msm_ext_disp_audio_codec_rx_dai_startup(
		struct snd_pcm_substream *substream,
		struct snd_soc_dai *dai)
{
	int ret = 0;
	int ret = 0, rc = 0;
	struct msm_ext_disp_codec_id codec_info;
	struct msm_ext_disp_audio_codec_rx_data *codec_data =
			dev_get_drvdata(dai->component->dev);
@@ -477,8 +483,10 @@ static int msm_ext_disp_audio_codec_rx_dai_startup(

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai->id);
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);

	if (!codec_data->ext_disp_ops.cable_status) {
	if (!codec_data->ext_disp_ops.cable_status || rc) {
		dev_err(dai->dev, "%s() cable_status is null\n",
			__func__);
		mutex_unlock(&codec_data->dp_ops_lock);
@@ -532,8 +540,10 @@ static int msm_ext_disp_audio_codec_rx_dai_hw_params(

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai->id);
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);

	if (!codec_data->ext_disp_ops.audio_info_setup) {
	if (!codec_data->ext_disp_ops.audio_info_setup || rc) {
		dev_err(dai->dev, "%s: audio_info_setup is null\n",
			__func__);
		mutex_unlock(&codec_data->dp_ops_lock);
@@ -600,8 +610,13 @@ static int msm_ext_disp_audio_codec_rx_dai_hw_params(

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai->id);
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);
	if (rc)
		goto end;
	rc = codec_data->ext_disp_ops.audio_info_setup(
			codec_data->ext_disp_core_pdev, &audio_setup_params);
end:
	mutex_unlock(&codec_data->dp_ops_lock);
	if (rc < 0) {
		dev_err_ratelimited(dai->dev,
@@ -634,9 +649,11 @@ static void msm_ext_disp_audio_codec_rx_dai_shutdown(

	mutex_lock(&codec_data->dp_ops_lock);
	SWITCH_DP_CODEC(codec_info, codec_data, dai->id);
	rc = msm_ext_disp_select_audio_codec(codec_data->ext_disp_core_pdev,
						 &codec_info);

	if (!codec_data->ext_disp_ops.teardown_done ||
	    !codec_data->ext_disp_ops.cable_status) {
	    !codec_data->ext_disp_ops.cable_status || rc) {
		dev_err(dai->dev, "%s: teardown_done or cable_status is null\n",
			__func__);
		mutex_unlock(&codec_data->dp_ops_lock);
+56 −4
Original line number Diff line number Diff line
@@ -1930,10 +1930,21 @@ static irqreturn_t swrm_wakeup_interrupt(int irq, void *dev)
		pr_err("%s: swrm or dev is null\n", __func__);
		return IRQ_NONE;
	}

	mutex_lock(&swrm->devlock);
	if (!swrm->dev_up) {
		if (swrm->wake_irq > 0)
		if (swrm->wake_irq > 0) {
			if (unlikely(!irq_get_irq_data(swrm->wake_irq))) {
				pr_err("%s: irq data is NULL\n", __func__);
				mutex_unlock(&swrm->devlock);
				return IRQ_NONE;
			}
			mutex_lock(&swrm->irq_lock);
			if (!irqd_irq_disabled(
			    irq_get_irq_data(swrm->wake_irq)))
				disable_irq_nosync(swrm->wake_irq);
			mutex_unlock(&swrm->irq_lock);
		}
		mutex_unlock(&swrm->devlock);
		return ret;
	}
@@ -1942,8 +1953,17 @@ static irqreturn_t swrm_wakeup_interrupt(int irq, void *dev)
		dev_err(swrm->dev, "%s Failed to hold suspend\n", __func__);
		goto exit;
	}
	if (swrm->wake_irq > 0)
	if (swrm->wake_irq > 0) {
		if (unlikely(!irq_get_irq_data(swrm->wake_irq))) {
			pr_err("%s: irq data is NULL\n", __func__);
			return IRQ_NONE;
		}
		mutex_lock(&swrm->irq_lock);
		if (!irqd_irq_disabled(
		    irq_get_irq_data(swrm->wake_irq)))
			disable_irq_nosync(swrm->wake_irq);
		mutex_unlock(&swrm->irq_lock);
	}
	pm_runtime_get_sync(swrm->dev);
	pm_runtime_mark_last_busy(swrm->dev);
	pm_runtime_put_autosuspend(swrm->dev);
@@ -2423,6 +2443,7 @@ static int swrm_probe(struct platform_device *pdev)
	init_completion(&swrm->reset);
	init_completion(&swrm->broadcast);
	init_completion(&swrm->clk_off_complete);
	mutex_init(&swrm->irq_lock);
	mutex_init(&swrm->mlock);
	mutex_init(&swrm->reslock);
	mutex_init(&swrm->force_down_lock);
@@ -2569,6 +2590,7 @@ static int swrm_probe(struct platform_device *pdev)
	else if (swrm->irq)
		free_irq(swrm->irq, swrm);
err_irq_fail:
	mutex_destroy(&swrm->irq_lock);
	mutex_destroy(&swrm->mlock);
	mutex_destroy(&swrm->reslock);
	mutex_destroy(&swrm->force_down_lock);
@@ -2601,6 +2623,7 @@ static int swrm_remove(struct platform_device *pdev)
	swr_unregister_master(&swrm->master);
	msm_aud_evt_unregister_client(&swrm->event_notifier);
	device_init_wakeup(swrm->dev, false);
	mutex_destroy(&swrm->irq_lock);
	mutex_destroy(&swrm->mlock);
	mutex_destroy(&swrm->reslock);
	mutex_destroy(&swrm->iolock);
@@ -2655,6 +2678,20 @@ static int swrm_runtime_resume(struct device *dev)
	if ((swrm->state == SWR_MSTR_DOWN) ||
	    (swrm->state == SWR_MSTR_SSR && swrm->dev_up)) {
		if (swrm->clk_stop_mode0_supp) {
			if (swrm->wake_irq > 0) {
				if (unlikely(!irq_get_irq_data
				    (swrm->wake_irq))) {
					pr_err("%s: irq data is NULL\n",
						__func__);
					mutex_unlock(&swrm->reslock);
					return IRQ_NONE;
				}
				mutex_lock(&swrm->irq_lock);
				if (!irqd_irq_disabled(
				    irq_get_irq_data(swrm->wake_irq)))
					disable_irq_nosync(swrm->wake_irq);
				mutex_unlock(&swrm->irq_lock);
			}
			if (swrm->ipc_wakeup)
				msm_aud_evt_blocking_notifier_call_chain(
					SWR_WAKE_IRQ_DEREGISTER, (void *)swrm);
@@ -2701,6 +2738,14 @@ static int swrm_runtime_resume(struct device *dev)
		} else {
			/*wake up from clock stop*/
			swr_master_write(swrm, SWRM_MCP_BUS_CTRL_ADDR, 0x2);
			/* clear and enable bus clash interrupt */
			swr_master_write(swrm, SWRM_INTERRUPT_CLEAR, 0x08);
			swrm->intr_mask |= 0x08;
			swr_master_write(swrm, SWRM_INTERRUPT_MASK_ADDR,
					 swrm->intr_mask);
			swr_master_write(swrm,
					 SWR_MSTR_RX_SWRM_CPU_INTERRUPT_EN,
					 swrm->intr_mask);
			usleep_range(100, 105);
			if (!swrm_check_link_status(swrm, 0x1))
				goto exit;
@@ -2782,6 +2827,13 @@ static int swrm_runtime_suspend(struct device *dev)
				}
			}
		} else {
			/* Mask bus clash interrupt */
			swrm->intr_mask &= ~((u32)0x08);
			swr_master_write(swrm, SWRM_INTERRUPT_MASK_ADDR,
					 swrm->intr_mask);
			swr_master_write(swrm,
					 SWR_MSTR_RX_SWRM_CPU_INTERRUPT_EN,
					 swrm->intr_mask);
			mutex_unlock(&swrm->reslock);
			/* clock stop sequence */
			swrm_cmd_fifo_wr_cmd(swrm, 0x2, 0xF, 0xF,
+1 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ struct swr_mstr_ctrl {
	struct mutex mlock;
	struct mutex reslock;
	struct mutex pm_lock;
	struct mutex irq_lock;
	u32 swrm_base_reg;
	char __iomem *swrm_dig_base;
	char __iomem *swrm_hctl_reg;