Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp1184688yba; Thu, 9 May 2019 12:09:23 -0700 (PDT) X-Google-Smtp-Source: APXvYqz6MMDF3y6jke8vUXh1BasexNgC2FMWmBSgIAsCkwZ5Mcq6WvNxtuS4YY3T49txWpcEYeA3 X-Received: by 2002:a17:902:263:: with SMTP id 90mr7541419plc.257.1557428963200; Thu, 09 May 2019 12:09:23 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557428963; cv=none; d=google.com; s=arc-20160816; b=CMlcqYQLhR9f7DIDhw+rHAUd9BhKGh1+zj9v1s6hyKLvSW4xmJotWW8WH5df808pyR xh4/OCqy2YFKIroHHpcU+uNA0HbcwEEuQxIdA25kxA6DSl0JJ9hF8uicM7KhHxPrDnnz WJieR5FaGz+K90G3I/IMLyrng7W36kC6I1VGg7OeA+9ImiWUxO+BxaqBj9/bw+pMFpL1 xs5FExBB9TEmDilQ1YOCwnGjjkP68rWrOAGL4WEHPDD3Zq59wn+gez9GTDdKvhMUL/oh dA0A1N5pzZP7OdWPh6wkUagRBOilMNZtKpwilYISHWIHFImDtE75e4725fDlsuB2ckA1 BsIQ== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=aduL9fda/oUuc5LkizWm5Fwku8mgdrTo4YH3xUk5jMY=; b=SApUCWk2uqueqsCjjDUdpK2cBT/JiLLtAiKkmHfk4coiz1dHmnCUJze2m7FWdMalLW NDjQ+22nI0zy2XeKGE+hy6ZiDP/J5UTvROI4aRK139hJ/gWL0vQEys563DI2z2ASdQqg iBN2Nwq9nrcvbYhA2oYYgHDetk8nQ2BsWlZ5pWqbi7JDF2ILtOqXcJqZ0gjdwsMupW5a FJmzbZoWITKyR0o/0IyaxvQ+ajjJDbyHQW6cOYMnLDQJQhesnfQPbVF7Lf8BRbO79JIp 4Z8VCFYYzRtPSkdgJYk85sF5COqv0OHmW8bwjVP4v2S5er78aTHB/cdh06JTdDru0/dd ki7Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=qH8SJyIL; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id i4si4741183pfc.26.2019.05.09.12.09.06; Thu, 09 May 2019 12:09:23 -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; dkim=pass header.i=@kernel.org header.s=default header.b=qH8SJyIL; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727387AbfEITHH (ORCPT + 99 others); Thu, 9 May 2019 15:07:07 -0400 Received: from mail.kernel.org ([198.145.29.99]:38438 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726975AbfEISqM (ORCPT ); Thu, 9 May 2019 14:46:12 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 67725217F5; Thu, 9 May 2019 18:46:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1557427570; bh=jr4v+hFHZTSK0x1Krg/AhcBbhM2vwJIQ8UfUSQiH++Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=qH8SJyIL475PP0xn6P6+Tv7xe7T64w6LMbb6wKDAjyTCaa8rM0qaavmGjjuuG+J5A I6XGd67qs1swiwqchqb/QRStANIPh8E0eZEc9E/cpvDKcfT9xfljC8s/tl9Rn8ejxp bayQioJyYZhBfEEWSiA3vxD4g3fUByNNg7ANKyeo= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Russell King , Jyri Sarha , Mark Brown , Sasha Levin Subject: [PATCH 4.14 05/42] ASoC: hdmi-codec: fix S/PDIF DAI Date: Thu, 9 May 2019 20:41:54 +0200 Message-Id: <20190509181253.615723874@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190509181252.616018683@linuxfoundation.org> References: <20190509181252.616018683@linuxfoundation.org> User-Agent: quilt/0.66 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 [ Upstream commit 2e95f984aae4cf0608d0ba2189c756f2bd50b44a ] When using the S/PDIF DAI, there is no requirement to call snd_soc_dai_set_fmt() as there is no DAI format definition that defines S/PDIF. In any case, S/PDIF does not have separate clocks, this is embedded into the data stream. Consequently, when attempting to use TDA998x in S/PDIF mode, the attempt to configure TDA998x via the hw_params callback fails as the hdmi_codec_daifmt is left initialised to zero. Since the S/PDIF DAI will only be used by S/PDIF, prepare the hdmi_codec_daifmt structure for this format. Signed-off-by: Russell King Reviewed-by: Jyri Sarha Signed-off-by: Mark Brown Signed-off-by: Sasha Levin --- sound/soc/codecs/hdmi-codec.c | 118 +++++++++++++++++----------------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c index cf3b905b4eadf..7406695ee5dc2 100644 --- a/sound/soc/codecs/hdmi-codec.c +++ b/sound/soc/codecs/hdmi-codec.c @@ -536,73 +536,71 @@ static int hdmi_codec_set_fmt(struct snd_soc_dai *dai, { struct hdmi_codec_priv *hcp = snd_soc_dai_get_drvdata(dai); struct hdmi_codec_daifmt cf = { 0 }; - int ret = 0; dev_dbg(dai->dev, "%s()\n", __func__); - if (dai->id == DAI_ID_SPDIF) { - cf.fmt = HDMI_SPDIF; - } else { - switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { - case SND_SOC_DAIFMT_CBM_CFM: - cf.bit_clk_master = 1; - cf.frame_clk_master = 1; - break; - case SND_SOC_DAIFMT_CBS_CFM: - cf.frame_clk_master = 1; - break; - case SND_SOC_DAIFMT_CBM_CFS: - cf.bit_clk_master = 1; - break; - case SND_SOC_DAIFMT_CBS_CFS: - break; - default: - return -EINVAL; - } + if (dai->id == DAI_ID_SPDIF) + return 0; + + switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { + case SND_SOC_DAIFMT_CBM_CFM: + cf.bit_clk_master = 1; + cf.frame_clk_master = 1; + break; + case SND_SOC_DAIFMT_CBS_CFM: + cf.frame_clk_master = 1; + break; + case SND_SOC_DAIFMT_CBM_CFS: + cf.bit_clk_master = 1; + break; + case SND_SOC_DAIFMT_CBS_CFS: + break; + default: + return -EINVAL; + } - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { - case SND_SOC_DAIFMT_NB_NF: - break; - case SND_SOC_DAIFMT_NB_IF: - cf.frame_clk_inv = 1; - break; - case SND_SOC_DAIFMT_IB_NF: - cf.bit_clk_inv = 1; - break; - case SND_SOC_DAIFMT_IB_IF: - cf.frame_clk_inv = 1; - cf.bit_clk_inv = 1; - break; - } + switch (fmt & SND_SOC_DAIFMT_INV_MASK) { + case SND_SOC_DAIFMT_NB_NF: + break; + case SND_SOC_DAIFMT_NB_IF: + cf.frame_clk_inv = 1; + break; + case SND_SOC_DAIFMT_IB_NF: + cf.bit_clk_inv = 1; + break; + case SND_SOC_DAIFMT_IB_IF: + cf.frame_clk_inv = 1; + cf.bit_clk_inv = 1; + break; + } - switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { - case SND_SOC_DAIFMT_I2S: - cf.fmt = HDMI_I2S; - break; - case SND_SOC_DAIFMT_DSP_A: - cf.fmt = HDMI_DSP_A; - break; - case SND_SOC_DAIFMT_DSP_B: - cf.fmt = HDMI_DSP_B; - break; - case SND_SOC_DAIFMT_RIGHT_J: - cf.fmt = HDMI_RIGHT_J; - break; - case SND_SOC_DAIFMT_LEFT_J: - cf.fmt = HDMI_LEFT_J; - break; - case SND_SOC_DAIFMT_AC97: - cf.fmt = HDMI_AC97; - break; - default: - dev_err(dai->dev, "Invalid DAI interface format\n"); - return -EINVAL; - } + switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { + case SND_SOC_DAIFMT_I2S: + cf.fmt = HDMI_I2S; + break; + case SND_SOC_DAIFMT_DSP_A: + cf.fmt = HDMI_DSP_A; + break; + case SND_SOC_DAIFMT_DSP_B: + cf.fmt = HDMI_DSP_B; + break; + case SND_SOC_DAIFMT_RIGHT_J: + cf.fmt = HDMI_RIGHT_J; + break; + case SND_SOC_DAIFMT_LEFT_J: + cf.fmt = HDMI_LEFT_J; + break; + case SND_SOC_DAIFMT_AC97: + cf.fmt = HDMI_AC97; + break; + default: + dev_err(dai->dev, "Invalid DAI interface format\n"); + return -EINVAL; } hcp->daifmt[dai->id] = cf; - return ret; + return 0; } static int hdmi_codec_digital_mute(struct snd_soc_dai *dai, int mute) @@ -784,8 +782,10 @@ static int hdmi_codec_probe(struct platform_device *pdev) i++; } - if (hcd->spdif) + if (hcd->spdif) { hcp->daidrv[i] = hdmi_spdif_dai; + hcp->daifmt[DAI_ID_SPDIF].fmt = HDMI_SPDIF; + } ret = snd_soc_register_codec(dev, &hdmi_codec, hcp->daidrv, dai_count); -- 2.20.1