media: mc: Provide a helper for setting bus_info field
authorSakari Ailus <sakari.ailus@linux.intel.com>
Sat, 22 Jan 2022 11:25:57 +0000 (11:25 +0000)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Sun, 24 Apr 2022 07:04:27 +0000 (08:04 +0100)
The bus_info or a similar field exists in a lot of structs, yet drivers
tend to set the value of that field by themselves in a determinable way.
Thus provide a helper for doing this. To be used in subsequent patches.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
include/media/media-device.h

index bc015d2..f0baee6 100644 (file)
 
 #include <linux/list.h>
 #include <linux/mutex.h>
+#include <linux/pci.h>
+#include <linux/platform_device.h>
 
 #include <media/media-devnode.h>
 #include <media/media-entity.h>
 
 struct ida;
-struct device;
 struct media_device;
 
 /**
@@ -181,8 +182,7 @@ struct media_device {
        atomic_t request_id;
 };
 
-/* We don't need to include pci.h or usb.h here */
-struct pci_dev;
+/* We don't need to include usb.h here */
 struct usb_device;
 
 #ifdef CONFIG_MEDIA_CONTROLLER
@@ -502,4 +502,27 @@ static inline void __media_device_usb_init(struct media_device *mdev,
 #define media_device_usb_init(mdev, udev, name) \
        __media_device_usb_init(mdev, udev, name, KBUILD_MODNAME)
 
+/**
+ * media_set_bus_info() - Set bus_info field
+ *
+ * @bus_info:          Variable where to write the bus info (char array)
+ * @bus_info_size:     Length of the bus_info
+ * @dev:               Related struct device
+ *
+ * Sets bus information based on &dev. This is currently done for PCI and
+ * platform devices. dev is required to be non-NULL for this to happen.
+ *
+ * This function is not meant to be called from drivers.
+ */
+static inline void
+media_set_bus_info(char *bus_info, size_t bus_info_size, struct device *dev)
+{
+       if (!dev)
+               strscpy(bus_info, "no bus info", bus_info_size);
+       else if (dev_is_platform(dev))
+               snprintf(bus_info, bus_info_size, "platform:%s", dev_name(dev));
+       else if (dev_is_pci(dev))
+               snprintf(bus_info, bus_info_size, "PCI:%s", dev_name(dev));
+}
+
 #endif