Patchwork [U-Boot,RESEND] exynos: video: change mipi dsi write function parameters correctly

login
register
mail settings
Submitter Donghwa Lee
Date Aug. 5, 2013, 4:34 a.m.
Message ID <1375677273-21539-1-git-send-email-dh09.lee@samsung.com>
Download mbox | patch
Permalink /patch/264570/
State Accepted
Delegated to: Anatolij Gustschin
Headers show

Comments

Donghwa Lee - Aug. 5, 2013, 4:34 a.m.
This patch have changed mipi dsi write functions' parameters correctly
so that type cast operations were removed. And mipi dsi payload is
composed with array of panel commands to improve readability.

Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
---
 arch/arm/include/asm/arch-exynos/mipi_dsim.h |    2 +-
 drivers/video/exynos_mipi_dsi_common.c       |   62 ++++++++++++--------------
 drivers/video/exynos_mipi_dsi_common.h       |    2 +-
 drivers/video/exynos_mipi_dsi_lowlevel.c     |    2 +-
 drivers/video/exynos_mipi_dsi_lowlevel.h     |    2 +-
 drivers/video/s6e8ax0.c                      |   59 +++++++++++++-----------
 6 files changed, 66 insertions(+), 63 deletions(-)
Anatolij Gustschin - Aug. 12, 2013, 8:44 p.m.
On Mon, 05 Aug 2013 13:34:32 +0900
Donghwa Lee <dh09.lee@samsung.com> wrote:

> This patch have changed mipi dsi write functions' parameters correctly
> so that type cast operations were removed. And mipi dsi payload is
> composed with array of panel commands to improve readability.
> 
> Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
> ---
>  arch/arm/include/asm/arch-exynos/mipi_dsim.h |    2 +-
>  drivers/video/exynos_mipi_dsi_common.c       |   62 ++++++++++++--------------
>  drivers/video/exynos_mipi_dsi_common.h       |    2 +-
>  drivers/video/exynos_mipi_dsi_lowlevel.c     |    2 +-
>  drivers/video/exynos_mipi_dsi_lowlevel.h     |    2 +-
>  drivers/video/s6e8ax0.c                      |   59 +++++++++++++-----------
>  6 files changed, 66 insertions(+), 63 deletions(-)

Applied to u-boot-video/master. Thanks!

Anatolij

Patch

diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
index b73263d..afe7c08 100644
--- a/arch/arm/include/asm/arch-exynos/mipi_dsim.h
+++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
@@ -304,7 +304,7 @@  struct exynos_platform_mipi_dsim {
  */
 struct mipi_dsim_master_ops {
 	int (*cmd_write)(struct mipi_dsim_device *dsim, unsigned int data_id,
-		unsigned int data0, unsigned int data1);
+		const unsigned char *data0, unsigned int data1);
 	int (*cmd_read)(struct mipi_dsim_device *dsim, unsigned int data_id,
 		unsigned int data0, unsigned int data1);
 	int (*get_dsim_frame_done)(struct mipi_dsim_device *dsim);
diff --git a/drivers/video/exynos_mipi_dsi_common.c b/drivers/video/exynos_mipi_dsi_common.c
index 6eeb464..1fc6102 100644
--- a/drivers/video/exynos_mipi_dsi_common.c
+++ b/drivers/video/exynos_mipi_dsi_common.c
@@ -63,7 +63,7 @@  static unsigned int dpll_table[15] = {
 };
 
 static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim,
-		unsigned int data0, unsigned int data1)
+		const unsigned char *data0, unsigned int data1)
 {
 	unsigned int data_cnt = 0, payload = 0;
 
@@ -75,42 +75,40 @@  static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim,
 		 */
 		if ((data1 - data_cnt) < 4) {
 			if ((data1 - data_cnt) == 3) {
-				payload = *(u8 *)(data0 + data_cnt) |
-					(*(u8 *)(data0 + (data_cnt + 1))) << 8 |
-					(*(u8 *)(data0 + (data_cnt + 2))) << 16;
+				payload = data0[data_cnt] |
+					data0[data_cnt + 1] << 8 |
+					data0[data_cnt + 2] << 16;
 			debug("count = 3 payload = %x, %x %x %x\n",
-				payload, *(u8 *)(data0 + data_cnt),
-				*(u8 *)(data0 + (data_cnt + 1)),
-				*(u8 *)(data0 + (data_cnt + 2)));
+				payload, data0[data_cnt],
+				data0[data_cnt + 1],
+				data0[data_cnt + 2]);
 			} else if ((data1 - data_cnt) == 2) {
-				payload = *(u8 *)(data0 + data_cnt) |
-					(*(u8 *)(data0 + (data_cnt + 1))) << 8;
+				payload = data0[data_cnt] |
+					data0[data_cnt + 1] << 8;
 			debug("count = 2 payload = %x, %x %x\n", payload,
-				*(u8 *)(data0 + data_cnt),
-				*(u8 *)(data0 + (data_cnt + 1)));
+				data0[data_cnt], data0[data_cnt + 1]);
 			} else if ((data1 - data_cnt) == 1) {
-				payload = *(u8 *)(data0 + data_cnt);
+				payload = data0[data_cnt];
 			}
 		} else {
 			/* send 4bytes per one time. */
-			payload = *(u8 *)(data0 + data_cnt) |
-				(*(u8 *)(data0 + (data_cnt + 1))) << 8 |
-				(*(u8 *)(data0 + (data_cnt + 2))) << 16 |
-				(*(u8 *)(data0 + (data_cnt + 3))) << 24;
+			payload = data0[data_cnt] |
+				data0[data_cnt + 1] << 8 |
+				data0[data_cnt + 2] << 16 |
+				data0[data_cnt + 3] << 24;
 
 			debug("count = 4 payload = %x, %x %x %x %x\n",
 				payload, *(u8 *)(data0 + data_cnt),
-				*(u8 *)(data0 + (data_cnt + 1)),
-				*(u8 *)(data0 + (data_cnt + 2)),
-				*(u8 *)(data0 + (data_cnt + 3)));
-
+				data0[data_cnt + 1],
+				data0[data_cnt + 2],
+				data0[data_cnt + 3]);
 		}
 		exynos_mipi_dsi_wr_tx_data(dsim, payload);
 	}
 }
 
 int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
-	unsigned int data0, unsigned int data1)
+	const unsigned char *data0, unsigned int data1)
 {
 	unsigned int timeout = TRY_GET_FIFO_TIMEOUT;
 	unsigned long delay_val, delay;
@@ -149,8 +147,8 @@  int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
 	case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
 	case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
 		debug("data0 = %x data1 = %x\n",
-				data0, data1);
-		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+				data0[0], data0[1]);
+		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);
 		if (check_rx_ack) {
 			/* process response func should be implemented */
 			return 0;
@@ -163,7 +161,7 @@  int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
 	case MIPI_DSI_COLOR_MODE_ON:
 	case MIPI_DSI_SHUTDOWN_PERIPHERAL:
 	case MIPI_DSI_TURN_ON_PERIPHERAL:
-		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);
 		if (check_rx_ack) {
 			/* process response func should be implemented. */
 			return 0;
@@ -185,7 +183,7 @@  int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
 	case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:
 	case MIPI_DSI_DCS_READ:
 		exynos_mipi_dsi_clear_all_interrupt(dsim);
-		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+		exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0[0], data0[1]);
 		/* process response func should be implemented. */
 		return 0;
 
@@ -196,21 +194,19 @@  int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
 	case MIPI_DSI_GENERIC_LONG_WRITE:
 	case MIPI_DSI_DCS_LONG_WRITE:
 	{
-		unsigned int data_cnt = 0, payload = 0;
+		unsigned int payload = 0;
 
 		/* if data count is less then 4, then send 3bytes data.  */
 		if (data1 < 4) {
-			payload = *(u8 *)(data0) |
-				*(u8 *)(data0 + 1) << 8 |
-				*(u8 *)(data0 + 2) << 16;
+			payload = data0[0] |
+				data0[1] << 8 |
+				data0[2] << 16;
 
 			exynos_mipi_dsi_wr_tx_data(dsim, payload);
 
 			debug("count = %d payload = %x,%x %x %x\n",
-				data1, payload,
-				*(u8 *)(data0 + data_cnt),
-				*(u8 *)(data0 + (data_cnt + 1)),
-				*(u8 *)(data0 + (data_cnt + 2)));
+				data1, payload, data0[0],
+				data0[1], data0[2]);
 		} else {
 			/* in case that data count is more then 4 */
 			exynos_mipi_dsi_long_data_wr(dsim, data0, data1);
diff --git a/drivers/video/exynos_mipi_dsi_common.h b/drivers/video/exynos_mipi_dsi_common.h
index 4d80679..af0a695 100644
--- a/drivers/video/exynos_mipi_dsi_common.h
+++ b/drivers/video/exynos_mipi_dsi_common.h
@@ -26,7 +26,7 @@ 
 #define _EXYNOS_MIPI_DSI_COMMON_H
 
 int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
-	unsigned int data0, unsigned int data1);
+	const unsigned char *data0, unsigned int data1);
 int exynos_mipi_dsi_pll_on(struct mipi_dsim_device *dsim, unsigned int enable);
 unsigned long exynos_mipi_dsi_change_pll(struct mipi_dsim_device *dsim,
 	unsigned int pre_divider, unsigned int main_divider,
diff --git a/drivers/video/exynos_mipi_dsi_lowlevel.c b/drivers/video/exynos_mipi_dsi_lowlevel.c
index d61b773..00248f0 100644
--- a/drivers/video/exynos_mipi_dsi_lowlevel.c
+++ b/drivers/video/exynos_mipi_dsi_lowlevel.c
@@ -613,7 +613,7 @@  unsigned int exynos_mipi_dsi_get_fifo_state(struct mipi_dsim_device *dsim)
 }
 
 void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim,
