diff mbox series

staging: fbtft: fix checkpatch.pl struct should normally be const

Message ID 20220519172503.10821-1-me@wantyapps.xyz (mailing list archive)
State Handled Elsewhere
Headers show
Series staging: fbtft: fix checkpatch.pl struct should normally be const | expand

Commit Message

Uri Arev May 19, 2022, 5:25 p.m. UTC
This simple patch fixes a checkpatch.pl warning in `fbtft/fbtft-core.c`.

Reported by Checkpatch:
WARNING: struct fb_ops should normally be const

Signed-off-by: Uri Arev <me@wantyapps.xyz>
---
 drivers/staging/fbtft/fbtft-core.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Andy Shevchenko May 19, 2022, 8:09 p.m. UTC | #1
On Thu, May 19, 2022 at 08:25:01PM +0300, Uri Arev wrote:
> This simple patch fixes a checkpatch.pl warning in `fbtft/fbtft-core.c`.
> 
> Reported by Checkpatch:
> WARNING: struct fb_ops should normally be const

...

> -	fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
> +	const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);

Why?
kernel test robot May 19, 2022, 9:25 p.m. UTC | #2
Hi Uri,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on staging/staging-testing]

url:    https://github.com/intel-lab-lkp/linux/commits/Uri-Arev/staging-fbtft-fix-checkpatch-pl-struct-should-normally-be-const/20220520-012948
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 4d0cc9e0e53e9946d7b8dc58279c62dfa7a2191b
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20220520/202205200517.BCEmgrh4-lkp@intel.com/config)
compiler: alpha-linux-gcc (GCC) 11.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/intel-lab-lkp/linux/commit/d26e139bfc29011b0a147df71f0b91485189c66e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Uri-Arev/staging-fbtft-fix-checkpatch-pl-struct-should-normally-be-const/20220520-012948
        git checkout d26e139bfc29011b0a147df71f0b91485189c66e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.3.0 make.cross W=1 O=build_dir ARCH=alpha SHELL=/bin/bash drivers/staging/fbtft/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>):

   drivers/staging/fbtft/fbtft-core.c: In function 'fbtft_framebuffer_alloc':
   drivers/staging/fbtft/fbtft-core.c:617:15: error: type defaults to 'int' in declaration of 'fbops' [-Werror=implicit-int]
     617 |         const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
         |               ^~~~~
   drivers/staging/fbtft/fbtft-core.c:617:15: error: conflicting type qualifiers for 'fbops'
   drivers/staging/fbtft/fbtft-core.c:542:30: note: previous definition of 'fbops' with type 'const struct fb_ops *'
     542 |         const struct fb_ops *fbops = NULL;
         |                              ^~~~~
>> drivers/staging/fbtft/fbtft-core.c:617:23: warning: initialization of 'int' from 'void *' makes integer from pointer without a cast [-Wint-conversion]
     617 |         const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
         |                       ^~~~~~~~~~~~
>> drivers/staging/fbtft/fbtft-core.c:617:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     617 |         const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
         |         ^~~~~
>> drivers/staging/fbtft/fbtft-core.c:644:21: warning: assignment to 'const struct fb_ops *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     644 |         info->fbops = fbops;
         |                     ^
   drivers/staging/fbtft/fbtft-core.c:647:14: error: invalid type argument of '->' (have 'int')
     647 |         fbops->owner        =      dev->driver->owner;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:648:14: error: invalid type argument of '->' (have 'int')
     648 |         fbops->fb_read      =      fb_sys_read;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:649:14: error: invalid type argument of '->' (have 'int')
     649 |         fbops->fb_write     =      fbtft_fb_write;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:650:14: error: invalid type argument of '->' (have 'int')
     650 |         fbops->fb_fillrect  =      fbtft_fb_fillrect;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:651:14: error: invalid type argument of '->' (have 'int')
     651 |         fbops->fb_copyarea  =      fbtft_fb_copyarea;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:652:14: error: invalid type argument of '->' (have 'int')
     652 |         fbops->fb_imageblit =      fbtft_fb_imageblit;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:653:14: error: invalid type argument of '->' (have 'int')
     653 |         fbops->fb_setcolreg =      fbtft_fb_setcolreg;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:654:14: error: invalid type argument of '->' (have 'int')
     654 |         fbops->fb_blank     =      fbtft_fb_blank;
         |              ^~
   cc1: some warnings being treated as errors


vim +617 drivers/staging/fbtft/fbtft-core.c

   516	
   517	/**
   518	 * fbtft_framebuffer_alloc - creates a new frame buffer info structure
   519	 *
   520	 * @display: pointer to structure describing the display
   521	 * @dev: pointer to the device for this fb, this can be NULL
   522	 * @pdata: platform data for the display in use
   523	 *
   524	 * Creates a new frame buffer info structure.
   525	 *
   526	 * Also creates and populates the following structures:
   527	 *   info->fbops
   528	 *   info->fbdefio
   529	 *   info->pseudo_palette
   530	 *   par->fbtftops
   531	 *   par->txbuf
   532	 *
   533	 * Returns the new structure, or NULL if an error occurred.
   534	 *
   535	 */
   536	struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
   537						struct device *dev,
   538						struct fbtft_platform_data *pdata)
   539	{
   540		struct fb_info *info;
   541		struct fbtft_par *par;
   542		const struct fb_ops *fbops = NULL;
   543		struct fb_deferred_io *fbdefio = NULL;
   544		u8 *vmem = NULL;
   545		void *txbuf = NULL;
   546		void *buf = NULL;
   547		unsigned int width;
   548		unsigned int height;
   549		int txbuflen = display->txbuflen;
   550		unsigned int bpp = display->bpp;
   551		unsigned int fps = display->fps;
   552		int vmem_size;
   553		const s16 *init_sequence = display->init_sequence;
   554		char *gamma = display->gamma;
   555		u32 *gamma_curves = NULL;
   556	
   557		/* sanity check */
   558		if (display->gamma_num * display->gamma_len >
   559				FBTFT_GAMMA_MAX_VALUES_TOTAL) {
   560			dev_err(dev, "FBTFT_GAMMA_MAX_VALUES_TOTAL=%d is exceeded\n",
   561				FBTFT_GAMMA_MAX_VALUES_TOTAL);
   562			return NULL;
   563		}
   564	
   565		/* defaults */
   566		if (!fps)
   567			fps = 20;
   568		if (!bpp)
   569			bpp = 16;
   570	
   571		if (!pdata) {
   572			dev_err(dev, "platform data is missing\n");
   573			return NULL;
   574		}
   575	
   576		/* override driver values? */
   577		if (pdata->fps)
   578			fps = pdata->fps;
   579		if (pdata->txbuflen)
   580			txbuflen = pdata->txbuflen;
   581		if (pdata->display.init_sequence)
   582			init_sequence = pdata->display.init_sequence;
   583		if (pdata->gamma)
   584			gamma = pdata->gamma;
   585		if (pdata->display.debug)
   586			display->debug = pdata->display.debug;
   587		if (pdata->display.backlight)
   588			display->backlight = pdata->display.backlight;
   589		if (pdata->display.width)
   590			display->width = pdata->display.width;
   591		if (pdata->display.height)
   592			display->height = pdata->display.height;
   593		if (pdata->display.buswidth)
   594			display->buswidth = pdata->display.buswidth;
   595		if (pdata->display.regwidth)
   596			display->regwidth = pdata->display.regwidth;
   597	
   598		display->debug |= debug;
   599		fbtft_expand_debug_value(&display->debug);
   600	
   601		switch (pdata->rotate) {
   602		case 90:
   603		case 270:
   604			width =  display->height;
   605			height = display->width;
   606			break;
   607		default:
   608			width =  display->width;
   609			height = display->height;
   610		}
   611	
   612		vmem_size = display->width * display->height * bpp / 8;
   613		vmem = vzalloc(vmem_size);
   614		if (!vmem)
   615			goto alloc_fail;
   616	
 > 617		const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
   618		if (!fbops)
   619			goto alloc_fail;
   620	
   621		fbdefio = devm_kzalloc(dev, sizeof(struct fb_deferred_io), GFP_KERNEL);
   622		if (!fbdefio)
   623			goto alloc_fail;
   624	
   625		buf = devm_kzalloc(dev, 128, GFP_KERNEL);
   626		if (!buf)
   627			goto alloc_fail;
   628	
   629		if (display->gamma_num && display->gamma_len) {
   630			gamma_curves = devm_kcalloc(dev,
   631						    display->gamma_num *
   632						    display->gamma_len,
   633						    sizeof(gamma_curves[0]),
   634						    GFP_KERNEL);
   635			if (!gamma_curves)
   636				goto alloc_fail;
   637		}
   638	
   639		info = framebuffer_alloc(sizeof(struct fbtft_par), dev);
   640		if (!info)
   641			goto alloc_fail;
   642	
   643		info->screen_buffer = vmem;
 > 644		info->fbops = fbops;
   645		info->fbdefio = fbdefio;
   646	
   647		fbops->owner        =      dev->driver->owner;
   648		fbops->fb_read      =      fb_sys_read;
   649		fbops->fb_write     =      fbtft_fb_write;
   650		fbops->fb_fillrect  =      fbtft_fb_fillrect;
   651		fbops->fb_copyarea  =      fbtft_fb_copyarea;
   652		fbops->fb_imageblit =      fbtft_fb_imageblit;
   653		fbops->fb_setcolreg =      fbtft_fb_setcolreg;
   654		fbops->fb_blank     =      fbtft_fb_blank;
   655	
   656		fbdefio->delay =           HZ / fps;
   657		fbdefio->sort_pagelist =   true;
   658		fbdefio->deferred_io =     fbtft_deferred_io;
   659		fb_deferred_io_init(info);
   660	
   661		snprintf(info->fix.id, sizeof(info->fix.id), "%s", dev->driver->name);
   662		info->fix.type =           FB_TYPE_PACKED_PIXELS;
   663		info->fix.visual =         FB_VISUAL_TRUECOLOR;
   664		info->fix.xpanstep =	   0;
   665		info->fix.ypanstep =	   0;
   666		info->fix.ywrapstep =	   0;
   667		info->fix.line_length =    width * bpp / 8;
   668		info->fix.accel =          FB_ACCEL_NONE;
   669		info->fix.smem_len =       vmem_size;
   670	
   671		info->var.rotate =         pdata->rotate;
   672		info->var.xres =           width;
   673		info->var.yres =           height;
   674		info->var.xres_virtual =   info->var.xres;
   675		info->var.yres_virtual =   info->var.yres;
   676		info->var.bits_per_pixel = bpp;
   677		info->var.nonstd =         1;
   678	
   679		/* RGB565 */
   680		info->var.red.offset =     11;
   681		info->var.red.length =     5;
   682		info->var.green.offset =   5;
   683		info->var.green.length =   6;
   684		info->var.blue.offset =    0;
   685		info->var.blue.length =    5;
   686		info->var.transp.offset =  0;
   687		info->var.transp.length =  0;
   688	
   689		info->flags =              FBINFO_FLAG_DEFAULT | FBINFO_VIRTFB;
   690	
   691		par = info->par;
   692		par->info = info;
   693		par->pdata = pdata;
   694		par->debug = display->debug;
   695		par->buf = buf;
   696		spin_lock_init(&par->dirty_lock);
   697		par->bgr = pdata->bgr;
   698		par->startbyte = pdata->startbyte;
   699		par->init_sequence = init_sequence;
   700		par->gamma.curves = gamma_curves;
   701		par->gamma.num_curves = display->gamma_num;
   702		par->gamma.num_values = display->gamma_len;
   703		mutex_init(&par->gamma.lock);
   704		info->pseudo_palette = par->pseudo_palette;
   705	
   706		if (par->gamma.curves && gamma) {
   707			if (fbtft_gamma_parse_str(par, par->gamma.curves, gamma,
   708						  strlen(gamma)))
   709				goto release_framebuf;
   710		}
   711	
   712		/* Transmit buffer */
   713		if (txbuflen == -1)
   714			txbuflen = vmem_size + 2; /* add in case startbyte is used */
   715		if (txbuflen >= vmem_size + 2)
   716			txbuflen = 0;
   717
kernel test robot May 20, 2022, 12:41 a.m. UTC | #3
Hi Uri,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]

url:    https://github.com/intel-lab-lkp/linux/commits/Uri-Arev/staging-fbtft-fix-checkpatch-pl-struct-should-normally-be-const/20220520-012948
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 4d0cc9e0e53e9946d7b8dc58279c62dfa7a2191b
config: arm64-randconfig-r011-20220519 (https://download.01.org/0day-ci/archive/20220520/202205200821.nJQ0IfFt-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project e00cbbec06c08dc616a0d52a20f678b8fbd4e304)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm64 cross compiling tool for clang build
        # apt-get install binutils-aarch64-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/d26e139bfc29011b0a147df71f0b91485189c66e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Uri-Arev/staging-fbtft-fix-checkpatch-pl-struct-should-normally-be-const/20220520-012948
        git checkout d26e139bfc29011b0a147df71f0b91485189c66e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=arm64 SHELL=/bin/bash drivers/staging/fbtft/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All error/warnings (new ones prefixed by >>):

   drivers/staging/fbtft/fbtft-core.c:332:6: warning: variable 'count' set but not used [-Wunused-but-set-variable]
           int count = 0;
               ^
>> drivers/staging/fbtft/fbtft-core.c:617:8: error: type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int [-Wimplicit-int]
           const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
           ~~~~~ ^
           int
>> drivers/staging/fbtft/fbtft-core.c:617:8: error: redefinition of 'fbops' with a different type: 'const int' vs 'const struct fb_ops *'
   drivers/staging/fbtft/fbtft-core.c:542:23: note: previous definition is here
           const struct fb_ops *fbops = NULL;
                                ^
>> drivers/staging/fbtft/fbtft-core.c:647:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->owner        =      dev->driver->owner;
           ~~~~~~~~~~~~        ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:648:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_read      =      fb_sys_read;
           ~~~~~~~~~~~~~~      ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:649:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_write     =      fbtft_fb_write;
           ~~~~~~~~~~~~~~~     ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:650:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_fillrect  =      fbtft_fb_fillrect;
           ~~~~~~~~~~~~~~~~~~  ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:651:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_copyarea  =      fbtft_fb_copyarea;
           ~~~~~~~~~~~~~~~~~~  ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:652:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_imageblit =      fbtft_fb_imageblit;
           ~~~~~~~~~~~~~~~~~~~ ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:653:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_setcolreg =      fbtft_fb_setcolreg;
           ~~~~~~~~~~~~~~~~~~~ ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:654:22: error: cannot assign to variable 'fbops' with const-qualified type 'const struct fb_ops *'
           fbops->fb_blank     =      fbtft_fb_blank;
           ~~~~~~~~~~~~~~~     ^
   drivers/staging/fbtft/fbtft-core.c:542:23: note: variable 'fbops' declared const here
           const struct fb_ops *fbops = NULL;
           ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
>> drivers/staging/fbtft/fbtft-core.c:617:8: warning: mixing declarations and code is incompatible with standards before C99 [-Wdeclaration-after-statement]
           const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
                 ^
   2 warnings and 10 errors generated.


vim +/int +617 drivers/staging/fbtft/fbtft-core.c

   516	
   517	/**
   518	 * fbtft_framebuffer_alloc - creates a new frame buffer info structure
   519	 *
   520	 * @display: pointer to structure describing the display
   521	 * @dev: pointer to the device for this fb, this can be NULL
   522	 * @pdata: platform data for the display in use
   523	 *
   524	 * Creates a new frame buffer info structure.
   525	 *
   526	 * Also creates and populates the following structures:
   527	 *   info->fbops
   528	 *   info->fbdefio
   529	 *   info->pseudo_palette
   530	 *   par->fbtftops
   531	 *   par->txbuf
   532	 *
   533	 * Returns the new structure, or NULL if an error occurred.
   534	 *
   535	 */
   536	struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
   537						struct device *dev,
   538						struct fbtft_platform_data *pdata)
   539	{
   540		struct fb_info *info;
   541		struct fbtft_par *par;
   542		const struct fb_ops *fbops = NULL;
   543		struct fb_deferred_io *fbdefio = NULL;
   544		u8 *vmem = NULL;
   545		void *txbuf = NULL;
   546		void *buf = NULL;
   547		unsigned int width;
   548		unsigned int height;
   549		int txbuflen = display->txbuflen;
   550		unsigned int bpp = display->bpp;
   551		unsigned int fps = display->fps;
   552		int vmem_size;
   553		const s16 *init_sequence = display->init_sequence;
   554		char *gamma = display->gamma;
   555		u32 *gamma_curves = NULL;
   556	
   557		/* sanity check */
   558		if (display->gamma_num * display->gamma_len >
   559				FBTFT_GAMMA_MAX_VALUES_TOTAL) {
   560			dev_err(dev, "FBTFT_GAMMA_MAX_VALUES_TOTAL=%d is exceeded\n",
   561				FBTFT_GAMMA_MAX_VALUES_TOTAL);
   562			return NULL;
   563		}
   564	
   565		/* defaults */
   566		if (!fps)
   567			fps = 20;
   568		if (!bpp)
   569			bpp = 16;
   570	
   571		if (!pdata) {
   572			dev_err(dev, "platform data is missing\n");
   573			return NULL;
   574		}
   575	
   576		/* override driver values? */
   577		if (pdata->fps)
   578			fps = pdata->fps;
   579		if (pdata->txbuflen)
   580			txbuflen = pdata->txbuflen;
   581		if (pdata->display.init_sequence)
   582			init_sequence = pdata->display.init_sequence;
   583		if (pdata->gamma)
   584			gamma = pdata->gamma;
   585		if (pdata->display.debug)
   586			display->debug = pdata->display.debug;
   587		if (pdata->display.backlight)
   588			display->backlight = pdata->display.backlight;
   589		if (pdata->display.width)
   590			display->width = pdata->display.width;
   591		if (pdata->display.height)
   592			display->height = pdata->display.height;
   593		if (pdata->display.buswidth)
   594			display->buswidth = pdata->display.buswidth;
   595		if (pdata->display.regwidth)
   596			display->regwidth = pdata->display.regwidth;
   597	
   598		display->debug |= debug;
   599		fbtft_expand_debug_value(&display->debug);
   600	
   601		switch (pdata->rotate) {
   602		case 90:
   603		case 270:
   604			width =  display->height;
   605			height = display->width;
   606			break;
   607		default:
   608			width =  display->width;
   609			height = display->height;
   610		}
   611	
   612		vmem_size = display->width * display->height * bpp / 8;
   613		vmem = vzalloc(vmem_size);
   614		if (!vmem)
   615			goto alloc_fail;
   616	
 > 617		const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
   618		if (!fbops)
   619			goto alloc_fail;
   620	
   621		fbdefio = devm_kzalloc(dev, sizeof(struct fb_deferred_io), GFP_KERNEL);
   622		if (!fbdefio)
   623			goto alloc_fail;
   624	
   625		buf = devm_kzalloc(dev, 128, GFP_KERNEL);
   626		if (!buf)
   627			goto alloc_fail;
   628	
   629		if (display->gamma_num && display->gamma_len) {
   630			gamma_curves = devm_kcalloc(dev,
   631						    display->gamma_num *
   632						    display->gamma_len,
   633						    sizeof(gamma_curves[0]),
   634						    GFP_KERNEL);
   635			if (!gamma_curves)
   636				goto alloc_fail;
   637		}
   638	
   639		info = framebuffer_alloc(sizeof(struct fbtft_par), dev);
   640		if (!info)
   641			goto alloc_fail;
   642	
   643		info->screen_buffer = vmem;
   644		info->fbops = fbops;
   645		info->fbdefio = fbdefio;
   646	
 > 647		fbops->owner        =      dev->driver->owner;
   648		fbops->fb_read      =      fb_sys_read;
   649		fbops->fb_write     =      fbtft_fb_write;
   650		fbops->fb_fillrect  =      fbtft_fb_fillrect;
   651		fbops->fb_copyarea  =      fbtft_fb_copyarea;
   652		fbops->fb_imageblit =      fbtft_fb_imageblit;
   653		fbops->fb_setcolreg =      fbtft_fb_setcolreg;
   654		fbops->fb_blank     =      fbtft_fb_blank;
   655	
   656		fbdefio->delay =           HZ / fps;
   657		fbdefio->sort_pagelist =   true;
   658		fbdefio->deferred_io =     fbtft_deferred_io;
   659		fb_deferred_io_init(info);
   660	
   661		snprintf(info->fix.id, sizeof(info->fix.id), "%s", dev->driver->name);
   662		info->fix.type =           FB_TYPE_PACKED_PIXELS;
   663		info->fix.visual =         FB_VISUAL_TRUECOLOR;
   664		info->fix.xpanstep =	   0;
   665		info->fix.ypanstep =	   0;
   666		info->fix.ywrapstep =	   0;
   667		info->fix.line_length =    width * bpp / 8;
   668		info->fix.accel =          FB_ACCEL_NONE;
   669		info->fix.smem_len =       vmem_size;
   670	
   671		info->var.rotate =         pdata->rotate;
   672		info->var.xres =           width;
   673		info->var.yres =           height;
   674		info->var.xres_virtual =   info->var.xres;
   675		info->var.yres_virtual =   info->var.yres;
   676		info->var.bits_per_pixel = bpp;
   677		info->var.nonstd =         1;
   678	
   679		/* RGB565 */
   680		info->var.red.offset =     11;
   681		info->var.red.length =     5;
   682		info->var.green.offset =   5;
   683		info->var.green.length =   6;
   684		info->var.blue.offset =    0;
   685		info->var.blue.length =    5;
   686		info->var.transp.offset =  0;
   687		info->var.transp.length =  0;
   688	
   689		info->flags =              FBINFO_FLAG_DEFAULT | FBINFO_VIRTFB;
   690	
   691		par = info->par;
   692		par->info = info;
   693		par->pdata = pdata;
   694		par->debug = display->debug;
   695		par->buf = buf;
   696		spin_lock_init(&par->dirty_lock);
   697		par->bgr = pdata->bgr;
   698		par->startbyte = pdata->startbyte;
   699		par->init_sequence = init_sequence;
   700		par->gamma.curves = gamma_curves;
   701		par->gamma.num_curves = display->gamma_num;
   702		par->gamma.num_values = display->gamma_len;
   703		mutex_init(&par->gamma.lock);
   704		info->pseudo_palette = par->pseudo_palette;
   705	
   706		if (par->gamma.curves && gamma) {
   707			if (fbtft_gamma_parse_str(par, par->gamma.curves, gamma,
   708						  strlen(gamma)))
   709				goto release_framebuf;
   710		}
   711	
   712		/* Transmit buffer */
   713		if (txbuflen == -1)
   714			txbuflen = vmem_size + 2; /* add in case startbyte is used */
   715		if (txbuflen >= vmem_size + 2)
   716			txbuflen = 0;
   717
kernel test robot May 20, 2022, 1:34 a.m. UTC | #4
Hi Uri,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on staging/staging-testing]

