All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/10] Staging: fbtft: flexfb.c file clean up
@ 2015-06-30  6:43 Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 01/10] Staging: fbtft: Remove paragraph about writing to FSF Fabio Falzoi
                   ` (9 more replies)
  0 siblings, 10 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

This patchset aims to refactor the code in flexfb.c, making it more
readable and maintanable.
Various checkpatch.pl issues are fixed.
These patches are created on top of greg-kh's linux-staging tree,
staging-testing branch.

Fabio Falzoi (10):
  Staging: fbtft: Remove paragraph about writing to FSF
  Staging: fbtft: Remove unnecessary multiple blank lines
  Staging: fbtft: Use a struct to describe each LCD controller
  Staging: fbtft: Use a helper function to set write_register op
  Staging: fbtft: Set bus specific ops using separate functions
  Staging: fbtft: Use a helper function to set set_addr_win op
  Staging: fbtft: Remove useless newline
  Staging: fbtft: Avoid duplicating code to check gpio.dc value
  Staging: fbtft: Fix parenthesis alignment coding style issue
  Staging: fbtft: Fix spacing coding style issue

 drivers/staging/fbtft/fbtft.h  |  20 ++
 drivers/staging/fbtft/flexfb.c | 485 +++++++++++++++++++++++------------------
 2 files changed, 289 insertions(+), 216 deletions(-)

-- 
2.1.4


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH 01/10] Staging: fbtft: Remove paragraph about writing to FSF
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 02/10] Staging: fbtft: Remove unnecessary multiple blank lines Fabio Falzoi
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Remove paragraph about writing to the Free Software Foundation's
mailing address from GPL notice.
This patch fixes the following checkpatch error:

CHECK:FSF_MAILING_ADDRESS at line 17.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index 2c4ce07..80b6620 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -12,10 +12,6 @@
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
 #include <linux/module.h>
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 02/10] Staging: fbtft: Remove unnecessary multiple blank lines
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 01/10] Staging: fbtft: Remove paragraph about writing to FSF Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller Fabio Falzoi
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

This patch removes some unnecessary multiple blank lines to fix the
following checkpatch errors:

CHECK:LINE_SPACING at lines 29, 67, 131, 287, 299, 312, 326, 351 and
364.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 11 -----------
 1 file changed, 11 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index 80b6620..ed867e7 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -26,7 +26,6 @@
 
 #define DRVNAME	    "flexfb"
 
-
 static char *chip;
 module_param(chip, charp, 0);
 MODULE_PARM_DESC(chip, "LCD controller");
@@ -64,7 +63,6 @@ static bool latched;
 module_param(latched, bool, 0);
 MODULE_PARM_DESC(latched, "Use with latched 16-bit databus");
 
-
 static int *initp;
 static int initp_num;
 
@@ -128,7 +126,6 @@ static int ssd1351_init[] = { -1, 0xfd, 0x12, -1, 0xfd, 0xb1, -1, 0xae, -1, 0xb3
 			      -1, 0xab, 0x01, -1, 0xb1, 0x32, -1, 0xb4, 0xa0, 0xb5, 0x55, -1, 0xbb, 0x17, -1, 0xbe, 0x05,
 			      -1, 0xc1, 0xc8, 0x80, 0xc8, -1, 0xc7, 0x0f, -1, 0xb6, 0x01, -1, 0xa6, -1, 0xaf, -3 };
 
-
 /* ili9320, ili9325 */
 static void flexfb_set_addr_win_1(struct fbtft_par *par,
 				  int xs, int ys, int xe, int ye)
@@ -284,7 +281,6 @@ static int flexfb_probe_common(struct spi_device *sdev,
 				initp_num = ARRAY_SIZE(st7735r_init);
 			}
 
-
 		} else if (!strcmp(chip, "hx8340bn")) {
 			if (!width)
 				width = 176;
@@ -296,7 +292,6 @@ static int flexfb_probe_common(struct spi_device *sdev,
 				initp_num = ARRAY_SIZE(hx8340bn_init);
 			}
 
-
 		} else if (!strcmp(chip, "ili9225")) {
 			if (!width)
 				width = 176;
@@ -309,8 +304,6 @@ static int flexfb_probe_common(struct spi_device *sdev,
 				initp_num = ARRAY_SIZE(ili9225_init);
 			}
 
-
-
 		} else if (!strcmp(chip, "ili9320")) {
 			if (!width)
 				width = 240;
@@ -323,7 +316,6 @@ static int flexfb_probe_common(struct spi_device *sdev,
 				initp_num = ARRAY_SIZE(ili9320_init);
 			}
 
-
 		} else if (!strcmp(chip, "ili9325")) {
 			if (!width)
 				width = 240;
@@ -348,7 +340,6 @@ static int flexfb_probe_common(struct spi_device *sdev,
 				initp_num = ARRAY_SIZE(ili9341_init);
 			}
 
-
 		} else if (!strcmp(chip, "ssd1289")) {
 			if (!width)
 				width = 240;
@@ -361,8 +352,6 @@ static int flexfb_probe_common(struct spi_device *sdev,
 				initp_num = ARRAY_SIZE(ssd1289_init);
 			}
 
-
-
 		} else if (!strcmp(chip, "ssd1351")) {
 			if (!width)
 				width = 128;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 01/10] Staging: fbtft: Remove paragraph about writing to FSF Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 02/10] Staging: fbtft: Remove unnecessary multiple blank lines Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-07-15  2:12   ` Greg KH
  2015-07-23 11:09   ` Noralf Trønnes
  2015-06-30  6:43 ` [PATCH 04/10] Staging: fbtft: Use a helper function to set write_register op Fabio Falzoi
                   ` (6 subsequent siblings)
  9 siblings, 2 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Use a struct flexfb_lcd_controller to holds chip properties, instead of
relying on a long 'if - else if' chain.
This allows to:
- use a simple linear search to verify if a certain LCD controller
model is supported or not.
- add support for a new LCD chip controller simply defining a new
flexfb_lcd_controller struct.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/fbtft.h  |  20 ++++
 drivers/staging/fbtft/flexfb.c | 212 ++++++++++++++++++++++-------------------
 2 files changed, 136 insertions(+), 96 deletions(-)

diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
index 7d817eb..c96c06b 100644
--- a/drivers/staging/fbtft/fbtft.h
+++ b/drivers/staging/fbtft/fbtft.h
@@ -256,6 +256,26 @@ struct fbtft_par {
 	void *extra;
 };
 
+/**
+ * struct flexfb_lcd_controller - Describes the LCD controller properties
+ * @name: Model name of the chip
+ * @width: Width of display in pixels
+ * @height: Height of display in pixels
+ * @setaddrwin: Which set_addr_win() implementation to use
+ * @regwidth: LCD Controller Register width in bits
+ * @init_seq: LCD initialization sequence
+ * @init_seq_sz: Size of LCD initialization sequence
+ */
+struct flexfb_lcd_controller {
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int setaddrwin;
+	unsigned int regwidth;
+	int *init_seq;
+	int init_seq_sz;
+};
+
 #define NUMARGS(...)  (sizeof((int[]){__VA_ARGS__})/sizeof(int))
 
 #define write_reg(par, ...)                                              \
diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index ed867e7..25b394d 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -126,6 +126,89 @@ static int ssd1351_init[] = { -1, 0xfd, 0x12, -1, 0xfd, 0xb1, -1, 0xae, -1, 0xb3
 			      -1, 0xab, 0x01, -1, 0xb1, 0x32, -1, 0xb4, 0xa0, 0xb5, 0x55, -1, 0xbb, 0x17, -1, 0xbe, 0x05,
 			      -1, 0xc1, 0xc8, 0x80, 0xc8, -1, 0xc7, 0x0f, -1, 0xb6, 0x01, -1, 0xa6, -1, 0xaf, -3 };
 
+static const struct flexfb_lcd_controller flexfb_chip_table[] = {
+	{
+		.name = "st7735r",
+		.width = 120,
+		.height = 160,
+		.init_seq = st7735r_init,
+		.init_seq_sz = ARRAY_SIZE(st7735r_init),
+	},
+	{
+		.name = "hx8340bn",
+		.width = 176,
+		.height = 220,
+		.init_seq = hx8340bn_init,
+		.init_seq_sz = ARRAY_SIZE(hx8340bn_init),
+	},
+	{
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	},
+	{
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	},
+	{
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	},
+	{
+		.name = "ili9320",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 1,
+		.regwidth = 16,
+		.init_seq = ili9320_init,
+		.init_seq_sz = ARRAY_SIZE(ili9320_init),
+	},
+	{
+		.name = "ili9325",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 1,
+		.regwidth = 16,
+		.init_seq = ili9325_init,
+		.init_seq_sz = ARRAY_SIZE(ili9325_init),
+	},
+	{
+		.name = "ili9341",
+		.width = 240,
+		.height = 320,
+		.init_seq = ili9341_init,
+		.init_seq_sz = ARRAY_SIZE(ili9341_init),
+	},
+	{
+		.name = "ssd1289",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 2,
+		.regwidth = 16,
+		.init_seq = ssd1289_init,
+		.init_seq_sz = ARRAY_SIZE(ssd1289_init),
+	},
+	{
+		.name = "ssd1351",
+		.width = 128,
+		.height = 128,
+		.setaddrwin = 3,
+		.init_seq = ssd1351_init,
+		.init_seq_sz = ARRAY_SIZE(ssd1351_init),
+	},
+};
+
 /* ili9320, ili9325 */
 static void flexfb_set_addr_win_1(struct fbtft_par *par,
 				  int xs, int ys, int xe, int ye)
@@ -248,8 +331,38 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
 	return 0;
 }
 
+static void flexfb_chip_load_param(const struct flexfb_lcd_controller *chip)
+{
+	if (!width)
+		width = chip->width;
+	if (!height)
+		height = chip->height;
+	setaddrwin = chip->setaddrwin;
+	if (chip->regwidth)
+		regwidth = chip->regwidth;
+	if (!init_num) {
+		initp = chip->init_seq;
+		initp_num = chip->init_seq_sz;
+	}
+}
+
 static struct fbtft_display flex_display = { };
 
+static int flexfb_chip_init(const struct device *dev)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(flexfb_chip_table); i++)
+		if (!strcmp(chip, flexfb_chip_table[i].name)) {
+			flexfb_chip_load_param(&flexfb_chip_table[i]);
+			return 0;
+		}
+
+	dev_err(dev, "chip=%s is not supported\n", chip);
+
+	return -EINVAL;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
 			       struct platform_device *pdev)
 {
@@ -270,102 +383,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
 		       sdev ? "'SPI device'" : "'Platform device'");
 
 	if (chip) {
-
-		if (!strcmp(chip, "st7735r")) {
-			if (!width)
-				width = 128;
-			if (!height)
-				height = 160;
-			if (init_num == 0) {
-				initp = st7735r_init;
-				initp_num = ARRAY_SIZE(st7735r_init);
-			}
-
-		} else if (!strcmp(chip, "hx8340bn")) {
-			if (!width)
-				width = 176;
-			if (!height)
-				height = 220;
-			setaddrwin = 0;
-			if (init_num == 0) {
-				initp = hx8340bn_init;
-				initp_num = ARRAY_SIZE(hx8340bn_init);
-			}
-
-		} else if (!strcmp(chip, "ili9225")) {
-			if (!width)
-				width = 176;
-			if (!height)
-				height = 220;
-			setaddrwin = 0;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9225_init;
-				initp_num = ARRAY_SIZE(ili9225_init);
-			}
-
-		} else if (!strcmp(chip, "ili9320")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 1;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9320_init;
-				initp_num = ARRAY_SIZE(ili9320_init);
-			}
-
-		} else if (!strcmp(chip, "ili9325")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 1;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9325_init;
-				initp_num = ARRAY_SIZE(ili9325_init);
-			}
-
-		} else if (!strcmp(chip, "ili9341")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 0;
-			regwidth = 8;
-			if (init_num == 0) {
-				initp = ili9341_init;
-				initp_num = ARRAY_SIZE(ili9341_init);
-			}
-
-		} else if (!strcmp(chip, "ssd1289")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 2;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ssd1289_init;
-				initp_num = ARRAY_SIZE(ssd1289_init);
-			}
-
-		} else if (!strcmp(chip, "ssd1351")) {
-			if (!width)
-				width = 128;
-			if (!height)
-				height = 128;
-			setaddrwin = 3;
-			if (init_num == 0) {
-				initp = ssd1351_init;
-				initp_num = ARRAY_SIZE(ssd1351_init);
-			}
-		} else {
-			dev_err(dev, "chip=%s is not supported\n", chip);
-			return -EINVAL;
-		}
+		ret = flexfb_chip_init(dev);
+		if (ret)
+			return ret;
 	}
 
 	if (width == 0 || height == 0) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 04/10] Staging: fbtft: Use a helper function to set write_register op
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (2 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-07-15  2:13   ` Greg KH
  2015-06-30  6:43 ` [PATCH 05/10] Staging: fbtft: Set bus specific ops using separate functions Fabio Falzoi
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Use a helper function to set the correct write_register function, based
on the width of the registers.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 36 ++++++++++++++++++++++--------------
 1 file changed, 22 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index 25b394d..dae092a 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -363,6 +363,25 @@ static int flexfb_chip_init(const struct device *dev)
 	return -EINVAL;
 }
 
+static int flexfb_set_regwrite_func(const struct device *dev,
+				    struct fbtft_par *par)
+{
+	switch (regwidth) {
+	case 8:
+		par->fbtftops.write_register = fbtft_write_reg8_bus8;
+		break;
+	case 16:
+		par->fbtftops.write_register = fbtft_write_reg16_bus8;
+		break;
+	default:
+		dev_err(dev, "argument 'regwidth': %d is not supported.\n",
+			regwidth);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
 			       struct platform_device *pdev)
 {
@@ -413,20 +432,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
 		par->init_sequence = initp;
 	par->fbtftops.init_display = fbtft_init_display;
 
-	/* registerwrite functions */
-	switch (regwidth) {
-	case 8:
-		par->fbtftops.write_register = fbtft_write_reg8_bus8;
-		break;
-	case 16:
-		par->fbtftops.write_register = fbtft_write_reg16_bus8;
-		break;
-	default:
-		dev_err(dev,
-			"argument 'regwidth': %d is not supported.\n",
-			regwidth);
-		return -EINVAL;
-	}
+	ret = flexfb_set_regwrite_func(dev, par);
+	if (ret)
+		goto out_release;
 
 	/* bus functions */
 	if (sdev) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 05/10] Staging: fbtft: Set bus specific ops using separate functions
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (3 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 04/10] Staging: fbtft: Use a helper function to set write_register op Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-07-15  2:13   ` Greg KH
  2015-06-30  6:43 ` [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op Fabio Falzoi
                   ` (4 subsequent siblings)
  9 siblings, 1 reply; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Use two separate functions for spi and platform bus
