From nobody Fri Apr 3 00:18:44 2026 Received: from mail-dy1-f181.google.com (mail-dy1-f181.google.com [74.125.82.181]) (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 193FB25EFBB for ; Sat, 14 Feb 2026 02:52:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.82.181 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771037575; cv=none; b=SjxFK3kA6OJbhbD6AVuKtBgJWuXz5rDq2tY5R9BcKvT/EXIUhLm+r++Z6wuqoCtYQWnTiQIIr8do9QwKm68ZQiwGsnj/jGPGeCcLjo7IoxKxF8jH917GMUh0TTYCaRQ34BAdfNzeTBxq/N2xuzqGpFD+63iWEV+Bxeuy0c65sj0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771037575; c=relaxed/simple; bh=EGk4TCrdn3IRKjHAY5Ie9SNff5JA4Z6mIE22vYqG4Uo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QjHINSSWqLtH6bOgH5zWDWJHKFyqkn4ntG+G2GoS+5B239O/z0XYCAxFPwBSyl87vem+pAnY9SIr6N41BW0Bbfsc6mOXxOYmCJVINP54h8DEvDTuQLjavkORmY1+f42wsvcSBLugfUPnyL0MbrojD0+bxAWhOdBGQNs9vzisA/g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eLZM/VBF; arc=none smtp.client-ip=74.125.82.181 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eLZM/VBF" Received: by mail-dy1-f181.google.com with SMTP id 5a478bee46e88-2b740872a01so2932620eec.1 for ; Fri, 13 Feb 2026 18:52:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771037573; x=1771642373; 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=1aI0cVbWKjKmEns6i5xEfUzr9NXilQjLjlKqgC/IsvU=; b=eLZM/VBF9zF/R1qn5gGER867KibPl3en4V2k3Xdh91GgmujoOEM0UCbfr7oXhncoPN bmI4sq+XbhdvxROkXK+iSbKw5uL9xVSjMC4G5vhGOUl1vSJIDWtjEXFglACIzGFQQIIP 6Qf8tMwnnYlHTf4CfJAZT8zJ8Tp7FXEW1rqeEAceFOHxyiGFSs47l1AH646jIfR4Agt5 8vWuOjfCiwRlI7UL7iKe+ic/qkxww+22ldK0LGgGcTs3r9+gR9gcjORqK6nJB6/3Kesc 2P9tuc+ioeo42zqsTls5yN+HQsiSQTWBR2P3w8k5hNXxS1AgfUWYZow8SJigrj/zb0cU Em8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771037573; x=1771642373; 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=1aI0cVbWKjKmEns6i5xEfUzr9NXilQjLjlKqgC/IsvU=; b=tZs+NbQmwrf5zwf9JN/M55QakJeZivm5jwALMRtk+5EKKqGQUxi5gW9FR7my9NrUPD lOLAKm2keAtqW36lXUClB0m05Q42t87PNfMSK+TG5XVtGN5+xMYCbZMNdvdC56bwkMNd kvRIshdPO+zjMpIKQ61g5F4KrxXJFwW0C61GVToRRsYljwAtbdfEa135hT2yNLaT2Bst lqQmlf9HYEvAeqp98HLnslOeIX83wznfqK0CMTdRy7p8X/zG94Ljfzj6NQEFpRFYgLvj oMeWm8uk3FpXQ1mGHM7qMcrS8rv10T5Nbk0OGw9kviS4xKcM9dOfU+omdz8vw5EcqMTT d9Cg== X-Forwarded-Encrypted: i=1; AJvYcCWDe1pwp9Qyb3asokNVOQIGGxMFM0qpGHOgZPPk8ZmdErhafCUul7i1uElEvvoC7fZG4iORWFTr9+C5Me8=@vger.kernel.org X-Gm-Message-State: AOJu0YzRda7Gaxgxa4IAJ4aVC5bucuVbrG1YzP2SXSevu99UWt7uEpWe FpSPv1pnfVLNxRsX0yjhP88NEwzqmRlKzRDrb1R7rpgOoTClE8Y/tEkk X-Gm-Gg: AZuq6aKcwOFB5ZbtBS0crJbANTWZNxrs/kZGDaC5e+uevIelP/OKDKfPNrxT+kcXDUj 4401aEMB2hM2VbUMaSs4bGfi+SMqvf3vBJdWCG0ORwudVaLU7qWkUAJnEt0GM6vt1GlbaedDoDD 7RBaShC5aAXDG5GpMlNiczGbAuczyXPydiSDBozL3+R9GqpOKmRadkLRB6E3wcUYRD32/wXvVXW qIhmPnipIPXZCX+KQuTrAyBVfBp61HiY9W5hxQp07e1U8+EGRmVf5hpOxJ6q1b6o8DBjmuW53gm U2odqyqcafVFwCDKQq3QJQT3xGGlaQebpTS8hjUd7pNHUDHR8how6i6u8qTpK3SzkGwANX8b9NR LEH5ITuTGcZdhTwv+CUKtOm0NcCipyvWb1O11hN2Q9zIKKU7vriLE/OTGO0/FR8MDPyQPhN38uc ySnXDPdGprOsBVWFT2skmp5+q38Qw4QaYCaNCvN1nbZ9lxMldvlgiCn6g0OGueaAM0qtd8S30wQ T6gKXkIL77ODmoVJcHQ5WaX6A== X-Received: by 2002:a05:7301:1e87:b0:2ba:7404:f582 with SMTP id 5a478bee46e88-2babc4be07cmr1771246eec.41.1771037573182; Fri, 13 Feb 2026 18:52:53 -0800 (PST) Received: from dtor-ws.sjc.corp.google.com ([2a00:79e0:2ebe:8:b713:5e7b:5963:d2ad]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2bacb543d4dsm638589eec.7.2026.02.13.18.52.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Feb 2026 18:52:52 -0800 (PST) From: Dmitry Torokhov To: Greg Kroah-Hartman , Danilo Krummrich Cc: "Rafael J. Wysocki" , Arnd Bergmann , Bartosz Golaszewski , Hans de Goede , linux-kernel@vger.kernel.org Subject: [PATCH v2 2/3] driver core: platform: allow attaching software nodes when creating devices Date: Fri, 13 Feb 2026 18:52:44 -0800 Message-ID: <20260214025246.2095239-3-dmitry.torokhov@gmail.com> X-Mailer: git-send-email 2.53.0.310.g728cabbaf7-goog In-Reply-To: <20260214025246.2095239-1-dmitry.torokhov@gmail.com> References: <20260214025246.2095239-1-dmitry.torokhov@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend platform_device_info structure with an optional pointer to a software node to be used as a secondary firmware node for the device being created. If software node has not been registered yet it will be automatically registered. This reduces boilerplate needed when switching legacy board code to static device properties/GPIO references. Signed-off-by: Dmitry Torokhov Reviewed-by: Bartosz Golaszewski --- drivers/base/platform.c | 9 ++++++++- include/linux/platform_device.h | 7 ++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index b45d41b018ca..ec467ccd05b3 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -850,6 +850,9 @@ struct platform_device *platform_device_register_full( int ret; struct platform_device *pdev; =20 + if (pdevinfo->swnode && pdevinfo->properties) + return ERR_PTR(-EINVAL); + pdev =3D platform_device_alloc(pdevinfo->name, pdevinfo->id); if (!pdev) return ERR_PTR(-ENOMEM); @@ -875,7 +878,11 @@ struct platform_device *platform_device_register_full( if (ret) goto err; =20 - if (pdevinfo->properties) { + if (pdevinfo->swnode) { + ret =3D device_add_software_node(&pdev->dev, pdevinfo->swnode); + if (ret) + goto err; + } else if (pdevinfo->properties) { ret =3D device_create_managed_software_node(&pdev->dev, pdevinfo->properties, NULL); if (ret) diff --git a/include/linux/platform_device.h b/include/linux/platform_devic= e.h index 5f54217930e1..754e4bf2771a 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h @@ -136,10 +136,14 @@ extern int platform_add_devices(struct platform_devic= e **, int); * @data: device-specific data for this platform device. * @size_data: size of device-specific data. * @dma_mask: DMA mask for the device. + * @swnode: a secondary software node to be attached to the device. The no= de + * will be automatically registered and its lifetime tied to the platform + * device if it is not registered yet. * @properties: a set of software properties for the device. If provided, * a managed software node will be automatically created and * assigned to the device. The properties array must be terminated - * with a sentinel entry. + * with a sentinel entry. Specifying both @properties and @swnode is not + * allowed. * * This structure is used to hold information needed to create and register * a platform device using platform_device_register_full(). @@ -164,6 +168,7 @@ struct platform_device_info { size_t size_data; u64 dma_mask; =20 + const struct software_node *swnode; const struct property_entry *properties; }; extern struct platform_device *platform_device_register_full( --=20 2.53.0.310.g728cabbaf7-goog