-	unsigned int di, unsigned int data0, unsigned int data1)
+	unsigned int di, const unsigned char data0, const unsigned char data1)
 {
 	struct exynos_mipi_dsim *mipi_dsim =
 		(struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
diff --git a/drivers/video/exynos_mipi_dsi_lowlevel.h b/drivers/video/exynos_mipi_dsi_lowlevel.h
index 4b8c441..1d62cc2 100644
--- a/drivers/video/exynos_mipi_dsi_lowlevel.h
+++ b/drivers/video/exynos_mipi_dsi_lowlevel.h
@@ -104,7 +104,7 @@  unsigned int _exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device
 						*dsim);
 void _exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim);
 void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim,
-		unsigned int di, unsigned int data0, unsigned int data1);
+		unsigned int di, const unsigned char data0, const unsigned char data1);
 void exynos_mipi_dsi_wr_tx_data(struct mipi_dsim_device *dsim,
 		unsigned int tx_data);
 
diff --git a/drivers/video/s6e8ax0.c b/drivers/video/s6e8ax0.c
index 176c518..4de4170 100644
--- a/drivers/video/s6e8ax0.c
+++ b/drivers/video/s6e8ax0.c
@@ -47,11 +47,11 @@  static void s6e8ax0_panel_cond(struct mipi_dsim_device *dsim_dev)
 
 	if (reverse) {
 		ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send_reverse,
+			data_to_send_reverse,
 			ARRAY_SIZE(data_to_send_reverse));
 	} else {
 		ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 	}
 }
 
@@ -63,8 +63,7 @@  static void s6e8ax0_display_cond(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev)
@@ -78,15 +77,18 @@  static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_gamma_update(struct mipi_dsim_device *dsim_dev)
 {
 	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+	static const unsigned char data_to_send[] = {
+		0xf7, 0x03
+	};
 
-	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xf7, 0x3);
+	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, data_to_send,
+			ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev)
@@ -97,8 +99,7 @@  static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev)
@@ -110,8 +111,7 @@  static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev)
@@ -122,8 +122,7 @@  static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev)
@@ -134,8 +133,7 @@  static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev)
@@ -146,14 +144,18 @@  static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+		data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control3(struct mipi_dsim_device *dsim_dev)
 {
 	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+	static const unsigned char data_to_send[] = {
+		0xe3, 0x40
+	};
 
-	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xe3, 0x40);
+	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, data_to_send,
+		       ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev)
@@ -164,7 +166,7 @@  static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+		data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev)
@@ -175,24 +177,29 @@  static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-			(unsigned int)data_to_send,
-			ARRAY_SIZE(data_to_send));
+			data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_display_on(struct mipi_dsim_device *dsim_dev)
 {
 	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+	static const unsigned char data_to_send[] = {
+		0x29, 0x00
+	};
 
-	ops->cmd_write(dsim_dev,
-		MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0x00);
+	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE, data_to_send,
+		       ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_sleep_out(struct mipi_dsim_device *dsim_dev)
 {
 	struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+	static const unsigned char data_to_send[] = {
+		0x11, 0x00
+	};
 
-	ops->cmd_write(dsim_dev,
-		MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0x00);
+	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE, data_to_send,
+		       ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev)
@@ -203,7 +210,7 @@  static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+		data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev)
@@ -214,7 +221,7 @@  static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev)
 	};
 
 	ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
-		(unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+		data_to_send, ARRAY_SIZE(data_to_send));
 }
 
 static void s6e8ax0_panel_init(struct mipi_dsim_device *dsim_dev)