Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp1306728ybl; Wed, 21 Aug 2019 13:19:31 -0700 (PDT) X-Google-Smtp-Source: APXvYqywXr/hhOextq8VjZbl3ZfjFYEpI7EhKDx6F0vnNAhcTxF5WaNKmUoqwO5hKxEYAQJFq9ow X-Received: by 2002:aa7:91cc:: with SMTP id z12mr37586649pfa.76.1566418771920; Wed, 21 Aug 2019 13:19:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566418771; cv=none; d=google.com; s=arc-20160816; b=OICdi6eDmkaq9hh9hn8nf/6VpC1mKc1jpF+qYdWxQxvIM96Zm6cAyd2G/VpQuL1G3G 9ZDXT/JhvVhtDQTSwY+JTTbBmtvU6NQAvF7WhvJiclJjwy2FhoxXq7Ukp35MI9xvNRWK mxttH+Ax+3LUQarK8ZryA97tRjGU4nI/rFwVysvO/mBSYG/lcVqVVXBEzgp6rYADbwiF W4NODVaAFC/RDQCbAfMQ+HdPXmZhB2CGPi5bVWqDWPA81skqbw7nIYGeggDept2NokPW OzR4FGNtHYJivSJAkAmGUpGkUqnHIPrTaSu1oWaDCBJI8XphH9/H4DKVFn1kZsQPhB7a ADqA== 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=Q1MMDl3SBtO+OBsZ93OavDp8LRpBU5egPFGN8KuDOMc=; b=ZxohSrLGNpsBEfmYujYJG2j27ztZx4w94NBJBLY+6+ruhKKvVRtMSBQ8dH/HyFm4LQ u08fR+G/dzNeTbUPxOXFQUwUrSp9Ymy/27SlJo9EY5z3TWTZv4+AtDbInA4SowBiprRC NUNJw/YChzEZMgN1/s0dhHGMMvQ+4zIRrHc2OY5HicNBlPoF6cgncU91on+r1nQx6OOG zWRYParue/xZFSPOWVLEspLLfM+CgF60GdasyFby5v+d0LQhS3enCm9SVp8v0RW56uyi NL610qqeLMUCxBj9a5b51slSDHbWLq60gTYFi9Ryl/J6vvKGxkyziSPvSyYhwLPf8kpv 1cpw== 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 t1si680369pjv.5.2019.08.21.13.19.17; Wed, 21 Aug 2019 13:19:31 -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 S1730517AbfHUUSI (ORCPT + 99 others); Wed, 21 Aug 2019 16:18:08 -0400 Received: from mga05.intel.com ([192.55.52.43]:5740 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729782AbfHUUSH (ORCPT ); Wed, 21 Aug 2019 16:18:07 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by fmsmga105.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 21 Aug 2019 13:18:07 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,412,1559545200"; d="scan'208";a="186344211" Received: from smasango-mobl1.amr.corp.intel.com (HELO pbossart-mobl3.intel.com) ([10.252.139.100]) by FMSMGA003.fm.intel.com with ESMTP; 21 Aug 2019 13:18:04 -0700 From: Pierre-Louis Bossart To: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org, tiwai@suse.de, broonie@kernel.org, vkoul@kernel.org, gregkh@linuxfoundation.org, jank@cadence.com, srinivas.kandagatla@linaro.org, slawomir.blauciak@intel.com, Bard liao , Rander Wang , Ranjani Sridharan , Pierre-Louis Bossart , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , Zhu Yingjiang , YueHaibing , Kai Vehmanen , Guennadi Liakhovetski , Arnd Bergmann Subject: [RFC PATCH 4/5] ASoC: SOF: Intel: hda: add SoundWire stream config/free callbacks Date: Wed, 21 Aug 2019 15:17:19 -0500 Message-Id: <20190821201720.17768-5-pierre-louis.bossart@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190821201720.17768-1-pierre-louis.bossart@linux.intel.com> References: <20190821201720.17768-1-pierre-louis.bossart@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org These callbacks are invoked when a matching hw_params/hw_free() DAI operation takes place, and will result in IPC operations with the SOF firmware. Signed-off-by: Pierre-Louis Bossart --- sound/soc/sof/intel/hda.c | 66 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/sound/soc/sof/intel/hda.c b/sound/soc/sof/intel/hda.c index e754058e3679..1e84ea9e6fce 100644 --- a/sound/soc/sof/intel/hda.c +++ b/sound/soc/sof/intel/hda.c @@ -53,6 +53,70 @@ static void hda_sdw_int_enable(struct snd_sof_dev *sdev, bool enable) 0); } +static int sdw_config_stream(void *arg, void *s, void *dai, + void *params, int link_id, int alh_stream_id) +{ + struct snd_sof_dev *sdev = arg; + struct snd_soc_dai *d = dai; + struct sof_ipc_dai_config config; + struct sof_ipc_reply reply; + int ret; + u32 size = sizeof(config); + + memset(&config, 0, size); + config.hdr.size = size; + config.hdr.cmd = SOF_IPC_GLB_DAI_MSG | SOF_IPC_DAI_CONFIG; + config.type = SOF_DAI_INTEL_ALH; + config.dai_index = (link_id << 8) | (d->id); + config.alh.stream_id = alh_stream_id; + + /* send message to DSP */ + ret = sof_ipc_tx_message(sdev->ipc, + config.hdr.cmd, &config, size, &reply, + sizeof(reply)); + if (ret < 0) { + dev_err(sdev->dev, + "error: failed to set DAI hw_params for link %d dai->id %d ALH %d\n", + link_id, d->id, alh_stream_id); + } + + return ret; +} + +static int sdw_free_stream(void *arg, void *s, void *dai, int link_id) +{ + struct snd_sof_dev *sdev = arg; + struct snd_soc_dai *d = dai; + struct sof_ipc_dai_config config; + struct sof_ipc_reply reply; + int ret; + u32 size = sizeof(config); + + memset(&config, 0, size); + config.hdr.size = size; + config.hdr.cmd = SOF_IPC_GLB_DAI_MSG | SOF_IPC_DAI_CONFIG; + config.type = SOF_DAI_INTEL_ALH; + config.dai_index = (link_id << 8) | d->id; + config.alh.stream_id = 0xFFFF; /* invalid value on purpose */ + + /* send message to DSP */ + ret = sof_ipc_tx_message(sdev->ipc, + config.hdr.cmd, &config, size, &reply, + sizeof(reply)); + if (ret < 0) { + dev_err(sdev->dev, + "error: failed to free stream for link %d dai->id %d\n", + link_id, d->id); + } + + return ret; +} + +static const struct sdw_intel_ops sdw_callback = { + .config_stream = sdw_config_stream, + .free_stream = sdw_free_stream, +}; + static int hda_sdw_init(struct snd_sof_dev *sdev) { acpi_handle handle; @@ -67,6 +131,8 @@ static int hda_sdw_init(struct snd_sof_dev *sdev) res.mmio_base = sdev->bar[HDA_DSP_BAR]; res.irq = sdev->ipc_irq; res.parent = sdev->dev; + res.ops = &sdw_callback; + res.arg = sdev; sdw = sdw_intel_init(handle, &res); if (!sdw) { -- 2.20.1