From patchwork Wed Feb 24 10:05:50 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hans de Goede X-Patchwork-Id: 386889 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5B1AEC433E0 for ; Wed, 24 Feb 2021 10:07:49 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id A674164EC3 for ; Wed, 24 Feb 2021 10:07:48 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org A674164EC3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id D1AD91684; Wed, 24 Feb 2021 11:06:56 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz D1AD91684 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1614161266; bh=r1d1SFbLadvmoNzMdx50IJS7usJkBWvkj81VivA9BKE=; h=From:To:Subject:Date:In-Reply-To:References:Cc:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=JzQAFPn0nOBuuCPrlnaXU1wnejRm1+nhGDhg3Tra97//kfa10JOil21jco1Rjq5t6 /mUN4LQWIcv15EW6e1d6ht/dUy1QeHjFhY3tk1zo5W/AvFrGs6MRoo2U8xcuBJNbpK YtZ3rsuSHW0Zdv6jARYf00jRJpfr8LCULp5uSfJM= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id 5208AF80129; Wed, 24 Feb 2021 11:06:13 +0100 (CET) Received: by alsa1.perex.cz (Postfix, from userid 50401) id 05422F8016C; Wed, 24 Feb 2021 11:06:04 +0100 (CET) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [63.128.21.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by alsa1.perex.cz (Postfix) with ESMTPS id 40B72F80129 for ; Wed, 24 Feb 2021 11:06:01 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 40B72F80129 Authentication-Results: alsa1.perex.cz; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Np3qh10b" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1614161160; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=bbQoqNtkB2ZH0cWvNq9ipZPSrKT0JOS3TmG+KK0si3Y=; b=Np3qh10bxebtXlSVgFmfwYXf5s/h0xCkqaZogT2o6pC6Ol0pJZalttdWArk66nOMtbhcWX zhhmroIPNfzweTQX4xBKwaejiGARM1Y7iE0kjne0/s1ko2tFX7fwAiFNPcpN8BcL9RbkVP WhZ/OQo7bjgVAVt86p0vMcGB9K6HrgM= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-476-sZ-nBWitPBS36ZI80jip9A-1; Wed, 24 Feb 2021 05:05:56 -0500 X-MC-Unique: sZ-nBWitPBS36ZI80jip9A-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7CA02193579C; Wed, 24 Feb 2021 10:05:55 +0000 (UTC) Received: from x1.localdomain (ovpn-113-243.ams2.redhat.com [10.36.113.243]) by smtp.corp.redhat.com (Postfix) with ESMTP id AB9E95D9D3; Wed, 24 Feb 2021 10:05:54 +0000 (UTC) From: Hans de Goede To: Jaroslav Kysela , alsa-devel@alsa-project.org Subject: [PATCH alsa-lib 2/3] mixer: Add exception for non " Volume" suffixed capture vol-ctls used in ASoC realtek codec drivers Date: Wed, 24 Feb 2021 11:05:50 +0100 Message-Id: <20210224100551.15141-2-hdegoede@redhat.com> In-Reply-To: <20210224100551.15141-1-hdegoede@redhat.com> References: <20210224100551.15141-1-hdegoede@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=hdegoede@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Cc: Hans de Goede X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" The following ASoC codec drivers: sound/soc/codecs/rt5640.c sound/soc/codecs/rt5645.c sound/soc/codecs/rt5651.c sound/soc/codecs/rt5677.c Use capture-volume-control names like: "IN1 Boost", note the missing " Volume" suffix. This causes the mixer code to not identify these as volume-controls, which causes some of the dB related sm_elem_ops to return -EINVAL. This in turn causes alsamixer to not show dB info and causes UCM profile HW volume control support in pulseaudio to not work properly due to the lacking dB scale info. This cannot be fixed on the kernel side because the non " Volume" suffixed names are used in UCM profiles currently shipping in alsa-ucm-conf. Add some code to the base_len() function, which is responsbile for getting the control-type to deal with these special cases. Signed-off-by: Hans de Goede --- src/mixer/simple_none.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/src/mixer/simple_none.c b/src/mixer/simple_none.c index 7da7de1e..262e3516 100644 --- a/src/mixer/simple_none.c +++ b/src/mixer/simple_none.c @@ -905,13 +905,29 @@ static const struct suf { {" Volume", CTL_GLOBAL_VOLUME}, {NULL, 0} }; + +/* + * Some kernel drivers use mixer-element names for capture-volumes which + * are not suffixed with " Capture Volume". This cannot be fixed on the + * kernel side because the non-suffixed names are used in UCM profiles, + * so we map these to CTL_CAPTURE_VOLUME based on their full name. + */ +const char * const capture_volume_names[] = { + "ADC Boost Gain", + "IN1 Boost", + "IN2 Boost", + "IN3 Boost", + NULL +}; #endif /* Return base length */ static int base_len(const char *name, selem_ctl_type_t *type) { - const struct suf *p; size_t nlen = strlen(name); + const struct suf *p; + char buf[32]; + int i; /* exception: "Capture Volume" and "Capture Switch" */ if (!strcmp(name, "Capture Volume")) { @@ -923,6 +939,13 @@ static int base_len(const char *name, selem_ctl_type_t *type) return strlen("Capture"); } + for (i = 0; capture_volume_names[i]; i++) { + if (!strcmp(name, capture_volume_names[i])) { + *type = CTL_CAPTURE_VOLUME; + return nlen; + } + } + p = suffixes; while (p->suffix) { size_t slen = strlen(p->suffix);