The fbtft core and sysfs implementation unconditionally dereference fb_info->dev and register sysfs attributes. When FB_DEVICE=n, these fields are unavailable, leading to build failures.
This patch wraps all sysfs attribute creation/removal and dev_dbg/dev_info logging in #ifdef CONFIG_FB_DEVICE, with pr_*() fallbacks for the non-FB_DEVICE case. This makes fbtft fully buildable when FB_DEVICE is disabled. Signed-off-by: Chintan Patel <[email protected]> --- drivers/staging/fbtft/fbtft-core.c | 20 ++++++++++++++++++-- drivers/staging/fbtft/fbtft-sysfs.c | 8 ++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c index 9e7b84071174..dc967bdeabe8 100644 --- a/drivers/staging/fbtft/fbtft-core.c +++ b/drivers/staging/fbtft/fbtft-core.c @@ -365,9 +365,14 @@ static int fbtft_fb_setcolreg(unsigned int regno, unsigned int red, unsigned int val; int ret = 1; +#ifdef CONFIG_FB_DEVICE dev_dbg(info->dev, "%s(regno=%u, red=0x%X, green=0x%X, blue=0x%X, trans=0x%X)\n", __func__, regno, red, green, blue, transp); +#else + pr_debug("%s(regno=%u, red=0x%X, green=0x%X, blue=0x%X, trans=0x%X)\n", + __func__, regno, red, green, blue, transp); +#endif switch (info->fix.visual) { case FB_VISUAL_TRUECOLOR: @@ -391,8 +396,11 @@ static int fbtft_fb_blank(int blank, struct fb_info *info) struct fbtft_par *par = info->par; int ret = -EINVAL; - dev_dbg(info->dev, "%s(blank=%d)\n", - __func__, blank); +#ifdef CONFIG_FB_DEVICE + dev_dbg(info->dev, "%s(blank=%d)\n", __func__, blank); +#else + pr_debug("%s(blank=%d)\n", __func__, blank); +#endif if (!par->fbtftops.blank) return ret; @@ -793,6 +801,8 @@ int fbtft_register_framebuffer(struct fb_info *fb_info) if (spi) sprintf(text2, ", spi%d.%d at %d MHz", spi->controller->bus_num, spi_get_chipselect(spi, 0), spi->max_speed_hz / 1000000); + +#ifdef CONFIG_FB_DEVICE dev_info(fb_info->dev, "%s frame buffer, %dx%d, %d KiB video memory%s, fps=%lu%s\n", fb_info->fix.id, fb_info->var.xres, fb_info->var.yres, @@ -804,6 +814,12 @@ int fbtft_register_framebuffer(struct fb_info *fb_info) fb_info->bl_dev->props.power = BACKLIGHT_POWER_ON; fb_info->bl_dev->ops->update_status(fb_info->bl_dev); } +#else + pr_info("%s frame buffer, %dx%d, %d KiB video memory%s, fps=%lu%s\n", + fb_info->fix.id, fb_info->var.xres, fb_info->var.yres, + fb_info->fix.smem_len >> 10, text1, + HZ / fb_info->fbdefio->delay, text2); +#endif return 0; diff --git a/drivers/staging/fbtft/fbtft-sysfs.c b/drivers/staging/fbtft/fbtft-sysfs.c index e45c90a03a90..944f74f592d0 100644 --- a/drivers/staging/fbtft/fbtft-sysfs.c +++ b/drivers/staging/fbtft/fbtft-sysfs.c @@ -89,6 +89,7 @@ int fbtft_gamma_parse_str(struct fbtft_par *par, u32 *curves, return ret; } +#ifdef CONFIG_FB_DEVICE static ssize_t sprintf_gamma(struct fbtft_par *par, u32 *curves, char *buf) { @@ -145,6 +146,7 @@ static ssize_t show_gamma_curve(struct device *device, static struct device_attribute gamma_device_attrs[] = { __ATTR(gamma, 0660, show_gamma_curve, store_gamma_curve), }; +#endif void fbtft_expand_debug_value(unsigned long *debug) { @@ -173,6 +175,7 @@ void fbtft_expand_debug_value(unsigned long *debug) } } +#ifdef CONFIG_FB_DEVICE static ssize_t store_debug(struct device *device, struct device_attribute *attr, const char *buf, size_t count) @@ -200,17 +203,22 @@ static ssize_t show_debug(struct device *device, static struct device_attribute debug_device_attr = __ATTR(debug, 0660, show_debug, store_debug); +#endif void fbtft_sysfs_init(struct fbtft_par *par) { +#ifdef CONFIG_FB_DEVICE device_create_file(par->info->dev, &debug_device_attr); if (par->gamma.curves && par->fbtftops.set_gamma) device_create_file(par->info->dev, &gamma_device_attrs[0]); +#endif } void fbtft_sysfs_exit(struct fbtft_par *par) { +#ifdef CONFIG_FB_DEVICE device_remove_file(par->info->dev, &debug_device_attr); if (par->gamma.curves && par->fbtftops.set_gamma) device_remove_file(par->info->dev, &gamma_device_attrs[0]); +#endif } -- 2.43.0
