From patchwork Wed Dec 20 22:45:24 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 181838 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:2483:b0:fb:cd0c:d3e with SMTP id q3csp58863dyi; Wed, 20 Dec 2023 15:00:34 -0800 (PST) X-Google-Smtp-Source: AGHT+IHLui38Q+xSI32FYZ9Y0ZrtsOue2D/uogUz8j36YZpCDKfFW7jZzE/HvCkislcKnb7n6Oz0 X-Received: by 2002:a05:620a:44c6:b0:77f:3777:902a with SMTP id y6-20020a05620a44c600b0077f3777902amr5850709qkp.38.1703113234339; Wed, 20 Dec 2023 15:00:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1703113234; cv=none; d=google.com; s=arc-20160816; b=jy2FXkDWaBQmkWHS+l2obWjH/wt+47qbCL4DvP3HYK+zpfzha3i4E+ZWe1FOtiILqz ce0zcynqRVOsNSOgqx92Pho/DEe614zAX/0gpo9D4Y7I3HeDGsA0QZXMceMzrb0GQa8T QEItw9X+lslYQiz6KqFm5H4wjx0+lEAPaeBsCzUulBbv2kL8WQh0uNRq6QUcNZZH06nX iAXndeY8bFaPTn74+JST7iFInJ6A37SwXdLu6pBQNAguPsx4lFU5mE4MK/EwSvXlwYu4 +B1pwWEARuxnKyvQwjFX1MJ4Um0pIpymww+DMtIvO34KcGjMeoa2Y3Yhk26JoBT0SDvg /G9w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:list-unsubscribe:list-subscribe:list-id:precedence :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=8aUObxKYV+uPq+60bdABM9PBJEIsJx4xymaygMnyidk=; fh=0KzismZj+xI0Z//ZGdqKIH/FO9LtSZM7Yj4P0VtrCz0=; b=RPmAg55KgbhpxNcxBrjPGvNHEV5wd4jzXWwFz+KPHv/rTiXsGEmIonk7f3qGIDpzz6 uSHVHsJirtv4/kVIoOdpYOPhk2cJY5/IsgQMjHjdU34ROWJHmIYZNAoGouJ4YYbDW9+n RmVYhNousvRIhFUaUSAuGJSwhEFzEtTivshbSYRnRFcrnSnvtsIN5faEqj2yaraat56q 8ZHVmwxhxGTK4oAiWuF18SeqLd/iAraJ5J7pnTPLq8EXVoEredIIGUy9VgXNuLO6azoj m0ucG+CQCnqDs9qdHCODzuLLTz17T9MA2WNTugIvqou5AgTDJGnBicR4M3MWC0AwzpWX tRTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=oB6qJ2nw; spf=pass (google.com: domain of linux-kernel+bounces-7567-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-7567-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [147.75.199.223]) by mx.google.com with ESMTPS id vm8-20020a05620a718800b0077f5823055csi798031qkn.204.2023.12.20.15.00.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Dec 2023 15:00:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-7567-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) client-ip=147.75.199.223; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=oB6qJ2nw; spf=pass (google.com: domain of linux-kernel+bounces-7567-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-7567-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 199A41C21B5E for ; Wed, 20 Dec 2023 23:00:34 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id A31E4692AA; Wed, 20 Dec 2023 22:46:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="oB6qJ2nw" X-Original-To: linux-kernel@vger.kernel.org Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E64024F8A6; Wed, 20 Dec 2023 22:46:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=quicinc.com Received: from pps.filterd (m0279865.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 3BKLuTDx029802; Wed, 20 Dec 2023 22:46:01 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type; s=qcppdkim1; bh=8aUObxKYV+uPq+60bdAB M9PBJEIsJx4xymaygMnyidk=; b=oB6qJ2nwAIKR7cGJGB5S8GP5FbzhN0AfPgpj 7r3b/CS0wF6cPDmjnrr7YVFVyzD8/PxlNQuYTDzi7HS4ZGDZ0QaeBibPqd+Rc3w0 cOZxka8L4Je5iMm2t3ORa52E1xxzEDJXgM6UyFSrLKkfiAdjFFTa9Sq401CzC4Jj jMmQnlygYbYCQuF74es3ri/oBTvoVUuQMLU/U/x9GD0kgJEUSyIbuHSM6WuaVvVB iKpz6wtyv92ES+uAXnoXrMmrpFDDbPXCiXw4HrJzt8ZlRRo5HavxV/fQ61gpmBt+ 8eeSZYkF0ss7cX1ac8XxCStf49nW4+UQpYMHwJ/o0o/8R1HCqQ== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3v3th6tf29-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 20 Dec 2023 22:46:00 +0000 (GMT) Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA03.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 3BKMk0UX016454 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 20 Dec 2023 22:46:00 GMT Received: from hu-wcheng-lv.qualcomm.com (10.49.16.6) by nalasex01b.na.qualcomm.com (10.47.209.197) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.1118.40; Wed, 20 Dec 2023 14:45:59 -0800 From: Wesley Cheng To: , , , , , , , , , , , , , , , CC: , , , , , , , Wesley Cheng Subject: [PATCH v11 21/41] ASoC: usb: Add PCM format check API for USB backend Date: Wed, 20 Dec 2023 14:45:24 -0800 Message-ID: <20231220224544.18031-22-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20231220224544.18031-1-quic_wcheng@quicinc.com> References: <20231220224544.18031-1-quic_wcheng@quicinc.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-ClientProxiedBy: nalasex01a.na.qualcomm.com (10.47.209.196) To nalasex01b.na.qualcomm.com (10.47.209.197) X-QCInternal: smtphost X-Proofpoint-Virus-Version: vendor=nai engine=6200 definitions=5800 signatures=585085 X-Proofpoint-GUID: OOscZYa39P2AGcCjfOj4eNmyp1sieYom X-Proofpoint-ORIG-GUID: OOscZYa39P2AGcCjfOj4eNmyp1sieYom X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.997,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-12-09_01,2023-12-07_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 impostorscore=0 bulkscore=0 mlxlogscore=999 lowpriorityscore=0 phishscore=0 priorityscore=1501 clxscore=1015 spamscore=0 mlxscore=0 adultscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2311290000 definitions=main-2312200163 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785843662697071389 X-GMAIL-MSGID: 1785843662697071389 Introduce a helper to check if a particular PCM format is supported by the USB audio device connected. If the USB audio device does not have an audio profile which can support the requested format, then notify the USB backend. Signed-off-by: Wesley Cheng --- include/sound/soc-usb.h | 2 ++ sound/soc/soc-usb.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/sound/soc-usb.h b/include/sound/soc-usb.h index 71e2e69ae3a2..f42e7f224549 100644 --- a/include/sound/soc-usb.h +++ b/include/sound/soc-usb.h @@ -38,6 +38,8 @@ struct snd_soc_usb { }; const char *snd_soc_usb_get_components_tag(bool playback); +int snd_soc_usb_find_format(int card_idx, struct snd_pcm_hw_params *params, + int direction); int snd_soc_usb_connect(struct device *usbdev, struct snd_soc_usb_device *sdev); int snd_soc_usb_disconnect(struct device *usbdev, struct snd_soc_usb_device *sdev); diff --git a/sound/soc/soc-usb.c b/sound/soc/soc-usb.c index 2f3ef835052b..d62a51d9196c 100644 --- a/sound/soc/soc-usb.c +++ b/sound/soc/soc-usb.c @@ -80,6 +80,31 @@ void *snd_soc_usb_find_priv_data(struct device *dev) } EXPORT_SYMBOL_GPL(snd_soc_usb_find_priv_data); +/** + * snd_soc_usb_find_format() - Check if audio format is supported + * @card_idx: USB sound chip array index + * @params: PCM parameters + * @direction: capture or playback + * + * Ensure that a requested audio profile from the ASoC side is able to be + * supported by the USB device. + * + * Return 0 on success, negative on error. + * + */ +int snd_soc_usb_find_format(int card_idx, struct snd_pcm_hw_params *params, + int direction) +{ + struct snd_usb_stream *as; + + as = snd_usb_find_suppported_substream(card_idx, params, direction); + if (!as) + return -EOPNOTSUPP; + + return 0; +} +EXPORT_SYMBOL_GPL(snd_soc_usb_find_format); + /** * snd_soc_usb_allocate_port() - allocate a SOC USB device * @component: USB DPCM backend DAI component