Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp6807238ybi; Wed, 5 Jun 2019 06:44:28 -0700 (PDT) X-Google-Smtp-Source: APXvYqyvZjbP4G0V6BzmZHdD5MZM+8jiovXh5R5qyutDq01XAcg6l9EB3Wxw9dIg46i6ywe0Vvpg X-Received: by 2002:a63:7e43:: with SMTP id o3mr4629788pgn.450.1559742268208; Wed, 05 Jun 2019 06:44:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559742268; cv=none; d=google.com; s=arc-20160816; b=yrpICdb/zJ+X/xdpsAkHLXKp2U7t58mwlumNZkp4UjkZGbpd7m4eMf+u3nhMp8+QYp VScHqWnrVZlQzs2nm+mp1iSbGczhIV2ryPxaGqIS7fFXF9/LIJVcVl/k+rjpEKKhQ/ma QTd1CQS+l2hNTfIJuRuEZMa201Nskx+2m2uD8OFP+WJybrFwe0ms0qYIb02txqiVd25D 0W8lYbxceQz6Wa39+qK7QA9fkjTYBOasWeFxCeLq4r++KzPrOj+Wvvsbkd/ipxmH7ATo 9IjIR5f+ZC8MWoiWCa+CMVk43GP5LhbKOrAurL3nRk6tH6M/6Fb98MQJUO9UwD099Rsz oOWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=gyilQfAuFe1Vk2jwdoW3LI586KKGQVi8Q2gzjx9uzY8=; b=mzGMmrzFJeY+0Igp6T9yXQ19UMLxBev+fTzZu7Iq7NtCg3CK36eCx/RINRTZXKRyYo UJEc7syWeOtrz3aP7EjBBT1/CRdFolf9HKF70YAHCEKKpLnuHfv9bCJAapywy0W8dfMD Gdw5IspOsZ/dlWCHU0o8mELtsHmCUYDiBsLqWl0g4jc6Yj5KupGLNckRsde6YaA/S29f BELtzN5VbpYzJP/lrXbYNqa6elnz4UNCX6tpDBR/1mb90HGPN3iFASSM+zONp8PP8R6F Ezu08FPzCmQdqz6Y1cBe+WwqLBjryhWlei8UU/ijjQS7zfEMVnpuuh623xWQpbedOo9L FzVg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id u143si31480464pfc.203.2019.06.05.06.44.11; Wed, 05 Jun 2019 06:44:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S1728199AbfFENmn (ORCPT + 99 others); Wed, 5 Jun 2019 09:42:43 -0400 Received: from mga14.intel.com ([192.55.52.115]:51941 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728190AbfFENmj (ORCPT ); Wed, 5 Jun 2019 09:42:39 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2019 06:42:39 -0700 X-ExtLoop1: 1 Received: from xxx.igk.intel.com ([10.237.93.170]) by orsmga004.jf.intel.com with ESMTP; 05 Jun 2019 06:42:36 -0700 From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= To: alsa-devel@alsa-project.org Cc: Jaroslav Kysela , Takashi Iwai , Liam Girdwood , Mark Brown , Pierre-Louis Bossart , Jie Yang , Cezary Rojewski , linux-kernel@vger.kernel.org, =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= Subject: [PATCH 08/14] ASoC: Intel: Skylake: Properly cleanup on component removal Date: Wed, 5 Jun 2019 15:45:50 +0200 Message-Id: <20190605134556.10322-9-amadeuszx.slawinski@linux.intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20190605134556.10322-1-amadeuszx.slawinski@linux.intel.com> References: <20190605134556.10322-1-amadeuszx.slawinski@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When we remove component we need to reverse things which were done on init, this consists of topology cleanup, lists cleanup and releasing firmware. Currently cleanup handlers are put in wrong places or otherwise missing. So add proper component cleanup function and perform cleanups in it. Signed-off-by: Amadeusz Sławiński --- sound/soc/intel/skylake/skl-pcm.c | 8 ++++++-- sound/soc/intel/skylake/skl-topology.c | 15 +++++++++++++++ sound/soc/intel/skylake/skl-topology.h | 2 ++ sound/soc/intel/skylake/skl.c | 2 -- 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/sound/soc/intel/skylake/skl-pcm.c b/sound/soc/intel/skylake/skl-pcm.c index 44062806fbed..7e8110c15258 100644 --- a/sound/soc/intel/skylake/skl-pcm.c +++ b/sound/soc/intel/skylake/skl-pcm.c @@ -1459,8 +1459,12 @@ static int skl_platform_soc_probe(struct snd_soc_component *component) static void skl_pcm_remove(struct snd_soc_component *component) { - /* remove topology */ - snd_soc_tplg_component_remove(component, SND_SOC_TPLG_INDEX_ALL); + struct hdac_bus *bus = dev_get_drvdata(component->dev); + struct skl *skl = bus_to_skl(bus); + + skl_tplg_exit(component, bus); + + skl_debugfs_exit(skl); } static const struct snd_soc_component_driver skl_component = { diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c index 44f3b29a7210..3964262109ac 100644 --- a/sound/soc/intel/skylake/skl-topology.c +++ b/sound/soc/intel/skylake/skl-topology.c @@ -3748,3 +3748,18 @@ int skl_tplg_init(struct snd_soc_component *component, struct hdac_bus *bus) return 0; } + +void skl_tplg_exit(struct snd_soc_component *component, struct hdac_bus *bus) +{ + struct skl *skl = bus_to_skl(bus); + struct skl_pipeline *ppl, *tmp; + + if (!list_empty(&skl->ppl_list)) + list_for_each_entry_safe(ppl, tmp, &skl->ppl_list, node) + list_del(&ppl->node); + + /* clean up topology */ + snd_soc_tplg_component_remove(component, SND_SOC_TPLG_INDEX_ALL); + + release_firmware(skl->tplg); +} diff --git a/sound/soc/intel/skylake/skl-topology.h b/sound/soc/intel/skylake/skl-topology.h index 82282cac9751..7d32c61c73e7 100644 --- a/sound/soc/intel/skylake/skl-topology.h +++ b/sound/soc/intel/skylake/skl-topology.h @@ -471,6 +471,8 @@ void skl_tplg_set_be_dmic_config(struct snd_soc_dai *dai, struct skl_pipe_params *params, int stream); int skl_tplg_init(struct snd_soc_component *component, struct hdac_bus *ebus); +void skl_tplg_exit(struct snd_soc_component *component, + struct hdac_bus *bus); struct skl_module_cfg *skl_tplg_fe_get_cpr_module( struct snd_soc_dai *dai, int stream); int skl_tplg_update_pipe_params(struct device *dev, diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c index 6d6401410250..e4881ff427ea 100644 --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -1119,14 +1119,12 @@ static void skl_remove(struct pci_dev *pci) struct skl *skl = bus_to_skl(bus); cancel_work_sync(&skl->probe_work); - release_firmware(skl->tplg); pm_runtime_get_noresume(&pci->dev); /* codec removal, invoke bus_device_remove */ snd_hdac_ext_bus_device_remove(bus); - skl->debugfs = NULL; skl_platform_unregister(&pci->dev); skl_free_dsp(skl); skl_machine_device_unregister(skl); -- 2.17.1