Received: by 2002:a05:6a10:f347:0:0:0:0 with SMTP id d7csp15844pxu; Tue, 24 Nov 2020 17:04:03 -0800 (PST) X-Google-Smtp-Source: ABdhPJyu3fLEbMOgyCoYpmVxmirnKS8fSIhUcmlqoeHA+ahOhw82+k7ABD6p1ZOPs+5V5vULwY7J X-Received: by 2002:aa7:d54b:: with SMTP id u11mr1231436edr.341.1606266242840; Tue, 24 Nov 2020 17:04:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1606266242; cv=none; d=google.com; s=arc-20160816; b=rhrQJGI/OeY8uiTIvNI41Z2W+LW1yc5V8Yn+n3wYUr/QvJmlmtRlDu/6GSgZtlNKsE kObITvQnaKgxYSYeMAS6ZVtGelDN3ewYdtb9L2BMpArHuwMeBlgVTPQKEF/bgq+OWyho fda8fdYMFFtvAxNSRQIIRhwrvgYOfVMChK0RWqtwraZ+EZE+YFRqdE/qea8knUWXfCwv it16JUuKGnL02kaw4A2+nUsAm8GBww87qwsg+pXTbNUtILNwP3ilChkwYSkoLWMxXPK9 EhaalRS09xRU00qL4DTCLmtNBuCI8fkwWGlXOkkQ9K8GwXv5RoPSuJUzh2g6E1GkPk8D QYTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:date:subject:cc:to:from:ironport-sdr :ironport-sdr; bh=RL6FvvEILPYlvixg5aDHglqSKyY7nbrtUP0wuec+WeM=; b=GjmC/8kD0VOE92WdHzDG6HwoY63WVPD++D8L29MzyQ1SFrk1DrSB3jUyXELBi855TC IUOv89vE7gHykliJNg7YN2qTOAZtbnxfUo74mL6nFw2Hy3+CSayM+dr848NnnzeXLYu6 GqTgU7KQBi6u3MNMJQR8aO4AGOosYw7ZoADjLFotwDQw6stHt2u/OE0MifyadHYDgiTH 9/0dKAqb5V8h/RjkkP4nOaKfG5fqHBD3GBlHp7uVGEpHO5Z9Lwkw65svxaMMRNrWMYKx cqYwUJb0vhKOzWjmsSx0i/LJv+rucMcl+aUtBn/scElJkoitk4vmUmyl94vRnVQGG8zU 5UWg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b3si327504ejp.606.2020.11.24.17.03.39; Tue, 24 Nov 2020 17:04:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726708AbgKYBAX (ORCPT + 99 others); Tue, 24 Nov 2020 20:00:23 -0500 Received: from mga03.intel.com ([134.134.136.65]:21076 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726287AbgKYBAX (ORCPT ); Tue, 24 Nov 2020 20:00:23 -0500 IronPort-SDR: cAwvY2yR98pya5Y00Jq0aCZG5vIs5WdLMvjJ9Phz2YumnlFYa57Jl320s6tIkJ9azj67XgmpVG khUTetXzPHhg== X-IronPort-AV: E=McAfee;i="6000,8403,9815"; a="172140205" X-IronPort-AV: E=Sophos;i="5.78,367,1599548400"; d="scan'208";a="172140205" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2020 17:00:22 -0800 IronPort-SDR: wqtsynaXEuKC8omiAFywZvNW6esy3Q8b5g946HV+w66hUJYtyQCudyYuJAyJUiIiukUNBW5c17 LshZzceMJ2rg== X-IronPort-AV: E=Sophos;i="5.78,367,1599548400"; d="scan'208";a="478717652" Received: from bard-ubuntu.sh.intel.com ([10.239.13.33]) by orsmga004-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 24 Nov 2020 17:00:18 -0800 From: Bard Liao To: alsa-devel@alsa-project.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, gregkh@linuxfoundation.org, jank@cadence.com, srinivas.kandagatla@linaro.org, rander.wang@linux.intel.com, ranjani.sridharan@linux.intel.com, hui.wang@canonical.com, pierre-louis.bossart@linux.intel.com, sanyog.r.kale@intel.com, mengdong.lin@intel.com, bard.liao@intel.com Subject: [PATCH] soundwire: master: use pm_runtime_set_active() on add Date: Tue, 24 Nov 2020 21:07:42 +0800 Message-Id: <20201124130742.10986-1-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.17.1 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Pierre-Louis Bossart The 'master' device acts as a glue layer used during bus initialization only, and it needs to be 'transparent' for pm_runtime management. Its behavior should be that it becomes active when one of its children becomes active, and suspends when all of its children are suspended. In our tests on Intel platforms, we routinely see these sort of warnings on the initial boot: [ 21.447345] rt715 sdw:3:25d:715:0: runtime PM trying to activate child device sdw:3:25d:715:0 but parent (sdw-master-3) is not active This is root-caused to a missing setup to make the device 'active' on probe. Since we don't want the device to remain active forever after the probe, the autosuspend configuration is also enabled at the end of the probe - the device will actually autosuspend only in the case where there are no devices physically attached. In practice, the master device will suspend when all its children are no longer active. Fixes: bd84256e86ecf ('soundwire: master: enable pm runtime') Signed-off-by: Pierre-Louis Bossart Reviewed-by: Rander Wang Signed-off-by: Bard Liao --- drivers/soundwire/master.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/drivers/soundwire/master.c b/drivers/soundwire/master.c index 3488bb824e84..9b05c9e25ebe 100644 --- a/drivers/soundwire/master.c +++ b/drivers/soundwire/master.c @@ -8,6 +8,15 @@ #include #include "bus.h" +/* + * The 3s value for autosuspend will only be used if there are no + * devices physically attached on a bus segment. In practice enabling + * the bus operation will result in children devices become active and + * the master device will only suspend when all its children are no + * longer active. + */ +#define SDW_MASTER_SUSPEND_DELAY_MS 3000 + /* * The sysfs for properties reflects the MIPI description as given * in the MIPI DisCo spec @@ -154,7 +163,12 @@ int sdw_master_device_add(struct sdw_bus *bus, struct device *parent, bus->dev = &md->dev; bus->md = md; + pm_runtime_set_autosuspend_delay(&bus->md->dev, SDW_MASTER_SUSPEND_DELAY_MS); + pm_runtime_use_autosuspend(&bus->md->dev); + pm_runtime_mark_last_busy(&bus->md->dev); + pm_runtime_set_active(&bus->md->dev); pm_runtime_enable(&bus->md->dev); + pm_runtime_idle(&bus->md->dev); device_register_err: return ret; } -- 2.17.1