lkml.org 
[lkml]   [2019]   [Jul]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH 38/40] soundwire: cadence_master: make clock stop exit configurable on init
    Date
    The use of clock stop is not a requirement, the IP can e.g. be
    completely power gated and not detect any wakes while in s2idle/deep
    sleep.

    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    ---
    drivers/soundwire/cadence_master.c | 15 ++++++++-------
    drivers/soundwire/cadence_master.h | 2 +-
    drivers/soundwire/intel.c | 2 +-
    3 files changed, 10 insertions(+), 9 deletions(-)

    diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
    index 53278aa2436f..4ab6f70d7705 100644
    --- a/drivers/soundwire/cadence_master.c
    +++ b/drivers/soundwire/cadence_master.c
    @@ -1010,7 +1010,7 @@ static u32 cdns_set_default_frame_shape(int n_rows, int n_cols)
    * sdw_cdns_init() - Cadence initialization
    * @cdns: Cadence instance
    */
    -int sdw_cdns_init(struct sdw_cdns *cdns)
    +int sdw_cdns_init(struct sdw_cdns *cdns, bool clock_stop_exit)
    {
    struct sdw_bus *bus = &cdns->bus;
    struct sdw_master_prop *prop = &bus->prop;
    @@ -1018,12 +1018,13 @@ int sdw_cdns_init(struct sdw_cdns *cdns)
    int divider;
    int ret;

    - /* Exit clock stop */
    - ret = cdns_clear_bit(cdns, CDNS_MCP_CONTROL,
    - CDNS_MCP_CONTROL_CLK_STOP_CLR);
    - if (ret < 0) {
    - dev_err(cdns->dev, "Couldn't exit from clock stop\n");
    - return ret;
    + if (clock_stop_exit) {
    + ret = cdns_clear_bit(cdns, CDNS_MCP_CONTROL,
    + CDNS_MCP_CONTROL_CLK_STOP_CLR);
    + if (ret < 0) {
    + dev_err(cdns->dev, "Couldn't exit from clock stop\n");
    + return ret;
    + }
    }

    /* Set clock divider */
    diff --git a/drivers/soundwire/cadence_master.h b/drivers/soundwire/cadence_master.h
    index 1a0ba36dd78f..091b771b570d 100644
    --- a/drivers/soundwire/cadence_master.h
    +++ b/drivers/soundwire/cadence_master.h
    @@ -158,7 +158,7 @@ extern struct sdw_master_ops sdw_cdns_master_ops;
    irqreturn_t sdw_cdns_irq(int irq, void *dev_id);
    irqreturn_t sdw_cdns_thread(int irq, void *dev_id);

    -int sdw_cdns_init(struct sdw_cdns *cdns);
    +int sdw_cdns_init(struct sdw_cdns *cdns, bool clock_stop_exit);
    int sdw_cdns_pdi_init(struct sdw_cdns *cdns,
    struct sdw_cdns_stream_config config);
    int sdw_cdns_exit_reset(struct sdw_cdns *cdns);
    diff --git a/drivers/soundwire/intel.c b/drivers/soundwire/intel.c
    index 1192d5775484..db7bf2912767 100644
    --- a/drivers/soundwire/intel.c
    +++ b/drivers/soundwire/intel.c
    @@ -1043,7 +1043,7 @@ static int intel_init(struct sdw_intel *sdw)
    intel_link_power_up(sdw);
    intel_shim_init(sdw);

    - return sdw_cdns_init(&sdw->cdns);
    + return sdw_cdns_init(&sdw->cdns, false);
    }

    /*
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-07-26 02:09    [W:4.225 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site