Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp368473pxj; Fri, 7 May 2021 10:20:35 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyNBVOqVE3zm5BcrzIB4zBsgMj95VrxlulpEtLDYIRI3lYs1xyBM22h3GXUhkDKUlcbPnwI X-Received: by 2002:a17:90a:ea8b:: with SMTP id h11mr11352323pjz.186.1620408035209; Fri, 07 May 2021 10:20:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1620408035; cv=none; d=google.com; s=arc-20160816; b=kE6amWVjj2gOlph2P457RtX8pTSMZlnczTpJv/mbwTjNoyV/xlIvB+2YpO6CAf5zJ2 FsWbpnPSQwh0OyTaF0gRdGRoKDrNkwov4EPVzcKDFT/N3oDAFOv5YC+QrCcDHf2mPnYo ZwwvS1j7vpy7UZWpmbD3l1BFDDAUy0mpqEekpVkXgZkphpZRMN485X9yz1d/u9MUqgaC /aXuAcZtgtHce1mIoyZBXEePZwMHsoxQ0YJU3gAdVzovrhPS8nL2XP7EmlhnUVX9MK1V fi6haRyQR2lPUxfGy2Dp4kfUi3Y6ieyQoxf6r2XeOpNqD8Ql+pP/8Ho5SeIXecDDqE+j onKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:dkim-signature; bh=0tCZUVm0LzbwzsTVp/1htol6gCR0oAWdginEPnGYXF4=; b=rUHrUg+4YsvBNJgH6vIPlBNaK4eZ1MJtk/a7Jr+TgUj17DWjl4BiS0yBms1jKLp2tP GNwLOLbE670GIZH2hivz3gIB04dweZ3ZOnS77tDNNGiJaJXDSeiF8M1Z57zaSRPtSWzs BJ6Ez7Fm+KH7wpYBrw5Af40iizdUGfzE/vJ7Jnl3nE1sBzF8sr9iEQeIYECwm11Yt3Jj LDcafKLtrEDN/BpbNjaZ55fxF7dzKRBsmTgajli286aVS8inBiGcYPr6iuzSs5aH/7li fXvYkl6oTeGin87qUvnesPlkO+TNmokJHN2AoDYKIUaZaEcoDZ+WTxDOa7VU+w/dRxtz 0gZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=Ynaf956G; dkim=pass header.i=@messagingengine.com header.s=fm2 header.b=sS7Y9NvX; 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=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a18si7477466pls.121.2021.05.07.10.20.22; Fri, 07 May 2021 10:20:35 -0700 (PDT) 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; dkim=pass header.i=@cerno.tech header.s=fm2 header.b=Ynaf956G; dkim=pass header.i=@messagingengine.com header.s=fm2 header.b=sS7Y9NvX; 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=pass (p=NONE sp=NONE dis=NONE) header.from=cerno.tech Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236902AbhEGOGE (ORCPT + 99 others); Fri, 7 May 2021 10:06:04 -0400 Received: from wnew4-smtp.messagingengine.com ([64.147.123.18]:45979 "EHLO wnew4-smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236344AbhEGOGB (ORCPT ); Fri, 7 May 2021 10:06:01 -0400 Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailnew.west.internal (Postfix) with ESMTP id 90C5110D9; Fri, 7 May 2021 10:04:59 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute3.internal (MEProxy); Fri, 07 May 2021 10:05:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cerno.tech; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=0tCZUVm0Lzbwz sTVp/1htol6gCR0oAWdginEPnGYXF4=; b=Ynaf956GV8wbJXhvbajTdKtfun1wW zjGaLO9RbkGM6Ouyoutlv/Hg6a3NkRMI6DHto/e3OaAYA7+tk9uYIOl8E5Z9EZgD wBXD3axDk1NUJ4/7H6v/Edy48teBjjo8INWUX98uHs0RC77oS3az9Yv6jjb2Hyx8 btkabc+em++s4LfMSDQFhUVtg7YHALj7tVMhWaaDoT4tZQBt6BkAruI4fz5355W9 Y5NKFByLefd8yMsXhQ8WQu7A+f49L5I7YpLCyCOtysRKf+MOBBAEGAepLJTEQ6cj qUgAyV6PGccvNBziQqJcr94rozl04AnkedKuI2bysOEhI6+RIIkFq535g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=0tCZUVm0LzbwzsTVp/1htol6gCR0oAWdginEPnGYXF4=; b=sS7Y9NvX VDZ3nM/GcQCub7C3/JoE4MyreKyEoAVvMbDVQueqf5PfpufL+K+VuELMdX4Pc+tv RNAK9XyF9hwpsRXCqLyYz9Yx4VamEUFpnfjVrVzaoF9V1hHG70uiIoDxFzTMEbdP bVfBtEPfhm4bOExQH0dVWd6fykVp7Er9W916qlqpU49KdAI5pHKzJw9IHQLH4hYh q2+fnO0IW97Z/6gxYGpkXsnxpB9E/kyMGX0cU7xxQtX2TwHtkvmC8hx9HXMzqX+N dwlpbfG+kpXkGF1RHZEu7tBlSh3QWZKkyv2fW3DtK0VzYMb9LdZJ7x1SvrAGhIRA vnsgnifyKzNBLw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrvdegvddgjedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhephffvufffkffojghfggfgsedtkeertdertddtnecuhfhrohhmpeforgigihhm vgcutfhiphgrrhguuceomhgrgihimhgvsegtvghrnhhordhtvggthheqnecuggftrfgrth htvghrnhepvdekleevfeffkeejhfffueelteelfeduieefheduudfggffhhfffheevveeh hedvnecukfhppeeltddrkeelrdeikedrjeeinecuvehluhhsthgvrhfuihiivgeptdenuc frrghrrghmpehmrghilhhfrhhomhepmhgrgihimhgvsegtvghrnhhordhtvggthh X-ME-Proxy: Received: from localhost (lfbn-tou-1-1502-76.w90-89.abo.wanadoo.fr [90.89.68.76]) by mail.messagingengine.com (Postfix) with ESMTPA; Fri, 7 May 2021 10:04:56 -0400 (EDT) From: Maxime Ripard To: Mark Brown , Takashi Iwai , Liam Girdwood , Jaroslav Kysela , dri-devel@lists.freedesktop.org, Daniel Vetter , David Airlie , Maarten Lankhorst , Thomas Zimmermann , Maxime Ripard Cc: Nicolas Saenz Julienne , Rob Herring , devicetree@vger.kernel.org, alsa-devel@alsa-project.org, bcm-kernel-feedback-list@broadcom.com, linux-arm-kernel@lists.infradead.org, Maxime Ripard , linux-kernel@vger.kernel.org, Dave Stevenson , Phil Elwell , Tim Gover , Dom Cobley , Daniel Vetter , linux-rpi-kernel@lists.infradead.org, Eric Anholt Subject: [PATCH 03/11] ASoC: hdmi-codec: Add iec958 controls Date: Fri, 7 May 2021 16:03:26 +0200 Message-Id: <20210507140334.204865-4-maxime@cerno.tech> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210507140334.204865-1-maxime@cerno.tech> References: <20210507140334.204865-1-maxime@cerno.tech> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Maxime Ripard --- sound/soc/codecs/hdmi-codec.c | 66 +++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/sound/soc/codecs/hdmi-codec.c b/sound/soc/codecs/hdmi-codec.c index bc0d695d2df0..45081f928680 100644 --- a/sound/soc/codecs/hdmi-codec.c +++ b/sound/soc/codecs/hdmi-codec.c @@ -278,6 +278,7 @@ struct hdmi_codec_priv { bool busy; struct snd_soc_jack *jack; unsigned int jack_status; + u8 iec_status[5]; }; static const struct snd_soc_dapm_widget hdmi_widgets[] = { @@ -386,6 +387,47 @@ static int hdmi_codec_chmap_ctl_get(struct snd_kcontrol *kcontrol, return 0; } +static int hdmi_codec_iec958_info(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_info *uinfo) +{ + uinfo->type = SNDRV_CTL_ELEM_TYPE_IEC958; + uinfo->count = 1; + return 0; +} + +static int hdmi_codec_iec958_default_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); + struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component); + + memcpy(ucontrol->value.iec958.status, hcp->iec_status, + sizeof(hcp->iec_status)); + + return 0; +} + +static int hdmi_codec_iec958_default_put(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + struct snd_soc_component *component = snd_kcontrol_chip(kcontrol); + struct hdmi_codec_priv *hcp = snd_soc_component_get_drvdata(component); + + memcpy(hcp->iec_status, ucontrol->value.iec958.status, + sizeof(hcp->iec_status)); + + return 0; +} + +static int hdmi_codec_iec958_mask_get(struct snd_kcontrol *kcontrol, + struct snd_ctl_elem_value *ucontrol) +{ + memset(ucontrol->value.iec958.status, 0xff, + sizeof_field(struct hdmi_codec_priv, iec_status)); + + return 0; +} + static int hdmi_codec_startup(struct snd_pcm_substream *substream, struct snd_soc_dai *dai) { @@ -460,8 +502,9 @@ static int hdmi_codec_hw_params(struct snd_pcm_substream *substream, params_width(params), params_rate(params), params_channels(params)); - ret = snd_pcm_create_iec958_consumer_hw_params(params, hp.iec.status, - sizeof(hp.iec.status)); + memcpy(hp.iec.status, hcp->iec_status, sizeof(hp->iec_status)); + ret = snd_pcm_fill_iec958_consumer_hw_params(params, hp.iec.status, + sizeof(hp.iec.status)); if (ret < 0) { dev_err(dai->dev, "Creating IEC958 channel status failed %d\n", ret); @@ -622,6 +665,20 @@ static const struct snd_soc_dai_ops hdmi_codec_spdif_dai_ops = { SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE) struct snd_kcontrol_new hdmi_codec_controls[] = { + { + .access = SNDRV_CTL_ELEM_ACCESS_READ, + .iface = SNDRV_CTL_ELEM_IFACE_PCM, + .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, MASK), + .info = hdmi_codec_iec958_info, + .get = hdmi_codec_iec958_mask_get, + }, + { + .iface = SNDRV_CTL_ELEM_IFACE_PCM, + .name = SNDRV_CTL_NAME_IEC958("", PLAYBACK, DEFAULT), + .info = hdmi_codec_iec958_info, + .get = hdmi_codec_iec958_default_get, + .put = hdmi_codec_iec958_default_put, + }, { .access = (SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE), @@ -874,6 +931,11 @@ static int hdmi_codec_probe(struct platform_device *pdev) hcp->hcd = *hcd; mutex_init(&hcp->lock); + ret = snd_pcm_create_iec958_consumer_default(hcp->iec_status, + sizeof(hcp->iec_status)); + if (ret < 0) + return ret; + daidrv = devm_kcalloc(dev, dai_count, sizeof(*daidrv), GFP_KERNEL); if (!daidrv) return -ENOMEM; -- 2.31.1