<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:"Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
@font-face
        {font-family:"Malgun Gothic";
        panose-1:2 11 5 3 2 0 0 2 0 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        text-align:justify;
        text-justify:inter-ideograph;
        text-autospace:none;
        word-break:break-hangul;
        font-size:10.0pt;
        font-family:"Malgun Gothic";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Malgun Gothic";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
/* Page Definitions */
@page Section1
        {size:612.0pt 792.0pt;
        margin:3.0cm 72.0pt 72.0pt 72.0pt;}
div.Section1
        {page:Section1;}
-->
</style>
<!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang=KO link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Signed-off-by: Inki Dae
<inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>---<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/mach-s5pv210/include/mach/regs-clock.h
| 3 +-<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/plat-samsung/Kconfig
| 6 +<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/plat-samsung/Makefile
| 2 +<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/plat-samsung/include/plat/dsim.h
| 447 +++++++++++++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/plat-samsung/include/plat/mipi_ddi.h
| 98 ++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/plat-samsung/include/plat/regs-dsim.h
| 281 +++++++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> arch/arm/plat-samsung/setup-dsim.c
| 144 +++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/Kconfig
| 7 +<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/Makefile
| 2 +<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/s5p-dsim.c
| 463 +++++++++++++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/s5p_dsim_common.c
| 691 +++++++++++++++++++++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/s5p_dsim_common.h
| 35 ++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/s5p_dsim_lowlevel.c
| 569 +++++++++++++++++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> drivers/video/s5p_dsim_lowlevel.h
| 101 ++++<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> 14 files changed, 2848 insertions(+),
1 deletions(-)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
arch/arm/plat-samsung/include/plat/dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
arch/arm/plat-samsung/include/plat/mipi_ddi.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
arch/arm/plat-samsung/include/plat/regs-dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
arch/arm/plat-samsung/setup-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
drivers/video/s5p-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
drivers/video/s5p_dsim_common.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
drivers/video/s5p_dsim_common.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
drivers/video/s5p_dsim_lowlevel.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> create mode 100644
drivers/video/s5p_dsim_lowlevel.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US><o:p> </o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/arch/arm/mach-s5pv210/include/mach/regs-clock.h
b/arch/arm/mach-s5pv210/include/mach/regs-clock.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index ebaabe0..c8b9366 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>---
a/arch/arm/mach-s5pv210/include/mach/regs-clock.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++
b/arch/arm/mach-s5pv210/include/mach/regs-clock.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -196,7 +196,8 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> #define S5P_OTHERS_USB_SIG_MASK (1
<< 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> /* MIPI */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>-#define S5P_MIPI_DPHY_EN (3)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_MIPI_DPHY_EN (3
<< 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_MIPI_M_RESETN (1
<< 1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> /* S5P_DAC_CONTROL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> #define S5P_DAC_ENABLE (1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git a/arch/arm/plat-samsung/Kconfig
b/arch/arm/plat-samsung/Kconfig<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index dcd6eff..cadbe32 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- a/arch/arm/plat-samsung/Kconfig<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/arch/arm/plat-samsung/Kconfig<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -257,6 +257,12 @@ config S3C64XX_DEV_SPI<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
Compile in platform device definitions for S3C64XX's type<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
SPI controllers.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+config S5PV210_SETUP_DSIM<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ bool<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ depends
on REGULATOR <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ help<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
Common setup code for MIPI-DSIM<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> config SAMSUNG_DEV_TS<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> bool<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> help<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git a/arch/arm/plat-samsung/Makefile
b/arch/arm/plat-samsung/Makefile<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index afcce47..bf866eb 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- a/arch/arm/plat-samsung/Makefile<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/arch/arm/plat-samsung/Makefile<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -59,6 +59,8 @@
obj-$(CONFIG_SAMSUNG_DEV_IDE) += dev-ide.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_SAMSUNG_DEV_TS) +=
dev-ts.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_SAMSUNG_DEV_KEYPAD) +=
dev-keypad.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+obj-$(CONFIG_S5PV210_SETUP_DSIM) +=
setup-dsim.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> # DMA support<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_S3C_DMA) +=
dma.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/arch/arm/plat-samsung/include/plat/dsim.h
b/arch/arm/plat-samsung/include/plat/dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..9c1d6a3<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++
b/arch/arm/plat-samsung/include/plat/dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,447 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*
linux/arm/arch/mach-s5pc110/include/mach/dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Platform data header for Samsung
MIPI-DSIM.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Copyright (c) 2009 Samsung Electronics<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#ifndef _DSIM_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define _DSIM_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/device.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* h/w configuration */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define MIPI_FIN 24000000<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TIMEOUT_MS 5000<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_NO_OF_INTERRUPT 26<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TRUE 1<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_FALSE 0<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HEADER_FIFO_SZ 16<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_interface_type {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_COMMAND
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VIDEO
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_state {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_RESET
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_INIT
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_STOP
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_HSCLKEN
= 3,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_ULPS
= 4,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_virtual_ch_no {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VIRTUAL_CH_0
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VIRTUAL_CH_1
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VIRTUAL_CH_2
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VIRTUAL_CH_3
= 3,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_video_mode_type {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_NON_BURST_SYNC_EVENT
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_NON_BURST_SYNC_PULSE
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_BURST
= 3,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_NON_VIDEO_MODE
= 4,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_fifo_state {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_RX_DATA_FULL
= (1 << 25),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_RX_DATA_EMPTY
= (1 << 24),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SFR_HEADER_FULL
= (1 << 23),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SFR_HEADER_EMPTY
= (1 << 22),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SFR_PAYLOAD_FULL
= (1 << 21),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SFR_PAYLOAD_EMPTY
= (1 << 20),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ I80_HEADER_FULL
= (1 << 19),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ I80_HEADER_EMPTY
= (1 << 18),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ I80_PALOAD_FULL
= (1 << 17),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ I80_PALOAD_EMPTY
= (1 << 16),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SUB_DISP_HEADER_FULL
= (1 << 15),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SUB_DISP_HEADER_EMPTY
= (1 << 14),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SUB_DISP_PAYLOAD_FULL
= (1 << 13),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SUB_DISP_PAYLOAD_EMPTY
= (1 << 12),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ MAIN_DISP_HEADER_FULL
= (1 << 11),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ MAIN_DISP_HEADER_EMPTY
= (1 << 10),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ MAIN_DISP_PAYLOAD_FULL
= (1 << 9),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ MAIN_DISP_PAYLOAD_EMPTY
= (1 << 8),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_no_of_data_lane {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_DATA_LANE_1
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_DATA_LANE_2
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_DATA_LANE_3
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_DATA_LANE_4
= 3,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_byte_clk_src {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_PLL_OUT_DIV8
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_EXT_CLK_DIV8
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_EXT_CLK_BYPASS
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_lane {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA0
= (1 << 0),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA1
= (1 << 1),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA2
= (1 << 2),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA3
= (1 << 3),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA_ALL
= 0xf,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_CLOCK
= (1 << 4),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_ALL
= DSIM_LANE_CLOCK | DSIM_LANE_DATA_ALL,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_pixel_format {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_CMD_3BPP
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_CMD_8BPP
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_CMD_12BPP
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_CMD_16BPP
= 3,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VID_16BPP_565
= 4,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_VID_18BPP_666PACKED
= 5,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_18BPP_666LOOSELYPACKED
= 6,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_24BPP_888
= 7,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_lane_state {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_STATE_HS_READY,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_STATE_ULPS,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_STATE_STOP,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_STATE_LPDT,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_transfer {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_NEITHER =
0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BYCPU =
(1 << 7),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BYLCDC =
(1 << 6),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BOTH =
(0x3 << 6)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_lane_change {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_NO_CHANGE
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_DATA_LANE_CHANGE
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_CLOCK_NALE_CHANGE
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_ALL_LANE_CHANGE
= 3,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum dsim_int_src {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_ALL_OF_INTR
= 0xffffffff,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_PLL_STABLE
= (1 << 31),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/**<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * struct dsim_config - interface for
configuring mipi-dsi controller.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @auto_flush: enable or disable Auto
flush of MD FIFO using VSYNC pulse.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @eot_disable: enable or disable EoT
packet in HS mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @auto_vertical_cnt: specifies auto
vertical count mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * in
Video mode, the vertical line transition uses line counter<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * configured
by VSA, VBP, and Vertical resolution.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * If
this bit is set to '1', the line counter does not use VSA and VBP<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * registers.(in
command mode, this variable is ignored)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @hse: set horizontal sync event mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * In
VSYNC pulse and Vporch area, MIPI DSI master transfers only HSYNC<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * start
packet to MIPI DSI slave at MIPI DSI spec1.1r02.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
bit transfers HSYNC end packet in VSYNC pulse and Vporch area<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * (in
mommand mode, this variable is ignored)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @hfp: specifies HFP disable mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * if
this variable is set, DSI master ignores HFP area in VIDEO mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * (in
command mode, this variable is ignored)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @hbp: specifies HBP disable mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * if
this variable is set, DSI master ignores HBP area in VIDEO mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * (in
command mode, this variable is ignored)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @hsa: specifies HSA disable mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * if
this variable is set, DSI master ignores HSA area in VIDEO mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * (in
command mode, this variable is ignored)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @e_no_data_lane: specifies data lane
count to be used by Master.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @e_byte_clk: select byte clock source.
(it must be DSIM_PLL_OUT_DIV8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * DSIM_EXT_CLK_DIV8
and DSIM_EXT_CLK_BYPASSS are not supported.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @pll_stable_time: specifies the PLL
Timer for stability of the ganerated<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * clock(System
clock cycle base)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * if
the timer value goes to 0x00000000, the clock stable bit of status<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * and
interrupt register is set.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @esc_clk: specifies escape clock
frequency for getting the escape clock<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * prescaler
value.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @stop_holding_cnt: specifies the
interval value between transmitting<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * read
packet(or write "set_tear_on" command) and BTA request.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * after
transmitting read packet or write "set_tear_on" command,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * BTA
requests to D-PHY automatically. this counter value specifies<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * the
interval between them.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @bta_timeout: specifies the timer for
BTA.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
register specifies time out from BTA request to change<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * the
direction with respect to Tx escape clock.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @rx_timeout: specifies the timer for LP
Rx mode timeout.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
register specifies time out on how long RxValid deasserts,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * after
RxLpdt asserts with respect to Tx escape clock.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * -
RxValid specifies Rx data valid indicator.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * -
RxLpdt specifies an indicator that D-PHY is under RxLpdt mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * -
RxValid and RxLpdt specifies signal from D-PHY.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @e_lane_swap: swaps Dp/Dn channel of
Clock lane or Data lane.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * if
this bit is set, Dp and Dn channel would be swapped each other.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct dsim_config {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char auto_flush;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char eot_disable;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char auto_vertical_cnt;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char hse;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char hfp;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char hbp;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char hsa;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ enum
dsim_no_of_data_lane e_no_data_lane;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ enum
dsim_byte_clk_src e_byte_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* ===========================================<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | P |
M | S |
MHz |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* -------------------------------------------<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 100
| 3 |
100 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 100
| 2 |
200 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 63
| 1 |
252 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 4 | 100
| 1 |
300 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 4 | 110
| 1 |
330 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 12 | 350
| 1 |
350 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 100
| 1 |
400 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 4 | 150
| 1 |
450 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 118
| 1 |
472 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 12 | 250
| 0 |
500 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 4 | 100
| 0 | 600
|<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 81
| 0 |
648 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 88
| 0 |
704 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 90
| 0 |
720 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 3 | 100
| 0 |
800 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 12 | 425
| 0 |
850 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 4 | 150
| 0 |
900 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 12 | 475
| 0 |
950 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* | 6 | 250
| 0 | 1000 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* -------------------------------------------<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char p;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
short m;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char s;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int pll_stable_time;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long esc_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
short stop_holding_cnt;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char bta_timeout;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
short rx_timeout;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ enum
dsim_video_mode_type e_lane_swap;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/**<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * struct dsim_lcd_config - interface for
configuring mipi-dsi based lcd panel.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @e_interface: specifies interface to be
used.(CPU or RGB interface)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @parameter[0]: specifies virtual
channel number<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * that
main or sub diaplsy uses.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @parameter[1]: specifies pixel stream
format for main or sub display.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @parameter[2]: selects Burst mode in
Video mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * in
Non-burst mode, RGB data area is filled with RGB data and NULL<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * packets,
according to input bandwidth of RGB interface.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * In
Burst mode, RGB data area is filled with RGB data only.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @lcd_panel_info: pointer for lcd panel
specific structure.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
structure specifies width, height, timing and polarity and so on.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @mipi_ddi_pd: pointer for lcd panel
platform data.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct dsim_lcd_config {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ enum
dsim_interface_type e_interface;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int parameter[3];<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void
*lcd_panel_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void
*mipi_ddi_pd;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct dsim_global;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct fb_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct regulator;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/**<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * struct s5p_platform_dsim - interface to
platform data for mipi-dsi driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @clk_name: specifies clock name for
mipi-dsi.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @lcd_panel_name: specifies lcd panel
name registered to mipi-dsi driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * lcd
panel driver searched would be actived.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @mipi_1_1v_name: specifies mipi 1.1v
regulator name.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @mipi_1_8v_name: specifies mipi 1.8v
regulator name.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @platfrom_rev: specifies platform
revision number.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * revision
number should become 1.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @dsim_config: pointer of structure for
configuring mipi-dsi controller.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @dsim_lcd_info: pointer to structure
for configuring<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * mipi-dsi
based lcd panel.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @mipi_power: callback pointer for
enabling or disabling mipi power.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @part_reset: callback pointer for
reseting mipi phy.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @init_d_phy: callback pointer for
enabing d_phy of dsi master.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @get_fb_frame_done: callback pointer
for getting frame done status of the<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * display
controller(FIMD).<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @trigger: callback pointer for
triggering display controller(FIMD)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * in
case of CPU mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @delay_for_stabilization: specifies
stable time.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
delay needs when writing data on SFR<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * after
mipi mode became LP mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct s5p_platform_dsim {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ char *clk_name;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ char *mipi_1_1v_name;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ char *mipi_1_8v_name;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ char lcd_panel_name[64];<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int platform_rev;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_config *dsim_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *dsim_lcd_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int delay_for_stabilization;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*mipi_power) (struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
regulator *p_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
regulator *p_mipi_1_8v, unsigned int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*part_reset) (struct dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*init_d_phy) (struct dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*get_fb_frame_done) (struct fb_info *info);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void
(*trigger) (struct fb_info *info);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/**<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * struct dsim_global - global interface
for mipi-dsi driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @dev: driver model representation of
the device.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @clock: pointer to MIPI-DSI clock of
clock framework.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @irq: interrupt number to MIPI-DSI
controller.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @reg_base: base address to memory
mapped SRF of MIPI-DSI controller.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * (virtual
address)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @r_mipi_1_1v: pointer to regulator for
MIPI 1.1v power.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @r_mipi_1_8v: pointer to regulator for
MIPI 1.8v power.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @pd: pointer to MIPI-DSI driver
platform data.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @dsim_lcd_info: pointer to structure
for configuring<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * mipi-dsi
based lcd panel.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @lcd_panel_info: pointer for lcd panel
specific structure.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
structure specifies width, height, timing and polarity and so on.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @mipi_ddi_pd: pointer for lcd panel
platform data.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @mipi_drv: pointer to driver structure
for mipi-dsi based lcd panel.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @s3cfb_notif: kernel notifier structure
to be registered<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * by
device specific framebuffer driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
notifier could be used by fb_blank of device specifiec<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * framebuffer
driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @state: specifies status of MIPI-DSI
controller.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * the
status could be RESET, INIT, STOP, HSCLKEN and ULPS.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @data_lane: specifiec enabled data lane
number.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable would be set by driver according to e_no_data_lane<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * automatically.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @e_clk_src: select byte clock source.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable would be set by driver according to e_byte_clock<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * automatically.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @hs_clk: HS clock rate.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable would be set by driver automatically.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @byte_clk: Byte clock rate.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable would be set by driver automatically.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @escape_clk: ESCAPE clock rate.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable would be set by driver automatically.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @freq_band: indicates Bitclk frequency
band for D-PHY global timing.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Serial
Clock(=ByteClk X 8) FreqBand[3:0]<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * ~
99.99 MHz 0000<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 100
~ 119.99 MHz 0001<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 120
~ 159.99 MHz 0010<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 160
~ 199.99 MHz 0011<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 200
~ 239.99 MHz 0100<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 140
~ 319.99 MHz 0101<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 320
~ 389.99 MHz 0110<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 390
~ 449.99 MHz 0111<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 450
~ 509.99 MHz 1000<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 510
~ 559.99 MHz 1001<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 560
~ 639.99 MHz 1010<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 640
~ 689.99 MHz 1011<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 690
~ 769.99 MHz 1100<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 770
~ 869.99 MHz 1101<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 870
~ 949.99 MHz 1110<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * 950
~ 1000 MHz 1111<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable would be calculated by driver automatically.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * @header_fifo_index: specifies header
fifo index.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this
variable is not used yet.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct dsim_global {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
device *dev;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
clk *clock;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int irq;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void
__iomem *reg_base;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
regulator *r_mipi_1_1v;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
regulator *r_mipi_1_8v;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
s5p_platform_dsim *pd;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_config *dsim_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *dsim_lcd_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
fb_videomode *lcd_panel_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
mipi_ddi_platform_data *mipi_ddi_pd;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
mipi_lcd_driver *mipi_drv;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
notifier_block s3cfb_notif;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char state;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data_lane;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ enum
dsim_byte_clk_src e_clk_src;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long hs_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long byte_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long escape_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
char freq_band;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ char
header_fifo_index[DSIM_HEADER_FIFO_SZ];<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * driver structure for mipi-dsi based lcd
panel.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this structure should be registered by
lcd panel driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * mipi-dsi driver seeks lcd panel
registered through name field<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * and calls these callback functions in
appropriate time.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct mipi_lcd_driver {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s8 *name;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s32 (*init)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void (*display_on)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s32 (*set_link)(struct
mipi_ddi_platform_data *pd);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s32 (*probe)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s32 (*remove)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void (*shutdown)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s32 (*suspend)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s32 (*resume)(struct
device *dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * register mipi_lcd_driver object defined
by lcd panel driver<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * to mipi-dsi driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int
s5p_dsim_register_lcd_driver(struct mipi_lcd_driver *lcd_drv);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* reset MIPI PHY through MIPI PHY CONTROL
REGISTER. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_part_reset(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* enable MIPI D-PHY and DSI Master block.
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_init_d_phy(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct regulator;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* enable regulators to MIPI-DSI power. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_mipi_power(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
regulator *p_mipi_1_1v, struct regulator *p_mipi_1_8v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* send commands to mipi based lcd panel.
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_wr_data(void
*dsim_data, unsigned int data_id,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data0, unsigned int data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* get framedone status of mipi-dsi
controller. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int
s5p_dsim_get_frame_done_status(void *dsim_data);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* clear framedone interrupt of mipi-dsi
controller. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_clear_frame_done(void
*dsim_data);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* wrapper function for changing transfer
mode. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int
s5p_dsim_change_transfer_mode(unsigned int mode);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#endif /* _DSIM_H */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git a/arch/arm/plat-samsung/include/plat/mipi_ddi.h
b/arch/arm/plat-samsung/include/plat/mipi_ddi.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..d9a82b7<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++
b/arch/arm/plat-samsung/include/plat/mipi_ddi.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,98 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*
linux/arm/arch/mach-s5pc110/include/mach/mipi_ddi.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * definitions for DDI based MIPI-DSI.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Copyright (c) 2009 Samsung Electronics<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#ifndef _MIPI_DDI_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define _MIPI_DDI_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum mipi_ddi_interface {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ RGB_IF
= 0x4000,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ I80_IF
= 0x8000,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ YUV_601
= 0x10000,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ YUV_656
= 0x20000,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ MIPI_VIDEO
= 0x1000,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ MIPI_COMMAND
= 0x2000,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum mipi_ddi_panel_select {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DDI_MAIN_LCD
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DDI_SUB_LCD
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum mipi_ddi_model {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ S6DR117
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+enum mipi_ddi_parameter {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
DSIM video interface parameter */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSI_VIRTUAL_CH_ID
= 0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSI_FORMAT
= 1,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSI_VIDEO_MODE_SEL
= 2,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct lcd_device;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct fb_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct mipi_ddi_platform_data {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void
*dsim_data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* it is used for command mode lcd panel and<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* when all contents of framebuffer in panel module are transfered<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* to lcd panel it occurs te signal.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* note:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* - in case of command mode(cpu mode), it should be triggered only<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* when TE signal of lcd panel and frame done interrupt of display<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* controller or mipi controller occurs.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int te_irq;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* it is used for PM stable time at te interrupt handler and<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* could be used according to lcd panel characteristic or not.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int resume_complete;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*lcd_reset) (struct lcd_device *ld);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*lcd_power_on) (struct lcd_device *ld, int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*backlight_on) (int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
transfer command to lcd panel at LP mode. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*cmd_write) (void *dsim_data, unsigned int data_id,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data0, unsigned int data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*cmd_read) (void *dsim_data, unsigned int data_id,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data0, unsigned int data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* get the status that all screen data have been transferred<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* to mipi-dsi.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*get_dsim_frame_done) (void *dsim_data);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*clear_dsim_frame_done) (void *dsim_data);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* changes mipi transfer mode to LP or HS mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* LP mode needs when some commands like gamma values transfers<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* to lcd panel.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*change_dsim_transfer_mode) (unsigned int mode);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
get frame done status of display controller. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
(*get_fb_frame_done) (struct fb_info *info);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
trigger display controller in case of cpu mode. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ void
(*trigger) (struct fb_info *info);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reset_delay;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int power_on_delay;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int power_off_delay;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#endif /* _MIPI_DDI_H */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/arch/arm/plat-samsung/include/plat/regs-dsim.h b/arch/arm/plat-samsung/include/plat/regs-dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..dc83089<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++
b/arch/arm/plat-samsung/include/plat/regs-dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,281 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*
linux/arch/arm/plat-s5pc11x/include/plat/regs-dsim.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Register definition file for Samsung
MIPI-DSIM driver<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae <inki.dae@samsung.com>,
Copyright (c) 2009 Samsung Electronics<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#ifndef _REGS_DSIM_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define _REGS_DSIM_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_STATUS (0x0) /*
Status register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_SWRST (0x4) /*
Software reset register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_CLKCTRL (0x8) /*
Clock control register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_TIMEOUT (0xc) /*
Time out register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_CONFIG (0x10) /*
Configuration register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_ESCMODE (0x14) /*
Escape mode register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* Main display image resolution register
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_MDRESOL (0x18)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_MVPORCH (0x1c) /*
Main display Vporch register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_MHPORCH (0x20) /*
Main display Hporch register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_MSYNC (0x24) /*
Main display sync area register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* Sub display image resolution register
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_SDRESOL (0x28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_INTSRC (0x2c) /*
Interrupt source register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_INTMSK (0x30) /*
Interrupt mask register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_PKTHDR (0x34) /*
Packet Header FIFO register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_PAYLOAD (0x38) /*
Payload FIFO register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_RXFIFO (0x3c) /*
Read FIFO register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_FIFOTHLD (0x40) /*
FIFO threshold level register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_FIFOCTRL (0x44) /*
FIFO status and control register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* FIFO memory AC characteristic register
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_MEMACCHR (0x48)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_PLLCTRL (0x4c) /*
PLL control register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_PLLTMR (0x50) /*
PLL timer register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_PHYACCHR (0x54) /*
D-PHY AC characteristic register */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define S5P_DSIM_PHYACCHR1 (0x58) /*
D-PHY AC characteristic register1 */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* DSIM_SWRST */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_FUNCRST (1
<< 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SWRST (1
<< 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_TIMEOUT */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_LPDR_TOUT_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BTA_TOUT_SHIFT (16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_LPDR_TOUT(x) (((x)
& 0xffff) << DSIM_LPDR_TOUT_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BTA_TOUT(x) (((x)
& 0xff) << DSIM_BTA_TOUT_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_CLKCTRL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_ESC_PRESCALER_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_LANE_ESC_CLKEN_SHIFT (19)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BYTE_CLKEN_SHIFT (24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BYTE_CLK_SRC_SHIFT (25)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PLL_BYPASS_SHIFT (27)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_ESC_CLKEN_SHIFT (28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_REQUEST_HSCLK_SHIFT (31)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_ESC_PRESCALER(x) (((x)
& 0xffff) << \<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_ESC_PRESCALER_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_LANE_ESC_CLKEN(x) (((x)
& 0x1f) << \<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_ESC_CLKEN_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BYTE_CLK_ENABLE (1
<< DSIM_BYTE_CLKEN_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BYTE_CLK_DISABLE (0
<< DSIM_BYTE_CLKEN_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BYTE_CLKSRC(x) (((x)
& 0x3) << DSIM_BYTE_CLK_SRC_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PLL_BYPASS_PLL (0
<< DSIM_PLL_BYPASS_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PLL_BYPASS_EXTERNAL (1
<< DSIM_PLL_BYPASS_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_ESC_CLKEN_ENABLE (1
<< DSIM_ESC_CLKEN_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_ESC_CLKEN_DISABLE (0
<< DSIM_ESC_CLKEN_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_CONFIG */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_LANE_EN_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_NUM_OF_DATALANE_SHIFT (5)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_SHIFT (8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_SHIFT (12)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_VC_SHIFT (16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VC_SHIFT (18)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HSA_MODE_SHIFT (20)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HBP_MODE_SHIFT (21)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HFP_MODE_SHIFT (22)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HSE_MODE_SHIFT (23)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_AUTO_MODE_SHIFT (24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_VIDEO_MODE_SHIFT (25)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BURST_MODE_SHIFT (26)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SYNC_INFORM_SHIFT (27)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_EOT_R03_SHIFT (28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_LANE_ENx(x) ((1)
<< x)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* in case of Gemunus, it should be 0x1.
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_NUM_OF_DATA_LANE(x) ((x)
<< 5)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_3BPP (0
<< 8) /* command mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_8BPP (1
<< 8) /* command mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_12BPP (2
<< 8) /* command mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_16BPP (3
<< 8) /* command mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_16BPP_RGB (4
<< 8) /* video mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_18BPP_PRGB (5
<< 8) /* video mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_18BPP_LRGB (6
<< 8) /* common */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_PIX_FORMAT_24BPP_RGB (7
<< 8) /* common */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_3BPP (0
<< 12) /* command
mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_8BPP (1
<< 12) /* command
mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_12BPP (2
<< 12) /* command
mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_16BPP (3
<< 12) /* command
mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_16BPP_RGB (4
<< 12) /* video
mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_18BPP_PRGB (5
<< 12) /* video
mode only */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_18BPP_LRGB (6
<< 12) /* common */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_PIX_FORMAT_24BPP_RGB (7
<< 12) /* common */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* Virtual channel number for sub display
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_VC(x) (((x)
& 0x3) << 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* Virtual channel number for main display
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VC(x) (((x)
& 0x3) << 18)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HSA_MODE_ENABLE (1
<< 20)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HSA_MODE_DISABLE (0
<< 20)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HBP_MODE_ENABLE (1
<< 21)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HBP_MODE_DISABLE (0
<< 21)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HFP_MODE_ENABLE (1
<< 22)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HFP_MODE_DISABLE (0
<< 22)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HSE_MODE_ENABLE (1
<< 23)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_HSE_MODE_DISABLE (0
<< 23)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_AUTO_MODE (1
<< 24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_CONFIGURATION_MODE (0
<< 24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_VIDEO_MODE (1
<< 25)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_COMMAND_MODE (0
<< 25)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_BURST_MODE (1
<< 26)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_NON_BURST_MODE (0
<< 26)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SYNC_INFORM_PULSE (1
<< 27)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SYNC_INFORM_EVENT (0
<< 27)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* enable EoT packet generation for
V1.01r11 */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_EOT_R03_ENABLE (0
<< 28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* disable EoT packet generation for
V1.01r03 */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_EOT_R03_DISABLE (1
<< 28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_ESCMODE */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_STOP_STATE_CNT_SHIFT (21)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_STOP_STATE_CNT(x) (((x)
& 0x3ff) << \<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STOP_STATE_CNT_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_FORCE_STOP_STATE_SHIFT (20)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_FORCE_BTA_SHIFT (16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_CMD_LPDT_HS_MODE (0
<< 7)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_CMD_LPDT_LP_MODE (1
<< 7)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_LPDT_HS_MODE (0
<< 6)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_LPDT_LP_MODE (1
<< 6)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_TRIGGER_RST_SHIFT (4)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_UIPS_DAT_SHIFT (3)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_UIPS_EXIT_SHIFT (2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_UIPS_CLK_SHIFT (1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_UIPS_CLK_EXIT_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_MDRESOL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_STAND_BY (1
<< 31)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_NOT_READY (0
<< 31)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VRESOL(x) (((x)
& 0x7ff) << 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HRESOL(x) (((x)
& 0X7ff) << 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_MVPORCH */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_CMD_ALLOW_SHIFT (28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_STABLE_VFP_SHIFT (16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VBP_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_CMD_ALLOW_MASK (0xf
<< DSIM_CMD_ALLOW_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_STABLE_VFP_MASK (0x7ff
<< DSIM_STABLE_VFP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VBP_MASK (0x7ff
<< DSIM_MAIN_VBP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_CMD_ALLOW(x) (((x)
& 0xf) << DSIM_CMD_ALLOW_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_STABLE_VFP(x) (((x)
& 0x7ff) << DSIM_STABLE_VFP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VBP(x) (((x)
& 0x7ff) << DSIM_MAIN_VBP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_MHPORCH */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HFP_SHIFT (16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HBP_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HFP_MASK ((0xffff)
<< DSIM_MAIN_HFP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HBP_MASK ((0xffff)
<< DSIM_MAIN_HBP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HFP(x) (((x)
& 0xffff) << DSIM_MAIN_HFP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HBP(x) (((x)
& 0xffff) << DSIM_MAIN_HBP_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_MSYNC */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VSA_SHIFT (22)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HSA_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VSA_MASK ((0x3ff)
<< DSIM_MAIN_VSA_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HSA_MASK ((0xffff)
<< DSIM_MAIN_HSA_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_VSA(x) (((x)
& 0x3ff) << DSIM_MAIN_VSA_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_HSA(x) (((x)
& 0xffff) << DSIM_MAIN_HSA_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_SDRESOL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_STANDY_SHIFT (31)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_VRESOL_SHIFT (16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_HRESOL_SHIFT (0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_STANDY_MASK ((0x1)
<< DSIM_SUB_STANDY_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_VRESOL_MASK ((0x7ff)
<< DSIM_SUB_VRESOL_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_HRESOL_MASK ((0x7ff)
<< DSIM_SUB_HRESOL_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_STANDY (1
<< DSIM_SUB_STANDY_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_NOT_READY (0
<< DSIM_SUB_STANDY_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_VRESOL(x) (((x)
& 0x7ff) << DSIM_SUB_VRESOL_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_HRESOL(x) (((x)
& 0x7ff) << DSIM_SUB_HRESOL_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_INTSRC */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_CONTENT_LP1 (1
<< 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_CONTENT_LP0 (1
<< 1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_CONTROL0 (1
<< 2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_CONTROL1 (1
<< 3)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_CONTROL2 (1
<< 4)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_CONTROL3 (1
<< 5)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_SYNC0 (1
<< 6)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_SYNC1 (1
<< 7)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_SYNC2 (1
<< 8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_SYNC3 (1
<< 9)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_ESC0 (1
<< 10)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_ESC1 (1
<< 11)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_ESC2 (1
<< 12)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_ESC3 (1
<< 13)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_RX_CRC (1
<< 14)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_ERR_RX_ECC (1
<< 15)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_RX_ACK (1
<< 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_RX_TE (1
<< 17)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_RX_DAT_DONE (1
<< 18)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_TA_TOUT (1
<< 20)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_LPDR_TOUT (1
<< 21)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_FRAME_DONE (1
<< 24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_BUS_TURN_OVER (1
<< 25)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_SYNC_OVERRIDE (1
<< 28)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_SFR_FIFO_EMPTY (1
<< 29)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_SW_RST_RELEASE (1
<< 30)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTSRC_PLL_STABLE (1
<< 31)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_INTMSK */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_CONTENT_LP1 (1
<< 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_CONTENT_LP0 (1
<< 1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_CONTROL0 (1
<< 2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_CONTROL1 (1
<< 3)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_CONTROL2 (1
<< 4)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_CONTROL3 (1
<< 5)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_SYNC0 (1
<< 6)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_SYNC1 (1
<< 7)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_SYNC2 (1
<< 8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_SYNC3 (1
<< 9)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_ESC0 (1
<< 10)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_ESC1 (1
<< 11)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_ESC2 (1
<< 12)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_ESC3 (1
<< 13)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_RX_CRC (1
<< 14)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_ERR_RX_ECC (1
<< 15)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_RX_ACK (1
<< 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_RX_TE (1
<< 17)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_RX_DAT_DONE (1
<< 18)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_TA_TOUT (1
<< 20)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_LPDR_TOUT (1
<< 21)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_FRAME_DONE (1
<< 24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_BUS_TURN_OVER (1
<< 25)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_SFR_FIFO_EMPTY (1
<< 29)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_SW_RST_RELEASE (1
<< 30)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define INTMSK_PLL_STABLE (1
<< 31)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_PKTHDR */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PACKET_HEADER_DI(x) (((x)
& 0xff) << 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* Word count lower byte for long packet
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PACKET_HEADER_DAT0(x) (((x)
& 0xff) << 8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* Word count upper byte for long packet
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PACKET_HEADER_DAT1(x) (((x)
& 0xff) << 16)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_FIFOCTRL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_RX_FIFO (1
<< 4)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_TX_SFR_FIFO (1
<< 3)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_I80_FIFO (1
<< 2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_SUB_DISP_FIFO (1
<< 1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_MAIN_DISP_FIFO (1
<< 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_PHYACCHR */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_AFC_CTL(x) (((x)
& 0x7) << 5)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_AFC_ENABLE (1
<< 14)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_AFC_DISABLE (0
<< 14)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* S5P_DSIM_PLLCTRL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PMS_SHIFT (1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PLL_EN_SHIFT (23)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_FREQ_BAND_SHIFT (24)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_PMS(x) (((x)
& 0x7ffff) << DSIM_PMS_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define DSIM_FREQ_BAND(x) (((x)
& 0xf) << DSIM_FREQ_BAND_SHIFT)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#endif /* _REGS_DSIM_H */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/arch/arm/plat-samsung/setup-dsim.c b/arch/arm/plat-samsung/setup-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..874efa0<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/arch/arm/plat-samsung/setup-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,144 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * S5PC110 MIPI-DSIM driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Author: InKi Dae
<inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * modify it under the terms of the GNU
General Public License as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation; either version 2 of<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * the License, or (at your option) any
later version.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is distributed in the hope
that it will be useful,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * but WITHOUT ANY WARRANTY; without even
the implied warranty of<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * GNU General Public License for more
details.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * You should have received a copy of the
GNU General Public License<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * along with this program; if not, write
to the Free Software<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Foundation, Inc., 59 Temple Place,
Suite 330, Boston,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * MA 02111-1307 USA<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/kernel.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/string.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/io.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/err.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/platform_device.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/clk.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include
<linux/regulator/consumer.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <mach/map.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <mach/regs-clock.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/clock.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/regs-dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static int s5p_dsim_enable_d_phy(struct
dsim_global *dsim, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(S5P_MIPI_CONTROL) & ~(1 << 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (enable << 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
S5P_MIPI_CONTROL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"%s : %x\n", __func__, reg);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static int
s5p_dsim_enable_dsi_master(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(S5P_MIPI_CONTROL) & ~(1 << 2);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (enable << 2);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
S5P_MIPI_CONTROL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"%s : %x\n", __func__, reg);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_part_reset(struct dsim_global
*dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(S5P_MIPI_M_RESETN,
S5P_MIPI_PHY_CON0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"%s\n", __func__);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_init_d_phy(struct dsim_global
*dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /**<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* DPHY and Master block must be enabled at the system initialization<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* step before data access from/to DPHY begins.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_d_phy(dsim,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_dsi_master(dsim,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"%s\n", __func__);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_mipi_power(struct dsim_global
*dsim, struct regulator *p_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
regulator *p_mipi_1_8v, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
ret = -1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(IS_ERR(p_mipi_1_1v) || IS_ERR(p_mipi_1_8v)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"p_mipi_1_1v or p_mipi_1_8v is NULL.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(p_mipi_1_1v)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= regulator_enable(p_mipi_1_1v);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(ret < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "failed
to enable regulator mipi_1_1v.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(p_mipi_1_8v)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= regulator_enable(p_mipi_1_8v);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(ret < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "failed
to enable regulator mipi_1_8v.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(p_mipi_1_1v)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= regulator_force_disable(p_mipi_1_1v);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(ret < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "failed
to disable regulator mipi_1_1v.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(p_mipi_1_8v)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= regulator_force_disable(p_mipi_1_8v);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(ret < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "failed
to disable regulator mipi_1_8v.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git a/drivers/video/Kconfig
b/drivers/video/Kconfig<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 27c1fb4..6cdb4bc 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- a/drivers/video/Kconfig<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/Kconfig<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -1996,6 +1996,13 @@ config
FB_S3C2410_DEBUG<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
Turn on debugging messages. Note that you can set/unset at run time<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
through sysfs<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> <o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+config S5P_MIPI_DSI<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ tristate
"Samsung SoC MIPI-DSI support."<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ depends
on FB_S3C && ARCH_S5PV210<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ default
n<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ---help---<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
This enables support for MIPI-DSI device.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> config FB_NUC900<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
bool "NUC900 LCD framebuffer support"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>
depends on FB && ARCH_W90X900<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git a/drivers/video/Makefile
b/drivers/video/Makefile<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 485e8ed..6d1be1a 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- a/drivers/video/Makefile<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/Makefile<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -115,6 +115,8 @@ obj-$(CONFIG_FB_SH7760)
+= sh7760fb.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_FB_IMX)
+= imxfb.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_FB_S3C)
+= s3c-fb.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_FB_S3C2410)
+= s3c2410fb.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+obj-$(CONFIG_S5P_MIPI_DSI)
+= s5p-dsim.o s5p_dsim_common.o \<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_lowlevel.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_FB_FSL_DIU)
+= fsl-diu-fb.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_FB_COBALT)
+= cobalt_lcdfb.o<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US> obj-$(CONFIG_FB_PNX4008_DUM)
+= pnx4008/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git a/drivers/video/s5p-dsim.c
b/drivers/video/s5p-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..7ab1988<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/s5p-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,463 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* linux/drivers/video/samsung/s5p-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Samsung MIPI-DSIM driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae, <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/module.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/kernel.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/errno.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/clk.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/mutex.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/wait.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/fs.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/mm.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/fb.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/ctype.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/platform_device.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/io.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/irq.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/memory.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/delay.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/interrupt.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/kthread.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include
<linux/regulator/consumer.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/notifier.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/fb.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/regs-dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/mipi_ddi.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <mach/map.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include "s5p_dsim_common.h"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct mipi_lcd_info {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
list_head list;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
mipi_lcd_driver *mipi_drv;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static LIST_HEAD(lcd_info_list);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static DEFINE_MUTEX(mipi_lock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct dsim_global dsim;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct s5p_platform_dsim
*to_dsim_plat(struct device *dev)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
platform_device *pdev = to_platform_device(dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
(struct s5p_platform_dsim *)pdev->dev.platform_data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * notifier callback function for fb_blank<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * - this function would be called by
device specific fb_blank.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static int
s5p_dsim_notifier_callback(struct notifier_block *self,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long event, void *data)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ switch
(event) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
FB_BLANK_UNBLANK:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
FB_BLANK_NORMAL:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.pd->mipi_power)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_power(&dsim,
dsim.r_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_8v,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ clk_enable(dsim.clock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->resume)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->resume(dsim.dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_dsim(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_link(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_hs_enable(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BYCPU,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
it needs delay for stabilization */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mdelay(dsim.pd->delay_for_stabilization);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->init)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->init(dsim.dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim.dev,
"init func is null.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_display_mode(&dsim,
dsim.dsim_lcd_info, NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,
DSIM_TRANSFER_BYLCDC, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd->resume_complete
= 1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim.dev,
"FB_BLANK_NORMAL or UNBLANK.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
FB_BLANK_POWERDOWN:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd->resume_complete
= 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->suspend)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->suspend(dsim.dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ clk_disable(dsim.clock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.pd->mipi_power)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_power(&dsim,
dsim.r_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_8v,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim.dev,
"FB_BLANK_POWERDOWN.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ default:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim.dev,
"unknown FB_BLANK command.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static void s5p_dsim_register_notif(struct
device *dev)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ memset(&dsim.s3cfb_notif,
0, sizeof(struct notifier_block));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.s3cfb_notif.notifier_call
= s5p_dsim_notifier_callback;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static irqreturn_t
s5p_dsim_interrupt_handler(int irq, void *dev_id)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
IRQ_HANDLED;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_register_lcd_driver(struct
mipi_lcd_driver *lcd_drv)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
mipi_lcd_info *lcd_info = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ lcd_info
= kmalloc(sizeof(struct mipi_lcd_info), GFP_KERNEL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lcd_info == NULL)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-ENOMEM;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ lcd_info->mipi_drv
= kmalloc(sizeof(struct mipi_lcd_driver),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ GFP_KERNEL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lcd_info->mipi_drv == NULL)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-ENOMEM;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ memcpy(lcd_info->mipi_drv,
lcd_drv, sizeof(struct mipi_lcd_driver));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mutex_lock(&mipi_lock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ list_add_tail(&lcd_info->list,
&lcd_info_list);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mutex_unlock(&mipi_lock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim.dev,
"registered panel driver(%s) to mipi-dsi driver.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ lcd_drv->name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This function is wrapper for changing
transfer mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * It is used to in panel driver before
and after changing gamma value.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_change_transfer_mode(unsigned
int mode)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(mode < 0 || mode > 1) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim.dev,
"mode range should be 0 or 1.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EFAULT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(mode == 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BYCPU,
mode);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BYLCDC,
mode);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct mipi_lcd_driver
*scan_mipi_driver(const char *name)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
mipi_lcd_info *lcd_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
mipi_lcd_driver *mipi_drv = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mutex_lock(&mipi_lock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim.dev,
"find lcd panel driver(%s).\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ list_for_each_entry(lcd_info,
&lcd_info_list, list) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mipi_drv
= lcd_info->mipi_drv;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((strcmp(mipi_drv->name, name)) == 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mutex_unlock(&mipi_lock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim.dev,
"found!!!(%s).\n", mipi_drv->name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
mipi_drv;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim.dev,
"failed to find lcd panel driver(%s).\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mutex_unlock(&mipi_lock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static int s5p_dsim_probe(struct
platform_device *pdev)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
resource *res;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
ret = -1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd
= to_dsim_plat(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.dev
= &pdev->dev;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
set dsim config data, dsim lcd config data and lcd panel data. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.dsim_info
= dsim.pd->dsim_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.dsim_lcd_info
= dsim.pd->dsim_lcd_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.lcd_panel_info
=<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (struct
fb_videomode *) dsim.dsim_lcd_info->lcd_panel_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd
=<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (struct
mipi_ddi_platform_data *)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.dsim_lcd_info->mipi_ddi_pd;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd->resume_complete
= 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim.pd->mipi_1_1v_name
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_1v
= regulator_get(&pdev->dev, dsim.pd->mipi_1_1v_name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(IS_ERR(dsim.r_mipi_1_1v)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to get regulator %s.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_1_1v_name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
regulator_get_err;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim.pd->mipi_1_8v_name
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_8v
= regulator_get(&pdev->dev, dsim.pd->mipi_1_8v_name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(IS_ERR(dsim.r_mipi_1_8v)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to get regulator %s.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_1_8v_name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
regulator_get_err;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
clock */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.clock
= clk_get(&pdev->dev, dsim.pd->clk_name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(IS_ERR(dsim.clock)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to get dsim clock source\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ clk_enable(dsim.clock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
io memory */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ res
= platform_get_resource(pdev, IORESOURCE_MEM, 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(!res) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to get io memory region\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= -EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
err_clk_disable;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
request mem region */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ res
= request_mem_region(res->start, resource_size(res), pdev->name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(!res) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to request io memory region\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= -EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
err_clk_disable;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
ioremap for register block */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.reg_base
= ioremap(res->start, resource_size(res));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(!dsim.reg_base) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to remap io region\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= -EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
err_clk_disable;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
it is used for MIPI-DSI based lcd panel driver. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd->dsim_data
= (void *)&dsim;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* it uses frame done interrupt handler<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* only in case of MIPI Video mode.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.dsim_lcd_info->e_interface == DSIM_VIDEO) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.irq
= platform_get_irq(pdev, 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(request_irq(dsim.irq, s5p_dsim_interrupt_handler,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ IRQF_DISABLED,
"mipi-dsi", &dsim)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"request_irq failed.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
err_trigger_irq;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.pd->mipi_power)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_power(&dsim,
dsim.r_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_8v,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"mipi_power is NULL.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
mipi_power_err;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
find lcd panel driver registered to mipi-dsi driver. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv
= scan_mipi_driver(dsim.pd->lcd_panel_name);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv == NULL) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"mipi_drv is NULL.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
mipi_drv_err;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
set lcd panel driver link */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= dsim.mipi_drv->set_link(dsim.mipi_ddi_pd);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(ret < 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(&pdev->dev,
"failed to set link.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ goto
mipi_drv_err;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->probe(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_dsim(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_link(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_hs_enable(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,
DSIM_TRANSFER_BYCPU, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
it needs delay for stabilization */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mdelay(dsim.pd->delay_for_stabilization);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
initialize lcd panel */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->init)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->init(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(&pdev->dev,
"init func is null.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->display_on)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->display_on(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(&pdev->dev,
"display_on func is null.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_display_mode(&dsim,
dsim.dsim_lcd_info, NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,
DSIM_TRANSFER_BYLCDC, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_register_notif(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
in case of command mode, trigger. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.dsim_lcd_info->e_interface == DSIM_COMMAND) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.pd->trigger)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->trigger(registered_fb[0]);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(&pdev->dev,
"trigger is null.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(&pdev->dev,
"mipi-dsi driver(%s mode) has been probed.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim.dsim_lcd_info->e_interface
== DSIM_COMMAND) ?<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "CPU"
: "RGB");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+err_trigger_irq:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+mipi_drv_err:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_power(&dsim,
dsim.r_mipi_1_1v, dsim.r_mipi_1_8v, 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+mipi_power_err:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ iounmap((void
__iomem *) dsim.reg_base);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+err_clk_disable:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ clk_disable(dsim.clock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+regulator_get_err:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static int s5p_dsim_remove(struct
platform_device *pdev)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#ifdef CONFIG_PM<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_suspend(struct
platform_device *pdev, pm_message_t state)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd->resume_complete
= 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->suspend)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->suspend(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ clk_disable(dsim.clock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.pd->mipi_power)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_power(&dsim,
dsim.r_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_8v,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_resume(struct platform_device
*pdev)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.pd->mipi_power)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.pd->mipi_power(&dsim,
dsim.r_mipi_1_1v,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.r_mipi_1_8v,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ clk_enable(dsim.clock);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->resume)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->resume(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_dsim(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_link(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_hs_enable(&dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,
DSIM_TRANSFER_BYCPU, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
it needs delay for stabilization */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mdelay(dsim.pd->delay_for_stabilization);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
initialize lcd panel */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim.mipi_drv->init)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_drv->init(&pdev->dev);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(&pdev->dev,
"init func is null.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_display_mode(&dsim,
dsim.dsim_lcd_info, NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_transfer_mode(&dsim,
DSIM_TRANSFER_BYLCDC, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim.mipi_ddi_pd->resume_complete
= 1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define s5p_dsim_suspend NULL<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define s5p_dsim_resume NULL<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#endif<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static struct platform_driver
s5p_dsim_driver = {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ .probe
= s5p_dsim_probe,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ .remove
= s5p_dsim_remove,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ .suspend
= s5p_dsim_suspend,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ .resume
= s5p_dsim_resume,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ .driver
= {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
.name = "s5p-dsim",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
.owner = THIS_MODULE,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ },<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+};<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static int s5p_dsim_register(void)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ platform_driver_register(&s5p_dsim_driver);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static void s5p_dsim_unregister(void)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ platform_driver_unregister(&s5p_dsim_driver);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+module_init(s5p_dsim_register);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+module_exit(s5p_dsim_unregister);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+MODULE_AUTHOR("InKi Dae
<inki.dae@samsung.com>");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+MODULE_DESCRIPTION("Samusung
MIPI-DSIM driver");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+MODULE_LICENSE("GPL");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/drivers/video/s5p_dsim_common.c b/drivers/video/s5p_dsim_common.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..696faf3<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/s5p_dsim_common.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,691 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*
linux/drivers/video/samsung/s5p_dsim_common.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Samsung MIPI-DSIM common driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae, <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/module.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/kernel.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/errno.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/mutex.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/wait.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/fs.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/mm.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/fb.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/ctype.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/platform_device.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/io.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/memory.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/delay.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/kthread.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <video/mipi_display.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/fb.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/regs-dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <mach/map.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/mipi_ddi.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include "s5p_dsim_lowlevel.h"<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static unsigned int dpll_table[15] = {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ 100,
120, 170, 220, 270,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ 320,
390, 450, 510, 560,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ 640,
690, 770, 870, 950 };<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+static void s5p_dsim_long_data_wr(struct
dsim_global *dsim, unsigned int data0,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data_cnt = 0, payload = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
in case that data count is more then 4 */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ for
(data_cnt = 0; data_cnt < data1; data_cnt += 4) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* after sending 4bytes per one time,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* send remainder data less then 4.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((data1 - data_cnt) < 4) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((data1 - data_cnt) == 3) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload
= *(u8 *)(data0 + data_cnt) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
(*(u8 *)(data0 + (data_cnt + 1))) << 8 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (*(u8
*)(data0 + (data_cnt + 2))) << 16;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"count = 3 payload = %x, %x %x %x\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload,
*(u8 *)(data0 + data_cnt),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 1)),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 2)));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else if ((data1 - data_cnt) == 2) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload
= *(u8 *)(data0 + data_cnt) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (*(u8
*)(data0 + (data_cnt + 1))) << 8;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "count
= 2 payload = %x, %x %x\n", payload,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + data_cnt),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 1)));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else if ((data1 - data_cnt) == 1) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload
= *(u8 *)(data0 + data_cnt);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_data(dsim,
payload);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
send 4bytes per one time. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload
= *(u8 *)(data0 + data_cnt) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (*(u8
*)(data0 + (data_cnt + 1))) << 8 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (*(u8
*)(data0 + (data_cnt + 2))) << 16 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (*(u8
*)(data0 + (data_cnt + 3))) << 24;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "count
= 4 payload = %x, %x %x %x %x\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload,
*(u8 *)(data0 + data_cnt),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 1)),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 2)),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 3)));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_data(dsim,
payload);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_wr_data(void *dsim_data,
unsigned int data_id,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data0, unsigned int data1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_global *dsim = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int timeout = 5000 * 2;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long delay_val, udelay;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int check_rx_ack = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim
= (struct dsim_global *)dsim_data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->state == DSIM_STATE_ULPS) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"state is ULPS.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ delay_val
= 1000000 / dsim->dsim_info->esc_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ udelay
= 10 * delay_val;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mdelay(udelay);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
only if transfer mode is LPDT, wait SFR becomes empty. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->state == DSIM_STATE_STOP) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ while
(!(s5p_dsim_get_fifo_state(dsim) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ SFR_HEADER_EMPTY))
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((timeout--) > 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mdelay(1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "SRF
header fifo is not empty.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ switch
(data_id) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
short packet types of packet types for command. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_DCS_SHORT_WRITE:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_DCS_SHORT_WRITE_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_header(dsim,
data_id, data0, data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(check_rx_ack)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
process response func should be implemented */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
general command */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_COLOR_MODE_OFF:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_COLOR_MODE_ON:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_SHUTDOWN_PERIPHERAL:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_TURN_ON_PERIPHERAL:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_header(dsim,
data_id, data0, data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(check_rx_ack)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
process response func should be implemented. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
packet types for video data */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_V_SYNC_START:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_V_SYNC_END:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_H_SYNC_START:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_H_SYNC_END:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_END_OF_TRANSMISSION:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
short and response packet types for command */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_DCS_READ:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_clear_interrupt(dsim,
0xffffffff);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_header(dsim,
data_id, data0, data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
process response func should be implemented. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
long packet type and null packet */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_NULL_PACKET:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_BLANKING_PACKET:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_GENERIC_LONG_WRITE:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_DCS_LONG_WRITE:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int size, data_cnt = 0, payload = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ size
= data1 * 4;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
if data count is less then 4, then send 3bytes data. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(data1 < 4) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ payload
= *(u8 *)(data0) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + 1) << 8 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + 2) << 16;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_data(dsim,
payload);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"count = %d payload = %x,%x %x %x\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ data1,
payload,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + data_cnt),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 1)),<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *(u8
*)(data0 + (data_cnt + 2)));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
in case that data count is more then 4 */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_long_data_wr(dsim,
data0, data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
put data into header fifo */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_wr_tx_header(dsim,
data_id, data1 & 0xff,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (data1
& 0xff00) >> 8);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(check_rx_ack)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
process response func should be implemented. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
packet typo for video data */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_PACKED_PIXEL_STREAM_16:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_PACKED_PIXEL_STREAM_18:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_PIXEL_STREAM_3BYTE_18:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
MIPI_DSI_PACKED_PIXEL_STREAM_24:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(check_rx_ack)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
process response func should be implemented. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ default:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "data
id %x is not supported current DSI spec.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ data_id);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_init_header_fifo(struct
dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cnt;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ for
(cnt = 0; cnt < DSIM_HEADER_FIFO_SZ; cnt++)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->header_fifo_index[cnt]
= -1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_pll_on(struct dsim_global
*dsim, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
sw_timeout = 1000;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_clear_interrupt(dsim,
DSIM_PLL_STABLE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_pll(dsim,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ while
(1) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ sw_timeout--;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(s5p_dsim_is_pll_stable(dsim))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(sw_timeout == 0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_pll(dsim,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+unsigned long s5p_dsim_change_pll(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int pre_divider, unsigned int main_divider,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int scaler)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long dfin_pll, dfvco, dpll_out;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int i, freq_band = 0xf;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dfin_pll
= (MIPI_FIN / pre_divider);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dfin_pll < 6 * 1000 * 1000 || dfin_pll > 12 * 1000 * 1000) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"warning!!\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"fin_pll range is 6MHz ~ 12MHz\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"fin_pll of mipi dphy pll is %luMHz\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dfin_pll
/ 1000000));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
0, 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dfin_pll < 7 * 1000000)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
1, 0x1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (dfin_pll < 8 * 1000000)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
1, 0x0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (dfin_pll < 9 * 1000000)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
1, 0x3);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (dfin_pll < 10 * 1000000)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
1, 0x2);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (dfin_pll < 11 * 1000000)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
1, 0x5);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_afc(dsim,
1, 0x4);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dfvco
= dfin_pll * main_divider;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"dfvco = %lu, dfin_pll = %lu, main_divider = %d\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dfvco,
dfin_pll, main_divider);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dfvco < 500000000 || dfvco > 1000000000) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"Caution!!\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"fvco range is 500MHz ~ 1000MHz\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"fvco of mipi dphy pll is %luMHz\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dfvco
/ 1000000));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dpll_out
= dfvco / (1 << scaler);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"dpll_out = %lu, dfvco = %lu, scaler = %d\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dpll_out,
dfvco, scaler);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ for
(i = 0; i < ARRAY_SIZE(dpll_table); i++) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dpll_out < dpll_table[i] * 1000000) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ freq_band
= i;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"freq_band = %d\n", freq_band);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_pll_freq(dsim,
pre_divider, main_divider, scaler);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_hs_zero_ctrl(dsim,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_prep_ctrl(dsim,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
Freq Band */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_pll_freq_band(dsim,
freq_band);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
Stable time */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_pll_stable_time(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->dsim_info->pll_stable_time);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
Enable PLL */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"FOUT of mipi dphy pll is %luMHz\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dpll_out
/ 1000000));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
dpll_out;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_set_clock(struct dsim_global
*dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int byte_clk_sel, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int esc_div;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
long esc_clk_error_rate;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->e_clk_src
= byte_clk_sel;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
Escape mode clock and byte clock source */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_byte_clock_src(dsim,
byte_clk_sel);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
DPHY, DSIM Link : D-PHY clock out */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(byte_clk_sel == DSIM_PLL_OUT_DIV8) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->hs_clk
= s5p_dsim_change_pll(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->dsim_info->p,
dsim->dsim_info->m,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->dsim_info->s);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->hs_clk == 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "failed
to get hs clock.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->byte_clk
= dsim->hs_clk / 8;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_pll_bypass(dsim,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_pll_on(dsim,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
DPHY : D-PHY clock out, DSIM link : external clock out */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else if (byte_clk_sel == DSIM_EXT_CLK_DIV8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "this
project is not support \<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ external
clock source for MIPI DSIM\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (byte_clk_sel == DSIM_EXT_CLK_BYPASS)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "this
project is not support \<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ external
clock source for MIPI DSIM\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
escape clock divider */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ esc_div
= dsim->byte_clk / (dsim->dsim_info->esc_clk);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "esc_div
= %d, byte_clk = %lu, esc_clk = %lu\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ esc_div,
dsim->byte_clk, dsim->dsim_info->esc_clk);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((dsim->byte_clk / esc_div) >= 20000000 ||<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim->byte_clk
/ esc_div) > dsim->dsim_info->esc_clk)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ esc_div
+= 1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->escape_clk
= dsim->byte_clk / esc_div;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "escape_clk
= %lu, byte_clk = %lu, esc_div = %d\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->escape_clk,
dsim->byte_clk, esc_div);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* enable escclk on lane<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* in case of evt0, DSIM_TRUE is enable and<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* DSIM_FALSE is enable for evt1.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->pd->platform_rev == 1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_byte_clock(dsim,
DSIM_FALSE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_byte_clock(dsim,
DSIM_TRUE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
enable byte clk and escape clock */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_esc_clk_prs(dsim,
1, esc_div);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
escape clock on lane */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_esc_clk_on_lane(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (DSIM_LANE_CLOCK
| dsim->data_lane), 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"byte clock is %luMHz\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim->byte_clk
/ 1000000));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"escape clock that user's need is %lu\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim->dsim_info->esc_clk
/ 1000000));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"escape clock divider is %x\n", esc_div);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_dbg(dsim->dev,
"escape clock is %luMHz\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ((dsim->byte_clk
/ esc_div) / 1000000));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((dsim->byte_clk / esc_div) > dsim->escape_clk) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ esc_clk_error_rate
= dsim->escape_clk /<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim->byte_clk
/ esc_div);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"error rate is %lu over.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (esc_clk_error_rate
/ 100));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else if ((dsim->byte_clk / esc_div) < (dsim->escape_clk)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ esc_clk_error_rate
= (dsim->byte_clk / esc_div) /<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->escape_clk;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"error rate is %lu under.\n",<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (esc_clk_error_rate
/ 100));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_esc_clk_on_lane(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (DSIM_LANE_CLOCK
| dsim->data_lane), 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_esc_clk_prs(dsim,
0, 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* in case of evt0, DSIM_FALSE is disable and<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
* DSIM_TRUE is disable for evt1.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->pd->platform_rev == 1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_byte_clock(dsim,
DSIM_TRUE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_byte_clock(dsim,
DSIM_FALSE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(byte_clk_sel == DSIM_PLL_OUT_DIV8)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_pll_on(dsim,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_init_dsim(struct dsim_global
*dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->pd->init_d_phy)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->pd->init_d_phy(dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->state
= DSIM_STATE_RESET;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ switch
(dsim->dsim_info->e_no_data_lane) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
DSIM_DATA_LANE_1:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->data_lane
= DSIM_LANE_DATA0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
DSIM_DATA_LANE_2:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->data_lane
= DSIM_LANE_DATA0 | DSIM_LANE_DATA1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
DSIM_DATA_LANE_3:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->data_lane
= DSIM_LANE_DATA0 | DSIM_LANE_DATA1 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA2;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
DSIM_DATA_LANE_4:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->data_lane
= DSIM_LANE_DATA0 | DSIM_LANE_DATA1 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_LANE_DATA2
| DSIM_LANE_DATA3;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ break;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ default:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(dsim->dev,
"data lane is invalid.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ };<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_header_fifo(dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_sw_reset(dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_dp_dn_swap(dsim,
dsim->dsim_info->e_lane_swap);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_enable_frame_done_int(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
enable only frame done interrupt */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_interrupt_mask(dsim,
INTMSK_FRAME_DONE, enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_set_display_mode(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *main_lcd, struct dsim_lcd_config *sub_lcd)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
fb_videomode *mlcd_video = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
fb_cpumode *m_lcd_cpu = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
s3c_fb_pd_win *pd;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int width = 0, height = 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ pd
= (struct s3c_fb_pd_win *)main_lcd->lcd_panel_info;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
in case of VIDEO MODE (RGB INTERFACE) */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->dsim_lcd_info->e_interface == (u32) DSIM_VIDEO) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video
= (struct fb_videomode *)&pd->win_mode;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ width
= mlcd_video->xres;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ height
= mlcd_video->yres;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->dsim_info->auto_vertical_cnt == DSIM_FALSE) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_main_disp_vporch(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video->upper_margin,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video->lower_margin,
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_main_disp_hporch(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video->left_margin,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video->right_margin);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_main_disp_sync_area(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video->vsync_len,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mlcd_video->hsync_len);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else { /* in case of CPU MODE */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ m_lcd_cpu
= (struct fb_cmdmode *)&pd->cpu_mode;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ width
= m_lcd_cpu->xres;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ height
= m_lcd_cpu->yres;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_main_disp_resol(dsim,
height, width);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(sub_lcd != NULL)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"sub lcd isn't supported yet.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_display_config(dsim,
dsim->dsim_lcd_info, NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_init_link(struct dsim_global
*dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int time_out = 100;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ switch
(dsim->state) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
DSIM_STATE_RESET:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_sw_reset(dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ case
DSIM_STATE_INIT:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_fifo_pointer(dsim,
0x1f);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
dsi configuration */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_init_config(dsim,
dsim->dsim_lcd_info,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ NULL,
dsim->dsim_info);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_lane(dsim,
DSIM_LANE_CLOCK, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_lane(dsim,
dsim->data_lane, 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
set clock configuration */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_clock(dsim,
dsim->dsim_info->e_byte_clk,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
check clock and data lane state is stop state */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ while
(!(s5p_dsim_is_lane_state(dsim, DSIM_LANE_CLOCK)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+
== DSIM_LANE_STATE_STOP) &&<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ !(s5p_dsim_is_lane_state(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->data_lane)
== DSIM_LANE_STATE_STOP)) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ time_out--;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(time_out == 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "DSI
Master is not stop state.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "Check
initialization process\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(time_out != 0) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "initialization
of DSI Master is successful\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(dsim->dev,
"DSI Master state is stop state\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->state
= DSIM_STATE_STOP;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
BTA sequence counters */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_stop_state_counter(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->dsim_info->stop_holding_cnt);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_bta_timeout(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->dsim_info->bta_timeout);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_lpdr_timeout(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->dsim_info->rx_timeout);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
default LPDT by both cpu and lcd controller */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_mode(dsim,
DSIM_TRANSFER_BOTH,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_STOP);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ default:<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_info(dsim->dev,
"DSI Master is already init.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_set_hs_enable(struct
dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->state == DSIM_STATE_STOP) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->e_clk_src != DSIM_EXT_CLK_BYPASS) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim->state
= DSIM_STATE_HSCLKEN;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_mode(dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_TRANSFER_BOTH,
DSIM_STATE_HSCLKEN);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_enable_hs_clock(dsim,
1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "clock
source is external bypass.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_warn(dsim->dev,
"DSIM is not stop state.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_set_data_transfer_mode(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data_path, unsigned int hs_enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ int
ret = -1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(hs_enable) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->state == DSIM_STATE_HSCLKEN) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_mode(dsim,
data_path,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_HSCLKEN);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"HS Clock lane is not enabled.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= -EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(dsim->state == DSIM_STATE_INIT || dsim->state ==<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_ULPS)
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ "DSI
Master is not STOP or HSDT state.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= -EINVAL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ s5p_dsim_set_data_mode(dsim,
data_path,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ DSIM_STATE_STOP);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_get_frame_done_status(void
*dsim_data)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_global *dsim = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim
= (struct dsim_global *)dsim_data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
_s5p_dsim_get_frame_done_status(dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+int s5p_dsim_clear_frame_done(void
*dsim_data)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_global *dsim = NULL;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dsim
= (struct dsim_global *)dsim_data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ WARN_ON(dsim
== NULL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ _s5p_dsim_clear_frame_done(dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+MODULE_AUTHOR("InKi Dae
<inki.dae@samsung.com>");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+MODULE_DESCRIPTION("Samusung
MIPI-DSIM common driver");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+MODULE_LICENSE("GPL");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/drivers/video/s5p_dsim_common.h b/drivers/video/s5p_dsim_common.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..95f51bc<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/s5p_dsim_common.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,35 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*
linux/drivers/video/samsung/s5p_dsim_common.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Header file for Samsung MIPI-DSI common
driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Copyright (c) 2009 Samsung Electronics<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#ifndef _S5P_DSIM_COMMON_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define _S5P_DSIM_COMMON_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int
s5p_dsim_init_header_fifo(struct dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_pll_on(struct
dsim_global *dsim, unsigned int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern unsigned long
s5p_dsim_change_pll(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int pre_divider, unsigned int main_divider,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int scaler);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_set_clock(struct dsim_global
*dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int byte_clk_sel, unsigned int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_init_dsim(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int
s5p_dsim_set_display_mode(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *main_lcd, struct dsim_lcd_config *sub_lcd);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_init_link(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_set_hs_enable(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int
s5p_dsim_set_data_transfer_mode(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data_path, unsigned int hs_enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern int s5p_dsim_enable_frame_done_int(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern struct fb_info
*registered_fb[FB_MAX] __read_mostly;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#endif /* _S5P_DSIM_COMMON_H */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/drivers/video/s5p_dsim_lowlevel.c b/drivers/video/s5p_dsim_lowlevel.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..b2fc249<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/s5p_dsim_lowlevel.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,569 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/* linux/drivers/video/samsung/s5p-dsim.c<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Samsung MIPI-DSIM lowlevel driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae, <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/module.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/kernel.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/errno.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/mutex.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/wait.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/delay.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/fs.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/mm.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/ctype.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <linux/io.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <mach/map.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/mipi_ddi.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#include <plat/regs-dsim.h><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_func_reset(struct
dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(dsim->reg_base + S5P_DSIM_SWRST);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= DSIM_FUNCRST;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_SWRST);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_sw_reset(struct dsim_global
*dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(dsim->reg_base + S5P_DSIM_SWRST);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= DSIM_SWRST;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_SWRST);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_interrupt_mask(struct
dsim_global *dsim, unsigned int mode,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int mask)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_INTMSK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(mask)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= mode;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~mode;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_INTMSK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_init_fifo_pointer(struct
dsim_global *dsim, unsigned int cfg)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(dsim->reg_base + S5P_DSIM_FIFOCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg
& ~(cfg), dsim->reg_base + S5P_DSIM_FIFOCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ mdelay(10);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= cfg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_FIFOCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * this function set PLL P, M and S value
in D-PHY<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_phy_tunning(struct
dsim_global *dsim, unsigned int value)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(DSIM_AFC_CTL(value),
dsim->reg_base + S5P_DSIM_PHYACCHR);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_main_disp_resol(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int vert_resol, unsigned int hori_resol)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
standby should be set after configuration so set to not ready*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= (readl(dsim->reg_base + S5P_DSIM_MDRESOL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_MAIN_STAND_BY);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_MDRESOL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(0x7ff << 16) & ~(0x7ff << 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= DSIM_MAIN_VRESOL(vert_resol) | DSIM_MAIN_HRESOL(hori_resol);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= DSIM_MAIN_STAND_BY;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_MDRESOL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_main_disp_vporch(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cmd_allow, unsigned int vfront, unsigned int vback)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= (readl(dsim->reg_base + S5P_DSIM_MVPORCH)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_CMD_ALLOW_MASK)
& ~(DSIM_STABLE_VFP_MASK) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_MAIN_VBP_MASK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((cmd_allow & 0xf) << DSIM_CMD_ALLOW_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ((vfront
& 0x7ff) << DSIM_STABLE_VFP_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ((vback
& 0x7ff) << DSIM_MAIN_VBP_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_MVPORCH);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_main_disp_hporch(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int front, unsigned int back)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= (readl(dsim->reg_base + S5P_DSIM_MHPORCH)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_MAIN_HFP_MASK)
& ~(DSIM_MAIN_HBP_MASK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (front << DSIM_MAIN_HFP_SHIFT) | (back << DSIM_MAIN_HBP_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_MHPORCH);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void
s5p_dsim_set_main_disp_sync_area(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int vert, unsigned int hori)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= (readl(dsim->reg_base + S5P_DSIM_MSYNC)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_MAIN_VSA_MASK)
& ~(DSIM_MAIN_HSA_MASK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((vert & 0x3ff) << DSIM_MAIN_VSA_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (hori
<< DSIM_MAIN_HSA_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_MSYNC);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_sub_disp_resol(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int vert, unsigned int hori)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= (readl(dsim->reg_base + S5P_DSIM_SDRESOL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_SUB_STANDY_MASK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_SDRESOL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(DSIM_SUB_VRESOL_MASK) | ~(DSIM_SUB_HRESOL_MASK);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((vert & 0x7ff) << DSIM_SUB_VRESOL_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ((hori
& 0x7ff) << DSIM_SUB_HRESOL_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_SDRESOL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (1 << DSIM_SUB_STANDY_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_SDRESOL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_init_config(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *main_lcd_info,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *sub_lcd_info, struct dsim_config *dsim_info)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cfg = (readl(dsim->reg_base + S5P_DSIM_CONFIG)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(1
<< 28) & ~(0x1f << 20) & ~(0x3 << 5);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ cfg
= (dsim_info->auto_flush << 29) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->eot_disable
<< 28) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->auto_vertical_cnt
<< DSIM_AUTO_MODE_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->hse
<< DSIM_HSE_MODE_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->hfp
<< DSIM_HFP_MODE_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->hbp
<< DSIM_HBP_MODE_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->hsa
<< DSIM_HSA_MODE_SHIFT) |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (dsim_info->e_no_data_lane
<< DSIM_NUM_OF_DATALANE_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(cfg,
dsim->reg_base + S5P_DSIM_CONFIG);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_display_config(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *main_lcd, struct dsim_lcd_config *sub_lcd)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ u32
reg = (readl(dsim->reg_base + S5P_DSIM_CONFIG)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x3
<< 26) & ~(1 << 25) & ~(0x3 << 18) & ~(0x7
<< 12) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x3
<< 16) & ~(0x7 << 8);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(main_lcd->e_interface == DSIM_VIDEO)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (1 << 25);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (main_lcd->e_interface == DSIM_COMMAND)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << 25);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"this ddi is not MIPI interface.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
main lcd */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((u8) (main_lcd->parameter[DSI_VIDEO_MODE_SEL]) & 0x3) << 26 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ((u8)
(main_lcd->parameter[DSI_VIRTUAL_CH_ID]) & 0x3) << 18 |<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ((u8)
(main_lcd->parameter[DSI_FORMAT]) & 0x7) << 12;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CONFIG);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_enable_lane(struct
dsim_global *dsim, unsigned int lane,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(dsim->reg_base + S5P_DSIM_CONFIG);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane == DSIM_LANE_CLOCK) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (1 << 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (lane << 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(lane << 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CONFIG);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_data_lane_number(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int count)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cfg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ /*
get the data lane number. */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ cfg
= DSIM_NUM_OF_DATA_LANE(count);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(cfg,
dsim->reg_base + S5P_DSIM_CONFIG);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_enable_afc(struct
dsim_global *dsim, unsigned int enable,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int afc_code)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_PHYACCHR);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (1 << 14);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(0x7 << 5);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (afc_code & 0x7) << 5;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << 14);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PHYACCHR);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_enable_pll_bypass(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_CLKCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(DSIM_PLL_BYPASS_EXTERNAL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= enable << DSIM_PLL_BYPASS_SHIFT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_pll_pms(struct
dsim_global *dsim, unsigned int p,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int m, unsigned int s)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((p & 0x3f) << 13) | ((m & 0x1ff) << 4) | ((s & 0x7)
<< 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_pll_freq_band(struct
dsim_global *dsim, unsigned int freq_band)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_PLLCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x1f
<< DSIM_FREQ_BAND_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((freq_band & 0x1f) << DSIM_FREQ_BAND_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_pll_freq(struct dsim_global
*dsim, unsigned int pre_divider,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int main_divider, unsigned int scaler)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_PLLCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x7ffff
<< 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (pre_divider & 0x3f) << 13 | (main_divider & 0x1ff) << 4
|<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ (scaler
& 0x7) << 1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_pll_stable_time(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int lock_time)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(lock_time,
dsim->reg_base + S5P_DSIM_PLLTMR);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_enable_pll(struct
dsim_global *dsim, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_PLLCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x1
<< DSIM_PLL_EN_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((enable & 0x1) << DSIM_PLL_EN_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_byte_clock_src(struct
dsim_global *dsim, unsigned int src)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_CLKCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x3
<< DSIM_BYTE_CLK_SRC_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((unsigned int) src) << DSIM_BYTE_CLK_SRC_SHIFT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_enable_byte_clock(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_CLKCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(1
<< DSIM_BYTE_CLKEN_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= enable << DSIM_BYTE_CLKEN_SHIFT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_esc_clk_prs(struct
dsim_global *dsim, unsigned int enable,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int prs_val)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_CLKCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(1
<< DSIM_ESC_CLKEN_SHIFT) & ~(0xffff);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= enable << DSIM_ESC_CLKEN_SHIFT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= prs_val;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void
s5p_dsim_enable_esc_clk_on_lane(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int lane_sel, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(enable) {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_CLOCK)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= 1 << DSIM_LANE_ESC_CLKEN_SHIFT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= 1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= 1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 2);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= 1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 3);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= 1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 4);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else {<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_CLOCK)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << DSIM_LANE_ESC_CLKEN_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA0)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 1));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 2));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 3));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(lane_sel & DSIM_LANE_DATA2)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(1 << (DSIM_LANE_ESC_CLKEN_SHIFT + 4));<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_force_dphy_stop_state(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_ESCMODE)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x1
<< DSIM_FORCE_STOP_STATE_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((enable & 0x1) << DSIM_FORCE_STOP_STATE_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_ESCMODE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+unsigned int s5p_dsim_is_lane_state(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int lane)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_STATUS);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((lane & DSIM_LANE_ALL) > DSIM_LANE_CLOCK) { /* all lane state */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
((reg & 0x7ff) ^ (((lane & 0xf) << 4) | (1 << 9)))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_ULPS;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if ((reg & 0x7ff) ^ (((lane & 0xf) << 0) | (1 << 8)))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_STOP;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"land state is unknown.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else if (lane & DSIM_LANE_DATA_ALL) { /* data lane */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(reg & (lane << 4))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_ULPS;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (reg & (lane << 0))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_STOP;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"data lane state is unknown.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }
else if (lane & DSIM_LANE_CLOCK) { /* clock lane */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(reg & (1 << 9))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_ULPS;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (reg & (1 << 8))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_STOP;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
if (reg & (1 << 10))<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
DSIM_LANE_STATE_HS_READY;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else
{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ dev_err(dsim->dev,
"data lane state is unknown.\n");<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
-1;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ }<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void
s5p_dsim_set_stop_state_counter(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cnt_val)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_ESCMODE)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x7ff
<< DSIM_STOP_STATE_CNT_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((cnt_val & 0x7ff) << DSIM_STOP_STATE_CNT_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_ESCMODE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_bta_timeout(struct
dsim_global *dsim, unsigned int timeout)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_TIMEOUT)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0xff
<< DSIM_BTA_TOUT_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (timeout << DSIM_BTA_TOUT_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_TIMEOUT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_lpdr_timeout(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int timeout)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_TIMEOUT)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0xffff
<< DSIM_LPDR_TOUT_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (timeout << DSIM_LPDR_TOUT_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_TIMEOUT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_set_data_mode(struct
dsim_global *dsim, unsigned int data,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int state)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_ESCMODE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ if
(state == DSIM_STATE_HSCLKEN)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ else<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= data;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_ESCMODE);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_enable_hs_clock(struct
dsim_global *dsim, unsigned int enable)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_CLKCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(1
<< DSIM_TX_REQUEST_HSCLK_SHIFT);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= enable << DSIM_TX_REQUEST_HSCLK_SHIFT;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_CLKCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_dp_dn_swap(struct
dsim_global *dsim, unsigned int swap_en)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_PHYACCHR1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
&= ~(0x3 << 0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= (swap_en & 0x3) << 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PHYACCHR1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_hs_zero_ctrl(struct
dsim_global *dsim, unsigned int hs_zero)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_PLLCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0xf
<< 28);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((hs_zero & 0xf) << 28);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_prep_ctrl(struct dsim_global
*dsim, unsigned int prep)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (readl(dsim->reg_base + S5P_DSIM_PLLCTRL)) &<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ~(0x7
<< 20);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= ((prep & 0x7) << 20);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PLLCTRL);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_clear_interrupt(struct
dsim_global *dsim, unsigned int int_src)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_INTSRC);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
|= int_src;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_INTSRC);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+unsigned int s5p_dsim_is_pll_stable(struct
dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ reg
= readl(dsim->reg_base + S5P_DSIM_STATUS);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
reg & (1 << 31) ? 1 : 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+unsigned int
s5p_dsim_get_fifo_state(struct dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ ret
= readl(dsim->reg_base + S5P_DSIM_FIFOCTRL) & ~(0x1f);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
ret;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_wr_tx_header(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int di, unsigned int data0, unsigned int data1)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = (data1 << 16) | (data0 << 8) | ((di & 0x3f) <<
0);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg,
dsim->reg_base + S5P_DSIM_PKTHDR);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+unsigned int
_s5p_dsim_get_frame_done_status(struct dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_INTSRC);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ return
(reg & INTSRC_FRAME_DONE) ? 1 : 0;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void _s5p_dsim_clear_frame_done(struct
dsim_global *dsim)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int reg = readl(dsim->reg_base + S5P_DSIM_INTSRC);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(reg
| INTSRC_FRAME_DONE, dsim->reg_base +<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ S5P_DSIM_INTSRC);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+void s5p_dsim_wr_tx_data(struct
dsim_global *dsim, unsigned int tx_data)<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+{<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ writel(tx_data,
dsim->reg_base + S5P_DSIM_PAYLOAD);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+}<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>diff --git
a/drivers/video/s5p_dsim_lowlevel.h b/drivers/video/s5p_dsim_lowlevel.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>new file mode 100644<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>index 0000000..22f7529<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--- /dev/null<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+++ b/drivers/video/s5p_dsim_lowlevel.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>@@ -0,0 +1,101 @@<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+/*
linux/drivers/video/samsung/s5p_dsim_lowlevel.h<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Header file for Samsung MIPI-DSIM
lowlevel driver.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * Copyright (c) 2009 Samsung Electronics<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * InKi Dae <inki.dae@samsung.com><o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ *<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * This program is free software; you can
redistribute it and/or modify<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * it under the terms of the GNU General
Public License version 2 as<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ * published by the Free Software
Foundation.<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+*/<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#ifndef _S5P_DSIM_LOWLEVEL_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#define _S5P_DSIM_LOWLEVEL_H<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+struct dsim_global;<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_func_reset(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_sw_reset(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_interrupt_mask(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int mode, unsigned int mask);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_data_lane_number(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int count);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_init_fifo_pointer(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cfg);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_phy_tunning(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int value);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_phy_tunning(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int value);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_main_disp_resol(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int vert_resol, unsigned int hori_resol);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_main_disp_vporch(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cmd_allow, unsigned int vfront, unsigned int vback);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_main_disp_hporch(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int front, unsigned int back);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_main_disp_sync_area(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int vert, unsigned int hori);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_sub_disp_resol(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int vert, unsigned int hori);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_init_config(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *main_lcd_info,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *sub_lcd_info, struct dsim_config *dsim_info);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_display_config(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ struct
dsim_lcd_config *main_lcd, struct dsim_lcd_config *sub_lcd);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_set_data_lane_number(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int count);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_enable_lane(struct
dsim_global *dsim, unsigned int lane,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_enable_afc(struct
dsim_global *dsim, unsigned int enable,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int afc_code);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_enable_pll_bypass(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_set_pll_pms(struct
dsim_global *dsim, unsigned int p,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int m, unsigned int s);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_pll_freq_band(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int freq_band);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_pll_freq(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int pre_divider, unsigned int main_divider,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int scaler);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_pll_stable_time(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int lock_time);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_enable_pll(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_byte_clock_src(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int src);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_enable_byte_clock(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_esc_clk_prs(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable, unsigned int prs_val);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_enable_esc_clk_on_lane(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int lane_sel, unsigned int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_force_dphy_stop_state(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern unsigned int
s5p_dsim_is_lane_state(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int lane);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_stop_state_counter(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int cnt_val);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_bta_timeout(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int timeout);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_set_lpdr_timeout(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int timeout);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_set_data_mode(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int data, unsigned int state);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_enable_hs_clock(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int enable);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_dp_dn_swap(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int swap_en);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_hs_zero_ctrl(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int hs_zero);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_prep_ctrl(struct
dsim_global *dsim, unsigned int prep);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void
s5p_dsim_clear_interrupt(struct dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int int_src);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern unsigned int
s5p_dsim_is_pll_stable(struct dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern unsigned int
s5p_dsim_get_fifo_state(struct dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern unsigned int
_s5p_dsim_get_frame_done_status(struct dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void _s5p_dsim_clear_frame_done(struct
dsim_global *dsim);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_wr_tx_header(struct
dsim_global *dsim,<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+ unsigned
int di, unsigned int data0, unsigned int data1);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+extern void s5p_dsim_wr_tx_data(struct
dsim_global *dsim, unsigned int tx_data);<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>+#endif /* _S5P_DSIM_LOWLEVEL_H */<o:p></o:p></span></p>
<p class=MsoNormal><span lang=EN-US>--<o:p></o:p></span></p>
</div>
</body>
</html>