url:    https://github.com/intel-lab-lkp/linux/commits/Uri-Arev/staging-fbtft-fix-checkpatch-pl-struct-should-normally-be-const/20220520-012948
base:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 4d0cc9e0e53e9946d7b8dc58279c62dfa7a2191b
config: x86_64-randconfig-a013 (https://download.01.org/0day-ci/archive/20220520/202205200955.wBcgkXij-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.3.0-1) 11.3.0
reproduce (this is a W=1 build):
        # https://github.com/intel-lab-lkp/linux/commit/d26e139bfc29011b0a147df71f0b91485189c66e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Uri-Arev/staging-fbtft-fix-checkpatch-pl-struct-should-normally-be-const/20220520-012948
        git checkout d26e139bfc29011b0a147df71f0b91485189c66e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/staging/fbtft/fbtft-core.c: In function 'fbtft_framebuffer_alloc':
>> drivers/staging/fbtft/fbtft-core.c:617:15: error: type defaults to 'int' in declaration of 'fbops' [-Werror=implicit-int]
     617 |         const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
         |               ^~~~~
>> drivers/staging/fbtft/fbtft-core.c:617:15: error: conflicting type qualifiers for 'fbops'
   drivers/staging/fbtft/fbtft-core.c:542:30: note: previous definition of 'fbops' with type 'const struct fb_ops *'
     542 |         const struct fb_ops *fbops = NULL;
         |                              ^~~~~
   drivers/staging/fbtft/fbtft-core.c:617:23: warning: initialization of 'int' from 'void *' makes integer from pointer without a cast [-Wint-conversion]
     617 |         const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
         |                       ^~~~~~~~~~~~
   drivers/staging/fbtft/fbtft-core.c:617:9: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
     617 |         const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
         |         ^~~~~
   drivers/staging/fbtft/fbtft-core.c:644:21: warning: assignment to 'const struct fb_ops *' from 'int' makes pointer from integer without a cast [-Wint-conversion]
     644 |         info->fbops = fbops;
         |                     ^
>> drivers/staging/fbtft/fbtft-core.c:647:14: error: invalid type argument of '->' (have 'int')
     647 |         fbops->owner        =      dev->driver->owner;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:648:14: error: invalid type argument of '->' (have 'int')
     648 |         fbops->fb_read      =      fb_sys_read;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:649:14: error: invalid type argument of '->' (have 'int')
     649 |         fbops->fb_write     =      fbtft_fb_write;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:650:14: error: invalid type argument of '->' (have 'int')
     650 |         fbops->fb_fillrect  =      fbtft_fb_fillrect;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:651:14: error: invalid type argument of '->' (have 'int')
     651 |         fbops->fb_copyarea  =      fbtft_fb_copyarea;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:652:14: error: invalid type argument of '->' (have 'int')
     652 |         fbops->fb_imageblit =      fbtft_fb_imageblit;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:653:14: error: invalid type argument of '->' (have 'int')
     653 |         fbops->fb_setcolreg =      fbtft_fb_setcolreg;
         |              ^~
   drivers/staging/fbtft/fbtft-core.c:654:14: error: invalid type argument of '->' (have 'int')
     654 |         fbops->fb_blank     =      fbtft_fb_blank;
         |              ^~
   cc1: some warnings being treated as errors


vim +617 drivers/staging/fbtft/fbtft-core.c

   516	
   517	/**
   518	 * fbtft_framebuffer_alloc - creates a new frame buffer info structure
   519	 *
   520	 * @display: pointer to structure describing the display
   521	 * @dev: pointer to the device for this fb, this can be NULL
   522	 * @pdata: platform data for the display in use
   523	 *
   524	 * Creates a new frame buffer info structure.
   525	 *
   526	 * Also creates and populates the following structures:
   527	 *   info->fbops
   528	 *   info->fbdefio
   529	 *   info->pseudo_palette
   530	 *   par->fbtftops
   531	 *   par->txbuf
   532	 *
   533	 * Returns the new structure, or NULL if an error occurred.
   534	 *
   535	 */
   536	struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
   537						struct device *dev,
   538						struct fbtft_platform_data *pdata)
   539	{
   540		struct fb_info *info;
   541		struct fbtft_par *par;
   542		const struct fb_ops *fbops = NULL;
   543		struct fb_deferred_io *fbdefio = NULL;
   544		u8 *vmem = NULL;
   545		void *txbuf = NULL;
   546		void *buf = NULL;
   547		unsigned int width;
   548		unsigned int height;
   549		int txbuflen = display->txbuflen;
   550		unsigned int bpp = display->bpp;
   551		unsigned int fps = display->fps;
   552		int vmem_size;
   553		const s16 *init_sequence = display->init_sequence;
   554		char *gamma = display->gamma;
   555		u32 *gamma_curves = NULL;
   556	
   557		/* sanity check */
   558		if (display->gamma_num * display->gamma_len >
   559				FBTFT_GAMMA_MAX_VALUES_TOTAL) {
   560			dev_err(dev, "FBTFT_GAMMA_MAX_VALUES_TOTAL=%d is exceeded\n",
   561				FBTFT_GAMMA_MAX_VALUES_TOTAL);
   562			return NULL;
   563		}
   564	
   565		/* defaults */
   566		if (!fps)
   567			fps = 20;
   568		if (!bpp)
   569			bpp = 16;
   570	
   571		if (!pdata) {
   572			dev_err(dev, "platform data is missing\n");
   573			return NULL;
   574		}
   575	
   576		/* override driver values? */
   577		if (pdata->fps)
   578			fps = pdata->fps;
   579		if (pdata->txbuflen)
   580			txbuflen = pdata->txbuflen;
   581		if (pdata->display.init_sequence)
   582			init_sequence = pdata->display.init_sequence;
   583		if (pdata->gamma)
   584			gamma = pdata->gamma;
   585		if (pdata->display.debug)
   586			display->debug = pdata->display.debug;
   587		if (pdata->display.backlight)
   588			display->backlight = pdata->display.backlight;
   589		if (pdata->display.width)
   590			display->width = pdata->display.width;
   591		if (pdata->display.height)
   592			display->height = pdata->display.height;
   593		if (pdata->display.buswidth)
   594			display->buswidth = pdata->display.buswidth;
   595		if (pdata->display.regwidth)
   596			display->regwidth = pdata->display.regwidth;
   597	
   598		display->debug |= debug;
   599		fbtft_expand_debug_value(&display->debug);
   600	
   601		switch (pdata->rotate) {
   602		case 90:
   603		case 270:
   604			width =  display->height;
   605			height = display->width;
   606			break;
   607		default:
   608			width =  display->width;
   609			height = display->height;
   610		}
   611	
   612		vmem_size = display->width * display->height * bpp / 8;
   613		vmem = vzalloc(vmem_size);
   614		if (!vmem)
   615			goto alloc_fail;
   616	
 > 617		const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
   618		if (!fbops)
   619			goto alloc_fail;
   620	
   621		fbdefio = devm_kzalloc(dev, sizeof(struct fb_deferred_io), GFP_KERNEL);
   622		if (!fbdefio)
   623			goto alloc_fail;
   624	
   625		buf = devm_kzalloc(dev, 128, GFP_KERNEL);
   626		if (!buf)
   627			goto alloc_fail;
   628	
   629		if (display->gamma_num && display->gamma_len) {
   630			gamma_curves = devm_kcalloc(dev,
   631						    display->gamma_num *
   632						    display->gamma_len,
   633						    sizeof(gamma_curves[0]),
   634						    GFP_KERNEL);
   635			if (!gamma_curves)
   636				goto alloc_fail;
   637		}
   638	
   639		info = framebuffer_alloc(sizeof(struct fbtft_par), dev);
   640		if (!info)
   641			goto alloc_fail;
   642	
   643		info->screen_buffer = vmem;
   644		info->fbops = fbops;
   645		info->fbdefio = fbdefio;
   646	
 > 647		fbops->owner        =      dev->driver->owner;
   648		fbops->fb_read      =      fb_sys_read;
   649		fbops->fb_write     =      fbtft_fb_write;
   650		fbops->fb_fillrect  =      fbtft_fb_fillrect;
   651		fbops->fb_copyarea  =      fbtft_fb_copyarea;
   652		fbops->fb_imageblit =      fbtft_fb_imageblit;
   653		fbops->fb_setcolreg =      fbtft_fb_setcolreg;
   654		fbops->fb_blank     =      fbtft_fb_blank;
   655	
   656		fbdefio->delay =           HZ / fps;
   657		fbdefio->sort_pagelist =   true;
   658		fbdefio->deferred_io =     fbtft_deferred_io;
   659		fb_deferred_io_init(info);
   660	
   661		snprintf(info->fix.id, sizeof(info->fix.id), "%s", dev->driver->name);
   662		info->fix.type =           FB_TYPE_PACKED_PIXELS;
   663		info->fix.visual =         FB_VISUAL_TRUECOLOR;
   664		info->fix.xpanstep =	   0;
   665		info->fix.ypanstep =	   0;
   666		info->fix.ywrapstep =	   0;
   667		info->fix.line_length =    width * bpp / 8;
   668		info->fix.accel =          FB_ACCEL_NONE;
   669		info->fix.smem_len =       vmem_size;
   670	
   671		info->var.rotate =         pdata->rotate;
   672		info->var.xres =           width;
   673		info->var.yres =           height;
   674		info->var.xres_virtual =   info->var.xres;
   675		info->var.yres_virtual =   info->var.yres;
   676		info->var.bits_per_pixel = bpp;
   677		info->var.nonstd =         1;
   678	
   679		/* RGB565 */
   680		info->var.red.offset =     11;
   681		info->var.red.length =     5;
   682		info->var.green.offset =   5;
   683		info->var.green.length =   6;
   684		info->var.blue.offset =    0;
   685		info->var.blue.length =    5;
   686		info->var.transp.offset =  0;
   687		info->var.transp.length =  0;
   688	
   689		info->flags =              FBINFO_FLAG_DEFAULT | FBINFO_VIRTFB;
   690	
   691		par = info->par;
   692		par->info = info;
   693		par->pdata = pdata;
   694		par->debug = display->debug;
   695		par->buf = buf;
   696		spin_lock_init(&par->dirty_lock);
   697		par->bgr = pdata->bgr;
   698		par->startbyte = pdata->startbyte;
   699		par->init_sequence = init_sequence;
   700		par->gamma.curves = gamma_curves;
   701		par->gamma.num_curves = display->gamma_num;
   702		par->gamma.num_values = display->gamma_len;
   703		mutex_init(&par->gamma.lock);
   704		info->pseudo_palette = par->pseudo_palette;
   705	
   706		if (par->gamma.curves && gamma) {
   707			if (fbtft_gamma_parse_str(par, par->gamma.curves, gamma,
   708						  strlen(gamma)))
   709				goto release_framebuf;
   710		}
   711	
   712		/* Transmit buffer */
   713		if (txbuflen == -1)
   714			txbuflen = vmem_size + 2; /* add in case startbyte is used */
   715		if (txbuflen >= vmem_size + 2)
   716			txbuflen = 0;
   717
Greg Kroah-Hartman May 20, 2022, 6:03 a.m. UTC | #5
On Thu, May 19, 2022 at 08:25:01PM +0300, Uri Arev wrote:
> This simple patch fixes a checkpatch.pl warning in `fbtft/fbtft-core.c`.
> 
> Reported by Checkpatch:
> WARNING: struct fb_ops should normally be const
> 
> Signed-off-by: Uri Arev <me@wantyapps.xyz>
> ---
>  drivers/staging/fbtft/fbtft-core.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)

Always test-build your patches before submitting them :(
diff mbox series

Patch

diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
index 9c4d797e7ae4..9ff2b8230caf 100644
--- a/drivers/staging/fbtft/fbtft-core.c
+++ b/drivers/staging/fbtft/fbtft-core.c
@@ -539,7 +539,7 @@  struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
 {
 	struct fb_info *info;
 	struct fbtft_par *par;
-	struct fb_ops *fbops = NULL;
+	const struct fb_ops *fbops = NULL;
 	struct fb_deferred_io *fbdefio = NULL;
 	u8 *vmem = NULL;
 	void *txbuf = NULL;
@@ -614,7 +614,7 @@  struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
 	if (!vmem)
 		goto alloc_fail;
 
-	fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
+	const fbops = devm_kzalloc(dev, sizeof(struct fb_ops), GFP_KERNEL);
 	if (!fbops)
 		goto alloc_fail;