From patchwork Fri Dec 15 21:49:35 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 179559 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:3b04:b0:fb:cd0c:d3e with SMTP id c4csp9598550dys; Fri, 15 Dec 2023 13:53:00 -0800 (PST) X-Google-Smtp-Source: AGHT+IHAiXh6lIY7fg5VyiUlpWpK4nNjMEctGN+xfrnlH0pHf+BGHQuSRAF2QjlI91XRFrqTsOgd X-Received: by 2002:a05:6808:3082:b0:3b8:6005:9f6f with SMTP id bl2-20020a056808308200b003b860059f6fmr10189670oib.2.1702677180673; Fri, 15 Dec 2023 13:53:00 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702677180; cv=none; d=google.com; s=arc-20160816; b=p4RNTbnIy0UlGsKAEgGOZzTGLfxwqEUlCttWc2xnVEeYlm05+gr3z7ukW+9Jk0EJIr 4QL8X1Hz51lSE3hubetP/WqsFB35NLIT6wfbLMJLvGNJNmhXf28nuSvfw0ZTLTZatg6T FI1H0W35tTytUyfhdX3uR9wZa3uE1Rak3NxFJslMfG/dQBuUTZo9wA/fNR4PJ7VppTsI XvGgSZOzR0YOR04Y7KPhrVNlZUCnJ5heHRh0mykZFWmZxIsEwAhidBZr1ihhnt5Gs0FL i1jcOod31/H5eacoYS6DxyuBFv7dX7+vvAUOXqRyS3E+hP3cBoLJRNVxODxbSrmoucH1 h9+Q== 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=orzV8+d1pnr3mAQLY24TeLrCse6LVrIOoaeGWo3/3QdzObIoEDGYMm/7euCBzqGV4v 6Q8QklhW6D8olAVvNdZOYG1DMW89kkdP88Uc8FBkflApDE4o8UWFtccDvcHVM2IimDtB dT4IYjuKG0CZV2+Ue6hgVxTlvvtkynzlvzbUYo5nm4vivHah+49AFXo7NUt0H5vlc04D +zq5vJ0et+hzI680e4YGrHafIUYTF4PCL/+8RkGVaw53yYpWPJsWYcwT0PgGE+tLXCTI 9YRsFx8ncHV88jy0ZZ2eWqQvdrzgDnue5VElZfViDu6vKBY5OHV+crKm9LIKV9NOJ94q uC+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=O2fuWzJv; spf=pass (google.com: domain of linux-kernel+bounces-1686-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-1686-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 g9-20020ad45109000000b0067efc5a5637si6524890qvp.532.2023.12.15.13.53.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 15 Dec 2023 13:53:00 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-1686-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=O2fuWzJv; spf=pass (google.com: domain of linux-kernel+bounces-1686-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.199.223 as permitted sender) smtp.mailfrom="linux-kernel+bounces-1686-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 71FEA1C2432E for ; Fri, 15 Dec 2023 21:53:00 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 115736A007; Fri, 15 Dec 2023 21:50:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="O2fuWzJv" 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 ADA6B487A4; Fri, 15 Dec 2023 21:50:26 +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 (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 3BFICrkO032364; Fri, 15 Dec 2023 21:50:13 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=O2fuWzJvppWDWRUCE9zK8OaWWbRSKR3RrEyO NYJnSiaiUazHRgMbXPbo3LSLq1YqPva5I84cbDeMtuDmgtEx5i5dsSWKVHJwXjyV bXQc2z//3rn8R1+Z+D/9ilokV7f54NN59OOCoclO+j5uoRBIOyJb36uqZ3+Jfv+u RDdm/1alXDJ26JcFDCAeIyYXYZTkv7TOP6GSzYqMmQHWr8UEsNvz3vamrq+S8EAl /9q7cgXnM8wr6+NJo05y5cLIvC+2d8cmVrdanoo1crgCuVs8H5RIEHGDfueEx2+l naGQdiTuS78FhmK1NKxs/vqgA2lJlqAJPwCR47PhcBKkYOCMvw== Received: from nalasppmta03.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3v0hdfa7e0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 15 Dec 2023 21:50:12 +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 3BFLoCHE008338 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 15 Dec 2023 21:50:12 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; Fri, 15 Dec 2023 13:50:11 -0800 From: Wesley Cheng To: , , , , , , , , , , , , , , , CC: , , , , , , , Wesley Cheng Subject: [PATCH v10 21/41] ASoC: usb: Add PCM format check API for USB backend Date: Fri, 15 Dec 2023 13:49:35 -0800 Message-ID: <20231215214955.12110-22-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20231215214955.12110-1-quic_wcheng@quicinc.com> References: <20231215214955.12110-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: nalasex01c.na.qualcomm.com (10.47.97.35) 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-ORIG-GUID: lCvD4yosucLHYD9RZsaT__0o_gaEI2Ab X-Proofpoint-GUID: lCvD4yosucLHYD9RZsaT__0o_gaEI2Ab 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 malwarescore=0 mlxlogscore=999 impostorscore=0 spamscore=0 lowpriorityscore=0 adultscore=0 clxscore=1015 priorityscore=1501 mlxscore=0 phishscore=0 bulkscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2311290000 definitions=main-2312150152 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1785386427567192778 X-GMAIL-MSGID: 1785386427567192778 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