lkml.org 
[lkml]   [2023]   [Jul]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 09/11] ASoC: cs35l56: Make a common function to shutdown the DSP
    Date
    From: Simon Trimmer <simont@opensource.cirrus.com>

    Move issuing of a CS35L56_MBOX_CMD_SHUTDOWN command and then waiting for
    the DSP to reach CS35L56_HALO_STATE_SHUTDOWN in the register appropriate
    for the hardware revision into a common function.

    Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com>
    Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
    Acked-by: Mark Brown <broonie@kernel.org>
    ---
    include/sound/cs35l56.h | 1 +
    sound/soc/codecs/cs35l56-shared.c | 26 ++++++++++++++++++++++++++
    sound/soc/codecs/cs35l56.c | 17 +----------------
    3 files changed, 28 insertions(+), 16 deletions(-)

    diff --git a/include/sound/cs35l56.h b/include/sound/cs35l56.h
    index 79e117abee06..3950322bf3cb 100644
    --- a/include/sound/cs35l56.h
    +++ b/include/sound/cs35l56.h
    @@ -274,6 +274,7 @@ extern const unsigned int cs35l56_tx_input_values[CS35L56_NUM_INPUT_SRC];

    int cs35l56_set_patch(struct cs35l56_base *cs35l56_base);
    int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command);
    +int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base);
    int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base);
    void cs35l56_wait_control_port_ready(void);
    void cs35l56_wait_min_reset_pulse(void);
    diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
    index 4e3becb9581d..ae373f335ea8 100644
    --- a/sound/soc/codecs/cs35l56-shared.c
    +++ b/sound/soc/codecs/cs35l56-shared.c
    @@ -213,6 +213,32 @@ int cs35l56_mbox_send(struct cs35l56_base *cs35l56_base, unsigned int command)
    }
    EXPORT_SYMBOL_NS_GPL(cs35l56_mbox_send, SND_SOC_CS35L56_SHARED);

    +int cs35l56_firmware_shutdown(struct cs35l56_base *cs35l56_base)
    +{
    + int ret;
    + unsigned int reg;
    + unsigned int val;
    +
    + ret = cs35l56_mbox_send(cs35l56_base, CS35L56_MBOX_CMD_SHUTDOWN);
    + if (ret)
    + return ret;
    +
    + if (cs35l56_base->rev < CS35L56_REVID_B0)
    + reg = CS35L56_DSP1_PM_CUR_STATE_A1;
    + else
    + reg = CS35L56_DSP1_PM_CUR_STATE;
    +
    + ret = regmap_read_poll_timeout(cs35l56_base->regmap, reg,
    + val, (val == CS35L56_HALO_STATE_SHUTDOWN),
    + CS35L56_HALO_STATE_POLL_US,
    + CS35L56_HALO_STATE_TIMEOUT_US);
    + if (ret < 0)
    + dev_err(cs35l56_base->dev, "Failed to poll PM_CUR_STATE to 1 is %d (ret %d)\n",
    + val, ret);
    + return ret;
    +}
    +EXPORT_SYMBOL_NS_GPL(cs35l56_firmware_shutdown, SND_SOC_CS35L56_SHARED);
    +
    int cs35l56_wait_for_firmware_boot(struct cs35l56_base *cs35l56_base)
    {
    unsigned int reg;
    diff --git a/sound/soc/codecs/cs35l56.c b/sound/soc/codecs/cs35l56.c
    index d06b83dfc462..19b6b4fbe5de 100644
    --- a/sound/soc/codecs/cs35l56.c
    +++ b/sound/soc/codecs/cs35l56.c
    @@ -673,8 +673,6 @@ static void cs35l56_secure_patch(struct cs35l56_private *cs35l56)

    static void cs35l56_patch(struct cs35l56_private *cs35l56)
    {
    - unsigned int reg;
    - unsigned int val;
    int ret;

    /*
    @@ -691,23 +689,10 @@ static void cs35l56_patch(struct cs35l56_private *cs35l56)
    flush_work(&cs35l56->sdw_irq_work);
    }

    - ret = cs35l56_mbox_send(&cs35l56->base, CS35L56_MBOX_CMD_SHUTDOWN);
    + ret = cs35l56_firmware_shutdown(&cs35l56->base);
    if (ret)
    goto err;

    - if (cs35l56->base.rev < CS35L56_REVID_B0)
    - reg = CS35L56_DSP1_PM_CUR_STATE_A1;
    - else
    - reg = CS35L56_DSP1_PM_CUR_STATE;
    -
    - ret = regmap_read_poll_timeout(cs35l56->base.regmap, reg,
    - val, (val == CS35L56_HALO_STATE_SHUTDOWN),
    - CS35L56_HALO_STATE_POLL_US,
    - CS35L56_HALO_STATE_TIMEOUT_US);
    - if (ret < 0)
    - dev_err(cs35l56->base.dev, "Failed to poll PM_CUR_STATE to 1 is %d (ret %d)\n",
    - val, ret);
    -
    /* Use wm_adsp to load and apply the firmware patch and coefficient files */
    ret = wm_adsp_power_up(&cs35l56->dsp);
    if (ret) {
    --
    2.30.2
    \
     
     \ /
      Last update: 2023-07-21 15:23    [W:4.197 / U:0.780 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site