Received: by 2002:a05:7412:3b8b:b0:fc:a2b0:25d7 with SMTP id nd11csp598386rdb; Thu, 8 Feb 2024 15:32:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IEaIay4jkTIUcZn22AKa8s/EsvbCp6UeEcLQe3w5iFoljisGebaoZVQ3rLxT8Nr0OQ55Vb1 X-Received: by 2002:a05:6102:308:b0:46d:26bd:a5b0 with SMTP id 8-20020a056102030800b0046d26bda5b0mr903239vsa.12.1707435135093; Thu, 08 Feb 2024 15:32:15 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1707435135; cv=pass; d=google.com; s=arc-20160816; b=NnZNifH2EKXMJ08FTGSR46SDw9BFnG+9/Uj5kOboTTpnb/clJKX3UhOBHTJ8/sSS/o 06G1MdoSWLX+98W2F/nMCMKw3OEo45VQFVqSYL9MM2NA769dO5tc8LFmq4MkVhewu0yv 6mLRzcWQUYGvdlVZYN1hp0aYdmM2qjEfconsMIT/YImEdGQ1ipQ8HYgMyUbtq7L0rYto XXatUlknppSs9l6CtW5ym6Goq+vAcMANNd7ikubyoyxs/VfmtnjxIveOqCwO6yw0NhGF x5MZge7EmEPzyf0xJw1cC5SD5V0J7BaM/JlYJpWADTPJm3DtFYBby/EAc/9cfvI6cZww SZlw== 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=wBdhqtLHjU3Xx6EUEAlgue6GSp976AnrUW0czD//COo=; b=P4hUwUMD1UIwBXtjE7e/KxUouuagvBnJN0PxtRSAOSsyzwYh8TzgPCh1pROB9A7tJi xTXiMbQnu+a9S1KGKCt8JkE8/sFKasL0mO9+mOBWc6ERoI4NpdNMoRrJJrhT2ULHPKrl e7GT/fQSUNNRF46LpxHgTYvOhYhhP5tT7g4I+DCoZX8AmMHufDbVkmaD8DY1M0FR0LAT 2+lawJZcAnKgqRIpKrv2QkXbXeXgfy6YkoiHnPwjk3tOlZlajyv9m5rrjW2xwI9IBcJs Ggf5uVSweRFzu1FmGiQAYLMB4onEqef6rwYhrmG3iEGOLrS1rOSyM5v0+VtS14X+iZ6f ZgCg==; 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-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-58851-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com X-Forwarded-Encrypted: i=2; AJvYcCXbWB78egywZMPkx2yh+MtZzrKeMwk/KI10buKP6AeO7V52w9r/j8O6zlXoUIfE6o0E30x3gmlRQ5kI/jhNujNsLYk6c5mEC8wBGrgFgw== Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id 6-20020a05621420a600b0068c46099424si638805qvd.608.2024.02.08.15.32.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Feb 2024 15:32:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-58851-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; 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-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-58851-linux.lists.archive=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 C4A921C22597 for ; Thu, 8 Feb 2024 23:32:14 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id BEB136313A; Thu, 8 Feb 2024 23:15:09 +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 Content-Type: text/plain 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 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: