serdev: Add an API to find the serdev controller associated with the devicetree node

Add of_find_serdev_controller_by_node() API to find the serdev controller
device associated with the devicetree node.

Tested-by: Hans de Goede <johannes.goede@oss.qualcomm.com> # ThinkPad T14s gen6 (arm64)
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Reviewed-by: Rob Herring (Arm) <robh@kernel.org>
Link: https://patch.msgid.link/20260326-pci-m2-e-v7-2-43324a7866e6@oss.qualcomm.com
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
master
Manivannan Sadhasivam 2026-03-26 13:36:30 +05:30 committed by Bartosz Golaszewski
parent e7fef85039
commit a2b4814190
2 changed files with 28 additions and 0 deletions

View File

@ -514,6 +514,25 @@ err_free:
}
EXPORT_SYMBOL_GPL(serdev_controller_alloc);
#ifdef CONFIG_OF
/**
* of_find_serdev_controller_by_node() - Find the serdev controller associated
* with the devicetree node
* @node: Devicetree node
*
* Return: Pointer to the serdev controller associated with the node. NULL if
* the controller is not found. Caller is responsible for calling
* serdev_controller_put() to drop the reference.
*/
struct serdev_controller *of_find_serdev_controller_by_node(struct device_node *node)
{
struct device *dev = bus_find_device_by_of_node(&serdev_bus_type, node);
return (dev && dev->type == &serdev_ctrl_type) ? to_serdev_controller(dev) : NULL;
}
EXPORT_SYMBOL_GPL(of_find_serdev_controller_by_node);
#endif
static int of_serdev_register_devices(struct serdev_controller *ctrl)
{
struct device_node *node;

View File

@ -334,4 +334,13 @@ static inline bool serdev_acpi_get_uart_resource(struct acpi_resource *ares,
}
#endif /* CONFIG_ACPI */
#ifdef CONFIG_OF
struct serdev_controller *of_find_serdev_controller_by_node(struct device_node *node);
#else
static inline struct serdev_controller *of_find_serdev_controller_by_node(struct device_node *node)
{
return NULL;
}
#endif /* CONFIG_OF */
#endif /*_LINUX_SERDEV_H */