From nobody Wed Feb 11 05:14:56 2026 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0939F33C188 for ; Wed, 17 Dec 2025 11:09:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765969787; cv=none; b=QS0yeLYMj5hbjfQ0b694jxVPrjS2LhZdgAHT4nIwvPTg6gsE/4J4XOjQQPSveWWOpH5wB8GyT/2RYUwwWdHcx4WKGNQiWl6qR2XuMZ5C9JKq5Rz2ZXWM8EwSHhoEx3+bjDyF8BaZjpHbkms9zlsWP2H2UuFyoz4iC4MX8DHyGTU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765969787; c=relaxed/simple; bh=xWvN8DVqDcWBo/v4eE8MagMMQU8shW2qXTVYsch0jko=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=KxFW627U23RqOMyfcB/RZrKcwQtgKASf3WM/KnwGWHTz3QbXW2LbBggW/xXfNCqwYqkw8LzTJDacranu7KwXpzxPUUFIhuzmjJGqOvkQ/lWppeIGqZVviMRy3XOEILUFnY8Kfo2cp9ZWTl2b7Swu9rwokTwQd+Lpv+ACbsZLUXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=FJ46O2+P; arc=none smtp.client-ip=209.85.208.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="FJ46O2+P" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-6492e7925d2so6678186a12.3 for ; Wed, 17 Dec 2025 03:09:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1765969782; x=1766574582; darn=vger.kernel.org; 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=SFxo7q8Upg9sDha34TIZTJlyln1hXfyfUaUuvCwVFgI=; b=FJ46O2+PUpl1Pf1OePIA8SU7wqH9JmlPolOZJ2NoZHmhExC9+9M+3oc/QSmaWBMHHe LPEWkRyB56jUdyXRHzAr95W2fRMMK4BRe+bqdjMh2eULAwYKXEshdqCfBYUkHjo/StXM UDM0SMmEO2+ghldW0xBUZaROYO9PP+uuMUOmknQHkh7SykP8DkI64b0/QFDgbV8UEl1g NKL9fWvBrhCLSOTDjBr5SJ6ZXM64UQFBvwTlweoB8IjEVAb2WKmB9VHJRpKE1XflrEiv i85nRAXlkdJb7M1N0kOSXFgWLkGljS/VU2BGO4oXmHbro6w3kfWvpPAhTCwQthxaCbE6 rvtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765969782; x=1766574582; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=SFxo7q8Upg9sDha34TIZTJlyln1hXfyfUaUuvCwVFgI=; b=fNTm1USaBZxPLGrQsNyEiV52WzuB+uG43FnfSmZzDsu3SKn8sFpuxUjpWtplYD7gQR UK8fhaqvvLsAbqnmFBxpLo2sRPVLLom5VJaRUQjpmHrEVBOY7+B9wte5H7tbYkykXKMp wTueZ9DAQVwmH3WhSoQTHtZVvUL6TF1ls9jqs1xnRpslz3eBcOAIvhAk9l7B3M0DiwCL sHhj8qbVKqvIz6qPXKqVMmshUEA7rIg8bEnoxC4sf0lYwKnPy79HwgtDWlnHp5uojlLh ydERkToSsIdelYb9xNqmSvi6ZX8Tm+zhduIOfnMfZI/FXE+G4ZQG+JVOpySiK49mGLJW RhUQ== X-Forwarded-Encrypted: i=1; AJvYcCUIXzhyz885gm5CArAFKiiWbdIHl/WKgF59zYhIjDQsUxC96242Vi46Ww1KH+SJSixXgNQtZ/TlCJ15T9A=@vger.kernel.org X-Gm-Message-State: AOJu0YzAqmhPjKwgD+2AkcHvZrwp+fSPqISwJmLqDkwvPUeRLEoEHK9L U7flEooo61sWBUIJq7DKlyQlHGn9Im8OtCw/ehCzhUBWKuBcyoAdgpNPGO9/b7ga2oY= X-Gm-Gg: AY/fxX6kZBr1AE3dcN+P0aHj7Z3tslG5eWY5NLrOfBNMo3no8EI1xUJ14nsdGmc6/5z tfA6cY9+8TzUAuS5PfaA6oHlEcLnrRI6CaUuZzYSyyH4HvAxFzTQOeMQp4KArbQ05ay6qWwio4+ rzwYkV2jYZK+8TTRGzCshkH+bHNvTYHHGytR6OkS5gJsfWjijXnmSagWIOmnneUiehQXWjRItKh Ikyw5OLIESSIO5BfsQVNcgQJl/coxHSv/zrmEM47UV9lstrcdSz20Z8rnNsK7KHHY7C296MDGHx Y9+h78Rq0G/1R7Ww65SicS1otabvt2rL6AvkWHX/RzgFbnq4c+zVdHkW3BQcbtXezisV1o+AJjn trTguZgiGK4P6yItUSVQN3ExCGR8Q6XXwJS/i6T9Zqko715icKj5tRYhwcHJmqjaKoqRYw9ftAJ 4tA/vi/YPMci8D3rMptGZM+Rv6Vgw= X-Google-Smtp-Source: AGHT+IF5iq7R0NeDYU0B0g78afNST/PVuQQcOsPbPhKkJsVqaTqu+qAJudf/rYk8PgPcpCjGsUxSiw== X-Received: by 2002:a05:6402:4311:b0:637:f07d:e80f with SMTP id 4fb4d7f45d1cf-6499b041413mr17015368a12.0.1765969782271; Wed, 17 Dec 2025 03:09:42 -0800 (PST) Received: from localhost ([2a02:8071:b783:6940:1d24:d58d:2b65:c291]) by smtp.gmail.com with UTF8SMTPSA id 4fb4d7f45d1cf-64b3f56b3e4sm2343875a12.28.2025.12.17.03.09.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Dec 2025 03:09:41 -0800 (PST) From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= To: Ulf Hansson Cc: linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1 1/4] sdio: Provide a bustype shutdown function Date: Wed, 17 Dec 2025 12:09:23 +0100 Message-ID: <397f45c2818f6632151f92b70e547262f373c3b6.1765968841.git.ukleinek@kernel.org> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Developer-Signature: v=1; a=openpgp-sha256; l=2714; i=u.kleine-koenig@baylibre.com; h=from:subject:message-id; bh=xWvN8DVqDcWBo/v4eE8MagMMQU8shW2qXTVYsch0jko=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBpQo9l8isJBrlUSpFk4tQ0feWeQ7zFVLKRysli4 R9Ml9XWx2mJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCaUKPZQAKCRCPgPtYfRL+ TnerB/9g1J2vhIOAmHJHDhB6LU86vr01CcpgtvQPD/axm5i5BKeBqXK9PIVWLgQQrQ5qGmzZDw+ sG6by5hal3OT837Bkz1/HKKlCwd+dfBQHtr6tGK6ylR8iL/odnQ3Mv3rIjMLzrGMVRVH9la95ra T1mXPXWls00Ho0fTXyAyBOgA1IkSdk2C9TN+m4f9p7JvbMjpA2U8yFS9x8mrteEPCY1t9op4xJ+ Kh5a5HsnFDdFIv+7EbSsUDL7vk8lSR9RUpaY+WJmhncbe/uNmLDb4G5Na/JRExU4sCQfcXrV/oJ CxRqpa0952m7NZSFhPk0yEQgt6VndtKsB3Tgm7Ml/LXPq86T X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 Content-Transfer-Encoding: quoted-printable To prepare sdio drivers to migrate away from struct device_driver::shutdown (and then eventually remove that callback) create a serdev driver shutdown callback and migration code to keep the existing behaviour. Note this introduces a warning for each driver that isn't converted yet to that callback at register time. Signed-off-by: Uwe Kleine-K=C3=B6nig --- drivers/mmc/core/sdio_bus.c | 25 +++++++++++++++++++++++++ include/linux/mmc/sdio_func.h | 1 + 2 files changed, 26 insertions(+) diff --git a/drivers/mmc/core/sdio_bus.c b/drivers/mmc/core/sdio_bus.c index 10799772494a..6e5bdc2f0cc8 100644 --- a/drivers/mmc/core/sdio_bus.c +++ b/drivers/mmc/core/sdio_bus.c @@ -232,6 +232,15 @@ static void sdio_bus_remove(struct device *dev) pm_runtime_put_sync(dev); } =20 +static void sdio_bus_shutdown(struct device *dev) +{ + struct sdio_driver *drv =3D to_sdio_driver(dev->driver); + struct sdio_func *func =3D dev_to_sdio_func(dev); + + if (dev->driver && drv->shutdown) + drv->shutdown(func); +} + static const struct dev_pm_ops sdio_bus_pm_ops =3D { SET_SYSTEM_SLEEP_PM_OPS(pm_generic_suspend, pm_generic_resume) SET_RUNTIME_PM_OPS( @@ -248,6 +257,7 @@ static const struct bus_type sdio_bus_type =3D { .uevent =3D sdio_bus_uevent, .probe =3D sdio_bus_probe, .remove =3D sdio_bus_remove, + .shutdown =3D sdio_bus_shutdown, .pm =3D &sdio_bus_pm_ops, }; =20 @@ -261,6 +271,14 @@ void sdio_unregister_bus(void) bus_unregister(&sdio_bus_type); } =20 +static void sdio_legacy_shutdown(struct sdio_func *func) +{ + struct device *dev =3D &func->dev; + struct device_driver *driver =3D dev->driver; + + driver->shutdown(dev); +} + /** * __sdio_register_driver - register a function driver * @drv: SDIO function driver @@ -272,6 +290,13 @@ int __sdio_register_driver(struct sdio_driver *drv, st= ruct module *owner) drv->drv.bus =3D &sdio_bus_type; drv->drv.owner =3D owner; =20 + /* + * This driver needs updating. Note that driver_register() warns about + * this, so we're not adding another warning here. + */ + if (!drv->shutdown && drv->drv.shutdown) + drv->shutdown =3D sdio_legacy_shutdown; + return driver_register(&drv->drv); } EXPORT_SYMBOL_GPL(__sdio_register_driver); diff --git a/include/linux/mmc/sdio_func.h b/include/linux/mmc/sdio_func.h index fed1f5f4a8d3..4534bf462aac 100644 --- a/include/linux/mmc/sdio_func.h +++ b/include/linux/mmc/sdio_func.h @@ -78,6 +78,7 @@ struct sdio_driver { =20 int (*probe)(struct sdio_func *, const struct sdio_device_id *); void (*remove)(struct sdio_func *); + void (*shutdown)(struct sdio_func *); =20 struct device_driver drv; }; --=20 2.47.3