[PATCH] backlight: jornada720: Minimise code duplication and handle errors better
From: Lee Jones <hidden>
Date: 2014-07-10 08:30:52
Also in:
lkml
Subsystem:
backlight class/subsystem, framebuffer layer, the rest · Maintainers:
Lee Jones, Daniel Thompson, Jingoo Han, Helge Deller, Linus Torvalds
Rickard Strandqvi's ran a code analysis application which found that jornada_lcd_get_contrast(() and jornada_lcd_set_contrast() contained some code duplication (calling the same functions during various code execution paths) and failed to return errors in a consistent manner. This patch aims to simplify the code, coercing it into behaving at a level expected of a driver in the Linux kernel. Cc: Bryan Wu <redacted> Suggested-by: Rickard Strandqvist <redacted> Acked-by: Jingoo Han <redacted> Reviewed-by: Rickard Strandqvist <redacted> Signed-off-by: Lee Jones <redacted> --- drivers/video/backlight/jornada720_lcd.c | 37 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 18 deletions(-)
diff --git a/drivers/video/backlight/jornada720_lcd.c b/drivers/video/backlight/jornada720_lcd.c
index da3876c..228bc31 100644
--- a/drivers/video/backlight/jornada720_lcd.c
+++ b/drivers/video/backlight/jornada720_lcd.c@@ -43,37 +43,38 @@ static int jornada_lcd_get_contrast(struct lcd_device *ld) jornada_ssp_start(); - if (jornada_ssp_byte(GETCONTRAST) != TXDUMMY) { - dev_err(&ld->dev, "get contrast failed\n"); - jornada_ssp_end(); - return -ETIMEDOUT; - } else { + if (jornada_ssp_byte(GETCONTRAST) == TXDUMMY) { ret = jornada_ssp_byte(TXDUMMY); - jornada_ssp_end(); - return ret; + goto success; } + + dev_err(&ld->dev, "failed to set contrast\n"); + ret = -ETIMEDOUT; + +success: + jornada_ssp_end(); + return ret; } static int jornada_lcd_set_contrast(struct lcd_device *ld, int value) { - int ret; + int ret = 0; jornada_ssp_start(); /* start by sending our set contrast cmd to mcu */ - ret = jornada_ssp_byte(SETCONTRAST); - - /* push the new value */ - if (jornada_ssp_byte(value) != TXDUMMY) { - dev_err(&ld->dev, "set contrast failed\n"); - jornada_ssp_end(); - return -ETIMEDOUT; + if (jornada_ssp_byte(SETCONTRAST) == TXDUMMY) { + /* if successful push the new value */ + if (jornada_ssp_byte(value) == TXDUMMY) + goto success; } - /* if we get here we can assume everything went well */ - jornada_ssp_end(); + dev_err(&ld->dev, "failed to set contrast\n"); + ret = -ETIMEDOUT; - return 0; +success: + jornada_ssp_end(); + return ret; } static int jornada_lcd_set_power(struct lcd_device *ld, int power)
--
1.8.3.2