Loading soc/swr-mstr-ctrl.c +32 −0 Original line number Diff line number Diff line Loading @@ -1441,6 +1441,8 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) } mutex_lock(&swrm->reslock); if (swrm->lpass_core_hw_vote) clk_prepare_enable(swrm->lpass_core_hw_vote); swrm_clk_request(swrm, true); mutex_unlock(&swrm->reslock); Loading Loading @@ -1608,6 +1610,8 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) mutex_lock(&swrm->reslock); swrm_clk_request(swrm, false); if (swrm->lpass_core_hw_vote) clk_disable_unprepare(swrm->lpass_core_hw_vote); mutex_unlock(&swrm->reslock); swrm_unlock_sleep(swrm); return ret; Loading Loading @@ -1897,6 +1901,7 @@ static int swrm_probe(struct platform_device *pdev) u32 i, num_ports, port_num, port_type, ch_mask; u32 *temp, map_size, map_length, ch_iter = 0, old_port_num = 0; int ret = 0; struct clk *lpass_core_hw_vote = NULL; /* Allocate soundwire master driver structure */ swrm = devm_kzalloc(&pdev->dev, sizeof(struct swr_mstr_ctrl), Loading Loading @@ -2145,6 +2150,17 @@ static int swrm_probe(struct platform_device *pdev) if (pdev->dev.of_node) of_register_swr_devices(&swrm->master); /* Register LPASS core hw vote */ lpass_core_hw_vote = devm_clk_get(&pdev->dev, "lpass_core_hw_vote"); if (IS_ERR(lpass_core_hw_vote)) { ret = PTR_ERR(lpass_core_hw_vote); dev_dbg(&pdev->dev, "%s: clk get %s failed %d\n", __func__, "lpass_core_hw_vote", ret); lpass_core_hw_vote = NULL; ret = 0; } swrm->lpass_core_hw_vote = lpass_core_hw_vote; dbgswrm = swrm; debugfs_swrm_dent = debugfs_create_dir(dev_name(&pdev->dev), 0); if (!IS_ERR(debugfs_swrm_dent)) { Loading Loading @@ -2257,6 +2273,12 @@ static int swrm_runtime_resume(struct device *dev) __func__, swrm->state); mutex_lock(&swrm->reslock); if (swrm->lpass_core_hw_vote) ret = clk_prepare_enable(swrm->lpass_core_hw_vote); if (ret < 0) dev_err(dev, "%s:lpass core hw enable failed\n", __func__); if ((swrm->state == SWR_MSTR_DOWN) || (swrm->state == SWR_MSTR_SSR && swrm->dev_up)) { if (swrm->clk_stop_mode0_supp) { Loading Loading @@ -2293,6 +2315,8 @@ static int swrm_runtime_resume(struct device *dev) swrm->state = SWR_MSTR_UP; } exit: if (swrm->lpass_core_hw_vote) clk_disable_unprepare(swrm->lpass_core_hw_vote); pm_runtime_set_autosuspend_delay(&pdev->dev, auto_suspend_timer); mutex_unlock(&swrm->reslock); return ret; Loading @@ -2313,6 +2337,12 @@ static int swrm_runtime_suspend(struct device *dev) mutex_lock(&swrm->force_down_lock); current_state = swrm->state; mutex_unlock(&swrm->force_down_lock); if (swrm->lpass_core_hw_vote) ret = clk_prepare_enable(swrm->lpass_core_hw_vote); if (ret < 0) dev_err(dev, "%s:lpass core hw enable failed\n", __func__); if ((current_state == SWR_MSTR_UP) || (current_state == SWR_MSTR_SSR)) { Loading Loading @@ -2358,6 +2388,8 @@ static int swrm_runtime_suspend(struct device *dev) if (current_state != SWR_MSTR_SSR) swrm->state = SWR_MSTR_DOWN; exit: if (swrm->lpass_core_hw_vote) clk_disable_unprepare(swrm->lpass_core_hw_vote); mutex_unlock(&swrm->reslock); return ret; } Loading soc/swr-mstr-ctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ struct swr_mstr_ctrl { int wlock_holders; u32 intr_mask; struct port_params **port_param; struct clk *lpass_core_hw_vote; u8 num_usecase; u32 swr_irq_wakeup_capable; }; Loading Loading
soc/swr-mstr-ctrl.c +32 −0 Original line number Diff line number Diff line Loading @@ -1441,6 +1441,8 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) } mutex_lock(&swrm->reslock); if (swrm->lpass_core_hw_vote) clk_prepare_enable(swrm->lpass_core_hw_vote); swrm_clk_request(swrm, true); mutex_unlock(&swrm->reslock); Loading Loading @@ -1608,6 +1610,8 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) mutex_lock(&swrm->reslock); swrm_clk_request(swrm, false); if (swrm->lpass_core_hw_vote) clk_disable_unprepare(swrm->lpass_core_hw_vote); mutex_unlock(&swrm->reslock); swrm_unlock_sleep(swrm); return ret; Loading Loading @@ -1897,6 +1901,7 @@ static int swrm_probe(struct platform_device *pdev) u32 i, num_ports, port_num, port_type, ch_mask; u32 *temp, map_size, map_length, ch_iter = 0, old_port_num = 0; int ret = 0; struct clk *lpass_core_hw_vote = NULL; /* Allocate soundwire master driver structure */ swrm = devm_kzalloc(&pdev->dev, sizeof(struct swr_mstr_ctrl), Loading Loading @@ -2145,6 +2150,17 @@ static int swrm_probe(struct platform_device *pdev) if (pdev->dev.of_node) of_register_swr_devices(&swrm->master); /* Register LPASS core hw vote */ lpass_core_hw_vote = devm_clk_get(&pdev->dev, "lpass_core_hw_vote"); if (IS_ERR(lpass_core_hw_vote)) { ret = PTR_ERR(lpass_core_hw_vote); dev_dbg(&pdev->dev, "%s: clk get %s failed %d\n", __func__, "lpass_core_hw_vote", ret); lpass_core_hw_vote = NULL; ret = 0; } swrm->lpass_core_hw_vote = lpass_core_hw_vote; dbgswrm = swrm; debugfs_swrm_dent = debugfs_create_dir(dev_name(&pdev->dev), 0); if (!IS_ERR(debugfs_swrm_dent)) { Loading Loading @@ -2257,6 +2273,12 @@ static int swrm_runtime_resume(struct device *dev) __func__, swrm->state); mutex_lock(&swrm->reslock); if (swrm->lpass_core_hw_vote) ret = clk_prepare_enable(swrm->lpass_core_hw_vote); if (ret < 0) dev_err(dev, "%s:lpass core hw enable failed\n", __func__); if ((swrm->state == SWR_MSTR_DOWN) || (swrm->state == SWR_MSTR_SSR && swrm->dev_up)) { if (swrm->clk_stop_mode0_supp) { Loading Loading @@ -2293,6 +2315,8 @@ static int swrm_runtime_resume(struct device *dev) swrm->state = SWR_MSTR_UP; } exit: if (swrm->lpass_core_hw_vote) clk_disable_unprepare(swrm->lpass_core_hw_vote); pm_runtime_set_autosuspend_delay(&pdev->dev, auto_suspend_timer); mutex_unlock(&swrm->reslock); return ret; Loading @@ -2313,6 +2337,12 @@ static int swrm_runtime_suspend(struct device *dev) mutex_lock(&swrm->force_down_lock); current_state = swrm->state; mutex_unlock(&swrm->force_down_lock); if (swrm->lpass_core_hw_vote) ret = clk_prepare_enable(swrm->lpass_core_hw_vote); if (ret < 0) dev_err(dev, "%s:lpass core hw enable failed\n", __func__); if ((current_state == SWR_MSTR_UP) || (current_state == SWR_MSTR_SSR)) { Loading Loading @@ -2358,6 +2388,8 @@ static int swrm_runtime_suspend(struct device *dev) if (current_state != SWR_MSTR_SSR) swrm->state = SWR_MSTR_DOWN; exit: if (swrm->lpass_core_hw_vote) clk_disable_unprepare(swrm->lpass_core_hw_vote); mutex_unlock(&swrm->reslock); return ret; } Loading
soc/swr-mstr-ctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -154,6 +154,7 @@ struct swr_mstr_ctrl { int wlock_holders; u32 intr_mask; struct port_params **port_param; struct clk *lpass_core_hw_vote; u8 num_usecase; u32 swr_irq_wakeup_capable; }; Loading