Received: by 2002:ab2:69cc:0:b0:1fd:c486:4f03 with SMTP id n12csp34465lqp; Mon, 10 Jun 2024 17:15:12 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCWRJorvVH+A+C+xjpyiJWeTBIzsC2iytKeYBxlr0SDpAPaF4Lz62LQLeX6Kj+aHiyIdQMUj5pWoU9c1wJxiw5udh6RigbrrKYYL2c/YGg== X-Google-Smtp-Source: AGHT+IHXCP1Sngr6xbjcJnhJpFhDuIJWO+1HoXQ6gX860wS8ESRz2XVnqlnjSEyWTkUM1XruQS38 X-Received: by 2002:a17:90a:ac15:b0:2c2:e9cb:1ffa with SMTP id 98e67ed59e1d1-2c2e9cb2243mr5297981a91.22.1718064911994; Mon, 10 Jun 2024 17:15:11 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1718064911; cv=pass; d=google.com; s=arc-20160816; b=0mhEIMkgKJf5dPsNOqroSFW8rU2TKmlYwLZAUaIAiiDpXTYoNRgpAU0Dz/ml+f5sBn H253KB4teqzSbbEhahQ85ooFAITKpGKjeWKmB6DFiqYuM4LFVtIEtg1bvgoB2U2ZUnUk 8SG8kVlkMZOPzhDwAvCJbyEsKWiP8RF7veXKSuc8bBPWTLG04HIx73nUq7cEYTU6/mOg we3TjCu0+ZDf3kq6bbxu3+h3B8iOWacgHLhqY1qKUxd1HtAeKK/skaXTUncfPEflDb0V acIOR2FSVAFwO20ezKctxcx2XEfHq7NU3RU29bvfUNLR/rcVl7VuvRCjOnQeINHHYP0x Zbrg== 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=jVQpP18NUfzO3RL5gdqtg3tFfXVG4mzTn5mMc9Z1Sj8=; fh=wtHMo7F9o0E380HmQ3oEdtbLMOdVnxgjuxg3Tsny7VY=; b=o5Uol7zESA9audjGR2KMNqcDHDMFyogawvOrZHrAWBODuf16bm0YYmsdPxSLt+i7VS 6f3LRF+yId8hfj3J0Iik2CBv6kOlm+e6U+Ud+awI5Qm8HYVTJ2rO1Dc3j19Z0PJH4WgF m0uN04ckE2JEP//YFlnzrI18P6Yl/o1fVel2vAqgc4497ioLGdvh2zZWV5qRTyNhaA7A XRqqUWQTd1zr6j+w+YFlmdi+mIyvHxwrf8l3xRPIceGeDhfGcUR8AVjoLKtDipP1+93F FQsVT4ZC7PRLee/jOc/WS7NfiRpv1sbJL73e+N5t6yPRvfP5VOlbbVcZYnvlzE3YQKIJ pouA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=Jx42KCV6; 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-209101-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-209101-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from sy.mirrors.kernel.org (sy.mirrors.kernel.org. [147.75.48.161]) by mx.google.com with ESMTPS id 41be03b00d2f7-6de2895932csi4430219a12.600.2024.06.10.17.15.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 10 Jun 2024 17:15:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-209101-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) client-ip=147.75.48.161; Authentication-Results: mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=Jx42KCV6; 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-209101-linux.lists.archive=gmail.com@vger.kernel.org designates 147.75.48.161 as permitted sender) smtp.mailfrom="linux-kernel+bounces-209101-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 sy.mirrors.kernel.org (Postfix) with ESMTPS id DBFB9B24883 for ; Tue, 11 Jun 2024 00:08:40 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 2C2511649CD; Mon, 10 Jun 2024 23:58:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="Jx42KCV6" 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 E9FD6158A23; Mon, 10 Jun 2024 23:58:49 +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=1718063932; cv=none; b=gE8sLoQsbXZdH/o3FxdQGk4tg5wdFF+opV5gRaUz8i4giXH5VTjDeHdUZNEu4+mrUshabACwOgZu3ne0UJkx+4WJJ1U0JO+kXT3/EvJx2Qyztx+W8FB5njlTlG49MmE+MY75wa7vmpNkCebHKQw4rHFjnGC4tP7Jrvz12mtDCEU= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1718063932; c=relaxed/simple; bh=CQKsv1HneaTlNWqmWhL2xwMaD05CWmIgdtY4o184DR4=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=e211hAnQ/swrQTNm+gvF5NTJA7tqDWhJ0jrqxY9wuB8DtBsnPbqLZWVqWvOBTGkVx4X9WFm5rq2vMVJM9qJiV9SB/SVsF4N+PtXF6NJSx1x20F3mgXRffWa02o7bh8bJxMxvKO+Ip45IZNHY4bBPdjVX9gybpqEixhA1HMu1pf0= 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=Jx42KCV6; 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 (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 45ADlNYw018738; Mon, 10 Jun 2024 23:58:28 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; h= cc:content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=qcppdkim1; bh=jVQpP18NUfzO3RL5gdqtg3tF fXVG4mzTn5mMc9Z1Sj8=; b=Jx42KCV6hP79aDp2UlCNl+al5IfZzhDy2SypUJ/p b2a1087D82caHRrgm6e0aPdNh5GYsfK+lRH0xEI37o3P2VpbSJYgfSkOBpkrb5d8 3fS7fXCP8uoZ1y2P5IKuH1WWy7j7UifKG53ZCCBep2uXjKlVo7j4RWxIAgeP+R03 djSGzpxW2o7pRTtQL6xeUmoW/47pAJZz+KIfHZf5IGbal6vIy8+0KAQUDHVSE3ze bE702oWreeX1VdR1gr0z4gnbWrm/B64zs6DANREGEk4kyY3ZF0aZpU7o38m98Rvl AcjLa7FE9KYlfrbPhW6wjICfvfE2oxOisBrc/bkReFrO9Q== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3ymemgmyb4-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Jun 2024 23:58:28 +0000 (GMT) Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA04.qualcomm.com (8.17.1.19/8.17.1.19) with ESMTPS id 45ANwRSG001610 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 10 Jun 2024 23:58:27 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.1544.9; Mon, 10 Jun 2024 16:58:26 -0700 From: Wesley Cheng To: , , , , , , , , , , , , CC: , , , , , , , Wesley Cheng Subject: [PATCH v23 29/32] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Date: Mon, 10 Jun 2024 16:58:05 -0700 Message-ID: <20240610235808.22173-30-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240610235808.22173-1-quic_wcheng@quicinc.com> References: <20240610235808.22173-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: 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: Pd5JTrW7NE_jo70_g8aKK35iAJ6B690J X-Proofpoint-ORIG-GUID: Pd5JTrW7NE_jo70_g8aKK35iAJ6B690J X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.680,FMLib:17.12.28.16 definitions=2024-06-10_06,2024-06-10_01,2024-05-17_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 mlxlogscore=999 suspectscore=0 adultscore=0 impostorscore=0 spamscore=0 priorityscore=1501 lowpriorityscore=0 phishscore=0 malwarescore=0 mlxscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2405170001 definitions=main-2406100176 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 | 1 + sound/usb/qcom/qc_audio_offload.c | 2 ++ 3 files changed, 24 insertions(+) diff --git a/sound/usb/card.c b/sound/usb/card.c index fb548a3abcfc..a7f1e437f67a 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 3c900e5afbce..140928dd9d63 100644 --- a/sound/usb/card.h +++ b/sound/usb/card.h @@ -221,4 +221,5 @@ int snd_usb_unregister_platform_ops(void); 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); #endif /* __USBAUDIO_CARD_H */ diff --git a/sound/usb/qcom/qc_audio_offload.c b/sound/usb/qcom/qc_audio_offload.c index 9aac0985f43c..01aa0753ca83 100644 --- a/sound/usb/qcom/qc_audio_offload.c +++ b/sound/usb/qcom/qc_audio_offload.c @@ -1880,6 +1880,8 @@ static int __init qc_usb_audio_offload_init(void) if (ret < 0) goto release_qmi; + snd_usb_rediscover_devices(); + return 0; release_qmi: