Received: by 2002:ab2:6991:0:b0:1f7:f6c3:9cb1 with SMTP id v17csp87544lqo; Tue, 7 May 2024 13:03:26 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCX4UiupG4A9ox/TC5zIUyYM+HFggEbO7YMvZ1jhO8bQx9gYDsa+Qiot1rqkoM8nPPLi3HANboTUrLyRIfsV8GMMiGEV4oS5e7nkPTJTcA== X-Google-Smtp-Source: AGHT+IEFsx2B5taaO1vVKIXzt8/zSwh9NjqzKsj209pnFOec28S4wjTkCtArbbwTu960keZwRHNM X-Received: by 2002:a05:6870:3513:b0:23c:ee0a:260f with SMTP id 586e51a60fabf-24097d72d44mr735647fac.3.1715112206402; Tue, 07 May 2024 13:03:26 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1715112206; cv=pass; d=google.com; s=arc-20160816; b=pjH4IPW90UTEXYNYp0C8Voaurf8eoMM4KcCsr9y+sNFUrThR6iQGeqd1VuD0piN4fz qu0lknt8qoQOCoo1xN8FHLX5mZQiEExiIFpE9SjBjzbbXCgIj7IZG19JF2n3n613CjpW IzJ7Z0L4YbNmA4Mbna95NsO37fRspPG8MvYsvp7MrlKXkYDfXl0ihEmlgZhbdpcS9LvY QIwn0vsgzbIzq0jetWbBSQk48iFz3hTbhGePR7nyym6TdmbS0H9mUt56mQakwQlmmQRk HCF7vRvhv3+lm7TUytmiJr2Tkhn2plBv46BOk7eohBrm1bdlLe7B1zeOlPtFM0Y4Idy6 Fr9Q== 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=7RMyAqhUADHy1wmgVTZy7AMWbknjET/QBX2EfhPYid8=; fh=tk8sqZoIP78riW3PYc75n3+DQFkqFrW+9GPE0/sstVA=; b=q5Sf8Sm3XVwqTQW00WPcf2eus3U1vXleyW3nPkVq1ZqmRIbvaF6kd7lngMvmro8RXR H4oz64C6Ui62JTv4IhuQn5OY/jc9royneefyPY+tnKtt37lDo8sdgEbmayIuV4hKkdtc 09PC3GptPmhmw56TqNM2aOVJkAQtcFrYVDW3aYmf6Tyr42a4UDaqqI8VrDgIrpJ1r0NF MxV05CrpblL0URcR6HYgNO4jkngW9VtncqgoEwgEc32j6xM5al5zGj81XnPNizJSyRH1 FooCMT1tZH6RPRcEXKGXyCT/HDfn0SYbXYr8iFTTdK19n5/UyqC65/sUQSTTxsYqDtQq bYeQ==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@quicinc.com header.s=qcppdkim1 header.b=g6b6YPIG; 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-172107-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-172107-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=quicinc.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id c1-20020ac87dc1000000b0043c60d06bffsi12179218qte.309.2024.05.07.13.03.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 May 2024 13:03:26 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-172107-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=g6b6YPIG; 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-172107-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-172107-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 24B671C20964 for ; Tue, 7 May 2024 20:03:26 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id C19FC170854; Tue, 7 May 2024 19:52:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="g6b6YPIG" 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 413BC17EB8F; Tue, 7 May 2024 19:52:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715111533; cv=none; b=CsYbLV6jKtCBowMX/smGdzfAwAyJeMpLVeoYLWZZIKKzdpdqF/tUfi8xUDRCXl7FGXYol/bsoD5E9asL2qO+z3Ji1YZzd0X+qkdZmVcvMaoHuMaiRJ2TUgnHgU5yEs126BfE3hfORpTFWMq435jikTWwPcipZHxvX3opMvoTqaM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1715111533; c=relaxed/simple; bh=GUbBSkWXoy3nKyyir5jzrYrO2j+5K9NzzKOAY9SHkFY=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=pCBqP0sMMtJplfTpx3ymMDaFwJnu+4E43LkwIVnKR3dLGinzhwXG3m+0C98z77QHCH+EvWfkZH2ub1b7fvKReUpDq+hcWY5MPVZwnpG+bVCOdq8Kny/jLzzkys9SrVMs+cPMdIDYWfInSOhdMbYRFGk6vFW9o4H7QeXIwILgUCE= 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=g6b6YPIG; arc=none smtp.client-ip=205.220.168.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 (m0279864.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 447Jk0t5011728; Tue, 7 May 2024 19:51:38 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=7RMyAqhUADHy1wmgVTZy 7AMWbknjET/QBX2EfhPYid8=; b=g6b6YPIGltUQfWFPguMzJcGk1QMECzWiY7q9 7GvPO9HWuhQa00jxww0mFJ+U1Xs9As8t8tFvybwn54R16xwcRpSye7/uVVPBMf5y 6grVze7p+AZxiekBO2eXejbILQy1lNckD6e6xcXjhYfgG41je+SoddpRdxheupBH Whg3hYFK0ZawRPgmAoH5kEQ4xP5ybsS8q1N7ecZzdKeU3DtA+qWlEdJJEW8G+R8P FZGhOvj+790tUrtQqK1MfIibSfgQ3/JZQje3haht51qm731IDtlErITQGq9sD7ZP KtEUWJqOkhKIULh6LU7RhJ+qjcOXoRGUmakjn6JUUXyx4D/fMA== Received: from nalasppmta04.qualcomm.com (Global_NAT1.qualcomm.com [129.46.96.20]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 3xysgc85rf-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 07 May 2024 19:51:38 +0000 (GMT) Received: from nalasex01b.na.qualcomm.com (nalasex01b.na.qualcomm.com [10.47.209.197]) by NALASPPMTA04.qualcomm.com (8.17.1.5/8.17.1.5) with ESMTPS id 447JpbaN019845 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 7 May 2024 19:51:37 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; Tue, 7 May 2024 12:51:36 -0700 From: Wesley Cheng To: , , , , , , , , , , , , , , , CC: , , , , , , , Wesley Cheng Subject: [PATCH v21 35/39] ALSA: usb-audio: Allow for rediscovery of connected USB SND devices Date: Tue, 7 May 2024 12:51:12 -0700 Message-ID: <20240507195116.9464-36-quic_wcheng@quicinc.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20240507195116.9464-1-quic_wcheng@quicinc.com> References: <20240507195116.9464-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: eXV9H4OtyZVAvnA2Q95k2FGRLqcFQAk6 X-Proofpoint-ORIG-GUID: eXV9H4OtyZVAvnA2Q95k2FGRLqcFQAk6 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1039,Hydra:6.0.650,FMLib:17.11.176.26 definitions=2024-05-07_12,2024-05-06_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 impostorscore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxlogscore=999 mlxscore=0 lowpriorityscore=0 malwarescore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2405010000 definitions=main-2405070138 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 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 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 aeea224bba70..2659d8776bed 100644 --- a/sound/usb/qcom/qc_audio_offload.c +++ b/sound/usb/qcom/qc_audio_offload.c @@ -1879,6 +1879,8 @@ static int __init qc_usb_audio_offload_init(void) if (ret < 0) goto release_qmi; + snd_usb_rediscover_devices(); + return 0; release_qmi: