Received: by 2002:a25:8b12:0:0:0:0:0 with SMTP id i18csp623127ybl; Thu, 22 Aug 2019 02:15:51 -0700 (PDT) X-Google-Smtp-Source: APXvYqySdoQ3RilsueYA1Ox3hijuOeMS3jvba8UeJdlg19ZurlkqdUf1rjsVia5AoaEk/+dvGBcU X-Received: by 2002:a63:101b:: with SMTP id f27mr31676261pgl.291.1566465351625; Thu, 22 Aug 2019 02:15:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1566465351; cv=none; d=google.com; s=arc-20160816; b=pnwCDqYgW4n55LWtPwSFKcbYJBw/Le00xQDis/ePNOGp0+FcqjsA0X8Y4sNhgIkP5j PfG2JHw8LcJxeIFkXCAswXTOC8RikQTP6HSTP24xPgOs8/P6YXv8Ea/EN14ZRvakkjqi 6E8kK8rebCdIc8u0+6mz5Emr6am7qMBohR3WpEo6g5Kos3ZnWZf4c7n4/pVnCO7hL0OP 8svrnYD618ysWrT3f8jovDl8A96aSfTtaW/DGRthZEj1V7ut6NdgMGqFQ6Z5vlYlTszU BO5jSOLOm3q9Xz9lyhrciCVX3jrH+lwUwIm6N8F/1kmO4YTkwVawczggR4YkfiOlL+E+ vE7g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=MQNxhFk8Ji6KQcsY8wiA3vTeDXlSSoyiyNZM6j/E2x4=; b=eiqKo5AxBIt9VE/XQmQMdG+DO6arhmcJfu9EGGRwl+oyMBprqt+PGIiis5GPjkVGXq K2bmHnEPLlMXjr2IP0j6KN9EgXI6XMzMOlqc5r7ewDbHbz/1u1iE1mK40fBiSAA224VM 0GidQsshY3NbXIzvHYcWCoE9reXMSu8pT/F2km34ul/15zU4abu9pymcm/ICADkt2hM3 c7p8Gtp1TcPnZK3Mc8CHwX+WweC2mSAAew7DNOtzlMROD8zvcU3jXEGHzPsyKoLejdpD 1W2MKB70zTxiDno/rKrmfL4sXM2T83/dtgfP9pwQqiRIpGTBGrssa6POmTPyxs8jLtAO 72ZQ== 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 34si17423221plz.18.2019.08.22.02.15.36; Thu, 22 Aug 2019 02:15:51 -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 S1731496AbfHVHSn (ORCPT + 99 others); Thu, 22 Aug 2019 03:18:43 -0400 Received: from mga02.intel.com ([134.134.136.20]:43722 "EHLO mga02.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727310AbfHVHSm (ORCPT ); Thu, 22 Aug 2019 03:18:42 -0400 X-Amp-Result: UNSCANNABLE X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Aug 2019 00:18:41 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.64,415,1559545200"; d="scan'208";a="203294576" Received: from gliakhov-mobl2.ger.corp.intel.com (HELO ubuntu) ([10.249.36.176]) by fmsmga004.fm.intel.com with ESMTP; 22 Aug 2019 00:18:37 -0700 Date: Thu, 22 Aug 2019 09:18:36 +0200 From: Guennadi Liakhovetski To: Pierre-Louis Bossart Cc: alsa-devel@alsa-project.org, 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 , Liam Girdwood , Jaroslav Kysela , Takashi Iwai , Zhu Yingjiang , YueHaibing , Kai Vehmanen , Arnd Bergmann Subject: Re: [RFC PATCH 4/5] ASoC: SOF: Intel: hda: add SoundWire stream config/free callbacks Message-ID: <20190822071835.GA30262@ubuntu> References: <20190821201720.17768-1-pierre-louis.bossart@linux.intel.com> <20190821201720.17768-5-pierre-louis.bossart@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20190821201720.17768-5-pierre-louis.bossart@linux.intel.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Pierre, A couple of comments below On Wed, Aug 21, 2019 at 03:17:19PM -0500, Pierre-Louis Bossart wrote: > 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) I realise, that these function prototypes aren't being introduced by these patches, but just wondering whether such overly generic prototype is really a good idea here, whether some of those "void *" pointers could be given real types. The first one could be "struct device *" etc. > +{ > + 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; Entirely up to you, in such cases I usually do something like + struct sof_ipc_dai_config config = { + .type = SOF_DAI_INTEL_ALH, + .hre = { + .size = sizeof(config), + .cmd = SOF_IPC_GLB_DAI_MSG | SOF_IPC_DAI_CONFIG, + ... which then also avoids a memset(). But that's mostly a matter of personal preference, since this is on stack, the compiler would probably internally anyway translate the above initialisation to a memset() with all the following assignments. > + > + /* 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", Are readers really expected to understand what "dai->id" means? Wouldn't "DAI ID" be friendlier, although I understand you - who might not know what "x->y" stands for?.. ;-) > + 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 */ ditto > + > + /* 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); ditto > + } > + > + 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) { Hm, looks like this function is using spaces for indentation... Let me check if this is coming from an earlier patch Thanks Guennadi > -- > 2.20.1 >