(flexfb_set_spi_bus_func and flexfb_set_platform_bus_func,
respectively) to set the appropriate write operations.

This patch corrects the following checkpatch errors:
WARNING:LONG_LiINE at lines 446, 450, 466, 476, 489 and 495.
CHECK:PARENTHESIS_ALIGNMENT at line 459.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 154 +++++++++++++++++++++++++----------------
 1 file changed, 94 insertions(+), 60 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index dae092a..1b833f9 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -382,6 +382,94 @@ static int flexfb_set_regwrite_func(const struct device *dev,
 	return 0;
 }
 
+static int flexfb_emulate_spi_8(struct fbtft_par *par, struct spi_device *sdev)
+{
+	struct device *dev = &sdev->dev;
+	int ret;
+
+	dev_warn(dev, "9-bit SPI not available, emulating using 8-bit.\n");
+	sdev->bits_per_word = 8;
+	ret = sdev->master->setup(sdev);
+	if (ret)
+		return ret;
+
+	/* allocate buffer with room for dc bits */
+	par->extra = devm_kzalloc(par->info->device,
+				  par->txbuf.len + (par->txbuf.len / 8) + 8,
+				  GFP_KERNEL);
+	if (!par->extra)
+		return -ENOMEM;
+	par->fbtftops.write = fbtft_write_spi_emulate_9;
+
+	return 0;
+}
+
+static int flexfb_set_spi_bus_func(struct fbtft_par *par,
+				   struct spi_device *sdev)
+{
+	struct device *dev = &sdev->dev;
+	int ret;
+
+	par->fbtftops.write = fbtft_write_spi;
+	switch (buswidth) {
+	case 8:
+		par->fbtftops.write_vmem = fbtft_write_vmem16_bus8;
+		if (!par->startbyte)
+			par->fbtftops.verify_gpios = flexfb_verify_gpios_dc;
+		break;
+	case 9:
+		if (regwidth == 16) {
+			dev_err(dev, "argument 'regwidth': %d is not supported with buswidth=%d and SPI.\n",
+				regwidth, buswidth);
+			return -EINVAL;
+		}
+		par->fbtftops.write_register = fbtft_write_reg8_bus9;
+		par->fbtftops.write_vmem = fbtft_write_vmem16_bus9;
+		sdev->bits_per_word = 9;
+		ret = sdev->master->setup(sdev);
+		if (ret) {
+			ret = flexfb_emulate_spi_8(par, sdev);
+			if (ret)
+				return ret;
+		}
+		break;
+	default:
+		dev_err(dev, "argument 'buswidth': %d is not supported with SPI.\n",
+			buswidth);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int flexfb_set_platform_bus_func(struct fbtft_par *par,
+					struct platform_device *pdev)
+{
+	struct device *dev = &pdev->dev;
+
+	par->fbtftops.verify_gpios = flexfb_verify_gpios_db;
+	switch (buswidth) {
+	case 8:
+		par->fbtftops.write = fbtft_write_gpio8_wr;
+		par->fbtftops.write_vmem = fbtft_write_vmem16_bus8;
+		break;
+	case 16:
+		par->fbtftops.write_register = fbtft_write_reg16_bus16;
+		if (latched)
+			par->fbtftops.write = fbtft_write_gpio16_wr_latched;
+		else
+			par->fbtftops.write = fbtft_write_gpio16_wr;
+		par->fbtftops.write_vmem = fbtft_write_vmem16_bus16;
+		break;
+	default:
+		dev_err(dev, "argument 'buswidth': %d is not supported with parallel.\n",
+			buswidth);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
 			       struct platform_device *pdev)
 {
@@ -436,66 +524,12 @@ static int flexfb_probe_common(struct spi_device *sdev,
 	if (ret)
 		goto out_release;
 
-	/* bus functions */
-	if (sdev) {
-		par->fbtftops.write = fbtft_write_spi;
-		switch (buswidth) {
-		case 8:
-			par->fbtftops.write_vmem = fbtft_write_vmem16_bus8;
-			if (!par->startbyte)
-				par->fbtftops.verify_gpios = flexfb_verify_gpios_dc;
-			break;
-		case 9:
-			if (regwidth == 16) {
-				dev_err(dev, "argument 'regwidth': %d is not supported with buswidth=%d and SPI.\n", regwidth, buswidth);
-				return -EINVAL;
-			}
-			par->fbtftops.write_register = fbtft_write_reg8_bus9;
-			par->fbtftops.write_vmem = fbtft_write_vmem16_bus9;
-			sdev->bits_per_word = 9;
-			ret = sdev->master->setup(sdev);
-			if (ret) {
-				dev_warn(dev,
-					"9-bit SPI not available, emulating using 8-bit.\n");
-				sdev->bits_per_word = 8;
-				ret = sdev->master->setup(sdev);
-				if (ret)
-					goto out_release;
-				/* allocate buffer with room for dc bits */
-				par->extra = devm_kzalloc(par->info->device,
-						par->txbuf.len + (par->txbuf.len / 8) + 8,
-						GFP_KERNEL);
-				if (!par->extra) {
-					ret = -ENOMEM;
-					goto out_release;
-				}
-				par->fbtftops.write = fbtft_write_spi_emulate_9;
-			}
-			break;
-		default:
-			dev_err(dev, "argument 'buswidth': %d is not supported with SPI.\n", buswidth);
-			return -EINVAL;
-		}
-	} else {
-		par->fbtftops.verify_gpios = flexfb_verify_gpios_db;
-		switch (buswidth) {
-		case 8:
-			par->fbtftops.write = fbtft_write_gpio8_wr;
-			par->fbtftops.write_vmem = fbtft_write_vmem16_bus8;
-			break;
-		case 16:
-			par->fbtftops.write_register = fbtft_write_reg16_bus16;
-			if (latched)
-				par->fbtftops.write = fbtft_write_gpio16_wr_latched;
-			else
-				par->fbtftops.write = fbtft_write_gpio16_wr;
-			par->fbtftops.write_vmem = fbtft_write_vmem16_bus16;
-			break;
-		default:
-			dev_err(dev, "argument 'buswidth': %d is not supported with parallel.\n", buswidth);
-			return -EINVAL;
-		}
-	}
+	if (sdev)
+		ret = flexfb_set_spi_bus_func(par, sdev);
+	else
+		ret = flexfb_set_platform_bus_func(par, pdev);
+	if (ret)
+		goto out_release;
 
 	/* set_addr_win function */
 	switch (setaddrwin) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (4 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 05/10] Staging: fbtft: Set bus specific ops using separate functions Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-07-15  2:14   ` Greg KH
  2015-06-30  6:43 ` [PATCH 07/10] Staging: fbtft: Remove useless newline Fabio Falzoi
                   ` (3 subsequent siblings)
  9 siblings, 1 reply; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Use a helper function to choose which set_addr_win implementation to
use, based on the value of the setaddrwin module parameter.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 47 +++++++++++++++++++++++++-----------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index 1b833f9..2a15da1 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -470,6 +470,31 @@ static int flexfb_set_platform_bus_func(struct fbtft_par *par,
 	return 0;
 }
 
+static int flexfb_set_addr_win_func(const struct device *dev,
+				    struct fbtft_par *par)
+{
+	switch (setaddrwin) {
+	case 0:
+		/* use default */
+		break;
+	case 1:
+		par->fbtftops.set_addr_win = flexfb_set_addr_win_1;
+		break;
+	case 2:
+		par->fbtftops.set_addr_win = flexfb_set_addr_win_2;
+		break;
+	case 3:
+		par->fbtftops.set_addr_win = set_addr_win_3;
+		break;
+	default:
+		dev_err(dev, "argument 'setaddrwin': unknown value %d.\n",
+			setaddrwin);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
 			       struct platform_device *pdev)
 {
@@ -531,25 +556,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
 	if (ret)
 		goto out_release;
 
-	/* set_addr_win function */
-	switch (setaddrwin) {
-	case 0:
-		/* use default */
-		break;
-	case 1:
-		par->fbtftops.set_addr_win = flexfb_set_addr_win_1;
-		break;
-	case 2:
-		par->fbtftops.set_addr_win = flexfb_set_addr_win_2;
-		break;
-	case 3:
-		par->fbtftops.set_addr_win = set_addr_win_3;
-		break;
-	default:
-		dev_err(dev, "argument 'setaddrwin': unknown value %d.\n",
-			setaddrwin);
-		return -EINVAL;
-	}
+	ret = flexfb_set_addr_win_func(dev, par);
+	if (ret)
+		goto out_release;
 
 	if (!nobacklight)
 		par->fbtftops.register_backlight = fbtft_register_backlight;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 07/10] Staging: fbtft: Remove useless newline
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (5 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-06-30  7:42   ` Dan Carpenter
  2015-06-30  6:43 ` [PATCH 08/10] Staging: fbtft: Avoid duplicating code to check gpio.dc value Fabio Falzoi
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

No newline is needed since checkpatch doesn't complain about line longer
than 80 characters for string literals.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index 2a15da1..cccb0e4 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -290,8 +290,7 @@ static int flexfb_verify_gpios_dc(struct fbtft_par *par)
 	fbtft_par_dbg(DEBUG_VERIFY_GPIOS, par, "%s()\n", __func__);
 
 	if (par->gpio.dc < 0) {
-		dev_err(par->info->device,
-			"Missing info about 'dc' gpio. Aborting.\n");
+		dev_err(par->info->device, "Missing info about 'dc' gpio. Aborting.\n");
 		return -EINVAL;
 	}
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 08/10] Staging: fbtft: Avoid duplicating code to check gpio.dc value
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (6 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 07/10] Staging: fbtft: Remove useless newline Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 09/10] Staging: fbtft: Fix parenthesis alignment coding style issue Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 10/10] Staging: fbtft: Fix spacing " Fabio Falzoi
  9 siblings, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Avoid duplicating code to verify gpios.dc and call
flexfb_verify_gpios_dc instead.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index cccb0e4..ca14919 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -299,15 +299,14 @@ static int flexfb_verify_gpios_dc(struct fbtft_par *par)
 
 static int flexfb_verify_gpios_db(struct fbtft_par *par)
 {
-	int i;
+	int i, ret;
 	int num_db = buswidth;
 
 	fbtft_par_dbg(DEBUG_VERIFY_GPIOS, par, "%s()\n", __func__);
+	ret = flexfb_verify_gpios_dc(par);
+	if (ret)
+		return ret;
 
-	if (par->gpio.dc < 0) {
-		dev_err(par->info->device, "Missing info about 'dc' gpio. Aborting.\n");
-		return -EINVAL;
-	}
 	if (par->gpio.wr < 0) {
 		dev_err(par->info->device, "Missing info about 'wr' gpio. Aborting.\n");
 		return -EINVAL;
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 09/10] Staging: fbtft: Fix parenthesis alignment coding style issue
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (7 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 08/10] Staging: fbtft: Avoid duplicating code to check gpio.dc value Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  2015-06-30  6:43 ` [PATCH 10/10] Staging: fbtft: Fix spacing " Fabio Falzoi
  9 siblings, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

This patch fixes the following checkpatch.pl error:

CHECK:PARENTHESIS_ALIGNMENT at line 217.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index ca14919..b161050 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -213,9 +213,8 @@ static const struct flexfb_lcd_controller flexfb_chip_table[] = {
 static void flexfb_set_addr_win_1(struct fbtft_par *par,
 				  int xs, int ys, int xe, int ye)
 {
-	fbtft_par_dbg(DEBUG_SET_ADDR_WIN, par,
-		     "%s(xs=%d, ys=%d, xe=%d, ye=%d)\n",
-		     __func__, xs, ys, xe, ye);
+	fbtft_par_dbg(DEBUG_SET_ADDR_WIN, par, "%s(xs=%d, ys=%d, xe=%d, ye=%d)\n",
+		      __func__, xs, ys, xe, ye);
 	switch (par->info->var.rotate) {
 	/* R20h = Horizontal GRAM Start Address */
 	/* R21h = Vertical GRAM Start Address */
@@ -581,8 +580,8 @@ static int flexfb_remove_common(struct device *dev, struct fb_info *info)
 		return -EINVAL;
 	par = info->par;
 	if (par)
-		fbtft_par_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, par,
-			"%s()\n", __func__);
+		fbtft_par_dbg(DEBUG_DRIVER_INIT_FUNCTIONS, par, "%s()\n",
+			      __func__);
 	fbtft_unregister_framebuffer(info);
 	fbtft_framebuffer_release(info);
 
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* [PATCH 10/10] Staging: fbtft: Fix spacing coding style issue
  2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
                   ` (8 preceding siblings ...)
  2015-06-30  6:43 ` [PATCH 09/10] Staging: fbtft: Fix parenthesis alignment coding style issue Fabio Falzoi
@ 2015-06-30  6:43 ` Fabio Falzoi
  9 siblings, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-06-30  6:43 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

This patch fixes the following checkpatch.pl error:

CHECK:SPACING at line 318.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
---
 drivers/staging/fbtft/flexfb.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index b161050..6cd02b5 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -315,7 +315,7 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
 		return -EINVAL;
 	}
 	if (latched)
-		num_db = buswidth/2;
+		num_db = buswidth / 2;
 	for (i = 0; i < num_db; i++) {
 		if (par->gpio.db[i] < 0) {
 			dev_err(par->info->device,
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* Re: [PATCH 07/10] Staging: fbtft: Remove useless newline
  2015-06-30  6:43 ` [PATCH 07/10] Staging: fbtft: Remove useless newline Fabio Falzoi
@ 2015-06-30  7:42   ` Dan Carpenter
  2015-06-30 14:55     ` Joe Perches
  0 siblings, 1 reply; 25+ messages in thread
From: Dan Carpenter @ 2015-06-30  7:42 UTC (permalink / raw)
  To: Fabio Falzoi; +Cc: thomas.petazzoni, noralf, devel, gregkh, linux-kernel

On Tue, Jun 30, 2015 at 08:43:14AM +0200, Fabio Falzoi wrote:
> No newline is needed since checkpatch doesn't complain about line longer
> than 80 characters for string literals.
> 
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>

The original was correct.  There was no need to go over 80 characters
just because of a limitation in checkpatch.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 07/10] Staging: fbtft: Remove useless newline
  2015-06-30  7:42   ` Dan Carpenter
@ 2015-06-30 14:55     ` Joe Perches
  2015-06-30 17:45       ` Dan Carpenter
  0 siblings, 1 reply; 25+ messages in thread
From: Joe Perches @ 2015-06-30 14:55 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Fabio Falzoi, thomas.petazzoni, noralf, devel, gregkh,
	linux-kernel

On Tue, 2015-06-30 at 10:42 +0300, Dan Carpenter wrote:
> On Tue, Jun 30, 2015 at 08:43:14AM +0200, Fabio Falzoi wrote:
> > No newline is needed since checkpatch doesn't complain about line longer
> > than 80 characters for string literals.
[]
> The original was correct.

The original was fine.

> There was no need to go over 80 characters
> just because of a limitation in checkpatch.

How is checkpatch not emitting a message on
either form a limitation?



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 07/10] Staging: fbtft: Remove useless newline
  2015-06-30 14:55     ` Joe Perches
@ 2015-06-30 17:45       ` Dan Carpenter
  2015-06-30 19:03         ` Joe Perches
  0 siblings, 1 reply; 25+ messages in thread
From: Dan Carpenter @ 2015-06-30 17:45 UTC (permalink / raw)
  To: Joe Perches; +Cc: devel, gregkh, linux-kernel, noralf, Fabio Falzoi

On Tue, Jun 30, 2015 at 07:55:42AM -0700, Joe Perches wrote:
> On Tue, 2015-06-30 at 10:42 +0300, Dan Carpenter wrote:
> > On Tue, Jun 30, 2015 at 08:43:14AM +0200, Fabio Falzoi wrote:
> > > No newline is needed since checkpatch doesn't complain about line longer
> > > than 80 characters for string literals.
> []
> > The original was correct.
> 
> The original was fine.
> 
> > There was no need to go over 80 characters
> > just because of a limitation in checkpatch.
> 
> How is checkpatch not emitting a message on
> either form a limitation?

It's not an easily solvable limitation, but the original was better than
the new patch.  This patch is all like "I've found a way to do something
bad and checkpatch.pl doesn't catch it so woohoo!"

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 07/10] Staging: fbtft: Remove useless newline
  2015-06-30 17:45       ` Dan Carpenter
@ 2015-06-30 19:03         ` Joe Perches
  0 siblings, 0 replies; 25+ messages in thread
From: Joe Perches @ 2015-06-30 19:03 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: devel, gregkh, linux-kernel, noralf, Fabio Falzoi

On Tue, 2015-06-30 at 20:45 +0300, Dan Carpenter wrote:
> On Tue, Jun 30, 2015 at 07:55:42AM -0700, Joe Perches wrote:
> > On Tue, 2015-06-30 at 10:42 +0300, Dan Carpenter wrote:
> > > On Tue, Jun 30, 2015 at 08:43:14AM +0200, Fabio Falzoi wrote:
> > > > No newline is needed since checkpatch doesn't complain about line longer
> > > > than 80 characters for string literals.
> > []
> > > The original was correct.
> > 
> > The original was fine.
> > 
> > > There was no need to go over 80 characters
> > > just because of a limitation in checkpatch.
> > 
> > How is checkpatch not emitting a message on
> > either form a limitation?
> 
> It's not an easily solvable limitation,

It's not a limitation at all.

> but the original was better than
> the new patch.  This patch is all like "I've found a way to do something
> bad and checkpatch.pl doesn't catch it so woohoo!"

I think either form is fine, but because either is fine,
it's not useful/better to change either.


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller
  2015-06-30  6:43 ` [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller Fabio Falzoi
@ 2015-07-15  2:12   ` Greg KH
  2015-07-23 11:09   ` Noralf Trønnes
  1 sibling, 0 replies; 25+ messages in thread
From: Greg KH @ 2015-07-15  2:12 UTC (permalink / raw)
  To: Fabio Falzoi; +Cc: thomas.petazzoni, noralf, devel, linux-kernel

On Tue, Jun 30, 2015 at 08:43:10AM +0200, Fabio Falzoi wrote:
> Use a struct flexfb_lcd_controller to holds chip properties, instead of
> relying on a long 'if - else if' chain.
> This allows to:
> - use a simple linear search to verify if a certain LCD controller
> model is supported or not.
> - add support for a new LCD chip controller simply defining a new
> flexfb_lcd_controller struct.
> 
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
> ---
>  drivers/staging/fbtft/fbtft.h  |  20 ++++
>  drivers/staging/fbtft/flexfb.c | 212 ++++++++++++++++++++++-------------------
>  2 files changed, 136 insertions(+), 96 deletions(-)

I need the maintainers to sign off on this before I can take it, as it's
not just a "simple" coding style fix.

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 04/10] Staging: fbtft: Use a helper function to set write_register op
  2015-06-30  6:43 ` [PATCH 04/10] Staging: fbtft: Use a helper function to set write_register op Fabio Falzoi
@ 2015-07-15  2:13   ` Greg KH
  0 siblings, 0 replies; 25+ messages in thread
From: Greg KH @ 2015-07-15  2:13 UTC (permalink / raw)
  To: Fabio Falzoi; +Cc: thomas.petazzoni, noralf, devel, linux-kernel

On Tue, Jun 30, 2015 at 08:43:11AM +0200, Fabio Falzoi wrote:
> Use a helper function to set the correct write_register function, based
> on the width of the registers.
> 
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
> ---
>  drivers/staging/fbtft/flexfb.c | 36 ++++++++++++++++++++++--------------
>  1 file changed, 22 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
> index 25b394d..dae092a 100644
> --- a/drivers/staging/fbtft/flexfb.c
> +++ b/drivers/staging/fbtft/flexfb.c
> @@ -363,6 +363,25 @@ static int flexfb_chip_init(const struct device *dev)
>  	return -EINVAL;
>  }
>  
> +static int flexfb_set_regwrite_func(const struct device *dev,
> +				    struct fbtft_par *par)
> +{
> +	switch (regwidth) {
> +	case 8:
> +		par->fbtftops.write_register = fbtft_write_reg8_bus8;
> +		break;
> +	case 16:
> +		par->fbtftops.write_register = fbtft_write_reg16_bus8;
> +		break;
> +	default:
> +		dev_err(dev, "argument 'regwidth': %d is not supported.\n",
> +			regwidth);
> +		return -EINVAL;
> +	}
> +
> +	return 0;
> +}
> +
>  static int flexfb_probe_common(struct spi_device *sdev,
>  			       struct platform_device *pdev)
>  {
> @@ -413,20 +432,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
>  		par->init_sequence = initp;
>  	par->fbtftops.init_display = fbtft_init_display;
>  
> -	/* registerwrite functions */
> -	switch (regwidth) {
> -	case 8:
> -		par->fbtftops.write_register = fbtft_write_reg8_bus8;
> -		break;
> -	case 16:
> -		par->fbtftops.write_register = fbtft_write_reg16_bus8;
> -		break;
> -	default:
> -		dev_err(dev,
> -			"argument 'regwidth': %d is not supported.\n",
> -			regwidth);
> -		return -EINVAL;
> -	}
> +	ret = flexfb_set_regwrite_func(dev, par);
> +	if (ret)
> +		goto out_release;
>  
>  	/* bus functions */
>  	if (sdev) {

Why?  You aren't calling this function anywhere else, so why move it?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 05/10] Staging: fbtft: Set bus specific ops using separate functions
  2015-06-30  6:43 ` [PATCH 05/10] Staging: fbtft: Set bus specific ops using separate functions Fabio Falzoi
@ 2015-07-15  2:13   ` Greg KH
  0 siblings, 0 replies; 25+ messages in thread
From: Greg KH @ 2015-07-15  2:13 UTC (permalink / raw)
  To: Fabio Falzoi; +Cc: thomas.petazzoni, noralf, devel, linux-kernel

On Tue, Jun 30, 2015 at 08:43:12AM +0200, Fabio Falzoi wrote:
> Use two separate functions for spi and platform bus
> (flexfb_set_spi_bus_func and flexfb_set_platform_bus_func,
> respectively) to set the appropriate write operations.
> 
> This patch corrects the following checkpatch errors:
> WARNING:LONG_LiINE at lines 446, 450, 466, 476, 489 and 495.
> CHECK:PARENTHESIS_ALIGNMENT at line 459.
> 
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>

Can't you fix the line lengths without having to move to separate
functions?

thanks,

greg k-h

^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op
  2015-06-30  6:43 ` [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op Fabio Falzoi
@ 2015-07-15  2:14   ` Greg KH
  2015-07-23 11:19     ` Noralf Trønnes
  0 siblings, 1 reply; 25+ messages in thread
From: Greg KH @ 2015-07-15  2:14 UTC (permalink / raw)
  To: Fabio Falzoi; +Cc: thomas.petazzoni, noralf, devel, linux-kernel

On Tue, Jun 30, 2015 at 08:43:13AM +0200, Fabio Falzoi wrote:
> Use a helper function to choose which set_addr_win implementation to
> use, based on the value of the setaddrwin module parameter.
> 
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
> ---
>  drivers/staging/fbtft/flexfb.c | 47 +++++++++++++++++++++++++-----------------
>  1 file changed, 28 insertions(+), 19 deletions(-)

Again, why?

I need a maintainer of the code to ack any of these...


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller
  2015-06-30  6:43 ` [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller Fabio Falzoi
  2015-07-15  2:12   ` Greg KH
@ 2015-07-23 11:09   ` Noralf Trønnes
  2015-08-02 14:57     ` [PATCH v2] " Fabio Falzoi
  1 sibling, 1 reply; 25+ messages in thread
From: Noralf Trønnes @ 2015-07-23 11:09 UTC (permalink / raw)
  To: Fabio Falzoi, thomas.petazzoni; +Cc: gregkh, devel, linux-kernel


Den 30.06.2015 08:43, skrev Fabio Falzoi:
> Use a struct flexfb_lcd_controller to holds chip properties, instead of
> relying on a long 'if - else if' chain.
> This allows to:
> - use a simple linear search to verify if a certain LCD controller
> model is supported or not.
> - add support for a new LCD chip controller simply defining a new
> flexfb_lcd_controller struct.
>
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
> ---
>   drivers/staging/fbtft/fbtft.h  |  20 ++++
>   drivers/staging/fbtft/flexfb.c | 212 ++++++++++++++++++++++-------------------
>   2 files changed, 136 insertions(+), 96 deletions(-)
>
> diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
> index 7d817eb..c96c06b 100644
> --- a/drivers/staging/fbtft/fbtft.h
> +++ b/drivers/staging/fbtft/fbtft.h
> @@ -256,6 +256,26 @@ struct fbtft_par {
>   	void *extra;
>   };
>   
> +/**
> + * struct flexfb_lcd_controller - Describes the LCD controller properties
> + * @name: Model name of the chip
> + * @width: Width of display in pixels
> + * @height: Height of display in pixels
> + * @setaddrwin: Which set_addr_win() implementation to use
> + * @regwidth: LCD Controller Register width in bits
> + * @init_seq: LCD initialization sequence
> + * @init_seq_sz: Size of LCD initialization sequence
> + */
> +struct flexfb_lcd_controller {
> +	const char *name;
> +	unsigned int width;
> +	unsigned int height;
> +	unsigned int setaddrwin;
> +	unsigned int regwidth;
> +	int *init_seq;
> +	int init_seq_sz;
> +};
> +

Please put this in flexfb.c since it won't be used outside that file.

>   #define NUMARGS(...)  (sizeof((int[]){__VA_ARGS__})/sizeof(int))
>   
>   #define write_reg(par, ...)                                              \
> diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
> index ed867e7..25b394d 100644
> --- a/drivers/staging/fbtft/flexfb.c
> +++ b/drivers/staging/fbtft/flexfb.c
> @@ -126,6 +126,89 @@ static int ssd1351_init[] = { -1, 0xfd, 0x12, -1, 0xfd, 0xb1, -1, 0xae, -1, 0xb3
>   			      -1, 0xab, 0x01, -1, 0xb1, 0x32, -1, 0xb4, 0xa0, 0xb5, 0x55, -1, 0xbb, 0x17, -1, 0xbe, 0x05,
>   			      -1, 0xc1, 0xc8, 0x80, 0xc8, -1, 0xc7, 0x0f, -1, 0xb6, 0x01, -1, 0xa6, -1, 0xaf, -3 };
>   
> +static const struct flexfb_lcd_controller flexfb_chip_table[] = {
> +	{
> +		.name = "st7735r",
> +		.width = 120,
> +		.height = 160,
> +		.init_seq = st7735r_init,
> +		.init_seq_sz = ARRAY_SIZE(st7735r_init),
> +	},
> +	{

Can this be put on one line? }, {

With the struct moved:
Acked-by: Noralf Trønnes <noralf@tronnes.org>


^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op
  2015-07-15  2:14   ` Greg KH
@ 2015-07-23 11:19     ` Noralf Trønnes
  0 siblings, 0 replies; 25+ messages in thread
From: Noralf Trønnes @ 2015-07-23 11:19 UTC (permalink / raw)
  To: Greg KH, Fabio Falzoi; +Cc: thomas.petazzoni, devel, linux-kernel


Den 15.07.2015 04:14, skrev Greg KH:
> On Tue, Jun 30, 2015 at 08:43:13AM +0200, Fabio Falzoi wrote:
>> Use a helper function to choose which set_addr_win implementation to
>> use, based on the value of the setaddrwin module parameter.
>>
>> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
>> ---
>>   drivers/staging/fbtft/flexfb.c | 47 +++++++++++++++++++++++++-----------------
>>   1 file changed, 28 insertions(+), 19 deletions(-)
> Again, why?
>
> I need a maintainer of the code to ack any of these...
>

I know this code fairly well, but I have to look up the details.
Moving these details from the probe function into small functions
makes it more difficult for me get to those details in a glance.
I would now have to scroll back and forth to see how flexfb is
doing things, especially since flexfb differs from the other drivers
which uses common functions in fbtft-core.c.
So I prefer to keep it as it is.


^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH v2] Staging: fbtft: Use a struct to describe each LCD controller
  2015-07-23 11:09   ` Noralf Trønnes
@ 2015-08-02 14:57     ` Fabio Falzoi
  2015-08-02 17:54       ` Noralf Trønnes
  0 siblings, 1 reply; 25+ messages in thread
From: Fabio Falzoi @ 2015-08-02 14:57 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Use a struct flexfb_lcd_controller to holds chip properties, instead of
relying on a long 'if - else if' chain.
This allows to:
- use a simple linear search to verify if a certain LCD controller
model is supported or not.
- add support for a new LCD chip controller simply defining a new
flexfb_lcd_controller struct.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
Acked-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/staging/fbtft/fbtft.h  |  20 ++++
 drivers/staging/fbtft/flexfb.c | 203 ++++++++++++++++++++++-------------------
 2 files changed, 127 insertions(+), 96 deletions(-)

diff --git a/drivers/staging/fbtft/fbtft.h b/drivers/staging/fbtft/fbtft.h
index 7d817eb..c96c06b 100644
--- a/drivers/staging/fbtft/fbtft.h
+++ b/drivers/staging/fbtft/fbtft.h
@@ -256,6 +256,26 @@ struct fbtft_par {
 	void *extra;
 };
 
+/**
+ * struct flexfb_lcd_controller - Describes the LCD controller properties
+ * @name: Model name of the chip
+ * @width: Width of display in pixels
+ * @height: Height of display in pixels
+ * @setaddrwin: Which set_addr_win() implementation to use
+ * @regwidth: LCD Controller Register width in bits
+ * @init_seq: LCD initialization sequence
+ * @init_seq_sz: Size of LCD initialization sequence
+ */
+struct flexfb_lcd_controller {
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int setaddrwin;
+	unsigned int regwidth;
+	int *init_seq;
+	int init_seq_sz;
+};
+
 #define NUMARGS(...)  (sizeof((int[]){__VA_ARGS__})/sizeof(int))
 
 #define write_reg(par, ...)                                              \
diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index ce6e3ae..e70678f 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -126,6 +126,80 @@ static int ssd1351_init[] = { -1, 0xfd, 0x12, -1, 0xfd, 0xb1, -1, 0xae, -1, 0xb3
 			      -1, 0xab, 0x01, -1, 0xb1, 0x32, -1, 0xb4, 0xa0, 0xb5, 0x55, -1, 0xbb, 0x17, -1, 0xbe, 0x05,
 			      -1, 0xc1, 0xc8, 0x80, 0xc8, -1, 0xc7, 0x0f, -1, 0xb6, 0x01, -1, 0xa6, -1, 0xaf, -3 };
 
+static const struct flexfb_lcd_controller flexfb_chip_table[] = {
+	{
+		.name = "st7735r",
+		.width = 120,
+		.height = 160,
+		.init_seq = st7735r_init,
+		.init_seq_sz = ARRAY_SIZE(st7735r_init),
+	}, {
+		.name = "hx8340bn",
+		.width = 176,
+		.height = 220,
+		.init_seq = hx8340bn_init,
+		.init_seq_sz = ARRAY_SIZE(hx8340bn_init),
+	}, {
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	}, {
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	}, {
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	}, {
+		.name = "ili9320",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 1,
+		.regwidth = 16,
+		.init_seq = ili9320_init,
+		.init_seq_sz = ARRAY_SIZE(ili9320_init),
+	}, {
+		.name = "ili9325",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 1,
+		.regwidth = 16,
+		.init_seq = ili9325_init,
+		.init_seq_sz = ARRAY_SIZE(ili9325_init),
+	}, {
+		.name = "ili9341",
+		.width = 240,
+		.height = 320,
+		.init_seq = ili9341_init,
+		.init_seq_sz = ARRAY_SIZE(ili9341_init),
+	}, {
+		.name = "ssd1289",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 2,
+		.regwidth = 16,
+		.init_seq = ssd1289_init,
+		.init_seq_sz = ARRAY_SIZE(ssd1289_init),
+	}, {
+		.name = "ssd1351",
+		.width = 128,
+		.height = 128,
+		.setaddrwin = 3,
+		.init_seq = ssd1351_init,
+		.init_seq_sz = ARRAY_SIZE(ssd1351_init),
+	},
+};
+
 /* ili9320, ili9325 */
 static void flexfb_set_addr_win_1(struct fbtft_par *par,
 				  int xs, int ys, int xe, int ye)
@@ -247,8 +321,38 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
 	return 0;
 }
 
+static void flexfb_chip_load_param(const struct flexfb_lcd_controller *chip)
+{
+	if (!width)
+		width = chip->width;
+	if (!height)
+		height = chip->height;
+	setaddrwin = chip->setaddrwin;
+	if (chip->regwidth)
+		regwidth = chip->regwidth;
+	if (!init_num) {
+		initp = chip->init_seq;
+		initp_num = chip->init_seq_sz;
+	}
+}
+
 static struct fbtft_display flex_display = { };
 
+static int flexfb_chip_init(const struct device *dev)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(flexfb_chip_table); i++)
+		if (!strcmp(chip, flexfb_chip_table[i].name)) {
+			flexfb_chip_load_param(&flexfb_chip_table[i]);
+			return 0;
+		}
+
+	dev_err(dev, "chip=%s is not supported\n", chip);
+
+	return -EINVAL;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
 			       struct platform_device *pdev)
 {
@@ -269,102 +373,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
 		       sdev ? "'SPI device'" : "'Platform device'");
 
 	if (chip) {
-
-		if (!strcmp(chip, "st7735r")) {
-			if (!width)
-				width = 128;
-			if (!height)
-				height = 160;
-			if (init_num == 0) {
-				initp = st7735r_init;
-				initp_num = ARRAY_SIZE(st7735r_init);
-			}
-
-		} else if (!strcmp(chip, "hx8340bn")) {
-			if (!width)
-				width = 176;
-			if (!height)
-				height = 220;
-			setaddrwin = 0;
-			if (init_num == 0) {
-				initp = hx8340bn_init;
-				initp_num = ARRAY_SIZE(hx8340bn_init);
-			}
-
-		} else if (!strcmp(chip, "ili9225")) {
-			if (!width)
-				width = 176;
-			if (!height)
-				height = 220;
-			setaddrwin = 0;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9225_init;
-				initp_num = ARRAY_SIZE(ili9225_init);
-			}
-
-		} else if (!strcmp(chip, "ili9320")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 1;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9320_init;
-				initp_num = ARRAY_SIZE(ili9320_init);
-			}
-
-		} else if (!strcmp(chip, "ili9325")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 1;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9325_init;
-				initp_num = ARRAY_SIZE(ili9325_init);
-			}
-
-		} else if (!strcmp(chip, "ili9341")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 0;
-			regwidth = 8;
-			if (init_num == 0) {
-				initp = ili9341_init;
-				initp_num = ARRAY_SIZE(ili9341_init);
-			}
-
-		} else if (!strcmp(chip, "ssd1289")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 2;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ssd1289_init;
-				initp_num = ARRAY_SIZE(ssd1289_init);
-			}
-
-		} else if (!strcmp(chip, "ssd1351")) {
-			if (!width)
-				width = 128;
-			if (!height)
-				height = 128;
-			setaddrwin = 3;
-			if (init_num == 0) {
-				initp = ssd1351_init;
-				initp_num = ARRAY_SIZE(ssd1351_init);
-			}
-		} else {
-			dev_err(dev, "chip=%s is not supported\n", chip);
-			return -EINVAL;
-		}
+		ret = flexfb_chip_init(dev);
+		if (ret)
+			return ret;
 	}
 
 	if (width == 0 || height == 0) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

* Re: [PATCH v2] Staging: fbtft: Use a struct to describe each LCD controller
  2015-08-02 14:57     ` [PATCH v2] " Fabio Falzoi
@ 2015-08-02 17:54       ` Noralf Trønnes
  2015-08-02 20:17         ` Fabio Falzoi
  2015-08-02 20:30         ` [PATCH v3] " Fabio Falzoi
  0 siblings, 2 replies; 25+ messages in thread
From: Noralf Trønnes @ 2015-08-02 17:54 UTC (permalink / raw)
  To: Fabio Falzoi, thomas.petazzoni; +Cc: gregkh, devel, linux-kernel


Den 02.08.2015 16:57, skrev Fabio Falzoi:
> Use a struct flexfb_lcd_controller to holds chip properties, instead of
> relying on a long 'if - else if' chain.
> This allows to:
> - use a simple linear search to verify if a certain LCD controller
> model is supported or not.
> - add support for a new LCD chip controller simply defining a new
> flexfb_lcd_controller struct.
>
> Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
> Acked-by: Noralf Trønnes <noralf@tronnes.org>
> ---

Seems I wasn't clear enough, you could use my ack if you put
struct flexfb_lcd_controller inside the driver and not in
fbtft.h


Noralf.



^ permalink raw reply	[flat|nested] 25+ messages in thread

* Re: [PATCH v2] Staging: fbtft: Use a struct to describe each LCD controller
  2015-08-02 17:54       ` Noralf Trønnes
@ 2015-08-02 20:17         ` Fabio Falzoi
  2015-08-02 20:30         ` [PATCH v3] " Fabio Falzoi
  1 sibling, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-08-02 20:17 UTC (permalink / raw)
  To: Noralf Trønnes; +Cc: thomas.petazzoni, gregkh, devel, linux-kernel

On Sun, Aug 02, 2015 at 07:54:48PM +0200, Noralf Trønnes wrote:
> 
> Seems I wasn't clear enough, you could use my ack if you put
> struct flexfb_lcd_controller inside the driver and not in
> fbtft.h
> 
> 
> Noralf.
> 
>

Sorry Noralf, I misunderstood your review.
I will modify the patch and send an updated version.

Thank you,
Fabio

^ permalink raw reply	[flat|nested] 25+ messages in thread

* [PATCH v3] Staging: fbtft: Use a struct to describe each LCD controller
  2015-08-02 17:54       ` Noralf Trønnes
  2015-08-02 20:17         ` Fabio Falzoi
@ 2015-08-02 20:30         ` Fabio Falzoi
  1 sibling, 0 replies; 25+ messages in thread
From: Fabio Falzoi @ 2015-08-02 20:30 UTC (permalink / raw)
  To: thomas.petazzoni, noralf; +Cc: gregkh, devel, linux-kernel, Fabio Falzoi

Use a struct flexfb_lcd_controller to holds chip properties, instead of
relying on a long 'if - else if' chain.
This allows to:
- use a simple linear search to verify if a certain LCD controller
model is supported or not.
- add support for a new LCD chip controller simply defining a new
flexfb_lcd_controller struct.

Signed-off-by: Fabio Falzoi <fabio.falzoi84@gmail.com>
Acked-by: Noralf Trønnes <noralf@tronnes.org>
---
 drivers/staging/fbtft/flexfb.c | 232 ++++++++++++++++++++++++-----------------
 1 file changed, 136 insertions(+), 96 deletions(-)

diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index ce6e3ae..b3a68c9 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -126,6 +126,109 @@ static int ssd1351_init[] = { -1, 0xfd, 0x12, -1, 0xfd, 0xb1, -1, 0xae, -1, 0xb3
 			      -1, 0xab, 0x01, -1, 0xb1, 0x32, -1, 0xb4, 0xa0, 0xb5, 0x55, -1, 0xbb, 0x17, -1, 0xbe, 0x05,
 			      -1, 0xc1, 0xc8, 0x80, 0xc8, -1, 0xc7, 0x0f, -1, 0xb6, 0x01, -1, 0xa6, -1, 0xaf, -3 };
 
+/**
+ * struct flexfb_lcd_controller - Describes the LCD controller properties
+ * @name: Model name of the chip
+ * @width: Width of display in pixels
+ * @height: Height of display in pixels
+ * @setaddrwin: Which set_addr_win() implementation to use
+ * @regwidth: LCD Controller Register width in bits
+ * @init_seq: LCD initialization sequence
+ * @init_seq_sz: Size of LCD initialization sequence
+ */
+struct flexfb_lcd_controller {
+	const char *name;
+	unsigned int width;
+	unsigned int height;
+	unsigned int setaddrwin;
+	unsigned int regwidth;
+	int *init_seq;
+	int init_seq_sz;
+};
+
+static const struct flexfb_lcd_controller flexfb_chip_table[] = {
+	{
+		.name = "st7735r",
+		.width = 120,
+		.height = 160,
+		.init_seq = st7735r_init,
+		.init_seq_sz = ARRAY_SIZE(st7735r_init),
+	},
+	{
+		.name = "hx8340bn",
+		.width = 176,
+		.height = 220,
+		.init_seq = hx8340bn_init,
+		.init_seq_sz = ARRAY_SIZE(hx8340bn_init),
+	},
+	{
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	},
+	{
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	},
+	{
+		.name = "ili9225",
+		.width = 176,
+		.height = 220,
+		.regwidth = 16,
+		.init_seq = ili9225_init,
+		.init_seq_sz = ARRAY_SIZE(ili9225_init),
+	},
+	{
+		.name = "ili9320",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 1,
+		.regwidth = 16,
+		.init_seq = ili9320_init,
+		.init_seq_sz = ARRAY_SIZE(ili9320_init),
+	},
+	{
+		.name = "ili9325",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 1,
+		.regwidth = 16,
+		.init_seq = ili9325_init,
+		.init_seq_sz = ARRAY_SIZE(ili9325_init),
+	},
+	{
+		.name = "ili9341",
+		.width = 240,
+		.height = 320,
+		.init_seq = ili9341_init,
+		.init_seq_sz = ARRAY_SIZE(ili9341_init),
+	},
+	{
+		.name = "ssd1289",
+		.width = 240,
+		.height = 320,
+		.setaddrwin = 2,
+		.regwidth = 16,
+		.init_seq = ssd1289_init,
+		.init_seq_sz = ARRAY_SIZE(ssd1289_init),
+	},
+	{
+		.name = "ssd1351",
+		.width = 128,
+		.height = 128,
+		.setaddrwin = 3,
+		.init_seq = ssd1351_init,
+		.init_seq_sz = ARRAY_SIZE(ssd1351_init),
+	},
+};
+
 /* ili9320, ili9325 */
 static void flexfb_set_addr_win_1(struct fbtft_par *par,
 				  int xs, int ys, int xe, int ye)
@@ -247,8 +350,38 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
 	return 0;
 }
 
+static void flexfb_chip_load_param(const struct flexfb_lcd_controller *chip)
+{
+	if (!width)
+		width = chip->width;
+	if (!height)
+		height = chip->height;
+	setaddrwin = chip->setaddrwin;
+	if (chip->regwidth)
+		regwidth = chip->regwidth;
+	if (!init_num) {
+		initp = chip->init_seq;
+		initp_num = chip->init_seq_sz;
+	}
+}
+
 static struct fbtft_display flex_display = { };
 
+static int flexfb_chip_init(const struct device *dev)
+{
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(flexfb_chip_table); i++)
+		if (!strcmp(chip, flexfb_chip_table[i].name)) {
+			flexfb_chip_load_param(&flexfb_chip_table[i]);
+			return 0;
+		}
+
+	dev_err(dev, "chip=%s is not supported\n", chip);
+
+	return -EINVAL;
+}
+
 static int flexfb_probe_common(struct spi_device *sdev,
 			       struct platform_device *pdev)
 {
@@ -269,102 +402,9 @@ static int flexfb_probe_common(struct spi_device *sdev,
 		       sdev ? "'SPI device'" : "'Platform device'");
 
 	if (chip) {
-
-		if (!strcmp(chip, "st7735r")) {
-			if (!width)
-				width = 128;
-			if (!height)
-				height = 160;
-			if (init_num == 0) {
-				initp = st7735r_init;
-				initp_num = ARRAY_SIZE(st7735r_init);
-			}
-
-		} else if (!strcmp(chip, "hx8340bn")) {
-			if (!width)
-				width = 176;
-			if (!height)
-				height = 220;
-			setaddrwin = 0;
-			if (init_num == 0) {
-				initp = hx8340bn_init;
-				initp_num = ARRAY_SIZE(hx8340bn_init);
-			}
-
-		} else if (!strcmp(chip, "ili9225")) {
-			if (!width)
-				width = 176;
-			if (!height)
-				height = 220;
-			setaddrwin = 0;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9225_init;
-				initp_num = ARRAY_SIZE(ili9225_init);
-			}
-
-		} else if (!strcmp(chip, "ili9320")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 1;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9320_init;
-				initp_num = ARRAY_SIZE(ili9320_init);
-			}
-
-		} else if (!strcmp(chip, "ili9325")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 1;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ili9325_init;
-				initp_num = ARRAY_SIZE(ili9325_init);
-			}
-
-		} else if (!strcmp(chip, "ili9341")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 0;
-			regwidth = 8;
-			if (init_num == 0) {
-				initp = ili9341_init;
-				initp_num = ARRAY_SIZE(ili9341_init);
-			}
-
-		} else if (!strcmp(chip, "ssd1289")) {
-			if (!width)
-				width = 240;
-			if (!height)
-				height = 320;
-			setaddrwin = 2;
-			regwidth = 16;
-			if (init_num == 0) {
-				initp = ssd1289_init;
-				initp_num = ARRAY_SIZE(ssd1289_init);
-			}
-
-		} else if (!strcmp(chip, "ssd1351")) {
-			if (!width)
-				width = 128;
-			if (!height)
-				height = 128;
-			setaddrwin = 3;
-			if (init_num == 0) {
-				initp = ssd1351_init;
-				initp_num = ARRAY_SIZE(ssd1351_init);
-			}
-		} else {
-			dev_err(dev, "chip=%s is not supported\n", chip);
-			return -EINVAL;
-		}
+		ret = flexfb_chip_init(dev);
+		if (ret)
+			return ret;
 	}
 
 	if (width == 0 || height == 0) {
-- 
2.1.4


^ permalink raw reply related	[flat|nested] 25+ messages in thread

end of thread, other threads:[~2015-08-02 20:30 UTC | newest]

Thread overview: 25+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-06-30  6:43 [PATCH 00/10] Staging: fbtft: flexfb.c file clean up Fabio Falzoi
2015-06-30  6:43 ` [PATCH 01/10] Staging: fbtft: Remove paragraph about writing to FSF Fabio Falzoi
2015-06-30  6:43 ` [PATCH 02/10] Staging: fbtft: Remove unnecessary multiple blank lines Fabio Falzoi
2015-06-30  6:43 ` [PATCH 03/10] Staging: fbtft: Use a struct to describe each LCD controller Fabio Falzoi
2015-07-15  2:12   ` Greg KH
2015-07-23 11:09   ` Noralf Trønnes
2015-08-02 14:57     ` [PATCH v2] " Fabio Falzoi
2015-08-02 17:54       ` Noralf Trønnes
2015-08-02 20:17         ` Fabio Falzoi
2015-08-02 20:30         ` [PATCH v3] " Fabio Falzoi
2015-06-30  6:43 ` [PATCH 04/10] Staging: fbtft: Use a helper function to set write_register op Fabio Falzoi
2015-07-15  2:13   ` Greg KH
2015-06-30  6:43 ` [PATCH 05/10] Staging: fbtft: Set bus specific ops using separate functions Fabio Falzoi
2015-07-15  2:13   ` Greg KH
2015-06-30  6:43 ` [PATCH 06/10] Staging: fbtft: Use a helper function to set set_addr_win op Fabio Falzoi
2015-07-15  2:14   ` Greg KH
2015-07-23 11:19     ` Noralf Trønnes
2015-06-30  6:43 ` [PATCH 07/10] Staging: fbtft: Remove useless newline Fabio Falzoi
2015-06-30  7:42   ` Dan Carpenter
2015-06-30 14:55     ` Joe Perches
2015-06-30 17:45       ` Dan Carpenter
2015-06-30 19:03         ` Joe Perches
2015-06-30  6:43 ` [PATCH 08/10] Staging: fbtft: Avoid duplicating code to check gpio.dc value Fabio Falzoi
2015-06-30  6:43 ` [PATCH 09/10] Staging: fbtft: Fix parenthesis alignment coding style issue Fabio Falzoi
2015-06-30  6:43 ` [PATCH 10/10] Staging: fbtft: Fix spacing " Fabio Falzoi

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.