From patchwork Thu Apr 20 10:16:12 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 85830 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp224451vqo; Thu, 20 Apr 2023 03:25:00 -0700 (PDT) X-Google-Smtp-Source: AKy350aSQ0gKgWltK4RY9hEBm06q7q7eG9cwrttIwwpYLtcw4Vt9IK1e03gJTOEH9mxsmBG6dm13 X-Received: by 2002:a17:903:1d1:b0:1a6:3c64:513c with SMTP id e17-20020a17090301d100b001a63c64513cmr1466938plh.37.1681986300579; Thu, 20 Apr 2023 03:25:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681986300; cv=none; d=google.com; s=arc-20160816; b=S/986hBDJv4YCq+Qcx2uYAXACpxv2UrjuMCZzt0TrGYObMyx3swNPUlNr3CxEp6SSj yvFRqovsN0aZSgI+N1qQsMC2QLYP47ARtemfBs6EHUks96buW7Bw0CnjTexaKVaRgmoQ cmYnZ9ARNAz+Sv8lCCUbNY/Lpxn7tJk+ehEmLhQB9vjTN7S4ierHr4KBYnWWSuvYk+wB Et4n4g+QpF26SozC1zLfu122ufJULluouRNQvVKS601GkZ1t9+pIGFYr+EXZ/D2ieZGe tLs/Cy6JbtIHj55MJaWB03QZ7aEq3k/d5pVrP84W1SUN5iFNLK7T/mPeLejszY2o6W1V 8PyA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=/rqhyU6uXoU+/LhRADh+Yrxp3II6kKdCrObNCj5zZIk=; b=hHvhreoSSuzvsTZdcDDEQ55IJE1V7K4aJWdIXNlhEGOkiy8j/1ZRunO2cOcQRDW8JZ MpkYt4idfyV1sL3yjnuDHrDKn1/JNbLl8WPz9JE86CdIz3/QRvK1/nupzL+KFLeCbkHF 8/wLZwlGl1sUqpONATSAQQM9Lrwa88D3H2rdGJT/E03zgQ3OQPIRU8o9QPfH5bYS0wSY fuFLHLiXqM0ug84TPCeiT77fzw0dJHc1YgItUdENIsw42XaO9ChV3O4LrGdK0G9aQHgh 6Fnl+X+W+kF3WmrZAElsz96mna7N6nPHnX+/Ipc7JGlofo4HEOye+GH8yWxJpCN6k75F R6uw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Ut6iQ/+C"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id c15-20020a170902d48f00b001a6dba52e52si1672137plg.390.2023.04.20.03.24.48; Thu, 20 Apr 2023 03:25:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="Ut6iQ/+C"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234412AbjDTKSF (ORCPT + 99 others); Thu, 20 Apr 2023 06:18:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58772 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234328AbjDTKRj (ORCPT ); Thu, 20 Apr 2023 06:17:39 -0400 Received: from mail-ej1-x62c.google.com (mail-ej1-x62c.google.com [IPv6:2a00:1450:4864:20::62c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 874134C30 for ; Thu, 20 Apr 2023 03:16:25 -0700 (PDT) Received: by mail-ej1-x62c.google.com with SMTP id a640c23a62f3a-94ed7e49541so49813666b.1 for ; Thu, 20 Apr 2023 03:16:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1681985784; x=1684577784; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/rqhyU6uXoU+/LhRADh+Yrxp3II6kKdCrObNCj5zZIk=; b=Ut6iQ/+CoIv1rPMxqnZvK0NSWdqeCFUzd6OEx1lKkUgb/r52SzTay59vOp6CZkva05 8SGuiVyeXnxzYx/n6GIJRR8oUGw9tjeCMCLAcQATcoAebowSItrF3GwVrDQDCqTYJTfv nVq35AQtK5pxpUcHSNBA7H0d14o3p7Dzu0lQ4p8r82XQdBVUBsvr4GJ7X4HY22Xt/IIt bUMDdwpLFNd8eyAy7mD+F1M84wUS4ga+3/PganPMZM3Cln5eEY8lqVR/OApIs0lFZn9M pVShqreCbx9e8O1gOETlPSNg8pzNbkIaLUyskwjwBn/1ifnBr+LoakoKoqAWmiDuDezk A3pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681985784; x=1684577784; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/rqhyU6uXoU+/LhRADh+Yrxp3II6kKdCrObNCj5zZIk=; b=R0TWbzthFA8nHaLA2jp/V/ZJr65IqYEoVPmKBYUfFGJYFPDIc7SSUj0siiCHu0QNED 9V/wkSle0kKKKFlEy3KCTQP4tdLwNpmBYZQtOzKyB0Pb5jmBT7/zluWoNuEa4CAPeKlz w2E7Tv22Iizp7h6oKHl28qeSP/ikYAixrY5u2ulSBqZV/uDxHkzb+V6bu+R3QuzNzsc6 F9cvqmdNSRIOjs5co6StNZByLqjTMWQhSiLLORVMARd1BH2Sn5VXdp53dlvAIxiq9R6o NzytVovZPMwLfyvJpvUFi/O8Ga8AqRt1S39W35dAOLHWkAVbTzrSgb8VwMXMb73PJRZZ eymA== X-Gm-Message-State: AAQBX9dY0aQ6eMCDT1lhvHDLo6LOwjU/ItmBoqjqdsbM1wSi5T4jlJ/a XEFtN5msAQ93TRZXajTH+qcqxQ== X-Received: by 2002:aa7:d81a:0:b0:504:98f1:464c with SMTP id v26-20020aa7d81a000000b0050498f1464cmr1260446edq.23.1681985783905; Thu, 20 Apr 2023 03:16:23 -0700 (PDT) Received: from krzk-bin.. ([2a02:810d:15c0:828:bcb8:77e6:8f45:4771]) by smtp.gmail.com with ESMTPSA id l22-20020aa7c3d6000000b00506be898998sm588954edr.29.2023.04.20.03.16.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 03:16:23 -0700 (PDT) From: Krzysztof Kozlowski To: Vinod Koul , Bard Liao , Pierre-Louis Bossart , Sanyog Kale , Andy Gross , Bjorn Andersson , Konrad Dybcio , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Dmitry Torokhov , Krzysztof Kozlowski , Patrick Lai Subject: [PATCH 1/6] ASoC: wcd938x: switch to using gpiod API Date: Thu, 20 Apr 2023 12:16:12 +0200 Message-Id: <20230420101617.142225-2-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> References: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763690467273319141?= X-GMAIL-MSGID: =?utf-8?q?1763690467273319141?= From: Dmitry Torokhov Switch the driver from legacy gpio API that is deprecated to the newer gpiod API that respects line polarities described in ACPI/DT. Signed-off-by: Dmitry Torokhov Reviewed-by: Krzysztof Kozlowski Tested-by: Krzysztof Kozlowski [krzysztof: rebased on recent dev_err_probe() changes] Signed-off-by: Krzysztof Kozlowski --- Cc: Patrick Lai --- sound/soc/codecs/wcd938x.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index 11b264a63b04..33fd8fdde9fd 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -6,12 +6,14 @@ #include #include #include +#include #include +#include +#include #include #include #include #include -#include #include #include #include @@ -194,7 +196,7 @@ struct wcd938x_priv { int flyback_cur_det_disable; int ear_rx_path; int variant; - int reset_gpio; + struct gpio_desc *reset_gpio; struct gpio_desc *us_euro_gpio; u32 micb1_mv; u32 micb2_mv; @@ -4234,16 +4236,16 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device struct wcd_mbhc_config *cfg = &wcd938x->mbhc_cfg; int ret; - wcd938x->reset_gpio = of_get_named_gpio(dev->of_node, "reset-gpios", 0); - if (wcd938x->reset_gpio < 0) - return dev_err_probe(dev, wcd938x->reset_gpio, - "Failed to get reset gpio\n"); + wcd938x->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); + ret = PTR_ERR_OR_ZERO(wcd938x->reset_gpio); + if (ret) + return dev_err_probe(dev, ret, "Failed to get reset gpio\n"); wcd938x->us_euro_gpio = devm_gpiod_get_optional(dev, "us-euro", GPIOD_OUT_LOW); - if (IS_ERR(wcd938x->us_euro_gpio)) - return dev_err_probe(dev, PTR_ERR(wcd938x->us_euro_gpio), - "us-euro swap Control GPIO not found\n"); + ret = PTR_ERR_OR_ZERO(wcd938x->us_euro_gpio); + if (ret) + return dev_err_probe(dev, ret, "us-euro swap Control GPIO not found\n"); cfg->swap_gnd_mic = wcd938x_swap_gnd_mic; @@ -4278,11 +4280,11 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device static int wcd938x_reset(struct wcd938x_priv *wcd938x) { - gpio_direction_output(wcd938x->reset_gpio, 0); - /* 20us sleep required after pulling the reset gpio to LOW */ + gpiod_set_value_cansleep(wcd938x->reset_gpio, 1); + /* 20us sleep required after asserting the reset gpio */ usleep_range(20, 30); - gpio_set_value(wcd938x->reset_gpio, 1); - /* 20us sleep required after pulling the reset gpio to HIGH */ + gpiod_set_value_cansleep(wcd938x->reset_gpio, 0); + /* 20us sleep required after releasing the reset gpio */ usleep_range(20, 30); return 0; From patchwork Thu Apr 20 10:16:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 85834 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp225871vqo; Thu, 20 Apr 2023 03:28:06 -0700 (PDT) X-Google-Smtp-Source: AKy350ZykAu9xRvSLBA/b6dbF7Rd8AS7UuBAAkLbdEwssY8kYWBShHLCwWdoyL/lbZ27Tyefu/N0 X-Received: by 2002:a17:902:d2d0:b0:1a8:802:fdcc with SMTP id n16-20020a170902d2d000b001a80802fdccmr1385770plc.10.1681986485885; Thu, 20 Apr 2023 03:28:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681986485; cv=none; d=google.com; s=arc-20160816; b=Zrx3zCaUyVVZkydRV77oY9XiN6DZln45eFIdeu64J4eniXzuyFpNTc5WNW+HrEqP9I NdJqaS6oBqJCU52Er73UVBISBV+6v994rxWAL0Xsi9sZnwSaYqo6EubzAFKAXpTbo6aS HZc5XrONgXDJ5cG3brbH5aDnyYNrBw6ATxHN5JHMjCWRf1ZzUAQs2seetvxjecO63Ywt NAhpVg46xKTImQTqh2a3cpqwjjLqiwIDMJimvWlfRR1xUuPvvmP3WeW8H2fOUVqoCT0P iGfrZggqNuCOjpH+hZzJHoDkAjzYqQGHYLMoH/vn3IUEMVnNrTOCjazZbtXk6kDCuK/u TENg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lJ7NFOY+m136Tpa7a3Lvd2KVX0E55mkuZub+f9mfMPg=; b=XSPnL/rxPApB/aUzH/VoacEUoZzlfS/xeLHy8/OgHXyk7zxVRVDdrIvByLQpfyFUtn pOM8d22m/RtO2n1c8nIqnGosQkoU/OpmFwi8GZ6+/gMPN5HZmep5SJ9KlSOfo+9je6p3 35FEMvbz1aDycEcxLzRVMM7L68aS+gPoQ6R2gqvIJunauQltyYBHx71SYhBW4sDtCL9V cwRYdPtruq2PEO2mkZ57DeDHzTUlKys9UtIV5t4GPsd8LPLhHkXdA/xGnoR7jSVrZHz9 uxNRLt5bBPad0WHmJcekVsjMXrafA69bIDTAT5usNnLbrVvv381LBTqdIOUiNPHj3iG0 n5Nw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=AmBkVOgl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b7-20020a170902d88700b0019ea9a23140si1465998plz.309.2023.04.20.03.27.52; Thu, 20 Apr 2023 03:28:05 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=AmBkVOgl; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234755AbjDTKSJ (ORCPT + 99 others); Thu, 20 Apr 2023 06:18:09 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59092 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234314AbjDTKRk (ORCPT ); Thu, 20 Apr 2023 06:17:40 -0400 Received: from mail-ej1-x632.google.com (mail-ej1-x632.google.com [IPv6:2a00:1450:4864:20::632]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E61E5587 for ; Thu, 20 Apr 2023 03:16:27 -0700 (PDT) Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-94a34a0b9e2so51210166b.1 for ; Thu, 20 Apr 2023 03:16:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1681985785; x=1684577785; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=lJ7NFOY+m136Tpa7a3Lvd2KVX0E55mkuZub+f9mfMPg=; b=AmBkVOglK6tDRnpf5e1CjE9fZ783z5mKL+8fZ2ZovSKfIEaRbZG2hMsl/KZYx0GutP I4eilLey7aFQzEn7ekVDO8KmseLtE5PTAZDRLwn2BMgyGrZC7FEDBt/Dp4xCbjrM4nMX PExtibBF1phO8lOFATg7A1Vtim0z+UT6NDLufqy2uoALruXfdu+d+TPVALxWzqlWUzA6 T+GyHuG0AT4R7Gz3SSQotOWrU+a4WRBC/uMDUwxK18phb9KmLz2WNzbTxwMlB5A5NfNH Ets4NSbdZxAlxiComw5hFcoxnnqZUExblUbtNFza39VeKttRMXgdMGu3NppRYjhA4g+x /fyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681985785; x=1684577785; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lJ7NFOY+m136Tpa7a3Lvd2KVX0E55mkuZub+f9mfMPg=; b=j1zHdr5DhSCvre1R8wkV2jHFDLfB9bzcUghnZFRixZXh2Q+UY1Kc8JMoTsFNDUjgBN tmWDqqrRBnCGAQlLsmTEjPdDo1huy3sgJnPux51XyHiaOHMRpNJGkzm87majaYLgsPN+ I6cRxX/A8m5Jj/kvUOn0Dh857S3aUW995OdcQLumEIh0+E2KQELtw5SVu2hmqKzi3PHr 8cMyFST+EgLuy9vpfTW7ZdOPvh0tgQwGERCaPkY1vB9wND2Juduo5yIhxif4nCfQfC0v 9vThVye80JKtbdRIczyUEUPEr0JZIsws2bxzwQ4db8a9G7j/MmG5mtuytCf1GKi3VojS L1/A== X-Gm-Message-State: AAQBX9eeQ3QV6M0nUFa2HWhsMZI1LALOmtrVgtK9Wix6PhTOVmuOmGZi ROgNFrH5KO02MbF8pUC/Qgsd+g== X-Received: by 2002:a05:6402:1616:b0:504:9c59:7b8f with SMTP id f22-20020a056402161600b005049c597b8fmr1251270edv.36.1681985785537; Thu, 20 Apr 2023 03:16:25 -0700 (PDT) Received: from krzk-bin.. ([2a02:810d:15c0:828:bcb8:77e6:8f45:4771]) by smtp.gmail.com with ESMTPSA id l22-20020aa7c3d6000000b00506be898998sm588954edr.29.2023.04.20.03.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 03:16:25 -0700 (PDT) From: Krzysztof Kozlowski To: Vinod Koul , Bard Liao , Pierre-Louis Bossart , Sanyog Kale , Andy Gross , Bjorn Andersson , Konrad Dybcio , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Krzysztof Kozlowski , Patrick Lai Subject: [PATCH 2/6] ASoC: codecs: wcd938x: Keep device in reset till bind Date: Thu, 20 Apr 2023 12:16:13 +0200 Message-Id: <20230420101617.142225-3-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> References: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763690661342178187?= X-GMAIL-MSGID: =?utf-8?q?1763690661342178187?= The Soundwire master expects that bus devices will be kept in reset state and brought out of it in their Soundwire probe() or bind(). Keeping it in reset state avoids early new Soundwire device interrupts in the master. Fix this in WCD938x platform driver by moving the reset toggle code from platform probe() to component bind(). Signed-off-by: Krzysztof Kozlowski --- I wasn't sure whether this deserves a Fixes tag. It looks like a fix, but OTOH, I don't think Soundwire master expectation is documented anywhere. Cc: Patrick Lai --- sound/soc/codecs/wcd938x.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index 33fd8fdde9fd..212667a7249c 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -4236,7 +4236,8 @@ static int wcd938x_populate_dt_data(struct wcd938x_priv *wcd938x, struct device struct wcd_mbhc_config *cfg = &wcd938x->mbhc_cfg; int ret; - wcd938x->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_ASIS); + /* Keep device in reset status till wcd938x_bind() */ + wcd938x->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH); ret = PTR_ERR_OR_ZERO(wcd938x->reset_gpio); if (ret) return dev_err_probe(dev, ret, "Failed to get reset gpio\n"); @@ -4407,6 +4408,8 @@ static int wcd938x_bind(struct device *dev) return -EINVAL; } + wcd938x_reset(wcd938x); + wcd938x->regmap = devm_regmap_init_sdw(wcd938x->tx_sdw_dev, &wcd938x_regmap_config); if (IS_ERR(wcd938x->regmap)) { dev_err(dev, "%s: tx csr regmap not found\n", __func__); @@ -4508,8 +4511,6 @@ static int wcd938x_probe(struct platform_device *pdev) if (ret) return ret; - wcd938x_reset(wcd938x); - ret = component_master_add_with_match(dev, &wcd938x_comp_ops, match); if (ret) return ret; From patchwork Thu Apr 20 10:16:14 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 85832 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp225287vqo; Thu, 20 Apr 2023 03:26:44 -0700 (PDT) X-Google-Smtp-Source: AKy350bE97RdxtXS9HBVkLmlCcixrb9nDYfx/+PKKMsoEs1hKl8JIkpG7rHk2FCR/Q02MHx/3qBS X-Received: by 2002:a05:6a00:2e8b:b0:63b:84a2:6f54 with SMTP id fd11-20020a056a002e8b00b0063b84a26f54mr719853pfb.26.1681986404161; Thu, 20 Apr 2023 03:26:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681986404; cv=none; d=google.com; s=arc-20160816; b=A+mzvALsQHphjWolF/c+hK4jTdUq+dgofJF0a/IfgyZrbALBzZF+4QMo7KVB1bAYQ2 O+VGD+CK41AqfFQMq0bzrFWVx9QK+NjDmi2iHGxCaWOWMHaqiS9uQFE3s/kOBziXEUOc Pe6DzBWqcZijlMmTNj5kK7Gr8gdDHcuMIMNMSISF2yLUTKLoNN0Twg6WzyJ/5rbwq7/w A2gLjeHqDY9nN32NAy+Y/qLlT3XhvMkd4mXdUNSBVpDCplE0c8oazPtrnLxfNqwulchy jkr75gT3kDVTSFSnNOFDjQI5F7wrL/JYW0Jwy4vh8FThXYkMpfLRMUP4WHdwJOmO8QlR mlcQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Lh0gzMHKjXIEM7BMaBHJPBXLjPSxY0yCOjmfp2sB3bs=; b=l7JGhrrnDkWvtY/yeGK3/dPpH1+vFDNN22Tu5hP4vQMqIN2x8D+MS1SwjaXOJEI5zE AEJcLtdXGr5egMKr1qdsN0mFJ4vacN8nKN6CMrlTUSrKPj1Wrw0Tln/S6D1LzezJU3vX CKJ1LEDIkmGRjYv5uDYOOBxFcQwGM6IMFRYHGM7JZz1zU21mF6r9CqniSzk2hRW85bu6 f8a5KDb7ZupLt8rO5l9wsmuXvT5AfFlDgk2W4WiMuXmnvwZUirMkT0/iI+YeRzmncpa6 FpjB4vxdANFdgIwKB4pMHnFu5ETafiBASq7SG23pCH7kOYhiJmXf1M5zihJscYuCJ0UV S3Yw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ZY7V2Fz3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id 75-20020a63024e000000b0051820b42b56si1370990pgc.717.2023.04.20.03.26.31; Thu, 20 Apr 2023 03:26:44 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=ZY7V2Fz3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234760AbjDTKSM (ORCPT + 99 others); Thu, 20 Apr 2023 06:18:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59108 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234392AbjDTKRl (ORCPT ); Thu, 20 Apr 2023 06:17:41 -0400 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 55B9359D6 for ; Thu, 20 Apr 2023 03:16:28 -0700 (PDT) Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-50685f1b6e0so833040a12.0 for ; Thu, 20 Apr 2023 03:16:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1681985787; x=1684577787; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Lh0gzMHKjXIEM7BMaBHJPBXLjPSxY0yCOjmfp2sB3bs=; b=ZY7V2Fz3NbWwq9aEj2mVn5PnKntw3UCQb4JlfiHhYV0ddMHpN+M8YLIYbeYsE+Ffsj HAguHowzIfVychuICmyTnPXqrCiMPohkRBiwJ5gFErVFL2Xe0YgYfZ2mlihhIgNvguNc WJSMsNFB4dEITw8ED4WVadG5Cg82WotrYQZV/esEjZnrq6uR8DvqTnNdmacy7mSZlxCQ dRkhmaqjCEYdd+QWFyqkEGUu1o9bCaNIUC0WDAMjx/nnqTAN2Q4k+sRXaFL1FpwbKdMl TEgTNFQY/B73e3xmmRB2a+UxETkMTtLGmrlFCrgs70IhUoPQd7MKs9vDEzegWoAtzQjv ynxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681985787; x=1684577787; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lh0gzMHKjXIEM7BMaBHJPBXLjPSxY0yCOjmfp2sB3bs=; b=Q3w0js2lKTlG1KS9ccYLG7GheirTVOuy1GPK2RuuLk85pEIWeqIPTKMJLF43G0WmR4 cZPKRCLyJyytZ/t23I5iNVQlHBl9dkFWEkmPKPQbjjcTSRJYh2Cw3wT9OmcfuFlRh5r0 G30fkNoc5Y+CXhXH3Kn/pcvYvIgoYEdS5rBoGoVOvWavdeOHTZhH5Al/3x3AMvIBTIjA K7sNbcCYt7B6N4ejnILKiQ+WEYMkhv/E7donZl71P6iADIxv2cR5b3593M72QsMhhT/l L4A6+9lSriW/SHsCRhhjhHQCPKnRZK/RglyYUTZ2wkuNl5j5hy8zhMIusuQQj2tRcU83 jpFg== X-Gm-Message-State: AAQBX9cBLMzXPqdBIHqRgsM6Oc6e3ROkSCPkReZtYDQPglC4KOfLRttA ngqLnBd4g7V2bJaD+nE6lsPydw== X-Received: by 2002:aa7:d547:0:b0:506:98e8:7e58 with SMTP id u7-20020aa7d547000000b0050698e87e58mr999102edr.34.1681985786794; Thu, 20 Apr 2023 03:16:26 -0700 (PDT) Received: from krzk-bin.. ([2a02:810d:15c0:828:bcb8:77e6:8f45:4771]) by smtp.gmail.com with ESMTPSA id l22-20020aa7c3d6000000b00506be898998sm588954edr.29.2023.04.20.03.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 03:16:26 -0700 (PDT) From: Krzysztof Kozlowski To: Vinod Koul , Bard Liao , Pierre-Louis Bossart , Sanyog Kale , Andy Gross , Bjorn Andersson , Konrad Dybcio , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Krzysztof Kozlowski , Patrick Lai Subject: [PATCH 3/6] ASoC: codecs: wcd938x: Check for enumeration before using TX device Date: Thu, 20 Apr 2023 12:16:14 +0200 Message-Id: <20230420101617.142225-4-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> References: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763690575569208686?= X-GMAIL-MSGID: =?utf-8?q?1763690575569208686?= Qualcomm WCD938x Soundwire codecs come as two Soundwire devices - TX and RX - on two Soundwire buses. In DTS they are represented as three device nodes: Soundwire TX, Soundwire RX and the platform codec node (binding to this driver). Probing (and Soundwire enumeration) of all devices can happen in any order, but only the Soundwire TX WCD938x device is used for accessing actual WCD938x registers. It is possible that component bind() in the platform driver will be called too early, before the Soundwire TX device is fully enumerated. This might work or might not, but we cannot handle it correctly from the codec driver. It's job for Soundwire master to bring up devices in correct order. At least add some simple warning, so such condition will not be undetected. Signed-off-by: Krzysztof Kozlowski --- Cc: Patrick Lai --- sound/soc/codecs/wcd938x.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sound/soc/codecs/wcd938x.c b/sound/soc/codecs/wcd938x.c index 212667a7249c..e8e07e120fa1 100644 --- a/sound/soc/codecs/wcd938x.c +++ b/sound/soc/codecs/wcd938x.c @@ -77,6 +77,8 @@ #define WCD938X_MBHC_MOISTURE_RREF R_24_KOHM #define WCD_MBHC_HS_V_MAX 1600 +#define WCD938X_ENUM_TIMEOUT_MS 500 + #define WCD938X_EAR_PA_GAIN_TLV(xname, reg, shift, max, invert, tlv_array) \ { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = xname, \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ @@ -4425,6 +4427,15 @@ static int wcd938x_bind(struct device *dev) wcd938x->sdw_priv[AIF1_PB]->slave_irq = wcd938x->virq; wcd938x->sdw_priv[AIF1_CAP]->slave_irq = wcd938x->virq; + /* + * Before any TX slave regmap usage, be sure the TX slave is actually + * enumerated. + */ + ret = wait_for_completion_timeout(&wcd938x->tx_sdw_dev->enumeration_complete, + msecs_to_jiffies(WCD938X_ENUM_TIMEOUT_MS)); + if (!ret) + dev_warn(dev, "Enumeration timeout in bind, possible failures in accessing registers\n"); + ret = wcd938x_set_micbias_data(wcd938x); if (ret < 0) { dev_err(dev, "%s: bad micbias pdata\n", __func__); From patchwork Thu Apr 20 10:16:15 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 85831 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp225219vqo; Thu, 20 Apr 2023 03:26:36 -0700 (PDT) X-Google-Smtp-Source: AKy350aiZUDJa8mEvhVn58egz36H5eRq9m3MWsSkqo8FuPzTr1eukoICjqG3eDhJtL4jeRT2dyqN X-Received: by 2002:a17:903:1106:b0:1a9:2e10:4028 with SMTP id n6-20020a170903110600b001a92e104028mr1603321plh.24.1681986395718; Thu, 20 Apr 2023 03:26:35 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681986395; cv=none; d=google.com; s=arc-20160816; b=Yf3ogNPAGc2w3l1o+iv4p+/4EN5ZhQbt2Lrx8FHyY+DpVY99Vc2Bqb8xaMuRu3I0lH e6uoMqQhT6jtXu0K/HQfarWVlhaTk6L/WDh9FZI3+ql0t2y4DLdwwC+lpmNGGoobjzbG jr+3in021AjBFM+3S1rgFuFvSXzE+MRGDpaFfdMRAsf+/RjsapANjp7bxL/Y/ziauVuZ hrbZRMSDKOpIXGeD6Xye40Qd1v4x0W/Bghaxs3pe6VBruEQWwWde2VgrHa9N9yL9EEEK lpbLiHaNiTPZ+pBquE7aV3FyEhmtMsLLpPL+98CWHagdn0w4XYXor7hBBJZP/znDEQmG 3q2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=VpQ/uiByxTl/QsWgu3jLMFo8/XrWsnc9Emr/ALFnhD8=; b=GHXPhaoOxgECssga7GUWvC3Z/XQJPC6o44g7p0A7ajAMVMQBSmNxHwlKFuTFJjLndX kJ1ghnsZTF4KwzdflhBnF2pcPx+2O6ibBKZJ8Mk3ztR76DKdpNfC2LNWyoLKboVxyknH ZjjmN6glHx8VDLGZXh10nzV6myPniMhErNFq+WdS0UYa6hWxKCIkf49XKy6kOVGqvVo/ RPBbOjyhTIINtLQAakmMeOGVXj5zfvzD15uY0oRKobkze7BZOOJ0VIqoYasdd4BbMJD9 c/2ffpB8qJ8iGM6dYWeRnM+Nv15q3/v4BDesDjKu4yXC6WakUpZUEp5FTSBh9zs9ql0V qYFQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=juzJCbCa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id z5-20020a170902ccc500b001a1ced49c70si1537155ple.369.2023.04.20.03.26.23; Thu, 20 Apr 2023 03:26:35 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=juzJCbCa; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234766AbjDTKSP (ORCPT + 99 others); Thu, 20 Apr 2023 06:18:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234349AbjDTKRn (ORCPT ); Thu, 20 Apr 2023 06:17:43 -0400 Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 51CF576BB for ; Thu, 20 Apr 2023 03:16:29 -0700 (PDT) Received: by mail-ej1-x62a.google.com with SMTP id xi5so5010103ejb.13 for ; Thu, 20 Apr 2023 03:16:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1681985788; x=1684577788; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VpQ/uiByxTl/QsWgu3jLMFo8/XrWsnc9Emr/ALFnhD8=; b=juzJCbCax+ZR55BV6ouJGNxhZQJBPU711okungZ3pQNmrEoyR931ePxvgdve2wtYmq Jo5yCuc760ZT0EihcZnOIQnIn3t5owUZbfZlJQvJ800CK8ZC8LgUFBpb7r64R9csuHyE 47001kvZkfIJ65ZMSPl3gZ6yt9wUk3el6rMgTE9m+u3TbK3BPfozq/QsmkrWWGrwLR6i M4527XvDh3F7Xg2XNVSTDm4k3vyt478WcvpP7rVYUjZqTRacJ9b6O+lOW6x4AQDWIt7w /ufw/IvoZ3WEhYODyW4+IpRx+3EuZaHv4yPAUx2uQlg7SE+LNLdfiLgpGO05csGzezRR 4a7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681985788; x=1684577788; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VpQ/uiByxTl/QsWgu3jLMFo8/XrWsnc9Emr/ALFnhD8=; b=RP5EE3CnZ3/umZfmruQxKP71bbheQesccyzlCKj53SayV7gpSaqV/aDJqVERkVlxaD OxLG8/vtKsj3OgXPp+SxEiRe9FNBcRpTN5aBbTNONq701rBg+x84YyqWxHETDG4YDtiY HwszJtUCZb6wPyqQ2PEXFO2tBUVdn2jYJ0lhGkYiQWKznGNdRdxTisSj8E+iaVXIeUrI UualTWoqpskT7CG+A2r7MYBTfUT5JYCYsPD3MxmjTbQf4/I4CAP+KMr1hMsaU9+RAdO9 BwhvQJznlm5X9tsaXodPYb/MDqmmYglXWab+b0PdrJP50x/uI+ohc8PXXkqgYp6I99mK mw3Q== X-Gm-Message-State: AAQBX9clhP1cfI+1iWt2lROFthmHlYhxfgU1jPqBKJpm1rjkSGN06+sL ty8exEuDmCTM6f7GYm8SefKj7A== X-Received: by 2002:a17:906:4f17:b0:933:3a22:8513 with SMTP id t23-20020a1709064f1700b009333a228513mr1129561eju.53.1681985787930; Thu, 20 Apr 2023 03:16:27 -0700 (PDT) Received: from krzk-bin.. ([2a02:810d:15c0:828:bcb8:77e6:8f45:4771]) by smtp.gmail.com with ESMTPSA id l22-20020aa7c3d6000000b00506be898998sm588954edr.29.2023.04.20.03.16.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 03:16:27 -0700 (PDT) From: Krzysztof Kozlowski To: Vinod Koul , Bard Liao , Pierre-Louis Bossart , Sanyog Kale , Andy Gross , Bjorn Andersson , Konrad Dybcio , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Krzysztof Kozlowski , Patrick Lai Subject: [PATCH 4/6] soundwire: qcom: drop unused struct qcom_swrm_ctrl members Date: Thu, 20 Apr 2023 12:16:15 +0200 Message-Id: <20230420101617.142225-5-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> References: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763690566886976786?= X-GMAIL-MSGID: =?utf-8?q?1763690566886976786?= Drop unused members from the driver state container: struct qcom_swrm_ctrl. Signed-off-by: Krzysztof Kozlowski --- Cc: Patrick Lai --- drivers/soundwire/qcom.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index fae8640b142b..679990dc3cc4 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -187,12 +187,9 @@ struct qcom_swrm_ctrl { #endif struct completion broadcast; struct completion enumeration; - struct work_struct slave_work; /* Port alloc/free lock */ struct mutex port_lock; struct clk *hclk; - u8 wr_cmd_id; - u8 rd_cmd_id; int irq; unsigned int version; int wake_irq; From patchwork Thu Apr 20 10:16:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 85835 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp225976vqo; Thu, 20 Apr 2023 03:28:18 -0700 (PDT) X-Google-Smtp-Source: AKy350Z/Rqm2/PMiytiTJwYnc5cynHhVE7Aoo8FJGlVXE7CFM6uP4WOMeW4HdxGyZv48qqUonOyy X-Received: by 2002:a05:6a20:244d:b0:ef:4321:a89e with SMTP id t13-20020a056a20244d00b000ef4321a89emr1920233pzc.14.1681986498458; Thu, 20 Apr 2023 03:28:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681986498; cv=none; d=google.com; s=arc-20160816; b=yn6VN2cMMFlFJPCBoFhhM5VpSCo7yA0giv2GTBWHKuNtBCQ5QHypxS+5h9EsVXsaZN gM+OLuh7Rdc/tJ1d6Zk6qsK+OGjoP8E8QUQWOfw+L+AJDHGEUjg7zAP5o/RVQN3L1rTw 5AfrwLQD6+Unz8jsNeUbmZ45O0okhtNJcb/smSMgowT8LJY3ZZipKFQiuoN5LL/rtk4J xq8gIWWRYEGclqCIpUUPMdJT7pu3ocTYiX/wX5IDF8FhfQ25Z4SOiPZ/eJu1/3YeNngf /DtZmJw1Fud0i2Bo8TD3X1fo8OtdCGoNt+n5CLzOwmpOrrMJ3UmtdJ58aGJR+SkD9z9/ c+Qw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=AeY19byibaKQU5SmsEhk5n4vvprUavR/0B7l0HzeYIU=; b=U2CoyU7pTFigzDkf8P7eTu9tXqWsb9cBnIcNDbwbcv3tkDG3z2NsZGa43LJxeoLi71 ZCQ0ehZpOXbz20Jgl4EUwz/+y2vXQPX9PZ/hijMbowLDa8cEPtrsjThBTpF5UAOJqd4C zcLSxi0wCTA3SvB3CA8sZI77L9YfPcxK5ALqs4Srdf4P5BGGTHyciZVWX82ZuFIapGri qbKUs8/LYzKABWUJd4qlWedXzfXHWpcLajdpVSa/BLV750rQm9URyCccNEIyWYCnjUPB pljYZ213QGhAqP01elTWu5drDPc8ecR6lzw1nDMC3DM6cJYaZ0xgl4Me4HoC/lB+sgAl 79gg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=PtBULmQb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f30-20020a63101e000000b00520a11ff085si1397698pgl.455.2023.04.20.03.28.05; Thu, 20 Apr 2023 03:28:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=PtBULmQb; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234772AbjDTKSY (ORCPT + 99 others); Thu, 20 Apr 2023 06:18:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58832 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234639AbjDTKRn (ORCPT ); Thu, 20 Apr 2023 06:17:43 -0400 Received: from mail-ed1-x52d.google.com (mail-ed1-x52d.google.com [IPv6:2a00:1450:4864:20::52d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2EEE559D for ; Thu, 20 Apr 2023 03:16:30 -0700 (PDT) Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-5055141a8fdso669724a12.3 for ; Thu, 20 Apr 2023 03:16:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1681985789; x=1684577789; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AeY19byibaKQU5SmsEhk5n4vvprUavR/0B7l0HzeYIU=; b=PtBULmQbRQK20LScpRHebHKUZ901DjN1+0eDl2Of/GBmLfksDulveUnoVXib8qy+uD QUe+Yb8aMFMzNSO1V+nHCMwhblZ/UApGmT/xVxec0sSS8yLQ3228EM2ky/wV2O6QTinR TbER1FHIeDgGvgB9Dpr62VcWaWGuk53+yeNTODNT1OH4iyNVPz6lswqcRoup8QuiJ7h9 G+ydlD2RLMmNwpNDrzo7jy5U95KruGjzYVechUf+52Nypvhhag90S5KPva7I+4yr5maE zHmELbVNzxsf2OI5Q0g2dnKxKMG6T2PDh7Oz/jga08dkZdQFGAPqpSKSwKTmCzYf9sUv 9KAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681985789; x=1684577789; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AeY19byibaKQU5SmsEhk5n4vvprUavR/0B7l0HzeYIU=; b=jNmsySA1RQGl0liUJksPSNbrDFVRRtdmQwDY9Ql6re0aJrfkHhuTyI8Iqje2yB2d0h SCTA/SA6d7UFf8ZzJzB5n6h6vu9qhb8KNUe+DmoQLAdpMvQwJRiSVVRjdgVMOtXUnVqi eDWRbnXLKwlnUojjrIJH6bePhGGygc0n07TAvn0qC8b/o8yY8vw/q1LKxp7MXjZCoIha rQW31qKT78KRJUBTKN5oM6wFh3ngvp2DtfyrjqDbNlqV47M1PmOfWiYF2bRyGhgLEzb8 7vEZoVywdE3xmWFKjDZHvDqBw1A2jXGqki0Lw9FpY8u6i2wgQJrfBQ6rfLtAi/n1eqae SwcQ== X-Gm-Message-State: AAQBX9e17TMPE/No1Kk2PA2y3lnGgszfqzyDGoey9843kBqOrAiNMY+g 5HjN3VuchOkVdXFwKw959Rs8zg== X-Received: by 2002:aa7:d5c1:0:b0:506:8470:c323 with SMTP id d1-20020aa7d5c1000000b005068470c323mr1381184eds.24.1681985789356; Thu, 20 Apr 2023 03:16:29 -0700 (PDT) Received: from krzk-bin.. ([2a02:810d:15c0:828:bcb8:77e6:8f45:4771]) by smtp.gmail.com with ESMTPSA id l22-20020aa7c3d6000000b00506be898998sm588954edr.29.2023.04.20.03.16.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 03:16:28 -0700 (PDT) From: Krzysztof Kozlowski To: Vinod Koul , Bard Liao , Pierre-Louis Bossart , Sanyog Kale , Andy Gross , Bjorn Andersson , Konrad Dybcio , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Krzysztof Kozlowski , Patrick Lai Subject: [PATCH 5/6] soudnwire: master: protect concurrecnt check for bus->md Date: Thu, 20 Apr 2023 12:16:16 +0200 Message-Id: <20230420101617.142225-6-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> References: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763690674539959494?= X-GMAIL-MSGID: =?utf-8?q?1763690674539959494?= The Soundwire master controllers might want to check for bus->md initialization to avoid race between early interrupt and finish of sdw_bus_master_add()/sdw_master_device_add(). Such early interrupt can happen if Soundwire devices are not powered off during their probe. Add a store release barrier, so the Soundwire controllers can safely check it in concurrent (e.g. in interrupt) way. Signed-off-by: Krzysztof Kozlowski --- Cc: Patrick Lai --- drivers/soundwire/master.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/soundwire/master.c b/drivers/soundwire/master.c index 9b05c9e25ebe..d5bf13e7e602 100644 --- a/drivers/soundwire/master.c +++ b/drivers/soundwire/master.c @@ -161,7 +161,12 @@ int sdw_master_device_add(struct sdw_bus *bus, struct device *parent, /* add shortcuts to improve code readability/compactness */ md->bus = bus; bus->dev = &md->dev; - bus->md = md; + /* + * Make sure the contents of md is stored before storing bus->md. + * Paired with new slave attached and slave status interrupts + * on the Soundwire master side. + */ + smp_store_release(&bus->md, md); pm_runtime_set_autosuspend_delay(&bus->md->dev, SDW_MASTER_SUSPEND_DELAY_MS); pm_runtime_use_autosuspend(&bus->md->dev); From patchwork Thu Apr 20 10:16:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Krzysztof Kozlowski X-Patchwork-Id: 85837 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp234066vqo; Thu, 20 Apr 2023 03:44:20 -0700 (PDT) X-Google-Smtp-Source: AKy350bu/2W7ZO3xF92R7i7Ag6DKsOnSXJEYjhg5fNB01zzZcz3zlZogyhtkxr/MD8OCGWVkaeTD X-Received: by 2002:a05:6a00:2e0d:b0:63b:1708:10aa with SMTP id fc13-20020a056a002e0d00b0063b170810aamr825647pfb.34.1681987460425; Thu, 20 Apr 2023 03:44:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1681987460; cv=none; d=google.com; s=arc-20160816; b=WzFuEDNfuEHaFWixcloRokKwB00buNEwp2dfvcf3EhrSlBz9DWGajQlomJHl+5ayVu oR5EzPLT7Jqdxc6W9UPExgNKs8z4zx/WU29vtxMa+TU0I22sRvCYGsuZ6WfrsuhlLLDW /8mGOa33MXcUreBSA0aSIsojF8LtFw65gg2ebf4xINhiS+hP8dya+WBg/YdLNxhoss1Q iu3h1+xMTvy/YDQwLgukrTpNNlYf3xn4WGHMnnALk5zkezO3aDJ9xESDJkJe4N0YQjWF YOVb/m+55BXVXVBsL1SbdZlj8uvr6o5Q3/yXtJfusP/O6RB59GjEOvaXNWbsghUHkoDO Wtzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=gxQN4hZ4JVSgplNB9vM+TACxEqA37qdo6fBUY/Qfhug=; b=OBc6/ujhN3okax+IMmn8DeFLwk85OM4byobR8a4m2JLHNp7XSd+EWvKjZx25QOe87s 3FlMDFXL7s2Zl3LlmGboE42GXMtrJvZ/t7xFheEL8ZyVyAkYywFGj1b2U8eloHSed+ND 3pz4/iupUxQGg7jnepGATPNXNArlnPV2lGCFbtjBwiXx52XB9iAX7XatAjE+AGY7KV4+ 3tBgqltnIJZq5dm6Z1gxYnp06fO/BTdxZlQ7ixJ1yvPm8rw6a36wYiuhDALqVc13rIn1 2XMDT2C6OZFDnUp3An3fNvY+uZqaZWi3WAsAgiWjOHBBq0lhVZ5zo4vvEs5bDWoRkgF3 Fk0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="ZdhT1l/E"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id i19-20020aa796f3000000b0063b1739532esi1343595pfq.139.2023.04.20.03.44.07; Thu, 20 Apr 2023 03:44:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="ZdhT1l/E"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234780AbjDTKS0 (ORCPT + 99 others); Thu, 20 Apr 2023 06:18:26 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234533AbjDTKRo (ORCPT ); Thu, 20 Apr 2023 06:17:44 -0400 Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0A6A67EE7 for ; Thu, 20 Apr 2023 03:16:32 -0700 (PDT) Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-506b8c6bbdbso682327a12.1 for ; Thu, 20 Apr 2023 03:16:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1681985790; x=1684577790; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gxQN4hZ4JVSgplNB9vM+TACxEqA37qdo6fBUY/Qfhug=; b=ZdhT1l/Ewnw8PJH9WHmYU66panGvAGmseKsA1QI14AcHKVjKMxVnU3LzsyflnJaSsT 0SsaSKbcWs7WckSg27jljRg6VV3DwqhpTLP6IQGi/ukXFFUEFcPf77aJPNk1r6zWsAej 9naiRVNvRcz5F/OBPqzOYQqWgb9MZD3r9qf94IrZh9CvL8ZXCvkjTR+YO2hbADbWUKv2 ATvis3qRCxbidFKHfTut9rMBICDy00uRi9OXLFLIijGALI+2XDJdj8NJtdDDNAw5xgeF S4oFzhhbIZ37jr7lIrwpStGblZyQ9UE3jwRtyUfVymNzKv5D2vUZWLGXgfJtzCSOUzME rw4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681985790; x=1684577790; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gxQN4hZ4JVSgplNB9vM+TACxEqA37qdo6fBUY/Qfhug=; b=Xe580JwUB64SWe8DLyqvR+lI300/JbVwACVQstrkpjNfs/I/vdPAoS5eI/k/5I6C+o wJj8iRA5yOgyHL0Y8tQKuzdM2FBElcmjOxK6Z2lIWykrfT0HoW6CdJpdbEhqMlvsuveR oceqifwNbAOdMXs037QbgWI37PhcD06M/j19r2n5U1TnXua3n7/lECcnfPnmRqJd9wFK m+FaRWswLtWBOKptzmGW5ol2AfiT1v6Ibg7MLBsh3fAoiPU+yZFBb0f3sdTPZ3BDi93e ZOj/BpRr119Fgoez08D6QOb40OG5qvDLXKdrcSlg7ZK+BU0HWhWTK1wtFgeYAWw2Jswb 213w== X-Gm-Message-State: AAQBX9dlTjJwMQvEKQaGcgeuKgZ9RBgntE2KqCJ6feiGidDhXYn4L4CJ sfrfA0g1bLt4YmCqLJW01VJHU0FhW5FyvJ5UmkkgeQ== X-Received: by 2002:aa7:d78d:0:b0:506:be3f:ebb5 with SMTP id s13-20020aa7d78d000000b00506be3febb5mr1365210edq.1.1681985790496; Thu, 20 Apr 2023 03:16:30 -0700 (PDT) Received: from krzk-bin.. ([2a02:810d:15c0:828:bcb8:77e6:8f45:4771]) by smtp.gmail.com with ESMTPSA id l22-20020aa7c3d6000000b00506be898998sm588954edr.29.2023.04.20.03.16.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Apr 2023 03:16:30 -0700 (PDT) From: Krzysztof Kozlowski To: Vinod Koul , Bard Liao , Pierre-Louis Bossart , Sanyog Kale , Andy Gross , Bjorn Andersson , Konrad Dybcio , Liam Girdwood , Mark Brown , Jaroslav Kysela , Takashi Iwai , alsa-devel@alsa-project.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org Cc: Krzysztof Kozlowski , Patrick Lai Subject: [PATCH 6/6] soundwire: qcom: do not probe devices before bus/link init Date: Thu, 20 Apr 2023 12:16:17 +0200 Message-Id: <20230420101617.142225-7-krzysztof.kozlowski@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> References: <20230420101617.142225-1-krzysztof.kozlowski@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1763691683262516877?= X-GMAIL-MSGID: =?utf-8?q?1763691683262516877?= Soundwire devices are supposed to be kept in reset state (powered off) till their probe() or component bind() callbacks. However if they are already powered on, then they might enumerate before the master initializes bus in qcom_swrm_init() leading to occasional errors like: qcom-soundwire 6d30000.soundwire-controller: Qualcomm Soundwire controller v2.0.0 Registered wcd938x_codec audio-codec: bound sdw:0:0217:010d:00:4 (ops wcd938x_sdw_component_ops) wcd938x_codec audio-codec: bound sdw:0:0217:010d:00:3 (ops wcd938x_sdw_component_ops) qcom-soundwire 6ad0000.soundwire-controller: swrm_wait_for_wr_fifo_avail err write overflow The problem primarily lies in Qualcomm Soundwire controller probe() sequence: 1. request_threaded_irq() 2. sdw_bus_master_add() - which will cause probe() and component bind() of Soundwire devices, e.g. WCD938x codec drivers. Device drivers might already start accessing their registers. 3. qcom_swrm_init() - which initializes the link/bus and enables interrupts. Any access to device registers at (2) above, will fail because link/bus is not yet initialized. However the fix is not as simple as moving qcom_swrm_init() before sdw_bus_master_add(), because this will cause early interrupt of new slave attached. The interrupt handler expects bus master (ctrl->bus.md) to be allocated, so this would lead to NULL pointer exception. Rework the init sequence and change the interrupt handler. The correct sequence fixing accessing device registers before link init is now: 1. qcom_swrm_init() 2. request_threaded_irq() 3. sdw_bus_master_add() which still might cause early interrupts, if Soundwire devices are not in powered off state before their probe. This early interrupt issue is fixed by checking if bus master (ctrl->bus.md) was allocated and if not, scheduling delayed work for enumerating the slave device. Since we actually can handle early interrupt now, drop IRQF_TRIGGER_RISING flag from the interrupt, because it is not really valid and driver should use flags provided by DTS. Signed-off-by: Krzysztof Kozlowski --- Change context depends on: https://lore.kernel.org/r/20230209131336.18252-3-srinivas.kandagatla@linaro.org https://lore.kernel.org/all/20230418095447.577001-1-krzysztof.kozlowski@linaro.org/ Cc: Patrick Lai --- drivers/soundwire/qcom.c | 89 ++++++++++++++++++++++++++++++++-------- 1 file changed, 72 insertions(+), 17 deletions(-) diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index 679990dc3cc4..802d939ce7aa 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include "bus.h" @@ -187,6 +188,7 @@ struct qcom_swrm_ctrl { #endif struct completion broadcast; struct completion enumeration; + struct delayed_work new_slave_work; /* Port alloc/free lock */ struct mutex port_lock; struct clk *hclk; @@ -606,6 +608,37 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus) return 0; } +static void qcom_swrm_new_slave(struct work_struct *work) +{ + struct qcom_swrm_ctrl *ctrl = container_of(work, struct qcom_swrm_ctrl, + new_slave_work.work); + + /* + * All Soundwire slave deviecs are expected to be in reset state (powered down) + * during sdw_bus_master_add(). The slave device should be brougth + * from reset by its probe() or bind() function, as a result of + * sdw_bus_master_add(). + * Add a simple check to avoid NULL pointer except on early interrupts. + * Note that if this condition happens, the slave device will not be + * enumerated. Its driver should be fixed. + * + * smp_load_acquire() paired with sdw_master_device_add(). + */ + if (!smp_load_acquire(&ctrl->bus.md)) { + dev_err(ctrl->dev, + "Got unexpected, early interrupt, device will not be enumerated\n"); + return; + } + + clk_prepare_enable(ctrl->hclk); + + qcom_swrm_get_device_status(ctrl); + qcom_swrm_enumerate(&ctrl->bus); + sdw_handle_slave_status(&ctrl->bus, ctrl->status); + + clk_disable_unprepare(ctrl->hclk); +}; + static irqreturn_t qcom_swrm_wake_irq_handler(int irq, void *dev_id) { struct qcom_swrm_ctrl *ctrl = dev_id; @@ -668,9 +701,17 @@ static irqreturn_t qcom_swrm_irq_handler(int irq, void *dev_id) dev_dbg(ctrl->dev, "Slave status not changed %x\n", slave_status); } else { - qcom_swrm_get_device_status(ctrl); - qcom_swrm_enumerate(&ctrl->bus); - sdw_handle_slave_status(&ctrl->bus, ctrl->status); + unsigned long delay = 0; + + /* + * See qcom_swrm_new_slave() for + * explanation. smp_load_acquire() paired + * with sdw_master_device_add(). + */ + if (!smp_load_acquire(&ctrl->bus.md)) + delay = 10; + schedule_delayed_work(&ctrl->new_slave_work, + delay); } break; case SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET: @@ -780,6 +821,7 @@ static int qcom_swrm_init(struct qcom_swrm_ctrl *ctrl) ctrl->intr_mask = SWRM_INTERRUPT_STATUS_RMSK; /* Mask soundwire interrupts */ + if (ctrl->version < SWRM_VERSION_2_0_0) ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_MASK_ADDR], SWRM_INTERRUPT_STATUS_RMSK); @@ -1485,6 +1527,7 @@ static int qcom_swrm_probe(struct platform_device *pdev) mutex_init(&ctrl->port_lock); init_completion(&ctrl->broadcast); init_completion(&ctrl->enumeration); + INIT_DELAYED_WORK(&ctrl->new_slave_work, qcom_swrm_new_slave); ctrl->bus.ops = &qcom_swrm_ops; ctrl->bus.port_ops = &qcom_swrm_port_ops; @@ -1514,9 +1557,10 @@ static int qcom_swrm_probe(struct platform_device *pdev) ctrl->reg_read(ctrl, SWRM_COMP_HW_VERSION, &ctrl->version); + qcom_swrm_init(ctrl); + ret = devm_request_threaded_irq(dev, ctrl->irq, NULL, qcom_swrm_irq_handler, - IRQF_TRIGGER_RISING | IRQF_ONESHOT, "soundwire", ctrl); if (ret) { @@ -1524,18 +1568,6 @@ static int qcom_swrm_probe(struct platform_device *pdev) goto err_clk; } - ctrl->wake_irq = of_irq_get(dev->of_node, 1); - if (ctrl->wake_irq > 0) { - ret = devm_request_threaded_irq(dev, ctrl->wake_irq, NULL, - qcom_swrm_wake_irq_handler, - IRQF_TRIGGER_HIGH | IRQF_ONESHOT, - "swr_wake_irq", ctrl); - if (ret) { - dev_err(dev, "Failed to request soundwire wake irq\n"); - goto err_init; - } - } - pm_runtime_set_autosuspend_delay(dev, 3000); pm_runtime_use_autosuspend(dev); pm_runtime_mark_last_busy(dev); @@ -1549,7 +1581,18 @@ static int qcom_swrm_probe(struct platform_device *pdev) goto err_clk; } - qcom_swrm_init(ctrl); + ctrl->wake_irq = of_irq_get(dev->of_node, 1); + if (ctrl->wake_irq > 0) { + ret = devm_request_threaded_irq(dev, ctrl->wake_irq, NULL, + qcom_swrm_wake_irq_handler, + IRQF_TRIGGER_HIGH | IRQF_ONESHOT, + "swr_wake_irq", ctrl); + if (ret) { + dev_err(dev, "Failed to request soundwire wake irq\n"); + goto err_init; + } + } + wait_for_completion_timeout(&ctrl->enumeration, msecs_to_jiffies(TIMEOUT_MS)); ret = qcom_swrm_register_dais(ctrl); @@ -1589,6 +1632,18 @@ static int qcom_swrm_remove(struct platform_device *pdev) { struct qcom_swrm_ctrl *ctrl = dev_get_drvdata(&pdev->dev); + /* + * Mask interrupts to be sure no delayed work can be scheduler after + * removing Soundwire bus master. + */ + if (ctrl->version < SWRM_VERSION_2_0_0) + ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_MASK_ADDR], + 0); + if (ctrl->mmio) + ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_CPU_EN], + 0); + + cancel_delayed_work_sync(&ctrl->new_slave_work); sdw_bus_master_delete(&ctrl->bus); clk_disable_unprepare(ctrl->hclk);