From patchwork Thu Feb 8 23:14:03 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wesley Cheng X-Patchwork-Id: 198675 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:7300:50ea:b0:106:860b:bbdd with SMTP id r10csp518022dyd; Thu, 8 Feb 2024 15:34:56 -0800 (PST) X-Google-Smtp-Source: AGHT+IHDVfdxOUApwLDM+IZRGss4RMipHEzP6VayA5/SHNVXXa5frrVnQwg2y1ZijALSZK5kt6TW X-Received: by 2002:a17:906:6893:b0:a3b:c221:8598 with SMTP id n19-20020a170906689300b00a3bc2218598mr584717ejr.9.1707435296179; Thu, 08 Feb 2024 15:34:56 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707435296; cv=pass; d=google.com; s=arc-20160816; b=f6ySSSkdmz7bgfot93Uh3Lp/rJBdNB7H6C1wfii66lQFpKIbIoK1VnxJOZzyTPs4B9 AK/GYzPvlz5M0d25Z8dByDC9kjr6TSHNVyEiWFSyXAO499sO/+jVarwhvk5CrtLKSoFV HkjOHKN/dq+WsQOhDU0VNpkyAC/zRU60nfvKHODzgh9jUdI38b413Z127xa+6G1npG3S 1n2OLmqoV8ey1eRlPzPSXaFJX7jVN1zWDIs3fL4o9PPbmz5B2lmGaqWFHwVZDB3UwtX+ 1VJVdtymORXfumZJimzburpSyJnsFTqxENCAIyTvofWj/xi5dgc+5uAo8G/NaKqKPGCH pUHA== ARC-Message-Signature: i=2; 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=8XDjQaxOLfi4DxLUbYexlGFO1qpWIPu7oQ+LyPPQC2w=; fh=OrYiwVOEENj1Ue7mId+rs+F6E8yXE1kZnKYfU9fksqg=; b=Ydsd0OUmEkRc1nWxO1cUCYgM3ghzi3F8o9JIPGWIH4OcCrpumib+292ngqtGSKmuf7 g9HE6buwE/SXYPaPhy3Uj85BmM8CxmKjIruFvPu7U4PKvLinlXYGtl1mPSXCk4Z4uLU4 ZbCoJkiuD2pur1QBvYujqSIDi5UUpIKPaHoD55/hH4GAEnFRVwS7ojdGyHIjAdmN5VmR wYwd9Py03hZU249vgbP+SYaEjVUW+ZbudGj0kh4a7EkKDuiKL1k05pGekr5ZTl7iyVcS 4qJ3RFuXVmG2SnDLC099gqYBwYMqvVB8jlRtO88tncK1j6Q+sf5I/fs2XH1Gr3/XL18w OLcg==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=lssA6LJR; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-kernel+bounces-58851-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-58851-ouuuleilei=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com X-Forwarded-Encrypted: i=2; AJvYcCUCPg0FMpAGmua5BzXSTvz5VsHdsPPqoFFXzZQQdtPO9Bfn/dKcaFWvpd3rVl0dYB9JtnzY09rEQqrIN62QBWjmTt/KIw== Received: from am.mirrors.kernel.org (am.mirrors.kernel.org. [147.75.80.249]) by mx.google.com with ESMTPS id dl16-20020a170907945000b00a37d142ce88si170319ejc.533.2024.02.08.15.34.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Feb 2024 15:34:56 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-58851-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) client-ip=147.75.80.249; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=lssA6LJR; arc=pass (i=1 spf=pass spfdomain=quicinc.com dkim=pass dkdomain=quicinc.com dmarc=pass fromdomain=quicinc.com); spf=pass (google.com: domain of linux-kernel+bounces-58851-ouuuleilei=gmail.com@vger.kernel.org designates 147.75.80.249 as permitted sender) smtp.mailfrom="linux-kernel+bounces-58851-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 am.mirrors.kernel.org (Postfix) with ESMTPS id C25161F21C0F for ; Thu, 8 Feb 2024 23:34:55 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 3C61E6519E; Thu, 8 Feb 2024 23:15:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="lssA6LJR" Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.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 B31BC54FB7; Thu, 8 Feb 2024 23:14:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707434092; cv=none; b=AVuztqYc+1UsKpzyB5/ZFEgkWQ0rafoShCGXwXwxGWISolN+07x6yIGXtW4OxcOJ6R5pvxdQfjgZF5qIMkjBa+P60gg1peDVJXEgfs7zFjbQp7et1R3JluBjV4HbnoYi9NR6g7CQu8+eTYSN52iGQrhrJ3zLzaMDDTYhh0rT17Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1707434092; c=relaxed/simple; bh=MDJ4NALM+hrJQ3Ivndp0OdNiEtiGfWJ7lqjiNchqs6E=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=TnmUWoBx3Rgg0dBJj+P14yqQqU/qJW9iZ4ZleXeCDJcwig3p0dQG2uilL3AM91nlYxKA3LfWDyHkA/0orqd3+XyA32FikvaP2Qll0iScVLbhD/lpFF8RueKTSGjuUGxMFLvNqehon6vK0wms4jt0qzfpSylIKPkPHx6qi2ZPVpM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=quicinc.com; spf=pass smtp.mailfrom=quicinc.com; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b=lssA6LJR; arc=none smtp.client-ip=205.220.180.131 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 (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.17.1.24/8.17.1.24) with ESMTP id 418L0A9q021166; Thu, 8 Feb 2024 23:14:31 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=8XDjQaxOLfi4DxLUbYex lGFO1qpWIPu7oQ+LyPPQC2w=; b=lssA6LJRThwnDZwe97/4Habwd0QYbNwbuBC4 Nei1k39944wEVv8sEY0rxn28CQkGPUKlagLBV6JJB4Sy74zJeBS3OwNUvewsKM+H Hbi6omjZ+JEqvVUzGe6bNki+rbgYk6O+FDj1tBhAgfrQaLJcu/BHJKYCHT1YIOTt bOr/vNc9XBDzkYrJGvOV7LPkV+rmsw+tWNKmhy01j7BaVSS596ymu6GxHwnwD0Sk bgnwRaTf1nyHBvwKmaW0PXet/AqD9SEMD/f6fftqTh0VGSckO7H7Tkkakhmw6614 NpCkSIWrxMeDtOWOV3yFwDr7yWLyojclM4fTstp7Wbq0FEVJqA== Received: from nalasppmta02.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3w4frwujub-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 08 Feb 2024 23:14:30 +0000 (GMT) Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA02.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 418NETBD013204 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 8 Feb 2024 23:14:29 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; Thu, 8 Feb 2024 15:14:29 -0800 From: Wesley Cheng To: , , , , , , , , , , , , , , CC: , , , , , , , Wesley Cheng Subject: [PATCH v14 50/53] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Date: Thu, 8 Feb 2024 15:14:03 -0800 Message-ID: <20240208231406.27397-51-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240208231406.27397-1-quic_wcheng@quicinc.com> References: <20240208231406.27397-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: d_AFCsLh86x0uTJ2DpV0W-TJBBs8LRJk X-Proofpoint-GUID: d_AFCsLh86x0uTJ2DpV0W-TJBBs8LRJk X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-02-08_11,2024-02-08_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 malwarescore=0 spamscore=0 suspectscore=0 bulkscore=0 phishscore=0 clxscore=1015 lowpriorityscore=0 mlxlogscore=999 adultscore=0 priorityscore=1501 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2401310000 definitions=main-2402080131 X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1790375672821106135 X-GMAIL-MSGID: 1790375672821106135 In case of notifying SND platform drivers of connection events, some of these use cases, such as offloading, require an ASoC USB backend device to be initialized before the events can be handled. If the USB backend device has not yet been probed, this leads to missing initial USB audio device connection events. Expose an API that traverses the usb_chip array for connected devices, and to call the respective connection callback registered to the SND platform driver. Signed-off-by: Wesley Cheng --- sound/usb/card.c | 21 +++++++++++++++++++++ sound/usb/card.h | 2 ++ sound/usb/qcom/qc_audio_offload.c | 2 ++ 3 files changed, 25 insertions(+) diff --git a/sound/usb/card.c b/sound/usb/card.c index 1ad99a462038..8364c5b8fbbf 100644 --- a/sound/usb/card.c +++ b/sound/usb/card.c @@ -186,6 +186,27 @@ struct snd_usb_stream *snd_usb_find_suppported_substream(int card_idx, } EXPORT_SYMBOL_GPL(snd_usb_find_suppported_substream); +/* + * in case the platform driver was not ready at the time of USB SND + * device connect, expose an API to discover all connected USB devices + * so it can populate any dependent resources/structures. + */ +void snd_usb_rediscover_devices(void) +{ + int i; + + guard(mutex)(®ister_mutex); + + if (!platform_ops || !platform_ops->connect_cb) + return; + + for (i = 0; i < SNDRV_CARDS; i++) { + if (usb_chip[i]) + platform_ops->connect_cb(usb_chip[i]); + } +} +EXPORT_SYMBOL_GPL(snd_usb_rediscover_devices); + /* * disconnect streams * called from usb_audio_disconnect() diff --git a/sound/usb/card.h b/sound/usb/card.h index 6d59995440c3..3a0d68f453a1 100644 --- a/sound/usb/card.h +++ b/sound/usb/card.h @@ -222,11 +222,13 @@ int snd_usb_unregister_platform_ops(void); #if IS_ENABLED(CONFIG_SND_USB_AUDIO) struct snd_usb_stream *snd_usb_find_suppported_substream(int card_idx, struct snd_pcm_hw_params *params, int direction); +void snd_usb_rediscover_devices(void); #else static struct snd_usb_stream *snd_usb_find_suppported_substream(int card_idx, struct snd_pcm_hw_params *params, int direction) { return NULL; } +static void snd_usb_rediscover_devices(void) { } #endif /* IS_ENABLED(CONFIG_SND_USB_AUDIO) */ #endif /* __USBAUDIO_CARD_H */ diff --git a/sound/usb/qcom/qc_audio_offload.c b/sound/usb/qcom/qc_audio_offload.c index 08af82ec22ad..9b0f98600e58 100644 --- a/sound/usb/qcom/qc_audio_offload.c +++ b/sound/usb/qcom/qc_audio_offload.c @@ -1867,6 +1867,8 @@ static int __init qc_usb_audio_offload_init(void) if (ret < 0) goto release_qmi; + snd_usb_rediscover_devices(); + return 0; release_qmi: