Replace the goto-based error handling in the define_fbtft_write_reg macro with an early return while ensuring va_end() is called on all exit paths.
Also add a short comment explaining the empty modifier argument used for native byte-order writes, instead of introducing an identity macro. No functional change intended. This reverts commit 6eec69e273e124dca8549fc52b0958b2953085ee. As per maintainer's feedback. Signed-off-by: Krishna Agarwal <[email protected]> --- drivers/staging/fbtft/fbtft-bus.c | 41 ++++++++++++++++--------------- 1 file changed, 21 insertions(+), 20 deletions(-) diff --git a/drivers/staging/fbtft/fbtft-bus.c b/drivers/staging/fbtft/fbtft-bus.c index 0ab4f5c4f886..9b9df0edc158 100644 --- a/drivers/staging/fbtft/fbtft-bus.c +++ b/drivers/staging/fbtft/fbtft-bus.c @@ -10,7 +10,6 @@ * void (*write_reg)(struct fbtft_par *par, int len, ...); * *****************************************************************************/ -#define fbtft_identity(x) (x) #define define_fbtft_write_reg(func, buffer_type, data_type, modifier) \ void func(struct fbtft_par *par, int len, ...) \ @@ -43,28 +42,30 @@ void func(struct fbtft_par *par, int len, ...) \ *buf = modifier((data_type)va_arg(args, unsigned int)); \ ret = fbtft_write_buf_dc(par, par->buf, sizeof(data_type) + offset, \ 0); \ - if (ret >= 0) { \ - len--; \ - \ - if (par->startbyte) \ - *(u8 *)par->buf = par->startbyte | 0x2; \ - \ - if (len) { \ - i = len; \ - while (i--) \ - *buf++ = modifier((data_type)va_arg(args, \ - unsigned int)); \ - fbtft_write_buf_dc(par, par->buf, \ - len * (sizeof(data_type) + offset), 1); \ - } \ - } \ - va_end(args); \ + if (ret < 0) { \ + va_end(args); \ + return; \ + } \ + len--; \ + \ + if (par->startbyte) \ + *(u8 *)par->buf = par->startbyte | 0x2; \ + \ + if (len) { \ + i = len; \ + while (i--) \ + *buf++ = modifier((data_type)va_arg(args, \ + unsigned int)); \ + fbtft_write_buf_dc(par, par->buf, \ + len * (sizeof(data_type) + offset), 1); \ + } \ + va_end(args); \ } \ EXPORT_SYMBOL(func); - -define_fbtft_write_reg(fbtft_write_reg8_bus8, u8, u8, fbtft_identity) +/* No modifier --> No byte-conversion is needed, data in native byte order */ +define_fbtft_write_reg(fbtft_write_reg8_bus8, u8, u8, ) define_fbtft_write_reg(fbtft_write_reg16_bus8, __be16, u16, cpu_to_be16) -define_fbtft_write_reg(fbtft_write_reg16_bus16, u16, u16, fbtft_identity) +define_fbtft_write_reg(fbtft_write_reg16_bus16, u16, u16, ) void fbtft_write_reg8_bus9(struct fbtft_par *par, int len, ...) { -- 2.43.0
