Loading soc/pinctrl-lpi-legacy.c +16 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ struct lpi_gpio_state { char __iomem *base; struct clk *lpass_core_hw_vote; bool core_hw_vote_status; struct mutex lpi_mutex; }; static const char *const lpi_gpio_groups[] = { Loading @@ -120,12 +121,16 @@ static const char *const lpi_gpio_functions[] = { static int lpi_gpio_read(struct lpi_gpio_pad *pad, unsigned int addr) { int ret; struct lpi_gpio_state *state = dev_get_drvdata(lpi_dev); mutex_lock(&state->lpi_mutex); if (!lpi_dev_up) { pr_err_ratelimited("%s: ADSP is down due to SSR, return\n", __func__); mutex_unlock(&state->lpi_mutex); return 0; } pm_runtime_get_sync(lpi_dev); ret = ioread32(pad->base + pad->offset + addr); Loading @@ -134,15 +139,20 @@ static int lpi_gpio_read(struct lpi_gpio_pad *pad, unsigned int addr) pm_runtime_mark_last_busy(lpi_dev); pm_runtime_put_autosuspend(lpi_dev); mutex_unlock(&state->lpi_mutex); return ret; } static int lpi_gpio_write(struct lpi_gpio_pad *pad, unsigned int addr, unsigned int val) { struct lpi_gpio_state *state = dev_get_drvdata(lpi_dev); mutex_lock(&state->lpi_mutex); if (!lpi_dev_up) { pr_err_ratelimited("%s: ADSP is down due to SSR, return\n", __func__); mutex_unlock(&state->lpi_mutex); return 0; } pm_runtime_get_sync(lpi_dev); Loading @@ -151,6 +161,7 @@ static int lpi_gpio_write(struct lpi_gpio_pad *pad, unsigned int addr, pm_runtime_mark_last_busy(lpi_dev); pm_runtime_put_autosuspend(lpi_dev); mutex_unlock(&state->lpi_mutex); return 0; } Loading Loading @@ -382,8 +393,10 @@ static int lpi_notifier_service_cb(struct notifier_block *this, unsigned long opcode, void *ptr) { static bool initial_boot = true; struct lpi_gpio_state *state = dev_get_drvdata(lpi_dev); pr_debug("%s: Service opcode 0x%lx\n", __func__, opcode); mutex_lock(&state->lpi_mutex); switch (opcode) { case AUDIO_NOTIFIER_SERVICE_DOWN: Loading @@ -403,6 +416,7 @@ static int lpi_notifier_service_cb(struct notifier_block *this, default: break; } mutex_unlock(&state->lpi_mutex); return NOTIFY_OK; } Loading Loading @@ -643,6 +657,7 @@ static int lpi_pinctrl_probe(struct platform_device *pdev) pm_runtime_use_autosuspend(&pdev->dev); pm_runtime_set_suspended(&pdev->dev); pm_runtime_enable(&pdev->dev); mutex_init(&state->lpi_mutex); return 0; Loading @@ -658,6 +673,7 @@ static int lpi_pinctrl_remove(struct platform_device *pdev) { struct lpi_gpio_state *state = platform_get_drvdata(pdev); mutex_destroy(&state->lpi_mutex); pm_runtime_disable(&pdev->dev); pm_runtime_set_suspended(&pdev->dev); Loading Loading
soc/pinctrl-lpi-legacy.c +16 −0 Original line number Diff line number Diff line Loading @@ -95,6 +95,7 @@ struct lpi_gpio_state { char __iomem *base; struct clk *lpass_core_hw_vote; bool core_hw_vote_status; struct mutex lpi_mutex; }; static const char *const lpi_gpio_groups[] = { Loading @@ -120,12 +121,16 @@ static const char *const lpi_gpio_functions[] = { static int lpi_gpio_read(struct lpi_gpio_pad *pad, unsigned int addr) { int ret; struct lpi_gpio_state *state = dev_get_drvdata(lpi_dev); mutex_lock(&state->lpi_mutex); if (!lpi_dev_up) { pr_err_ratelimited("%s: ADSP is down due to SSR, return\n", __func__); mutex_unlock(&state->lpi_mutex); return 0; } pm_runtime_get_sync(lpi_dev); ret = ioread32(pad->base + pad->offset + addr); Loading @@ -134,15 +139,20 @@ static int lpi_gpio_read(struct lpi_gpio_pad *pad, unsigned int addr) pm_runtime_mark_last_busy(lpi_dev); pm_runtime_put_autosuspend(lpi_dev); mutex_unlock(&state->lpi_mutex); return ret; } static int lpi_gpio_write(struct lpi_gpio_pad *pad, unsigned int addr, unsigned int val) { struct lpi_gpio_state *state = dev_get_drvdata(lpi_dev); mutex_lock(&state->lpi_mutex); if (!lpi_dev_up) { pr_err_ratelimited("%s: ADSP is down due to SSR, return\n", __func__); mutex_unlock(&state->lpi_mutex); return 0; } pm_runtime_get_sync(lpi_dev); Loading @@ -151,6 +161,7 @@ static int lpi_gpio_write(struct lpi_gpio_pad *pad, unsigned int addr, pm_runtime_mark_last_busy(lpi_dev); pm_runtime_put_autosuspend(lpi_dev); mutex_unlock(&state->lpi_mutex); return 0; } Loading Loading @@ -382,8 +393,10 @@ static int lpi_notifier_service_cb(struct notifier_block *this, unsigned long opcode, void *ptr) { static bool initial_boot = true; struct lpi_gpio_state *state = dev_get_drvdata(lpi_dev); pr_debug("%s: Service opcode 0x%lx\n", __func__, opcode); mutex_lock(&state->lpi_mutex); switch (opcode) { case AUDIO_NOTIFIER_SERVICE_DOWN: Loading @@ -403,6 +416,7 @@ static int lpi_notifier_service_cb(struct notifier_block *this, default: break; } mutex_unlock(&state->lpi_mutex); return NOTIFY_OK; } Loading Loading @@ -643,6 +657,7 @@ static int lpi_pinctrl_probe(struct platform_device *pdev) pm_runtime_use_autosuspend(&pdev->dev); pm_runtime_set_suspended(&pdev->dev); pm_runtime_enable(&pdev->dev); mutex_init(&state->lpi_mutex); return 0; Loading @@ -658,6 +673,7 @@ static int lpi_pinctrl_remove(struct platform_device *pdev) { struct lpi_gpio_state *state = platform_get_drvdata(pdev); mutex_destroy(&state->lpi_mutex); pm_runtime_disable(&pdev->dev); pm_runtime_set_suspended(&pdev->dev); Loading