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

Donghwa Lee dh09.lee at samsung.com
Fri Jun 7 03:25:53 CEST 2013


The previous patches is broken, so I send again.

This patch have changed mipi dsi write functions' parameters correctly.

- exynos_mipi_dsi_wr_data()'s 3rd parameter is changed to
'const unsigned char' type.
- exynos_mipi_dsi_wr_tx_header()'s 3rd and 4th parameters were changed
to 'const unsigned char' type.
- s6e8ax0 panel driver does not use type cast operations to write
mipi dsi commands anymore.
- mipi dsi payload is composed with array of panel commands to improve
readability.
- removes unused variable of exynos_mipi_dsi_wr_data()

Signed-off-by: Donghwa Lee <dh09.lee at 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(-)

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..8f24fcd 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)
-- 
1.7.9.5


More information about the U-Boot mailing list