From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 37AD13ACF13; Fri, 10 Apr 2026 08:18:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775809137; cv=none; b=qw/RGA1WbfGqZv+nmBGkXw6wbAFDgKAm9EABrnjmSFGzorQZIDojOmxXGq75oCPyV7mqYk1CdLJs1q7AaehOH3CW1R/nW6b2D/KMfUBNHd78jPVuvf7Ljqby/iDgCs59+jtadP8TN8GoQRcA4AGrlfYM+WnKbnhYeiZE67c0fns= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775809137; c=relaxed/simple; bh=Bx3P5pYklrEMI671aCg7axzrAexelH1e0IFNqcMv9eQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Gil33g7BxIYoN0pkNxJJSlAib/kFTROf6XSEZDDuYdTXADmInG9TvOTzRr3tGTs2O/DoNTCPwjZWndQ2rDD+B0cOuKPyxgy2MhQ+vtc4nsZZCbg+5gtRp6AtgL6EATVdKQ458/+Sv9iPluW/ItP3vQvn4ccbyalzivRnHANW2GU= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=g6XigBO5; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="g6XigBO5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A6592C4AF11; Fri, 10 Apr 2026 08:18:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1775809136; bh=Bx3P5pYklrEMI671aCg7axzrAexelH1e0IFNqcMv9eQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=g6XigBO5npE9h/Wi7xxJZV671oFeFPiYFdbZCDN6s5i4FZnRfc1jMvERruke/XmWu s+m51mh6MP3+y/8eX964O9U3hq+858qel1VGK9dffWJT2rTZ/eC43DwkdURZZyLvjR ajMuDhQ01WSVh37MZI/RgBIui25WDSTgGD0vGceYEV5U8bwRBL1Ma1GofNXgGXWs8d Pgj3s8Ten8vviFOt4EKCLqoLOGAJvZZ6YWEF1/R3dQCiCiddBIQ4Av/Z4C+T+1KaEZ mIWKv7UjeNkJQF49EcgNMBxmNMd1vAKUbUU4P2d0HkU1EV2MBDDFIEdlJ7/oROw+4+ 6r+lgT7xaiY4g== Received: from johan by xi.lan with local (Exim 4.98.2) (envelope-from ) id 1wB74n-000000026um-46Je; Fri, 10 Apr 2026 10:18:53 +0200 From: Johan Hovold To: Mark Brown Cc: Matthias Brugger , AngeloGioacchino Del Regno , Frank Li , Sascha Hauer , Andrew Jeffery , Avi Fishman , Tomer Maimon , Tali Perry , Linus Walleij , Andi Shyti , Tudor Ambarus , Paul Walmsley , Samuel Holland , Orson Zhai , Baolin Wang , Jernej Skrabec , Masahisa Kojima , Jassi Brar , Laxman Dewangan , Kunihiko Hayashi , Masami Hiramatsu , Michal Simek , linux-spi@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold , stable@vger.kernel.org, Lanqing Liu Subject: [PATCH 16/26] spi: sprd: fix controller deregistration Date: Fri, 10 Apr 2026 10:17:46 +0200 Message-ID: <20260410081757.503099-17-johan@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260410081757.503099-1-johan@kernel.org> References: <20260410081757.503099-1-johan@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Make sure to deregister the controller before disabling underlying resources like clocks during driver unbind. Note that the controller is suspended before disabling and releasing resources since commit de082d866cce ("spi: sprd: Add the SPI irq function for the SPI DMA mode") which avoids issues like unclocked accesses but prevents SPI device drivers from doing I/O during deregistration. Fixes: e7d973a31c24 ("spi: sprd: Add SPI driver for Spreadtrum SC9860") Cc: stable@vger.kernel.org # 4.20 Cc: Lanqing Liu Signed-off-by: Johan Hovold --- drivers/spi/spi-sprd.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c index 0f9fc320363c..fd3fd0ce122c 100644 --- a/drivers/spi/spi-sprd.c +++ b/drivers/spi/spi-sprd.c @@ -977,7 +977,7 @@ static int sprd_spi_probe(struct platform_device *pdev) goto err_rpm_put; } - ret = devm_spi_register_controller(&pdev->dev, sctlr); + ret = spi_register_controller(sctlr); if (ret) goto err_rpm_put; @@ -1008,7 +1008,9 @@ static void sprd_spi_remove(struct platform_device *pdev) if (ret < 0) dev_err(ss->dev, "failed to resume SPI controller\n"); - spi_controller_suspend(sctlr); + spi_controller_get(sctlr); + + spi_unregister_controller(sctlr); if (ret >= 0) { if (ss->dma.enable) @@ -1017,6 +1019,8 @@ static void sprd_spi_remove(struct platform_device *pdev) } pm_runtime_put_noidle(&pdev->dev); pm_runtime_disable(&pdev->dev); + + spi_controller_put(sctlr); } static int __maybe_unused sprd_spi_runtime_suspend(struct device *dev) -- 2.52.0