omapfb provides several sysfs interfaces for framebuffer configuration
and debugging, but these are not required for the core driver.

Remove the hard dependency on CONFIG_FB_DEVICE and make sysfs support
optional by using dev_of_fbinfo() to obtain the backing device at runtime.
When FB_DEVICE is disabled, sysfs operations are skipped while the code
still builds and is type-checked.

v2:
- Replace CONFIG_FB_DEVICE ifdefs and stubs with runtime checks
- Use dev_of_fbinfo() to skip sysfs when unavailable

Suggested-by: Helge Deller <[email protected]>
Signed-off-by: Chintan Patel <[email protected]>
---
 drivers/video/fbdev/omap2/omapfb/Kconfig        |  3 ++-
 drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c | 16 ++++++++++++----
 2 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/video/fbdev/omap2/omapfb/Kconfig 
b/drivers/video/fbdev/omap2/omapfb/Kconfig
index f4cdf999a080..2d20e79adefc 100644
--- a/drivers/video/fbdev/omap2/omapfb/Kconfig
+++ b/drivers/video/fbdev/omap2/omapfb/Kconfig
@@ -5,7 +5,6 @@ config OMAP2_VRFB
 menuconfig FB_OMAP2
        tristate "OMAP2+ frame buffer support"
        depends on FB
-       depends on FB_DEVICE
        depends on DRM_OMAP = n
        depends on GPIOLIB
        select FB_OMAP2_DSS
@@ -13,6 +12,8 @@ menuconfig FB_OMAP2
        select FB_IOMEM_HELPERS
        help
          Frame buffer driver for OMAP2+ based boards.
+         FB_DEVICE is not required, but if enabled, provides sysfs interface
+         for framebuffer configuration and debugging.
 
 if FB_OMAP2
 
diff --git a/drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c 
b/drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
index 831b2c2fbdf9..ef555dd598aa 100644
--- a/drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
+++ b/drivers/video/fbdev/omap2/omapfb/omapfb-sysfs.c
@@ -558,10 +558,14 @@ int omapfb_create_sysfs(struct omapfb2_device *fbdev)
 
        DBG("create sysfs for fbs\n");
        for (i = 0; i < fbdev->num_fbs; i++) {
+               struct device *dev = dev_of_fbinfo(fbdev->fbs[i]);
                int t;
+
+               if (!dev)
+                       continue;
+
                for (t = 0; t < ARRAY_SIZE(omapfb_attrs); t++) {
-                       r = device_create_file(fbdev->fbs[i]->dev,
-                                       &omapfb_attrs[t]);
+                       r = device_create_file(dev, &omapfb_attrs[t]);
 
                        if (r) {
                                dev_err(fbdev->dev, "failed to create sysfs "
@@ -580,9 +584,13 @@ void omapfb_remove_sysfs(struct omapfb2_device *fbdev)
 
        DBG("remove sysfs for fbs\n");
        for (i = 0; i < fbdev->num_fbs; i++) {
+               struct device *dev = dev_of_fbinfo(fbdev->fbs[i]);
+
+               if (!dev)
+                       continue;
+
                for (t = 0; t < ARRAY_SIZE(omapfb_attrs); t++)
-                       device_remove_file(fbdev->fbs[i]->dev,
-                                       &omapfb_attrs[t]);
+                       device_remove_file(dev, &omapfb_attrs[t]);
        }
 }
 
-- 
2.43.0

Reply via email to