Loading asoc/codecs/msm_hdmi_codec_rx.c +27 −10 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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__); Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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, Loading Loading @@ -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); Loading soc/swr-mstr-ctrl.c +56 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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, Loading soc/swr-mstr-ctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading
asoc/codecs/msm_hdmi_codec_rx.c +27 −10 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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__); Loading Loading @@ -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); Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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, Loading Loading @@ -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); Loading
soc/swr-mstr-ctrl.c +56 −4 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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); Loading Loading @@ -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; Loading Loading @@ -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, Loading
soc/swr-mstr-ctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -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; Loading