Skip to content

Instantly share code, notes, and snippets.

@invisiblek
Last active August 29, 2015 14:08
Show Gist options
  • Save invisiblek/2990eb6465b6ebea0c1b to your computer and use it in GitHub Desktop.
Save invisiblek/2990eb6465b6ebea0c1b to your computer and use it in GitHub Desktop.
diff --git a/board-monarudo-display.c b/board-m7-display.c
index 9ff86d0..0de859e 100644
--- a/board-monarudo-display.c
+++ b/board-m7-display.c
@@ -26,7 +26,7 @@
#include <mach/panel_id.h>
#include <mach/debug_display.h>
#include "devices.h"
-#include "board-monarudo.h"
+#include "board-m7.h"
#include <linux/mfd/pm8xxx/pm8921.h>
#include <mach/gpio.h>
#include <mach/gpiomux.h>
@@ -36,13 +36,9 @@
#include <linux/i2c.h>
#include <mach/msm_xo.h>
-#define hr_msleep(x) msleep(x)
-
#ifdef CONFIG_FB_MSM_TRIPLE_BUFFER
-/* prim = 1366 x 768 x 3(bpp) x 3(pages) */
#define MSM_FB_PRIM_BUF_SIZE (1920 * ALIGN(1080, 32) * 4 * 3)
#else
-/* prim = 1366 x 768 x 3(bpp) x 2(pages) */
#define MSM_FB_PRIM_BUF_SIZE (1920 * ALIGN(1080, 32) * 4 * 2)
#endif
@@ -52,13 +48,13 @@
#define MSM_FB_OVERLAY0_WRITEBACK_SIZE roundup((1920 * 1080 * 3 * 2), 4096)
#else
#define MSM_FB_OVERLAY0_WRITEBACK_SIZE (0)
-#endif /* CONFIG_FB_MSM_OVERLAY0_WRITEBACK */
+#endif
#ifdef CONFIG_FB_MSM_OVERLAY1_WRITEBACK
#define MSM_FB_OVERLAY1_WRITEBACK_SIZE roundup((1920 * 1088 * 3 * 2), 4096)
#else
#define MSM_FB_OVERLAY1_WRITEBACK_SIZE (0)
-#endif /* CONFIG_FB_MSM_OVERLAY1_WRITEBACK */
+#endif
static struct resource msm_fb_resources[] = {
{
@@ -76,8 +72,25 @@ const size_t ptype_len = ( 60 - sizeof("PANEL type = "));
#define HDMI_PANEL_NAME "hdmi_msm"
#define TVOUT_PANEL_NAME "tvout_msm"
-static int monarudo_detect_panel(const char *name)
+static int m7_detect_panel(const char *name)
{
+#if 0
+ if (panel_type == PANEL_ID_DLX_SONY_RENESAS) {
+ if (!strncmp(name, MIPI_RENESAS_PANEL_NAME,
+ strnlen(MIPI_RENESAS_PANEL_NAME,
+ PANEL_NAME_MAX_LEN))){
+ PR_DISP_INFO("m7_%s\n", name);
+ return 0;
+ }
+ } else if (panel_type == PANEL_ID_DLX_SHARP_RENESAS) {
+ if (!strncmp(name, MIPI_RENESAS_PANEL_NAME,
+ strnlen(MIPI_RENESAS_PANEL_NAME,
+ PANEL_NAME_MAX_LEN))){
+ PR_DISP_INFO("m7_%s\n", name);
+ return 0;
+ }
+ }
+#endif
if (!strncmp(name, HDMI_PANEL_NAME,
strnlen(HDMI_PANEL_NAME,
PANEL_NAME_MAX_LEN)))
@@ -87,18 +100,18 @@ static int monarudo_detect_panel(const char *name)
}
static struct msm_fb_platform_data msm_fb_pdata = {
- .detect_client = monarudo_detect_panel,
+ .detect_client = m7_detect_panel,
};
static struct platform_device msm_fb_device = {
- .name = "msm_fb",
- .id = 0,
+ .name = "msm_fb",
+ .id = 0,
.num_resources = ARRAY_SIZE(msm_fb_resources),
- .resource = msm_fb_resources,
+ .resource = msm_fb_resources,
.dev.platform_data = &msm_fb_pdata,
};
-void __init monarudo_allocate_fb_region(void)
+void __init m7_allocate_fb_region(void)
{
void *addr;
unsigned long size;
@@ -133,7 +146,7 @@ static struct msm_bus_vectors mdp_ui_vectors[] = {
};
static struct msm_bus_vectors mdp_vga_vectors[] = {
- /* VGA and less video */
+
{
.src = MSM_BUS_MASTER_MDP_PORT0,
.dst = MSM_BUS_SLAVE_EBI_CH0,
@@ -143,7 +156,7 @@ static struct msm_bus_vectors mdp_vga_vectors[] = {
};
static struct msm_bus_vectors mdp_720p_vectors[] = {
- /* 720p and less video */
+
{
.src = MSM_BUS_MASTER_MDP_PORT0,
.dst = MSM_BUS_SLAVE_EBI_CH0,
@@ -153,7 +166,7 @@ static struct msm_bus_vectors mdp_720p_vectors[] = {
};
static struct msm_bus_vectors mdp_1080p_vectors[] = {
- /* 1080p and less video */
+
{
.src = MSM_BUS_MASTER_MDP_PORT0,
.dst = MSM_BUS_SLAVE_EBI_CH0,
@@ -235,12 +248,544 @@ static struct lcdc_platform_data dtv_pdata = {
};
#endif
+struct mdp_reg *mdp_gamma = NULL;
+int mdp_gamma_count = 0;
+struct mdp_reg mdp_gamma_jdi[] = {
+ {0x94800, 0x000000, 0x0},
+ {0x94804, 0x000100, 0x0},
+ {0x94808, 0x010201, 0x0},
+ {0x9480C, 0x020302, 0x0},
+ {0x94810, 0x030403, 0x0},
+ {0x94814, 0x040504, 0x0},
+ {0x94818, 0x050605, 0x0},
+ {0x9481C, 0x060706, 0x0},
+ {0x94820, 0x070807, 0x0},
+ {0x94824, 0x080908, 0x0},
+ {0x94828, 0x090A09, 0x0},
+ {0x9482C, 0x0A0B0A, 0x0},
+ {0x94830, 0x0B0C0B, 0x0},
+ {0x94834, 0x0B0D0C, 0x0},
+ {0x94838, 0x0C0E0D, 0x0},
+ {0x9483C, 0x0D0F0E, 0x0},
+ {0x94840, 0x0E100F, 0x0},
+ {0x94844, 0x0F1110, 0x0},
+ {0x94848, 0x101210, 0x0},
+ {0x9484C, 0x111311, 0x0},
+ {0x94850, 0x121412, 0x0},
+ {0x94854, 0x131513, 0x0},
+ {0x94858, 0x141614, 0x0},
+ {0x9485C, 0x151715, 0x0},
+ {0x94860, 0x161816, 0x0},
+ {0x94864, 0x161917, 0x0},
+ {0x94868, 0x171A18, 0x0},
+ {0x9486C, 0x181B19, 0x0},
+ {0x94870, 0x191C1A, 0x0},
+ {0x94874, 0x1A1D1B, 0x0},
+ {0x94878, 0x1B1E1C, 0x0},
+ {0x9487C, 0x1C1F1D, 0x0},
+ {0x94880, 0x1D201E, 0x0},
+ {0x94884, 0x1E211F, 0x0},
+ {0x94888, 0x1F2220, 0x0},
+ {0x9488C, 0x202320, 0x0},
+ {0x94890, 0x212421, 0x0},
+ {0x94894, 0x212522, 0x0},
+ {0x94898, 0x222623, 0x0},
+ {0x9489C, 0x232724, 0x0},
+ {0x948A0, 0x242825, 0x0},
+ {0x948A4, 0x252926, 0x0},
+ {0x948A8, 0x262A27, 0x0},
+ {0x948AC, 0x272B28, 0x0},
+ {0x948B0, 0x282C29, 0x0},
+ {0x948B4, 0x292D2A, 0x0},
+ {0x948B8, 0x2A2E2B, 0x0},
+ {0x948BC, 0x2B2F2C, 0x0},
+ {0x948C0, 0x2C302D, 0x0},
+ {0x948C4, 0x2C312E, 0x0},
+ {0x948C8, 0x2D322F, 0x0},
+ {0x948CC, 0x2E3330, 0x0},
+ {0x948D0, 0x2F3430, 0x0},
+ {0x948D4, 0x303531, 0x0},
+ {0x948D8, 0x313632, 0x0},
+ {0x948DC, 0x323733, 0x0},
+ {0x948E0, 0x333834, 0x0},
+ {0x948E4, 0x343935, 0x0},
+ {0x948E8, 0x353A36, 0x0},
+ {0x948EC, 0x363B37, 0x0},
+ {0x948F0, 0x373C38, 0x0},
+ {0x948F4, 0x373D39, 0x0},
+ {0x948F8, 0x383E3A, 0x0},
+ {0x948FC, 0x393F3B, 0x0},
+ {0x94900, 0x3A403C, 0x0},
+ {0x94904, 0x3B413D, 0x0},
+ {0x94908, 0x3C423E, 0x0},
+ {0x9490C, 0x3D433F, 0x0},
+ {0x94910, 0x3E4440, 0x0},
+ {0x94914, 0x3F4540, 0x0},
+ {0x94918, 0x404641, 0x0},
+ {0x9491C, 0x414742, 0x0},
+ {0x94920, 0x424843, 0x0},
+ {0x94924, 0x424944, 0x0},
+ {0x94928, 0x434A45, 0x0},
+ {0x9492C, 0x444B46, 0x0},
+ {0x94930, 0x454C47, 0x0},
+ {0x94934, 0x464D48, 0x0},
+ {0x94938, 0x474E49, 0x0},
+ {0x9493C, 0x484F4A, 0x0},
+ {0x94940, 0x49504B, 0x0},
+ {0x94944, 0x4A514C, 0x0},
+ {0x94948, 0x4B524D, 0x0},
+ {0x9494C, 0x4C534E, 0x0},
+ {0x94950, 0x4D544F, 0x0},
+ {0x94954, 0x4E5550, 0x0},
+ {0x94958, 0x4E5650, 0x0},
+ {0x9495C, 0x4F5751, 0x0},
+ {0x94960, 0x505852, 0x0},
+ {0x94964, 0x515953, 0x0},
+ {0x94968, 0x525A54, 0x0},
+ {0x9496C, 0x535B55, 0x0},
+ {0x94970, 0x545C56, 0x0},
+ {0x94974, 0x555D57, 0x0},
+ {0x94978, 0x565E58, 0x0},
+ {0x9497C, 0x575F59, 0x0},
+ {0x94980, 0x58605A, 0x0},
+ {0x94984, 0x59615B, 0x0},
+ {0x94988, 0x59625C, 0x0},
+ {0x9498C, 0x5A635D, 0x0},
+ {0x94990, 0x5B645E, 0x0},
+ {0x94994, 0x5C655F, 0x0},
+ {0x94998, 0x5D6660, 0x0},
+ {0x9499C, 0x5E6760, 0x0},
+ {0x949A0, 0x5F6861, 0x0},
+ {0x949A4, 0x606962, 0x0},
+ {0x949A8, 0x616A63, 0x0},
+ {0x949AC, 0x626B64, 0x0},
+ {0x949B0, 0x636C65, 0x0},
+ {0x949B4, 0x646D66, 0x0},
+ {0x949B8, 0x646E67, 0x0},
+ {0x949BC, 0x656F68, 0x0},
+ {0x949C0, 0x667069, 0x0},
+ {0x949C4, 0x67716A, 0x0},
+ {0x949C8, 0x68726B, 0x0},
+ {0x949CC, 0x69736C, 0x0},
+ {0x949D0, 0x6A746D, 0x0},
+ {0x949D4, 0x6B756E, 0x0},
+ {0x949D8, 0x6C766F, 0x0},
+ {0x949DC, 0x6D7770, 0x0},
+ {0x949E0, 0x6E7870, 0x0},
+ {0x949E4, 0x6F7971, 0x0},
+ {0x949E8, 0x6F7A72, 0x0},
+ {0x949EC, 0x707B73, 0x0},
+ {0x949F0, 0x717C74, 0x0},
+ {0x949F4, 0x727D75, 0x0},
+ {0x949F8, 0x737E76, 0x0},
+ {0x949FC, 0x747F77, 0x0},
+ {0x94A00, 0x758078, 0x0},
+ {0x94A04, 0x768179, 0x0},
+ {0x94A08, 0x77827A, 0x0},
+ {0x94A0C, 0x78837B, 0x0},
+ {0x94A10, 0x79847C, 0x0},
+ {0x94A14, 0x7A857D, 0x0},
+ {0x94A18, 0x7A867E, 0x0},
+ {0x94A1C, 0x7B877F, 0x0},
+ {0x94A20, 0x7C8880, 0x0},
+ {0x94A24, 0x7D8980, 0x0},
+ {0x94A28, 0x7E8A81, 0x0},
+ {0x94A2C, 0x7F8B82, 0x0},
+ {0x94A30, 0x808C83, 0x0},
+ {0x94A34, 0x818D84, 0x0},
+ {0x94A38, 0x828E85, 0x0},
+ {0x94A3C, 0x838F86, 0x0},
+ {0x94A40, 0x849087, 0x0},
+ {0x94A44, 0x859188, 0x0},
+ {0x94A48, 0x859289, 0x0},
+ {0x94A4C, 0x86938A, 0x0},
+ {0x94A50, 0x87948B, 0x0},
+ {0x94A54, 0x88958C, 0x0},
+ {0x94A58, 0x89968D, 0x0},
+ {0x94A5C, 0x8A978E, 0x0},
+ {0x94A60, 0x8B988F, 0x0},
+ {0x94A64, 0x8C9990, 0x0},
+ {0x94A68, 0x8D9A90, 0x0},
+ {0x94A6C, 0x8E9B91, 0x0},
+ {0x94A70, 0x8F9C92, 0x0},
+ {0x94A74, 0x909D93, 0x0},
+ {0x94A78, 0x909E94, 0x0},
+ {0x94A7C, 0x919F95, 0x0},
+ {0x94A80, 0x92A096, 0x0},
+ {0x94A84, 0x93A197, 0x0},
+ {0x94A88, 0x94A298, 0x0},
+ {0x94A8C, 0x95A399, 0x0},
+ {0x94A90, 0x96A49A, 0x0},
+ {0x94A94, 0x97A59B, 0x0},
+ {0x94A98, 0x98A69C, 0x0},
+ {0x94A9C, 0x99A79D, 0x0},
+ {0x94AA0, 0x9AA89E, 0x0},
+ {0x94AA4, 0x9BA99F, 0x0},
+ {0x94AA8, 0x9CAAA0, 0x0},
+ {0x94AAC, 0x9CABA0, 0x0},
+ {0x94AB0, 0x9DACA1, 0x0},
+ {0x94AB4, 0x9EADA2, 0x0},
+ {0x94AB8, 0x9FAEA3, 0x0},
+ {0x94ABC, 0xA0AFA4, 0x0},
+ {0x94AC0, 0xA1B0A5, 0x0},
+ {0x94AC4, 0xA2B1A6, 0x0},
+ {0x94AC8, 0xA3B2A7, 0x0},
+ {0x94ACC, 0xA4B3A8, 0x0},
+ {0x94AD0, 0xA5B4A9, 0x0},
+ {0x94AD4, 0xA6B5AA, 0x0},
+ {0x94AD8, 0xA7B6AB, 0x0},
+ {0x94ADC, 0xA7B7AC, 0x0},
+ {0x94AE0, 0xA8B8AD, 0x0},
+ {0x94AE4, 0xA9B9AE, 0x0},
+ {0x94AE8, 0xAABAAF, 0x0},
+ {0x94AEC, 0xABBBB0, 0x0},
+ {0x94AF0, 0xACBCB0, 0x0},
+ {0x94AF4, 0xADBDB1, 0x0},
+ {0x94AF8, 0xAEBEB2, 0x0},
+ {0x94AFC, 0xAFBFB3, 0x0},
+ {0x94B00, 0xB0C0B4, 0x0},
+ {0x94B04, 0xB1C1B5, 0x0},
+ {0x94B08, 0xB2C2B6, 0x0},
+ {0x94B0C, 0xB2C3B7, 0x0},
+ {0x94B10, 0xB3C4B8, 0x0},
+ {0x94B14, 0xB4C5B9, 0x0},
+ {0x94B18, 0xB5C6BA, 0x0},
+ {0x94B1C, 0xB6C7BB, 0x0},
+ {0x94B20, 0xB7C8BC, 0x0},
+ {0x94B24, 0xB8C9BD, 0x0},
+ {0x94B28, 0xB9CABE, 0x0},
+ {0x94B2C, 0xBACBBF, 0x0},
+ {0x94B30, 0xBBCCC0, 0x0},
+ {0x94B34, 0xBCCDC0, 0x0},
+ {0x94B38, 0xBDCEC1, 0x0},
+ {0x94B3C, 0xBDCFC2, 0x0},
+ {0x94B40, 0xBED0C3, 0x0},
+ {0x94B44, 0xBFD1C4, 0x0},
+ {0x94B48, 0xC0D2C5, 0x0},
+ {0x94B4C, 0xC1D3C6, 0x0},
+ {0x94B50, 0xC2D4C7, 0x0},
+ {0x94B54, 0xC3D5C8, 0x0},
+ {0x94B58, 0xC4D6C9, 0x0},
+ {0x94B5C, 0xC5D7CA, 0x0},
+ {0x94B60, 0xC6D8CB, 0x0},
+ {0x94B64, 0xC7D9CC, 0x0},
+ {0x94B68, 0xC8DACD, 0x0},
+ {0x94B6C, 0xC8DBCE, 0x0},
+ {0x94B70, 0xC9DCCF, 0x0},
+ {0x94B74, 0xCADDD0, 0x0},
+ {0x94B78, 0xCBDED0, 0x0},
+ {0x94B7C, 0xCCDFD1, 0x0},
+ {0x94B80, 0xCDE0D2, 0x0},
+ {0x94B84, 0xCEE1D3, 0x0},
+ {0x94B88, 0xCFE2D4, 0x0},
+ {0x94B8C, 0xD0E3D5, 0x0},
+ {0x94B90, 0xD1E4D6, 0x0},
+ {0x94B94, 0xD2E5D7, 0x0},
+ {0x94B98, 0xD3E6D8, 0x0},
+ {0x94B9C, 0xD3E7D9, 0x0},
+ {0x94BA0, 0xD4E8DA, 0x0},
+ {0x94BA4, 0xD5E9DB, 0x0},
+ {0x94BA8, 0xD6EADC, 0x0},
+ {0x94BAC, 0xD7EBDD, 0x0},
+ {0x94BB0, 0xD8ECDE, 0x0},
+ {0x94BB4, 0xD9EDDF, 0x0},
+ {0x94BB8, 0xDAEEE0, 0x0},
+ {0x94BBC, 0xDBEFE0, 0x0},
+ {0x94BC0, 0xDCF0E1, 0x0},
+ {0x94BC4, 0xDDF1E2, 0x0},
+ {0x94BC8, 0xDEF2E3, 0x0},
+ {0x94BCC, 0xDEF3E4, 0x0},
+ {0x94BD0, 0xDFF4E5, 0x0},
+ {0x94BD4, 0xE0F5E6, 0x0},
+ {0x94BD8, 0xE1F6E7, 0x0},
+ {0x94BDC, 0xE2F7E8, 0x0},
+ {0x94BE0, 0xE3F8E9, 0x0},
+ {0x94BE4, 0xE4F9EA, 0x0},
+ {0x94BE8, 0xE5FAEB, 0x0},
+ {0x94BEC, 0xE6FBEC, 0x0},
+ {0x94BF0, 0xE7FCED, 0x0},
+ {0x94BF4, 0xE8FDEE, 0x0},
+ {0x94BF8, 0xE9FEEF, 0x0},
+ {0x94BFC, 0xEAFFF0, 0x0},
+ {0x90070, 0x0F, 0x0},
+};
+
+struct mdp_reg mdp_gamma_renesas[] = {
+ {0x94800, 0x000000, 0x0},
+ {0x94804, 0x010101, 0x0},
+ {0x94808, 0x020202, 0x0},
+ {0x9480C, 0x030303, 0x0},
+ {0x94810, 0x040404, 0x0},
+ {0x94814, 0x050505, 0x0},
+ {0x94818, 0x060606, 0x0},
+ {0x9481C, 0x070707, 0x0},
+ {0x94820, 0x080808, 0x0},
+ {0x94824, 0x090909, 0x0},
+ {0x94828, 0x0A0A0A, 0x0},
+ {0x9482C, 0x0B0B0B, 0x0},
+ {0x94830, 0x0C0C0C, 0x0},
+ {0x94834, 0x0D0D0D, 0x0},
+ {0x94838, 0x0E0E0E, 0x0},
+ {0x9483C, 0x0F0F0F, 0x0},
+ {0x94840, 0x101010, 0x0},
+ {0x94844, 0x111111, 0x0},
+ {0x94848, 0x121212, 0x0},
+ {0x9484C, 0x131313, 0x0},
+ {0x94850, 0x141414, 0x0},
+ {0x94854, 0x151515, 0x0},
+ {0x94858, 0x161616, 0x0},
+ {0x9485C, 0x171717, 0x0},
+ {0x94860, 0x181818, 0x0},
+ {0x94864, 0x191919, 0x0},
+ {0x94868, 0x1A1A1A, 0x0},
+ {0x9486C, 0x1B1B1B, 0x0},
+ {0x94870, 0x1C1C1C, 0x0},
+ {0x94874, 0x1D1D1D, 0x0},
+ {0x94878, 0x1E1E1E, 0x0},
+ {0x9487C, 0x1F1F1F, 0x0},
+ {0x94880, 0x202020, 0x0},
+ {0x94884, 0x212121, 0x0},
+ {0x94888, 0x222222, 0x0},
+ {0x9488C, 0x232323, 0x0},
+ {0x94890, 0x242424, 0x0},
+ {0x94894, 0x252525, 0x0},
+ {0x94898, 0x262626, 0x0},
+ {0x9489C, 0x272727, 0x0},
+ {0x948A0, 0x282828, 0x0},
+ {0x948A4, 0x292929, 0x0},
+ {0x948A8, 0x2A2A2A, 0x0},
+ {0x948AC, 0x2B2B2B, 0x0},
+ {0x948B0, 0x2C2C2C, 0x0},
+ {0x948B4, 0x2D2D2D, 0x0},
+ {0x948B8, 0x2E2E2E, 0x0},
+ {0x948BC, 0x2F2F2F, 0x0},
+ {0x948C0, 0x303030, 0x0},
+ {0x948C4, 0x313131, 0x0},
+ {0x948C8, 0x323232, 0x0},
+ {0x948CC, 0x333333, 0x0},
+ {0x948D0, 0x343434, 0x0},
+ {0x948D4, 0x353535, 0x0},
+ {0x948D8, 0x363636, 0x0},
+ {0x948DC, 0x373737, 0x0},
+ {0x948E0, 0x383838, 0x0},
+ {0x948E4, 0x393939, 0x0},
+ {0x948E8, 0x3A3A3A, 0x0},
+ {0x948EC, 0x3B3B3B, 0x0},
+ {0x948F0, 0x3C3C3C, 0x0},
+ {0x948F4, 0x3D3D3D, 0x0},
+ {0x948F8, 0x3E3E3E, 0x0},
+ {0x948FC, 0x3F3F3F, 0x0},
+ {0x94900, 0x404040, 0x0},
+ {0x94904, 0x414141, 0x0},
+ {0x94908, 0x424242, 0x0},
+ {0x9490C, 0x434343, 0x0},
+ {0x94910, 0x444444, 0x0},
+ {0x94914, 0x454545, 0x0},
+ {0x94918, 0x464646, 0x0},
+ {0x9491C, 0x474747, 0x0},
+ {0x94920, 0x484848, 0x0},
+ {0x94924, 0x494949, 0x0},
+ {0x94928, 0x4A4A4A, 0x0},
+ {0x9492C, 0x4B4B4B, 0x0},
+ {0x94930, 0x4C4C4C, 0x0},
+ {0x94934, 0x4D4D4D, 0x0},
+ {0x94938, 0x4E4E4E, 0x0},
+ {0x9493C, 0x4F4F4F, 0x0},
+ {0x94940, 0x505050, 0x0},
+ {0x94944, 0x515151, 0x0},
+ {0x94948, 0x525252, 0x0},
+ {0x9494C, 0x535353, 0x0},
+ {0x94950, 0x545454, 0x0},
+ {0x94954, 0x555555, 0x0},
+ {0x94958, 0x565656, 0x0},
+ {0x9495C, 0x575757, 0x0},
+ {0x94960, 0x585858, 0x0},
+ {0x94964, 0x595959, 0x0},
+ {0x94968, 0x5A5A5A, 0x0},
+ {0x9496C, 0x5B5B5B, 0x0},
+ {0x94970, 0x5C5C5C, 0x0},
+ {0x94974, 0x5D5D5D, 0x0},
+ {0x94978, 0x5E5E5E, 0x0},
+ {0x9497C, 0x5F5F5F, 0x0},
+ {0x94980, 0x606060, 0x0},
+ {0x94984, 0x616161, 0x0},
+ {0x94988, 0x626262, 0x0},
+ {0x9498C, 0x636363, 0x0},
+ {0x94990, 0x646464, 0x0},
+ {0x94994, 0x656565, 0x0},
+ {0x94998, 0x666666, 0x0},
+ {0x9499C, 0x676767, 0x0},
+ {0x949A0, 0x686868, 0x0},
+ {0x949A4, 0x696969, 0x0},
+ {0x949A8, 0x6A6A6A, 0x0},
+ {0x949AC, 0x6B6B6B, 0x0},
+ {0x949B0, 0x6C6C6C, 0x0},
+ {0x949B4, 0x6D6D6D, 0x0},
+ {0x949B8, 0x6E6E6E, 0x0},
+ {0x949BC, 0x6F6F6F, 0x0},
+ {0x949C0, 0x707070, 0x0},
+ {0x949C4, 0x717171, 0x0},
+ {0x949C8, 0x727272, 0x0},
+ {0x949CC, 0x737373, 0x0},
+ {0x949D0, 0x747474, 0x0},
+ {0x949D4, 0x757575, 0x0},
+ {0x949D8, 0x767676, 0x0},
+ {0x949DC, 0x777777, 0x0},
+ {0x949E0, 0x787878, 0x0},
+ {0x949E4, 0x797979, 0x0},
+ {0x949E8, 0x7A7A7A, 0x0},
+ {0x949EC, 0x7B7B7B, 0x0},
+ {0x949F0, 0x7C7C7C, 0x0},
+ {0x949F4, 0x7D7D7D, 0x0},
+ {0x949F8, 0x7E7E7E, 0x0},
+ {0x949FC, 0x7F7F7F, 0x0},
+ {0x94A00, 0x808080, 0x0},
+ {0x94A04, 0x818181, 0x0},
+ {0x94A08, 0x828282, 0x0},
+ {0x94A0C, 0x838383, 0x0},
+ {0x94A10, 0x848484, 0x0},
+ {0x94A14, 0x858585, 0x0},
+ {0x94A18, 0x868686, 0x0},
+ {0x94A1C, 0x878787, 0x0},
+ {0x94A20, 0x888788, 0x0},
+ {0x94A24, 0x898889, 0x0},
+ {0x94A28, 0x8A898A, 0x0},
+ {0x94A2C, 0x8B8A8B, 0x0},
+ {0x94A30, 0x8C8B8C, 0x0},
+ {0x94A34, 0x8D8C8D, 0x0},
+ {0x94A38, 0x8E8D8E, 0x0},
+ {0x94A3C, 0x8F8E8F, 0x0},
+ {0x94A40, 0x908F90, 0x0},
+ {0x94A44, 0x919091, 0x0},
+ {0x94A48, 0x929192, 0x0},
+ {0x94A4C, 0x939293, 0x0},
+ {0x94A50, 0x949394, 0x0},
+ {0x94A54, 0x959495, 0x0},
+ {0x94A58, 0x969596, 0x0},
+ {0x94A5C, 0x979697, 0x0},
+ {0x94A60, 0x989698, 0x0},
+ {0x94A64, 0x999799, 0x0},
+ {0x94A68, 0x9A989A, 0x0},
+ {0x94A6C, 0x9B999B, 0x0},
+ {0x94A70, 0x9C9A9C, 0x0},
+ {0x94A74, 0x9D9B9D, 0x0},
+ {0x94A78, 0x9E9C9E, 0x0},
+ {0x94A7C, 0x9F9D9F, 0x0},
+ {0x94A80, 0xA09EA0, 0x0},
+ {0x94A84, 0xA19FA1, 0x0},
+ {0x94A88, 0xA2A0A2, 0x0},
+ {0x94A8C, 0xA3A1A3, 0x0},
+ {0x94A90, 0xA4A2A4, 0x0},
+ {0x94A94, 0xA5A3A5, 0x0},
+ {0x94A98, 0xA6A4A6, 0x0},
+ {0x94A9C, 0xA7A5A7, 0x0},
+ {0x94AA0, 0xA8A5A8, 0x0},
+ {0x94AA4, 0xA9A6A9, 0x0},
+ {0x94AA8, 0xAAA7AA, 0x0},
+ {0x94AAC, 0xABA8AB, 0x0},
+ {0x94AB0, 0xACA9AC, 0x0},
+ {0x94AB4, 0xADAAAD, 0x0},
+ {0x94AB8, 0xAEABAE, 0x0},
+ {0x94ABC, 0xAFACAF, 0x0},
+ {0x94AC0, 0xB0ADB0, 0x0},
+ {0x94AC4, 0xB1AEB1, 0x0},
+ {0x94AC8, 0xB2AFB2, 0x0},
+ {0x94ACC, 0xB3B0B3, 0x0},
+ {0x94AD0, 0xB4B1B4, 0x0},
+ {0x94AD4, 0xB5B2B5, 0x0},
+ {0x94AD8, 0xB6B3B6, 0x0},
+ {0x94ADC, 0xB7B4B7, 0x0},
+ {0x94AE0, 0xB8B4B8, 0x0},
+ {0x94AE4, 0xB9B5B9, 0x0},
+ {0x94AE8, 0xBAB6BA, 0x0},
+ {0x94AEC, 0xBBB7BB, 0x0},
+ {0x94AF0, 0xBCB8BC, 0x0},
+ {0x94AF4, 0xBDB9BD, 0x0},
+ {0x94AF8, 0xBEBABE, 0x0},
+ {0x94AFC, 0xBFBBBF, 0x0},
+ {0x94B00, 0xC0BCC0, 0x0},
+ {0x94B04, 0xC1BDC1, 0x0},
+ {0x94B08, 0xC2BEC2, 0x0},
+ {0x94B0C, 0xC3BFC3, 0x0},
+ {0x94B10, 0xC4C0C4, 0x0},
+ {0x94B14, 0xC5C1C5, 0x0},
+ {0x94B18, 0xC6C2C6, 0x0},
+ {0x94B1C, 0xC7C3C7, 0x0},
+ {0x94B20, 0xC8C3C8, 0x0},
+ {0x94B24, 0xC9C4C9, 0x0},
+ {0x94B28, 0xCAC5CA, 0x0},
+ {0x94B2C, 0xCBC6CB, 0x0},
+ {0x94B30, 0xCCC7CC, 0x0},
+ {0x94B34, 0xCDC8CD, 0x0},
+ {0x94B38, 0xCEC9CE, 0x0},
+ {0x94B3C, 0xCFCACF, 0x0},
+ {0x94B40, 0xD0CBD0, 0x0},
+ {0x94B44, 0xD1CCD1, 0x0},
+ {0x94B48, 0xD2CDD2, 0x0},
+ {0x94B4C, 0xD3CED3, 0x0},
+ {0x94B50, 0xD4CFD4, 0x0},
+ {0x94B54, 0xD5D0D5, 0x0},
+ {0x94B58, 0xD6D1D6, 0x0},
+ {0x94B5C, 0xD7D2D7, 0x0},
+ {0x94B60, 0xD8D2D8, 0x0},
+ {0x94B64, 0xD9D3D9, 0x0},
+ {0x94B68, 0xDAD4DA, 0x0},
+ {0x94B6C, 0xDBD5DB, 0x0},
+ {0x94B70, 0xDCD6DC, 0x0},
+ {0x94B74, 0xDDD7DD, 0x0},
+ {0x94B78, 0xDED8DE, 0x0},
+ {0x94B7C, 0xDFD9DF, 0x0},
+ {0x94B80, 0xE0DAE0, 0x0},
+ {0x94B84, 0xE1DBE1, 0x0},
+ {0x94B88, 0xE2DCE2, 0x0},
+ {0x94B8C, 0xE3DDE3, 0x0},
+ {0x94B90, 0xE4DEE4, 0x0},
+ {0x94B94, 0xE5DFE5, 0x0},
+ {0x94B98, 0xE6E0E6, 0x0},
+ {0x94B9C, 0xE7E1E7, 0x0},
+ {0x94BA0, 0xE8E1E8, 0x0},
+ {0x94BA4, 0xE9E2E9, 0x0},
+ {0x94BA8, 0xEAE3EA, 0x0},
+ {0x94BAC, 0xEBE4EB, 0x0},
+ {0x94BB0, 0xECE5EC, 0x0},
+ {0x94BB4, 0xEDE6ED, 0x0},
+ {0x94BB8, 0xEEE7EE, 0x0},
+ {0x94BBC, 0xEFE8EF, 0x0},
+ {0x94BC0, 0xF0E9F0, 0x0},
+ {0x94BC4, 0xF1EAF1, 0x0},
+ {0x94BC8, 0xF2EBF2, 0x0},
+ {0x94BCC, 0xF3ECF3, 0x0},
+ {0x94BD0, 0xF4EDF4, 0x0},
+ {0x94BD4, 0xF5EEF5, 0x0},
+ {0x94BD8, 0xF6EFF6, 0x0},
+ {0x94BDC, 0xF7F0F7, 0x0},
+ {0x94BE0, 0xF8F0F8, 0x0},
+ {0x94BE4, 0xF9F1F9, 0x0},
+ {0x94BE8, 0xFAF2FA, 0x0},
+ {0x94BEC, 0xFBF3FB, 0x0},
+ {0x94BF0, 0xFCF4FC, 0x0},
+ {0x94BF4, 0xFDF5FD, 0x0},
+ {0x94BF8, 0xFEF6FE, 0x0},
+ {0x94BFC, 0xFFF7FF, 0x0},
+ {0x90070, 0x0F, 0x0},
+
+};
+
+int m7_mdp_gamma(void)
+{
+ if (mdp_gamma == NULL)
+ return 0;
+
+ mdp_color_enhancement(mdp_gamma, mdp_gamma_count);
+ return 0;
+}
+
static struct msm_panel_common_pdata mdp_pdata = {
.gpio = MDP_VSYNC_GPIO,
.mdp_max_clk = 266667000,
- .mdp_max_bw = 2000000000,
- .mdp_bw_ab_factor = 140,
- .mdp_bw_ib_factor = 210,
+ .mdp_max_bw = 4290000000u,
+ .mdp_bw_ab_factor = 115,
+ .mdp_bw_ib_factor = 200,
#ifdef CONFIG_MSM_BUS_SCALING
.mdp_bus_scale_table = &mdp_bus_scale_pdata,
#endif
@@ -250,35 +795,34 @@ static struct msm_panel_common_pdata mdp_pdata = {
#else
.mem_hid = MEMTYPE_EBI1,
#endif
- .cont_splash_enabled = 0x01,
- .splash_screen_size = 0x3f4800,
+ .cont_splash_enabled = 0x00,
+ .mdp_gamma = m7_mdp_gamma,
.mdp_iommu_split_domain = 1,
};
static char wfd_check_mdp_iommu_split_domain(void)
{
- return mdp_pdata.mdp_iommu_split_domain;
+ return mdp_pdata.mdp_iommu_split_domain;
}
#ifdef CONFIG_FB_MSM_WRITEBACK_MSM_PANEL
static struct msm_wfd_platform_data wfd_pdata = {
- .wfd_check_mdp_iommu_split = wfd_check_mdp_iommu_split_domain,
+ .wfd_check_mdp_iommu_split = wfd_check_mdp_iommu_split_domain,
};
static struct platform_device wfd_panel_device = {
- .name = "wfd_panel",
- .id = 0,
- .dev.platform_data = NULL,
+ .name = "wfd_panel",
+ .id = 0,
+ .dev.platform_data = NULL,
};
static struct platform_device wfd_device = {
- .name = "msm_wfd",
- .id = -1,
- .dev.platform_data = &wfd_pdata,
+ .name = "msm_wfd",
+ .id = -1,
+ .dev.platform_data = &wfd_pdata,
};
#endif
-
-void __init monarudo_mdp_writeback(struct memtype_reserve* reserve_table)
+void __init m7_mdp_writeback(struct memtype_reserve* reserve_table)
{
mdp_pdata.ov0_wb_size = MSM_FB_OVERLAY0_WRITEBACK_SIZE;
mdp_pdata.ov1_wb_size = MSM_FB_OVERLAY1_WRITEBACK_SIZE;
@@ -287,60 +831,22 @@ void __init monarudo_mdp_writeback(struct memtype_reserve* reserve_table)
mdp_pdata.ov0_wb_size;
reserve_table[mdp_pdata.mem_hid].size +=
mdp_pdata.ov1_wb_size;
-
- pr_info("mem_map: mdp reserved with size 0x%lx in pool\n",
- mdp_pdata.ov0_wb_size + mdp_pdata.ov1_wb_size);
#endif
}
-
-static bool dsi_power_on = false;
-static bool resume_blk = false;
-static bool first_init = true;
-static bool backlight_gpio_is_on = true;
-
-static void
-backlight_gpio_enable(bool on)
-{
- PR_DISP_DEBUG("monarudo's %s: request on=%d currently=%d\n", __func__, on, backlight_gpio_is_on);
-
- if (on == backlight_gpio_is_on)
- return;
-
- if (system_rev == XB) {
- gpio_tlmm_config(GPIO_CFG(MBAT_IN_XA_XB, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
- gpio_set_value(MBAT_IN_XA_XB, on ? 1 : 0);
- } else if (system_rev >= XC) {
- PR_DISP_DEBUG("monarudo's %s: turning %s backlight for >= XC\n", __func__, on ? "ON" : "OFF");
- gpio_tlmm_config(GPIO_CFG(BL_HW_EN_XC_XD, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
- gpio_set_value(BL_HW_EN_XC_XD, on ? 1 : 0);
- msleep(1);
- }
-
- backlight_gpio_is_on = on;
-}
-
-static void
-backlight_gpio_off(void)
-{
- backlight_gpio_enable(false);
-}
-
-static void
-backlight_gpio_on(void)
-{
- backlight_gpio_enable(true);
-}
+static int first_init = 1;
+uint32_t cfg_panel_te_active[] = {GPIO_CFG(LCD_TE, 1, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA)};
+uint32_t cfg_panel_te_sleep[] = {GPIO_CFG(LCD_TE, 0, GPIO_CFG_INPUT, GPIO_CFG_PULL_DOWN, GPIO_CFG_2MA)};
static int mipi_dsi_panel_power(int on)
{
+ static bool dsi_power_on = false;
static struct regulator *reg_lvs5, *reg_l2;
static int gpio36, gpio37;
int rc;
- pr_debug("%s: on=%d\n", __func__, on);
+ PR_DISP_INFO("%s: on=%d\n", __func__, on);
if (!dsi_power_on) {
- PR_DISP_DEBUG("monarudo's %s: powering on.\n", __func__);
reg_lvs5 = regulator_get(&msm_mipi_dsi1_device.dev,
"dsi1_vddio");
if (IS_ERR_OR_NULL(reg_lvs5)) {
@@ -363,13 +869,13 @@ static int mipi_dsi_panel_power(int on)
return -EINVAL;
}
- gpio36 = PM8921_GPIO_PM_TO_SYS(V_LCM_N5V_EN); /* lcd1_pwr_en_n */
+ gpio36 = PM8921_GPIO_PM_TO_SYS(V_LCM_N5V_EN);
rc = gpio_request(gpio36, "lcd_5v-");
if (rc) {
pr_err("request lcd_5v- failed, rc=%d\n", rc);
return -ENODEV;
}
- gpio37 = PM8921_GPIO_PM_TO_SYS(V_LCM_P5V_EN); /* pwm_en */
+ gpio37 = PM8921_GPIO_PM_TO_SYS(V_LCM_P5V_EN);
rc = gpio_request(gpio37, "lcd_5v+");
if (rc) {
pr_err("request lcd_5v+ failed, rc=%d\n", rc);
@@ -382,7 +888,6 @@ static int mipi_dsi_panel_power(int on)
if (on) {
if (!first_init) {
- PR_DISP_DEBUG("monarudo's %s: turning on, previously initialized\n", __func__);
rc = regulator_set_optimum_mode(reg_l2, 100000);
if (rc < 0) {
pr_err("set_optimum_mode l2 failed, rc=%d\n", rc);
@@ -400,19 +905,18 @@ static int mipi_dsi_panel_power(int on)
}
hr_msleep(1);
gpio_set_value_cansleep(gpio37, 1);
- hr_msleep(2);
+ hr_msleep(2);
gpio_set_value_cansleep(gpio36, 1);
- hr_msleep(7);
+ hr_msleep(7);
gpio_set_value(LCD_RST, 1);
- /* Workaround for 1mA */
+
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_ON);
hr_msleep(10);
-
+
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_OFF);
} else {
- PR_DISP_DEBUG("monarudo's %s: turning on, initializing\n", __func__);
- /*Regulator needs enable first time*/
+
rc = regulator_enable(reg_lvs5);
if (rc) {
pr_err("enable lvs5 failed, rc=%d\n", rc);
@@ -428,28 +932,43 @@ static int mipi_dsi_panel_power(int on)
pr_err("enable l2 failed, rc=%d\n", rc);
return -ENODEV;
}
- /* Workaround for 1mA */
+
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_ON);
msleep(10);
msm_xo_mode_vote(wa_xo, MSM_XO_MODE_OFF);
}
+#if 1
+ rc = gpio_tlmm_config(cfg_panel_te_active[0], GPIO_CFG_ENABLE);
+ if (rc) {
+ pr_err("%s: gpio_tlmm_config(%#x)=%d\n", __func__,
+ cfg_panel_te_active[0], rc);
+ }
+#endif
} else {
- PR_DISP_DEBUG("monarudo's %s: turning off\n", __func__);
- backlight_gpio_off();
+#if 1
+ rc = gpio_tlmm_config(cfg_panel_te_sleep[0], GPIO_CFG_ENABLE);
+ if (rc) {
+ pr_err("%s: gpio_tlmm_config(%#x)=%d\n", __func__,
+ cfg_panel_te_sleep[0], rc);
+ }
+#endif
+ gpio_tlmm_config(GPIO_CFG(BL_HW_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
+ gpio_set_value(BL_HW_EN, 0);
gpio_set_value(LCD_RST, 0);
- hr_msleep(3);
+ hr_msleep(3);
gpio_set_value_cansleep(gpio36, 0);
hr_msleep(2);
gpio_set_value_cansleep(gpio37, 0);
- hr_msleep(8);
+ hr_msleep(8);
rc = regulator_disable(reg_lvs5);
if (rc) {
pr_err("disable reg_lvs5 failed, rc=%d\n", rc);
return -ENODEV;
}
+
rc = regulator_disable(reg_l2);
if (rc) {
pr_err("disable reg_l2 failed, rc=%d\n", rc);
@@ -461,35 +980,435 @@ static int mipi_dsi_panel_power(int on)
}
static struct mipi_dsi_platform_data mipi_dsi_pdata = {
+
.dsi_power_save = mipi_dsi_panel_power,
};
-static struct mipi_dsi_panel_platform_data *mipi_monarudo_pdata;
+static struct mipi_dsi_panel_platform_data *mipi_m7_pdata;
+static struct dsi_buf m7_panel_tx_buf;
+static struct dsi_buf m7_panel_rx_buf;
static struct dsi_cmd_desc *video_on_cmds = NULL;
static struct dsi_cmd_desc *display_on_cmds = NULL;
static struct dsi_cmd_desc *display_off_cmds = NULL;
-
+static struct dsi_cmd_desc *backlight_cmds = NULL;
+static struct dsi_cmd_desc *cmd_on_cmds = NULL;
+static struct dsi_cmd_desc *dim_on_cmds = NULL;
+static struct dsi_cmd_desc *dim_off_cmds = NULL;
+static struct dsi_cmd_desc *color_en_on_cmds = NULL;
+static struct dsi_cmd_desc *color_en_off_cmds = NULL;
+static struct dsi_cmd_desc **sre_ctrl_cmds = NULL;
+static struct dsi_cmd_desc *set_cabc_UI_cmds = NULL;
+static struct dsi_cmd_desc *set_cabc_Video_cmds = NULL;
+static struct dsi_cmd_desc *set_cabc_Camera_cmds = NULL;
+static int backlight_cmds_count = 0;
static int video_on_cmds_count = 0;
static int display_on_cmds_count = 0;
static int display_off_cmds_count = 0;
+static int cmd_on_cmds_count = 0;
+static int dim_on_cmds_count = 0;
+static int dim_off_cmds_count = 0;
+static int color_en_on_cmds_count = 0;
+static int color_en_off_cmds_count = 0;
+static int sre_ctrl_cmds_count = 0;
+static int set_cabc_UI_cmds_count = 0;
+static int set_cabc_Video_cmds_count = 0;
+static int set_cabc_Camera_cmds_count = 0;
+
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+static int cabc_mode = 0;
+static int cur_cabc_mode = 0;
+static struct mutex set_cabc_mutex;
+void m7_set_cabc (struct msm_fb_data_type *mfd, int mode);
+#endif
+static unsigned int pwm_min = 6;
+static unsigned int pwm_default = 81 ;
+static unsigned int pwm_max = 255;
+static atomic_t lcd_backlight_off;
+
+#define CABC_DIMMING_SWITCH
+
+static char enter_sleep[2] = {0x10, 0x00};
+static char exit_sleep[2] = {0x11, 0x00};
+static char display_off[2] = {0x28, 0x00};
+static char display_on[2] = {0x29, 0x00};
+static char nop[2] = {0x00, 0x00};
+static char CABC[2] = {0x55, 0x00};
+static char jdi_samsung_CABC[2] = {0x55, 0x03};
+
+static char samsung_password_l2[3] = { 0xF0, 0x5A, 0x5A};
+static char samsung_MIE_ctrl1[4] = {0xC0, 0x40, 0x10, 0x80};
+static char samsung_MIE_ctrl2[2] = {0xC2, 0x0F};
+
+#ifdef CABC_DIMMING_SWITCH
+static char dsi_dim_on[] = {0x53, 0x2C};
+static char dsi_dim_off[] = {0x53, 0x24};
+static char dsi_sharp_cmd_dim_on[] = {0x53, 0x0C};
+static char dsi_sharp_cmd_dim_off[] = {0x53, 0x04};
+
+static struct dsi_cmd_desc jdi_renesas_dim_on_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_dim_on), dsi_dim_on},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
-static char enter_sleep[2] = {0x10, 0x00}; /* DTYPE_DCS_WRITE */
-static char exit_sleep[2] = {0x11, 0x00}; /* DTYPE_DCS_WRITE */
-static char display_off[2] = {0x28, 0x00}; /* DTYPE_DCS_WRITE */
-static char display_on[2] = {0x29, 0x00}; /* DTYPE_DCS_WRITE */
+static struct dsi_cmd_desc jdi_renesas_dim_off_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_dim_off), dsi_dim_off},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
-static char write_display_brightness[3]= {0x51, 0x0F, 0xFF};
-static char write_control_display[2] = {0x53, 0x24}; /* DTYPE_DCS_WRITE1 */
+static struct dsi_cmd_desc samsung_dim_on_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_dim_on), dsi_dim_on},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
+
+static struct dsi_cmd_desc samsung_dim_off_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_dim_off), dsi_dim_off},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
+static struct dsi_cmd_desc renesas_dim_on_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_dim_on), dsi_dim_on},
+};
+
+static struct dsi_cmd_desc renesas_dim_off_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_dim_off), dsi_dim_off},
+};
+
+static struct dsi_cmd_desc sharp_cmd_dim_on_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_sharp_cmd_dim_on), dsi_sharp_cmd_dim_on},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
+
+static struct dsi_cmd_desc sharp_cmd_dim_off_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(dsi_sharp_cmd_dim_off), dsi_sharp_cmd_dim_off},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
+#endif
+#if 0
+static char samsung_display_ctrl[2] = { 0xB1, 0x00};
+
+static char samsung_display_ctrl_interface[5] = { 0xB2, 0x00, 0x02, 0x04, 0x48 };
+
+static char samsung_ctrl_BRR[2] = { 0xB3, 0x00 };
+static char samsung_crtl_Hsync[2] = { 0xB5, 0x00 };
+static char samsung_ctrl_GoutL[33] = {
+ 0xB7, 0x00, 0x00, 0x00,
+ 0x00, 0x03, 0x09, 0x04,
+ 0x06, 0x05, 0x07, 0x08,
+ 0x00, 0x0F, 0x0E, 0x0D,
+ 0x0C, 0x0B, 0x0A, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00};
+
+static char samsung_ctrl_GoutR[33] = {
+ 0xB8, 0x00, 0x00, 0x00,
+ 0x00, 0x10, 0x16, 0x11,
+ 0x13, 0x12, 0x14, 0x15,
+ 0x00, 0x1C, 0x1B, 0x1A,
+ 0x19, 0x18, 0x17, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00};
+
+static char samsung_ctrl_bl_mode[2] = {0xC1, 0x03};
+static char samsung_MIE_ctrl2[2] = {0xC2, 0x00};
+
+static char samsung_ctrl_bl[4] = {0xC3, 0x7C, 0x40, 0x22};
+
+static char samsung_ctrl_SHE[2] = { 0xE8, 0x00};
+static char samsung_ctrl_SAE[2] = { 0xE9, 0x00};
+
+static char samsung_ctrl_source[17] = {
+ 0xF2, 0x0C, 0x03, 0x03,
+ 0x06, 0x04, 0x00, 0x25,
+ 0x00, 0x26, 0x00, 0xD1,
+ 0x00, 0xD1, 0x0A, 0x0A,
+ 0x00};
+
+static char samsung_ctrl_power[19] = {
+ 0xF3, 0x99, 0x22, 0x0A,
+ 0x0A, 0x00, 0x09, 0x0C,
+ 0x00, 0x1B, 0x00, 0x1B,
+ 0x00, 0x2E, 0x08, 0x33,
+ 0x33, 0x53, 0x11};
+
+static char samsung_ctrl_panel[22] = {
+ 0xF5, 0x06, 0x00, 0x0D,
+ 0x21, 0x0A, 0x00, 0x17,
+ 0x11, 0x09, 0x00, 0x06,
+ 0x00, 0x0D, 0x21, 0x0A,
+ 0x00, 0x17, 0x11, 0x09,
+ 0x00, 0x01};
+
+#endif
+static char samsung_ctrl_source[17] = {
+ 0xF2, 0x0C, 0x03, 0x73,
+ 0x06, 0x04, 0x00, 0x25,
+ 0x00, 0x26, 0x00, 0xD1,
+ 0x00, 0xD1, 0x00, 0x00,
+ 0x00};
+static char samsung_ctrl_bl[4] = {0xC3, 0x63, 0x40, 0x01};
+static char samsung_ctrl_positive_gamma[70] = {
+ 0xFA, 0x00, 0x3F, 0x20,
+ 0x19, 0x25, 0x24, 0x27,
+ 0x19, 0x19, 0x13, 0x00,
+ 0x08, 0x0E, 0x0F, 0x14,
+ 0x15, 0x1F, 0x25, 0x2A,
+ 0x2B, 0x2A, 0x20, 0x3C,
+ 0x00, 0x3F, 0x20, 0x19,
+ 0x25, 0x24, 0x27, 0x19,
+ 0x19, 0x13, 0x00, 0x08,
+ 0x0E, 0x0F, 0x14, 0x15,
+ 0x1F, 0x25, 0x2A, 0x2B,
+ 0x2A, 0x20, 0x3C, 0x00,
+ 0x3F, 0x20, 0x19, 0x25,
+ 0x24, 0x27, 0x19, 0x19,
+ 0x13, 0x00, 0x08, 0x0E,
+ 0x0F, 0x14, 0x15, 0x1F,
+ 0x25, 0x2A, 0x2B, 0x2A,
+ 0x20, 0x3C};
+
+static char samsung_ctrl_negative_gamma[70] = {
+ 0xFB, 0x00, 0x3F, 0x20,
+ 0x19, 0x25, 0x24, 0x27,
+ 0x19, 0x19, 0x13, 0x00,
+ 0x08, 0x0E, 0x0F, 0x14,
+ 0x15, 0x1F, 0x25, 0x2A,
+ 0x2B, 0x2A, 0x20, 0x3C,
+ 0x00, 0x3F, 0x20, 0x19,
+ 0x25, 0x24, 0x27, 0x19,
+ 0x19, 0x13, 0x00, 0x08,
+ 0x0E, 0x0F, 0x14, 0x15,
+ 0x1F, 0x25, 0x2A, 0x2B,
+ 0x2A, 0x20, 0x3C, 0x00,
+ 0x3F, 0x20, 0x19, 0x25,
+ 0x24, 0x27, 0x19, 0x19,
+ 0x13, 0x00, 0x08, 0x0E,
+ 0x0F, 0x14, 0x15, 0x1F,
+ 0x25, 0x2A, 0x2B, 0x2A,
+ 0x20, 0x3C};
+static char samsung_password_l3[3] = { 0xFC, 0x5A, 0x5A };
+
+static char samsung_cmd_test[5] = { 0xFF, 0x00, 0x00, 0x00, 0x20};
+
+static char samsung_panel_exit_sleep[2] = {0x11, 0x00};
+#ifdef CABC_DIMMING_SWITCH
+static char samsung_bl_ctrl[2] = {0x53, 0x24};
+#else
+static char samsung_bl_ctrl[2] = {0x53, 0x2C};
+#endif
+static char samsung_ctrl_brightness[2] = {0x51, 0xFF};
+static char samsung_enable_te[2] = {0x35, 0x00};
+
+static char samsung_set_column_address[5] = { 0x2A, 0x00, 0x00, 0x04, 0x37 };
+
+static char samsung_set_page_address[5] = { 0x2B, 0x00, 0x00, 0x07, 0x7F };
+static char samsung_panel_display_on[2] = {0x29, 0x00};
+static char samsung_display_off[2] = {0x28, 0x00};
+static char samsung_enter_sleep[2] = {0x10, 0x00};
+
+static char samsung_deep_standby_off[2] = {0xB0, 0x01};
+static char SAE[2] = {0xE9, 0x12};
+static char samsung_swwr_mipi_speed[4] = {0xE4, 0x00, 0x04, 0x00};
+static char samsung_swwr_kinky_gamma[17] = {0xF2, 0x0C, 0x03, 0x03, 0x06, 0x04, 0x00, 0x25, 0x00, 0x26, 0x00, 0xD1, 0x00, 0xD1, 0x00, 0x0A, 0x00};
+static char samsung_password_l2_close[3] = { 0xF0, 0xA5, 0xA5};
+static char samsung_password_l3_close[3] = { 0xFC, 0xA5, 0xA5};
+static char Oscillator_Bias_Current[4] = { 0xFD, 0x56, 0x08, 0x00};
+static char samsung_ctrl_positive_gamma_c2_1[70] = {
+ 0xFA, 0x1E, 0x38, 0x0C,
+ 0x0C, 0x12, 0x14, 0x16,
+ 0x17, 0x1A, 0x1A, 0x19,
+ 0x14, 0x10, 0x0D, 0x10,
+ 0x13, 0x1D, 0x20, 0x20,
+ 0x21, 0x26, 0x27, 0x36,
+ 0x0F, 0x3C, 0x12, 0x15,
+ 0x1E, 0x21, 0x24, 0x24,
+ 0x26, 0x24, 0x23, 0x1C,
+ 0x15, 0x11, 0x13, 0x16,
+ 0x1E, 0x21, 0x21, 0x21,
+ 0x26, 0x27, 0x36, 0x00,
+ 0x3F, 0x13, 0x18, 0x22,
+ 0x27, 0x29, 0x2A, 0x2B,
+ 0x2A, 0x29, 0x23, 0x1B,
+ 0x16, 0x18, 0x19, 0x1F,
+ 0x22, 0x23, 0x24, 0x2A,
+ 0x2D, 0x37};
+static char samsung_ctrl_negative_gamma_c2_1[70] = {
+ 0xFB, 0x1E, 0x38, 0x0C,
+ 0x0C, 0x12, 0x14, 0x16,
+ 0x17, 0x1A, 0x1A, 0x19,
+ 0x14, 0x10, 0x0D, 0x10,
+ 0x13, 0x1D, 0x20, 0x20,
+ 0x21, 0x26, 0x27, 0x36,
+ 0x0F, 0x3C, 0x12, 0x15,
+ 0x1E, 0x21, 0x24, 0x24,
+ 0x26, 0x24, 0x23, 0x1C,
+ 0x15, 0x11, 0x13, 0x16,
+ 0x1E, 0x21, 0x21, 0x21,
+ 0x26, 0x27, 0x36, 0x00,
+ 0x3F, 0x13, 0x18, 0x22,
+ 0x27, 0x29, 0x2A, 0x2B,
+ 0x2A, 0x29, 0x23, 0x1B,
+ 0x16, 0x18, 0x19, 0x1F,
+ 0x22, 0x23, 0x24, 0x2A,
+ 0x2D, 0x37};
+
+static char BCSAVE[] = {
+ 0xCD, 0x80, 0xB3, 0x67,
+ 0x1C, 0x78, 0x37, 0x00,
+ 0x10, 0x73, 0x41, 0x99,
+ 0x10, 0x00, 0x00};
+
+static char TMF[] = {
+ 0xCE, 0x33, 0x1C, 0x0D,
+ 0x20, 0x14, 0x00, 0x16,
+ 0x23, 0x18, 0x2C, 0x16,
+ 0x00, 0x00};
+
+static struct dsi_cmd_desc samsung_cmd_backlight_cmds_nop[] = {
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(samsung_ctrl_brightness), samsung_ctrl_brightness},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
+
+static struct dsi_cmd_desc samsung_cmd_backlight_cmds[] = {
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(samsung_ctrl_brightness), samsung_ctrl_brightness},
+};
+
+static struct dsi_cmd_desc samsung_display_on_cmds[] = {
+ {DTYPE_DCS_WRITE, 1, 0, 0, 0, sizeof(samsung_panel_display_on), samsung_panel_display_on},
+};
+
+static struct dsi_cmd_desc samsung_jdi_panel_cmd_mode_cmds[] = {
+#if 0
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_display_ctrl), samsung_display_ctrl},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_display_ctrl_interface), samsung_display_ctrl_interface},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_ctrl_BRR), samsung_ctrl_BRR},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_crtl_Hsync), samsung_crtl_Hsync},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_GoutL), samsung_ctrl_GoutL},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_GoutR), samsung_ctrl_GoutR},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1), samsung_MIE_ctrl1},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_ctrl_bl_mode),samsung_ctrl_bl_mode},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl2), samsung_MIE_ctrl2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_bl), samsung_ctrl_bl},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_ctrl_SHE), samsung_ctrl_SHE},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(samsung_ctrl_SAE), samsung_ctrl_SAE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_source), samsung_ctrl_source},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_power), samsung_ctrl_power},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_panel), samsung_ctrl_panel},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_positive_gamma), samsung_ctrl_positive_gamma},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_negative_gamma), samsung_ctrl_negative_gamma},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3), samsung_password_l3},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_cmd_test), samsung_cmd_test},
+#endif
+ {DTYPE_DCS_WRITE, 1, 0, 0, 120, sizeof(samsung_panel_exit_sleep), samsung_panel_exit_sleep},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1), samsung_MIE_ctrl1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_bl), samsung_ctrl_bl},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 1, sizeof(SAE),SAE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_positive_gamma), samsung_ctrl_positive_gamma},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_negative_gamma), samsung_ctrl_negative_gamma},
+
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3), samsung_password_l3},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_cmd_test), samsung_cmd_test},
+
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_swwr_mipi_speed), samsung_swwr_mipi_speed},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_swwr_kinky_gamma), samsung_swwr_kinky_gamma},
+
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3_close), samsung_password_l3_close},
+
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(samsung_set_column_address), samsung_set_column_address},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(samsung_set_page_address), samsung_set_page_address},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_bl_ctrl), samsung_bl_ctrl},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(CABC), CABC},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_enable_te), samsung_enable_te},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
+};
+
+static struct dsi_cmd_desc samsung_jdi_panel_cmd_mode_cmds_c2_nvm[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3), samsung_password_l3},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_cmd_test), samsung_cmd_test},
+
+ {DTYPE_DCS_WRITE, 1, 0, 0, 120, sizeof(samsung_panel_exit_sleep), samsung_panel_exit_sleep},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_WRITE2, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1), samsung_MIE_ctrl1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_bl), samsung_ctrl_bl},
+ {DTYPE_GEN_WRITE2, 1, 0, 0, 1, sizeof(SAE), SAE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3_close), samsung_password_l3_close},
+
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_bl_ctrl), samsung_bl_ctrl},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(CABC), CABC},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_enable_te), samsung_enable_te},
+
+};
+
+static struct dsi_cmd_desc samsung_jdi_panel_cmd_mode_cmds_c2_1[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3), samsung_password_l3},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_cmd_test), samsung_cmd_test},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Oscillator_Bias_Current), Oscillator_Bias_Current},
+
+ {DTYPE_DCS_WRITE, 1, 0, 0, 120, sizeof(samsung_panel_exit_sleep), samsung_panel_exit_sleep},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1), samsung_MIE_ctrl1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl2), samsung_MIE_ctrl2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_bl), samsung_ctrl_bl},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(BCSAVE), BCSAVE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(TMF), TMF},
+ {DTYPE_GEN_WRITE2, 1, 0, 0, 1, sizeof(SAE), SAE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_source), samsung_ctrl_source},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_positive_gamma_c2_1), samsung_ctrl_positive_gamma_c2_1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_negative_gamma_c2_1), samsung_ctrl_negative_gamma_c2_1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3_close), samsung_password_l3_close},
+
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_bl_ctrl), samsung_bl_ctrl},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(jdi_samsung_CABC), jdi_samsung_CABC},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_enable_te), samsung_enable_te},
+
+};
+static struct dsi_cmd_desc samsung_jdi_panel_cmd_mode_cmds_c2_2[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3), samsung_password_l3},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_cmd_test), samsung_cmd_test},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Oscillator_Bias_Current), Oscillator_Bias_Current},
+
+ {DTYPE_DCS_WRITE, 1, 0, 0, 120, sizeof(samsung_panel_exit_sleep), samsung_panel_exit_sleep},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1), samsung_MIE_ctrl1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl2), samsung_MIE_ctrl2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_bl), samsung_ctrl_bl},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(BCSAVE), BCSAVE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(TMF), TMF},
+ {DTYPE_GEN_WRITE2, 1, 0, 0, 1, sizeof(SAE), SAE},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_ctrl_source), samsung_ctrl_source},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l3_close), samsung_password_l3_close},
+
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_bl_ctrl), samsung_bl_ctrl},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(jdi_samsung_CABC), jdi_samsung_CABC},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(samsung_enable_te), samsung_enable_te},
+
+};
+
+static struct dsi_cmd_desc samsung_display_off_cmds[] = {
+ {DTYPE_DCS_WRITE, 1, 0, 0, 0, sizeof(samsung_display_off), samsung_display_off},
+ {DTYPE_DCS_WRITE, 1, 0, 0, 48, sizeof(samsung_enter_sleep), samsung_enter_sleep},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_WRITE, 1, 0, 0, 0, sizeof(samsung_deep_standby_off), samsung_deep_standby_off},
+};
+
+static char write_display_brightness[3]= {0x51, 0x0F, 0xFF};
+static char write_control_display[2] = {0x53, 0x24};
static struct dsi_cmd_desc renesas_cmd_backlight_cmds[] = {
{DTYPE_DCS_LWRITE, 1, 0, 0, 0, sizeof(write_display_brightness), write_display_brightness},
};
-
static struct dsi_cmd_desc renesas_display_on_cmds[] = {
{DTYPE_DCS_LWRITE, 1, 0, 0, 0, sizeof(display_on), display_on},
};
-
static char interface_setting_0[2] = {0xB0, 0x04};
static char Color_enhancement[33]= {
@@ -502,19 +1421,116 @@ static char Color_enhancement[33]= {
0x13, 0xF0, 0x20, 0x10,
0x10, 0x10, 0x10, 0x10,
0x10};
-static char Outline_Sharpening_Control[3] = {
+static char m7_Color_enhancement[33]= {
+ 0xCA, 0x01, 0x02, 0x9A,
+ 0xA4, 0xB8, 0xB4, 0xB0,
+ 0xA4, 0x08, 0x28, 0x05,
+ 0x87, 0xB0, 0x50, 0x01,
+ 0xFF, 0x05, 0xF8, 0x0C,
+ 0x0C, 0x50, 0x40, 0x13,
+ 0x13, 0xF0, 0x08, 0x10,
+ 0x10, 0x3F, 0x3F, 0x3F,
+ 0x3F};
+static char Outline_Sharpening_Control[3]= {
0xDD, 0x11, 0xA1};
+
static char BackLight_Control_6[8]= {
- 0xCE, 0x00, 0x01, 0x00,
- 0xC1, 0xF4, 0xB2, 0x02};
+ 0xCE, 0x00, 0x07, 0x00,
+ 0xC1, 0x24, 0xB2, 0x02};
+static char BackLight_Control_6_28kHz[8]= {
+ 0xCE, 0x00, 0x01, 0x00,
+ 0xC1, 0xF4, 0xB2, 0x02};
static char Manufacture_Command_setting[4] = {0xD6, 0x01};
-static char nop[4] = {0x00, 0x00};
-static char CABC[2] = {0x55, 0x01};
static char hsync_output[4] = {0xC3, 0x01, 0x00, 0x10};
static char protect_on[4] = {0xB0, 0x03};
static char TE_OUT[4] = {0x35, 0x00};
static char deep_standby_off[2] = {0xB1, 0x01};
+static char unlock[] = {0xB0, 0x00};
+static char display_brightness[] = {0x51, 0xFF};
+#ifdef CABC_DIMMING_SWITCH
+static char led_pwm_en[] = {0x53, 0x04};
+#else
+static char led_pwm_en[] = {0x53, 0x0C};
+#endif
+static char enable_te[] = {0x35, 0x00};
+static char Source_Timing_Setting[23]= {
+ 0xC4, 0x70, 0x0C, 0x0C,
+ 0x55, 0x55, 0x00, 0x00,
+ 0x00, 0x00, 0x05, 0x05,
+ 0x00, 0x0C, 0x0C, 0x55,
+ 0x55, 0x00, 0x00, 0x00,
+ 0x00, 0x05, 0x05};
+static char lock[] = {0xB0, 0x03};
+static char Write_Content_Adaptive_Brightness_Control[2] = {0x55, 0x42};
+static char common_setting[] = {
+ 0xCE, 0x6C, 0x40, 0x43,
+ 0x49, 0x55, 0x62, 0x71,
+ 0x82, 0x94, 0xA8, 0xB9,
+ 0xCB, 0xDB, 0xE9, 0xF5,
+ 0xFC, 0xFF, 0x04, 0xD3,
+ 0x00, 0x00, 0x54, 0x24};
+
+static char cabc_still[] = {0xB9, 0x03, 0x82, 0x3C, 0x10, 0x3C, 0x87};
+static char cabc_movie[] = {0xBA, 0x03, 0x78, 0x64, 0x10, 0x64, 0xB4};
+static char SRE_Manual_0[] = {0xBB, 0x01, 0x00, 0x00};
+
+static char blue_shift_adjust_1[] = {
+ 0xC7, 0x01, 0x0B, 0x12,
+ 0x1B, 0x2A, 0x3A, 0x45,
+ 0x56, 0x3A, 0x42, 0x4E,
+ 0x5B, 0x64, 0x6C, 0x75,
+ 0x01, 0x0B, 0x12, 0x1A,
+ 0x29, 0x37, 0x41, 0x52,
+ 0x36, 0x3F, 0x4C, 0x59,
+ 0x62, 0x6A, 0x74};
+
+static char blue_shift_adjust_2[] = {
+ 0xC8, 0x01, 0x00, 0xF4,
+ 0x00, 0x00, 0xFC, 0x00,
+ 0x00, 0xF7, 0x00, 0x00,
+ 0xFC, 0x00, 0x00, 0xFF,
+ 0x00, 0x00, 0xFC, 0x0F};
+
+static struct dsi_cmd_desc sharp_cmd_backlight_cmds[] = {
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 0, sizeof(display_brightness), display_brightness},
+};
+
+static struct dsi_cmd_desc sharp_renesas_cmd_on_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Manufacture_Command_setting), Manufacture_Command_setting},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(common_setting), common_setting},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(cabc_still), cabc_still},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(cabc_movie), cabc_movie},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(SRE_Manual_0), SRE_Manual_0},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(m7_Color_enhancement), m7_Color_enhancement},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(Write_Content_Adaptive_Brightness_Control), Write_Content_Adaptive_Brightness_Control},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(led_pwm_en), led_pwm_en},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(blue_shift_adjust_1), blue_shift_adjust_1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(blue_shift_adjust_2), blue_shift_adjust_2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Source_Timing_Setting), Source_Timing_Setting},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(lock), lock},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(nop), nop},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(nop), nop},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(enable_te), enable_te},
+
+ {DTYPE_DCS_WRITE, 1, 0, 0, 120, sizeof(exit_sleep), exit_sleep},
+};
+static struct dsi_cmd_desc m7_sharp_video_on_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(interface_setting_0), interface_setting_0},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(nop), nop},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(nop), nop},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Manufacture_Command_setting), Manufacture_Command_setting},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Color_enhancement), Color_enhancement},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Outline_Sharpening_Control), Outline_Sharpening_Control},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(BackLight_Control_6_28kHz), BackLight_Control_6_28kHz},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(write_control_display), write_control_display},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(CABC), CABC},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(TE_OUT), TE_OUT},
+
+ {DTYPE_DCS_WRITE, 1, 0, 0, 1, sizeof(exit_sleep), exit_sleep},
+
+};
static struct dsi_cmd_desc sharp_video_on_cmds[] = {
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(interface_setting_0), interface_setting_0},
@@ -527,8 +1543,9 @@ static struct dsi_cmd_desc sharp_video_on_cmds[] = {
{DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(write_control_display), write_control_display},
{DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(CABC), CABC},
{DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(TE_OUT), TE_OUT},
-// {DTYPE_DCS_WRITE, 1, 0, 0, 0, sizeof(display_on), display_on},
- {DTYPE_DCS_WRITE, 1, 0, 0, 0, sizeof(exit_sleep), exit_sleep},
+
+ {DTYPE_DCS_WRITE, 1, 0, 0, 0, sizeof(exit_sleep), exit_sleep},
+
};
static struct dsi_cmd_desc sony_video_on_cmds[] = {
@@ -537,7 +1554,7 @@ static struct dsi_cmd_desc sony_video_on_cmds[] = {
{DTYPE_DCS_WRITE1, 1, 0, 0, 0, sizeof(nop), nop},
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(hsync_output), hsync_output},
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(Color_enhancement), Color_enhancement},
- //{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(Outline_Sharpening_Control), Outline_Sharpening_Control},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(Outline_Sharpening_Control), Outline_Sharpening_Control},
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(BackLight_Control_6), BackLight_Control_6},
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(Manufacture_Command_setting), Manufacture_Command_setting},
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(protect_on), protect_on},
@@ -550,8 +1567,10 @@ static struct dsi_cmd_desc sony_video_on_cmds[] = {
};
static struct dsi_cmd_desc sharp_display_off_cmds[] = {
- {DTYPE_DCS_LWRITE, 1, 0, 0, 20, sizeof(display_off), display_off},
- {DTYPE_DCS_LWRITE, 1, 0, 0, 50, sizeof(enter_sleep), enter_sleep}
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 20,
+ sizeof(display_off), display_off},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 50,
+ sizeof(enter_sleep), enter_sleep}
};
static struct dsi_cmd_desc sony_display_off_cmds[] = {
@@ -563,12 +1582,39 @@ static struct dsi_cmd_desc sony_display_off_cmds[] = {
{DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(deep_standby_off), deep_standby_off},
};
+static char unlock_command[2] = {0xB0, 0x04};
+static char lock_command[2] = {0xB0, 0x03};
+static struct dsi_cmd_desc jdi_renesas_cmd_on_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(unlock_command), unlock_command},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(common_setting), common_setting},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(cabc_still), cabc_still},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(cabc_movie), cabc_movie},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(SRE_Manual_0), SRE_Manual_0},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(m7_Color_enhancement), m7_Color_enhancement},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(Manufacture_Command_setting), Manufacture_Command_setting},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(lock_command), lock_command},
+ {DTYPE_DCS_WRITE, 1, 0, 0, 120, sizeof(exit_sleep), exit_sleep},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(write_control_display), write_control_display},
+ {DTYPE_DCS_LWRITE, 1, 0, 0, 1, sizeof(Write_Content_Adaptive_Brightness_Control), Write_Content_Adaptive_Brightness_Control},
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(enable_te), enable_te},
+};
+
+static struct dsi_cmd_desc jdi_display_off_cmds[] = {
+ {DTYPE_DCS_WRITE, 1, 0, 0, 1, sizeof(display_off), display_off},
+ {DTYPE_DCS_WRITE, 1, 0, 0, 48, sizeof(enter_sleep), enter_sleep},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(unlock_command), unlock_command},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(deep_standby_off), deep_standby_off}
+};
+
+static int resume_blk = 0;
static struct i2c_client *blk_pwm_client;
static struct dcs_cmd_req cmdreq;
+static int pwmic_ver;
-static int monarudo_lcd_on(struct platform_device *pdev)
+static int m7_lcd_on(struct platform_device *pdev)
{
struct msm_fb_data_type *mfd;
+ struct mipi_panel_info *mipi;
mfd = platform_get_drvdata(pdev);
if (!mfd)
@@ -576,29 +1622,28 @@ static int monarudo_lcd_on(struct platform_device *pdev)
if (mfd->key != MFD_KEY)
return -EINVAL;
- if(! first_init) {
- struct mipi_panel_info *mipi = &mfd->panel_info.mipi;
-
- PR_DISP_DEBUG("%s: turning on the display.\n", __func__);
-
+ mipi = &mfd->panel_info.mipi;
+ if (!first_init) {
if (mipi->mode == DSI_VIDEO_MODE) {
cmdreq.cmds = video_on_cmds;
cmdreq.cmds_cnt = video_on_cmds_count;
- cmdreq.flags = CMD_REQ_COMMIT;
- cmdreq.rlen = 0;
- cmdreq.cb = NULL;
-
- mipi_dsi_cmdlist_put(&cmdreq);
-
- PR_DISP_INFO("%s\n", __func__);
+ } else {
+ cmdreq.cmds = cmd_on_cmds;
+ cmdreq.cmds_cnt = cmd_on_cmds_count;
}
+ cmdreq.flags = CMD_REQ_COMMIT;
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+
+ mipi_dsi_cmdlist_put(&cmdreq);
}
- first_init = false;
+ first_init = 0;
+ PR_DISP_INFO("%s, %s, PWM A%d\n", __func__, ptype, pwmic_ver);
return 0;
}
-static int monarudo_lcd_off(struct platform_device *pdev)
+static int m7_lcd_off(struct platform_device *pdev)
{
struct msm_fb_data_type *mfd;
@@ -609,18 +1654,15 @@ static int monarudo_lcd_off(struct platform_device *pdev)
if (mfd->key != MFD_KEY)
return -EINVAL;
- resume_blk = true;
+ resume_blk = 1;
PR_DISP_INFO("%s\n", __func__);
-
return 0;
}
-
-
-static int __devinit monarudo_lcd_probe(struct platform_device *pdev)
+static int __devinit m7_lcd_probe(struct platform_device *pdev)
{
if (pdev->id == 0) {
- mipi_monarudo_pdata = pdev->dev.platform_data;
+ mipi_m7_pdata = pdev->dev.platform_data;
return 0;
}
@@ -629,21 +1671,22 @@ static int __devinit monarudo_lcd_probe(struct platform_device *pdev)
PR_DISP_INFO("%s\n", __func__);
return 0;
}
-
-static int monarudo_display_on(struct platform_device *pdev)
+static int m7_display_on(struct platform_device *pdev)
{
struct msm_fb_data_type *mfd;
mfd = platform_get_drvdata(pdev);
- /* It needs 120ms when LP to HS for renesas */
- msleep(120);
-
- PR_DISP_DEBUG("%s: turning on the display.\n", __func__);
+ if (panel_type == PANEL_ID_DLXJ_SHARP_RENESAS ||
+ panel_type == PANEL_ID_DLXJ_SONY_RENESAS ||
+ panel_type == PANEL_ID_M7_SHARP_RENESAS)
+ msleep(120);
cmdreq.cmds = display_on_cmds;
cmdreq.cmds_cnt = display_on_cmds_count;
cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
cmdreq.rlen = 0;
cmdreq.cb = NULL;
@@ -653,7 +1696,7 @@ static int monarudo_display_on(struct platform_device *pdev)
return 0;
}
-static int monarudo_display_off(struct platform_device *pdev)
+static int m7_display_off(struct platform_device *pdev)
{
struct msm_fb_data_type *mfd;
@@ -662,6 +1705,9 @@ static int monarudo_display_off(struct platform_device *pdev)
cmdreq.cmds = display_off_cmds;
cmdreq.cmds_cnt = display_off_cmds_count;
cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
cmdreq.rlen = 0;
cmdreq.cb = NULL;
@@ -671,120 +1717,584 @@ static int monarudo_display_off(struct platform_device *pdev)
return 0;
}
-#define PWM_MIN 13
-#define PWM_DEFAULT 82
-#define PWM_MAX 255
+#ifdef CABC_DIMMING_SWITCH
+static void m7_dim_on(struct msm_fb_data_type *mfd)
+{
+ if (atomic_read(&lcd_backlight_off)) {
+ PR_DISP_DEBUG("%s: backlight is off. Skip dimming setting\n", __func__);
+ return;
+ }
+
+ if (dim_on_cmds == NULL)
+ return;
+
+ PR_DISP_DEBUG("%s\n", __func__);
+
+ cmdreq.cmds = dim_on_cmds;
+ cmdreq.cmds_cnt = dim_on_cmds_count;
+
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+ mipi_dsi_cmdlist_put(&cmdreq);
+}
+#endif
+
+
+#define BRI_SETTING_MIN 30
+#define BRI_SETTING_DEF 142
+#define BRI_SETTING_MAX 255
-#define BRI_SETTING_MIN 30
-#define BRI_SETTING_DEF 142
-#define BRI_SETTING_MAX 255
+static unsigned char pwm_value;
+static int blk_low = 0;
-static unsigned char monarudo_shrink_pwm(int val)
+static unsigned char m7_shrink_pwm(int val)
{
unsigned char shrink_br = BRI_SETTING_MAX;
+ if(pwmic_ver >= 2)
+ pwm_min = 6;
+ else
+ pwm_min = 11;
if (val <= 0) {
shrink_br = 0;
} else if (val > 0 && (val < BRI_SETTING_MIN)) {
- shrink_br = PWM_MIN;
+ shrink_br = pwm_min;
} else if ((val >= BRI_SETTING_MIN) && (val <= BRI_SETTING_DEF)) {
- shrink_br = (val - BRI_SETTING_MIN) * (PWM_DEFAULT - PWM_MIN) /
- (BRI_SETTING_DEF - BRI_SETTING_MIN) + PWM_MIN;
+ shrink_br = (val - BRI_SETTING_MIN) * (pwm_default - pwm_min) /
+ (BRI_SETTING_DEF - BRI_SETTING_MIN) + pwm_min;
} else if (val > BRI_SETTING_DEF && val <= BRI_SETTING_MAX) {
- shrink_br = (val - BRI_SETTING_DEF) * (PWM_MAX - PWM_DEFAULT) /
- (BRI_SETTING_MAX - BRI_SETTING_DEF) + PWM_DEFAULT;
+ shrink_br = (val - BRI_SETTING_DEF) * (pwm_max - pwm_default) /
+ (BRI_SETTING_MAX - BRI_SETTING_DEF) + pwm_default;
} else if (val > BRI_SETTING_MAX)
- shrink_br = PWM_MAX;
+ shrink_br = pwm_max;
- PR_DISP_DEBUG("brightness orig=%d, transformed=%d\n", val, shrink_br);
+ pwm_value = shrink_br;
+
+ PR_DISP_INFO("brightness orig=%d, transformed=%d\n", val, shrink_br);
return shrink_br;
}
-static void monarudo_set_backlight(struct msm_fb_data_type *mfd)
+void pwmic_config(unsigned char* index, unsigned char* value, int count)
{
- int rc;
-
- write_display_brightness[2] = monarudo_shrink_pwm((unsigned char)(mfd->bl_level));
+ int i, rc;
- if (resume_blk) {
- resume_blk = false;
+ for(i = 0; i < count; ++i) {
+ rc = i2c_smbus_write_byte_data(blk_pwm_client, index[i], value[i]);
+ if (rc)
+ pr_err("i2c write fail\n");
+ }
+}
- PR_DISP_DEBUG("%s: resuming backlight\n", __func__);
+unsigned char idx[5] = {0x50, 0x01, 0x02, 0x05, 0x00};
+unsigned char val[5] = {0x02, 0x09, 0x78, 0x14, 0x04};
+unsigned char idx0[1] = {0x03};
+unsigned char val0[1] = {0xFF};
+unsigned char idx1[5] = {0x00, 0x01, 0x02, 0x03, 0x05};
+unsigned char val1[5] = {0x04, 0x09, 0x78, 0xff, 0x14};
+unsigned char val2[5] = {0x14, 0x08, 0x78, 0xff, 0x14};
+unsigned char idx2[6] = {0x00, 0x01, 0x03, 0x03, 0x03, 0x03};
+unsigned char idx3[6] = {0x00, 0x03, 0x03, 0x03, 0x03, 0x01};
+unsigned char val3[6] = {0x14, 0x09, 0x50, 0xA0, 0xE0, 0xFF};
+unsigned char val4[6] = {0x14, 0xF0, 0xA0, 0x50, 0x11, 0x08};
+
+static void m7_set_backlight(struct msm_fb_data_type *mfd)
+{
+ int rc;
- backlight_gpio_on();
+ if ((panel_type == PANEL_ID_M7_JDI_SAMSUNG) ||
+ (panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2) ||
+ (panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2_1) ||
+ (panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2_2) ||
+ (panel_type == PANEL_ID_M7_JDI_RENESAS))
+ samsung_ctrl_brightness[1] = m7_shrink_pwm((unsigned char)(mfd->bl_level));
+ else if (panel_type == PANEL_ID_M7_SHARP_RENESAS_C1)
+ display_brightness[1] = m7_shrink_pwm((unsigned char)(mfd->bl_level));
+ else
+ write_display_brightness[2] = m7_shrink_pwm((unsigned char)(mfd->bl_level));
+
+ if(pwmic_ver >= 2) {
+ if (resume_blk) {
+ resume_blk = 0;
+
+ gpio_tlmm_config(GPIO_CFG(BL_HW_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
+ gpio_set_value(BL_HW_EN, 1);
+ msleep(1);
+ pwmic_config(idx, val, sizeof(idx));
+ msleep(1);
+ pwmic_config(idx0, val0, sizeof(idx0));
+ }
+ } else {
+ if (resume_blk) {
+ resume_blk = 0;
+ gpio_tlmm_config(GPIO_CFG(BL_HW_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
+ gpio_set_value(BL_HW_EN, 1);
+ msleep(1);
+
+ if (pwm_value >= 21 ) {
+ pwmic_config(idx1, val1, sizeof(idx1));
+ blk_low = 0;
+ } else {
+ val2[3] = pwm_value-5;
+ pwmic_config(idx1, val2, sizeof(idx1));
+ blk_low = 1;
+ }
+ }
- rc = i2c_smbus_write_byte_data(blk_pwm_client, 0x10, 0xC5);
- if (rc)
- pr_err("i2c write fail\n");
- rc = i2c_smbus_write_byte_data(blk_pwm_client, 0x19, 0x13);
- if (rc)
- pr_err("i2c write fail\n");
- rc = i2c_smbus_write_byte_data(blk_pwm_client, 0x14, 0xC2);
- if (rc)
- pr_err("i2c write fail\n");
- rc = i2c_smbus_write_byte_data(blk_pwm_client, 0x79, 0xFF);
- if (rc)
- pr_err("i2c write fail\n");
- rc = i2c_smbus_write_byte_data(blk_pwm_client, 0x1D, 0xFA);
- if (rc)
- pr_err("i2c write fail\n");
+ if (pwm_value >= 21 ) {
+ if ( blk_low == 1) {
+ pwmic_config(idx2, val3, sizeof(idx2));
+ blk_low = 0;
+ PR_DISP_INFO("bl >= 21\n");
+ }
+ } else if ((pwm_value > 0)&&(pwm_value < 21)) {
+ if ( blk_low == 0) {
+ pwmic_config(idx3, val4, sizeof(idx3));
+ blk_low = 1;
+ PR_DISP_INFO("bl < 21\n");
+ }
+ rc = i2c_smbus_write_byte_data(blk_pwm_client, 0x03, (pwm_value - 5));
+ if (rc)
+ pr_err("i2c write fail\n");
+ }
}
- cmdreq.cmds = (struct dsi_cmd_desc*)&renesas_cmd_backlight_cmds;
- cmdreq.cmds_cnt = 1;
+#ifdef CABC_DIMMING_SWITCH
+
+ if (samsung_ctrl_brightness[1] == 0 || display_brightness[1] == 0 || write_display_brightness[2] == 0) {
+ atomic_set(&lcd_backlight_off, 1);
+ cmdreq.cmds = dim_off_cmds;
+ cmdreq.cmds_cnt = dim_off_cmds_count;
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+
+ mipi_dsi_cmdlist_put(&cmdreq);
+ } else
+ atomic_set(&lcd_backlight_off, 0);
+#endif
+ cmdreq.cmds = backlight_cmds;
+ cmdreq.cmds_cnt = backlight_cmds_count;
cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
cmdreq.rlen = 0;
cmdreq.cb = NULL;
mipi_dsi_cmdlist_put(&cmdreq);
- if((mfd->bl_level) == 0) {
- PR_DISP_DEBUG("%s: disabling backlight\n", __func__);
- backlight_gpio_off();
- resume_blk = true;
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+
+ if (cabc_mode == 3) {
+ m7_set_cabc(mfd, cabc_mode);
+ }
+#endif
+ if ((mfd->bl_level) == 0) {
+ gpio_tlmm_config(GPIO_CFG(BL_HW_EN, 0, GPIO_CFG_OUTPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA), GPIO_CFG_ENABLE);
+ gpio_set_value(BL_HW_EN, 0);
+ resume_blk = 1;
}
return;
}
+static char SAE_on[2] = {0xE9, 0x12};
+static char SAE_off[2] = {0xE9, 0x00};
+static struct dsi_cmd_desc samsung_color_enhance_on_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 0, sizeof(SAE_on),SAE_on},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+};
+static struct dsi_cmd_desc samsung_color_enhance_off_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_WRITE1, 1, 0, 0, 0, sizeof(SAE_off),SAE_off},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+};
+
+static char renesas_color_en_on[2]= {0xCA, 0x01};
+static char renesas_color_en_off[2]= {0xCA, 0x00};
+static struct dsi_cmd_desc sharp_renesas_color_enhance_on_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(renesas_color_en_on), renesas_color_en_on},
+};
+static struct dsi_cmd_desc sharp_renesas_color_enhance_off_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(renesas_color_en_off), renesas_color_en_off},
+};
+
+static struct dsi_cmd_desc sharp_renesas_c1_color_enhance_on_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(renesas_color_en_on), renesas_color_en_on},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_c1_color_enhance_off_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(renesas_color_en_off), renesas_color_en_off},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+
+static void m7_color_enhance(struct msm_fb_data_type *mfd, int on)
+{
+ if (color_en_on_cmds == NULL || color_en_off_cmds == NULL)
+ return;
+
+ if (on) {
+ cmdreq.cmds = color_en_on_cmds;
+ cmdreq.cmds_cnt = color_en_on_cmds_count;
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+
+ mipi_dsi_cmdlist_put(&cmdreq);
+
+ PR_DISP_INFO("color enhance on\n");
+ } else {
+ cmdreq.cmds = color_en_off_cmds;
+ cmdreq.cmds_cnt = color_en_off_cmds_count;
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+
+ mipi_dsi_cmdlist_put(&cmdreq);
+
+ PR_DISP_INFO("color enhance off\n");
+ }
+}
+
+static char SRE_Manual1[] = {0xBB, 0x01, 0x00, 0x00};
+static char SRE_Manual2[] = {0xBB, 0x01, 0x03, 0x02};
+static char SRE_Manual3[] = {0xBB, 0x01, 0x08, 0x05};
+static char SRE_Manual4[] = {0xBB, 0x01, 0x13, 0x08};
+static char SRE_Manual5[] = {0xBB, 0x01, 0x1C, 0x0E};
+static char SRE_Manual6[] = {0xBB, 0x01, 0x25, 0x10};
+static char SRE_Manual7[] = {0xBB, 0x01, 0x38, 0x18};
+static char SRE_Manual8[] = {0xBB, 0x01, 0x5D, 0x28};
+static char SRE_Manual9[] = {0xBB, 0x01, 0x83, 0x38};
+static char SRE_Manual10[] = {0xBB, 0x01, 0xA8, 0x48};
+
+static struct dsi_cmd_desc sharp_renesas_sre1_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual1), SRE_Manual1},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre2_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual2), SRE_Manual2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre3_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual3), SRE_Manual3},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre4_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual4), SRE_Manual4},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre5_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual5), SRE_Manual5},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre6_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual6), SRE_Manual6},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre7_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual7), SRE_Manual7},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre8_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual8), SRE_Manual8},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre9_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual9), SRE_Manual9},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+static struct dsi_cmd_desc sharp_renesas_sre10_ctrl_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(unlock), unlock},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(SRE_Manual10), SRE_Manual10},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 0, sizeof(lock), lock},
+};
+
+static struct dsi_cmd_desc *sharp_renesas_sre_ctrl_cmds[10] = {
+ sharp_renesas_sre1_ctrl_cmds,
+ sharp_renesas_sre2_ctrl_cmds,
+ sharp_renesas_sre3_ctrl_cmds,
+ sharp_renesas_sre4_ctrl_cmds,
+ sharp_renesas_sre5_ctrl_cmds,
+ sharp_renesas_sre6_ctrl_cmds,
+ sharp_renesas_sre7_ctrl_cmds,
+ sharp_renesas_sre8_ctrl_cmds,
+ sharp_renesas_sre9_ctrl_cmds,
+ sharp_renesas_sre10_ctrl_cmds,
+};
+static void m7_sre_ctrl(struct msm_fb_data_type *mfd, unsigned long level)
+{
+ static long prev_level = 0, current_stage = 0, prev_stage = 0, tmp_stage = 0;
+
+ if (prev_level != level) {
+
+ prev_level = level;
+
+ if (level >= 0 && level < 8000) {
+ current_stage = 1;
+ } else if (level >= 8000 && level < 16000) {
+ current_stage = 2;
+ } else if (level >= 16000 && level < 24000) {
+ current_stage = 3;
+ } else if (level >= 24000 && level < 32000) {
+ current_stage = 4;
+ } else if (level >= 32000 && level < 40000) {
+ current_stage = 5;
+ } else if (level >= 40000 && level < 48000) {
+ current_stage = 6;
+ } else if (level >= 48000 && level < 56000) {
+ current_stage = 7;
+ } else if (level >= 56000 && level < 65000) {
+ current_stage = 8;
+ } else if (level >= 65000 && level < 65500) {
+ current_stage = 9;
+ } else if (level >= 65500 && level < 65536) {
+ current_stage = 10;
+ } else {
+ current_stage = 11;
+ PR_DISP_INFO("out of range of ADC, set it to 11 as default\n");
+ }
+
+ if ( prev_stage == current_stage)
+ return;
+ tmp_stage = prev_stage;
+ prev_stage = current_stage;
+
+ if (sre_ctrl_cmds == NULL)
+ return;
+
+ if (current_stage == 1) {
+ cmdreq.cmds = sre_ctrl_cmds[0];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 2) {
+ cmdreq.cmds = sre_ctrl_cmds[1];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 3) {
+ cmdreq.cmds = sre_ctrl_cmds[2];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 4) {
+ cmdreq.cmds = sre_ctrl_cmds[3];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 5) {
+ cmdreq.cmds = sre_ctrl_cmds[4];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 6) {
+ cmdreq.cmds = sre_ctrl_cmds[5];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 7) {
+ cmdreq.cmds = sre_ctrl_cmds[6];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 8) {
+ cmdreq.cmds = sre_ctrl_cmds[7];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 9) {
+ cmdreq.cmds = sre_ctrl_cmds[8];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else if (current_stage == 10) {
+ cmdreq.cmds = sre_ctrl_cmds[9];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ } else {
+ cmdreq.cmds = sre_ctrl_cmds[0];
+ cmdreq.cmds_cnt = sre_ctrl_cmds_count;
+ }
+
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+ mipi_dsi_cmdlist_put(&cmdreq);
+
+ PR_DISP_INFO("SRE level %lu prev_stage %lu current_stage %lu\n", level, tmp_stage, current_stage);
+ }
+}
+
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+static char sharp_renesas_cabc_UI[2] = {0x55, 0x42};
+static char sharp_renesas_cabc_Video[2] = {0x55, 0x43};
+static struct dsi_cmd_desc sharp_renesas_set_cabc_UI_cmds[] = {
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(sharp_renesas_cabc_UI), sharp_renesas_cabc_UI},
+};
+static struct dsi_cmd_desc sharp_renesas_set_cabc_Video_cmds[] = {
+ {DTYPE_DCS_WRITE1, 1, 0, 0, 1, sizeof(sharp_renesas_cabc_Video), sharp_renesas_cabc_Video},
+};
+static char samsung_MIE_ctrl1_cabc_UI[4] = {0xC0, 0x40, 0x10, 0x80};
+static char BCSAVE_cabc_UI[] = {
+ 0xCD, 0x80, 0xB3, 0x67,
+ 0x1C, 0x78, 0x37, 0x00,
+ 0x10, 0x73, 0x41, 0x99,
+ 0x10, 0x00, 0x00};
+static char TMF_cabc_UI[] = {
+ 0xCE, 0x33, 0x1C, 0x0D,
+ 0x20, 0x14, 0x00, 0x16,
+ 0x23, 0x18, 0x2C, 0x16,
+ 0x00, 0x00};
+static char samsung_MIE_ctrl1_cabc_Video[4] = {0xC0, 0x80, 0x10, 0x80};
+static char BCSAVE_cabc_Video[] = {
+ 0xCD, 0x80, 0x99, 0x67,
+ 0x1C, 0x78, 0x37, 0x00,
+ 0x10, 0x73, 0x41, 0x99,
+ 0x10, 0x00, 0x00};
+static char TMF_cabc_Video[] = {
+ 0xCE, 0x2C, 0x1C, 0x0D,
+ 0x20, 0x14, 0x00, 0x16,
+ 0x23, 0x18, 0x2C, 0x16,
+ 0x00, 0x00};
+static struct dsi_cmd_desc jdi_samsung_set_cabc_UI_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1_cabc_UI), samsung_MIE_ctrl1_cabc_UI},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(BCSAVE_cabc_UI), BCSAVE_cabc_UI},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(TMF_cabc_UI), TMF_cabc_UI},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+};
+static struct dsi_cmd_desc jdi_samsung_set_cabc_Video_cmds[] = {
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2), samsung_password_l2},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_MIE_ctrl1_cabc_Video), samsung_MIE_ctrl1_cabc_Video},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(BCSAVE_cabc_Video), BCSAVE_cabc_Video},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(TMF_cabc_Video), TMF_cabc_Video},
+ {DTYPE_GEN_LWRITE, 1, 0, 0, 1, sizeof(samsung_password_l2_close), samsung_password_l2_close},
+};
+
+void m7_set_cabc (struct msm_fb_data_type *mfd, int mode)
+{
+ int req_cabc_zoe_mode = 2;
+
+ if (set_cabc_UI_cmds == NULL || set_cabc_Video_cmds == NULL || set_cabc_Camera_cmds == NULL)
+ return;
+
+ mutex_lock(&set_cabc_mutex);
+ cabc_mode = mode;
+
+ if (mode == 1) {
+ cmdreq.cmds = set_cabc_UI_cmds;
+ cmdreq.cmds_cnt = set_cabc_UI_cmds_count;
+ } else if (mode == 2) {
+ cmdreq.cmds = set_cabc_Video_cmds;
+ cmdreq.cmds_cnt = set_cabc_Video_cmds_count;
+ } else if (mode == 3) {
+ if (pwm_value < 168 && cur_cabc_mode == 3) {
+ req_cabc_zoe_mode = 2;
+ cmdreq.cmds = set_cabc_Video_cmds;
+ cmdreq.cmds_cnt = set_cabc_Video_cmds_count;
+ } else if (pwm_value >= 168 && cur_cabc_mode == 3) {
+ req_cabc_zoe_mode = 3;
+ cmdreq.cmds = set_cabc_Camera_cmds;
+ cmdreq.cmds_cnt = set_cabc_Camera_cmds_count;
+ } else if (pwm_value == 255) {
+ req_cabc_zoe_mode = 3;
+ cmdreq.cmds = set_cabc_Camera_cmds;
+ cmdreq.cmds_cnt = set_cabc_Camera_cmds_count;
+ } else {
+ req_cabc_zoe_mode = 2;
+ cmdreq.cmds = set_cabc_Video_cmds;
+ cmdreq.cmds_cnt = set_cabc_Video_cmds_count;
+ }
+
+ if (cur_cabc_mode != req_cabc_zoe_mode) {
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+ mipi_dsi_cmdlist_put(&cmdreq);
+
+ cur_cabc_mode = req_cabc_zoe_mode;
+ PR_DISP_INFO("set_cabc_zoe mode = %d\n", cur_cabc_mode);
+ }
+ mutex_unlock(&set_cabc_mutex);
+ return;
+ } else {
+ mutex_unlock(&set_cabc_mutex);
+ return;
+ }
+
+ cmdreq.flags = CMD_REQ_COMMIT;
+ if (mfd && mfd->panel_info.type == MIPI_CMD_PANEL)
+ cmdreq.flags |= CMD_CLK_CTRL;
+
+ cmdreq.rlen = 0;
+ cmdreq.cb = NULL;
+
+ mipi_dsi_cmdlist_put(&cmdreq);
+
+ cur_cabc_mode = mode;
+ mutex_unlock(&set_cabc_mutex);
+ PR_DISP_INFO("set_cabc mode = %d\n", mode);
+}
+#endif
static struct platform_driver this_driver = {
- .probe = monarudo_lcd_probe,
+ .probe = m7_lcd_probe,
.driver = {
- .name = "mipi_monarudo",
+ .name = "mipi_m7",
},
};
-static struct msm_fb_panel_data monarudo_panel_data = {
- .on = monarudo_lcd_on,
- .off = monarudo_lcd_off,
- .set_backlight = monarudo_set_backlight,
- .late_init = monarudo_display_on,
- .early_off = monarudo_display_off,
+static struct msm_fb_panel_data m7_panel_data = {
+ .on = m7_lcd_on,
+ .off = m7_lcd_off,
+ .set_backlight = m7_set_backlight,
+ .late_init = m7_display_on,
+ .early_off = m7_display_off,
+ .color_enhance = m7_color_enhance,
+#ifdef CABC_DIMMING_SWITCH
+ .dimming_on = m7_dim_on,
+#endif
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+ .set_cabc = m7_set_cabc,
+#endif
+ .sre_ctrl = m7_sre_ctrl,
};
static struct msm_panel_info pinfo;
static int ch_used[3] = {0};
-int mipi_monarudo_device_register(struct msm_panel_info *pinfo,
+static int mipi_m7_device_register(struct msm_panel_info *pinfo,
u32 channel, u32 panel)
{
struct platform_device *pdev = NULL;
int ret;
+ pr_err("%s\n", __func__);
if ((channel >= 3) || ch_used[channel])
return -ENODEV;
ch_used[channel] = TRUE;
- pdev = platform_device_alloc("mipi_monarudo", (panel << 8)|channel);
+ pdev = platform_device_alloc("mipi_m7", (panel << 8)|channel);
if (!pdev)
return -ENOMEM;
- monarudo_panel_data.panel_info = *pinfo;
+ m7_panel_data.panel_info = *pinfo;
- ret = platform_device_add_data(pdev, &monarudo_panel_data,
- sizeof(monarudo_panel_data));
+ ret = platform_device_add_data(pdev, &m7_panel_data,
+ sizeof(m7_panel_data));
if (ret) {
pr_err("%s: platform_device_add_data failed!\n", __func__);
goto err_device_put;
@@ -795,7 +2305,6 @@ int mipi_monarudo_device_register(struct msm_panel_info *pinfo,
pr_err("%s: platform_device_register failed!\n", __func__);
goto err_device_put;
}
-
return 0;
err_device_put:
@@ -804,29 +2313,42 @@ err_device_put:
}
static struct mipi_dsi_phy_ctrl dsi_video_mode_phy_db = {
- /* DSI_BIT_CLK at 848MHz, 4 lane, RGB888 */
- /* regulator *//* off=0x0500 */
+
+
{0x03, 0x08, 0x05, 0x00, 0x20},
- /* timing *//* off=0x0440 */
- {0xDB, 0x35, 0x24, 0x00, 0x65, 0x68, 0x29,
- 0x38, 0x3D, 0x3, 0x4, 0xA0},
- /* phy ctrl *//* off=0x0470 */
+
+ {0xDD, 0x51, 0x27, 0x00, 0x6E, 0x74, 0x2C,
+ 0x55, 0x3E, 0x3, 0x4, 0xA0},
+
{0x5F, 0x00, 0x00, 0x10},
- /* strength *//* off=0x0480 */
+
{0xFF, 0x00, 0x06, 0x00},
- /* pll control *//* off=0x0204 */
+
{0x00, 0x38, 0x32, 0xDA, 0x00, 0x10, 0x0F, 0x61,
0x41, 0x0F, 0x01,
0x00, 0x1A, 0x00, 0x00, 0x02, 0x00, 0x20, 0x00, 0x02 },
};
-static int __init mipi_video_sharp_init(void)
+static struct mipi_dsi_phy_ctrl dsi_jdi_cmd_mode_phy_db = {
+
+ {0x03, 0x08, 0x05, 0x00, 0x20},
+
+ {0xD7, 0x34, 0x23, 0x00, 0x63, 0x6A, 0x28, 0x37, 0x3C, 0x03, 0x04},
+
+ {0x5F, 0x00, 0x00, 0x10},
+
+ {0xFF, 0x00, 0x06, 0x00},
+
+ {0x00, 0xA8, 0x30, 0xCA, 0x00, 0x20, 0x0F, 0x62, 0x70, 0x88, 0x99, 0x00, 0x14, 0x03, 0x00, 0x02, 0x00, 0x20, 0x00, 0x01 },
+};
+
+static int __init mipi_cmd_jdi_renesas_init(void)
{
int ret;
pinfo.xres = 1080;
pinfo.yres = 1920;
- pinfo.type = MIPI_VIDEO_PANEL;
+ pinfo.type = MIPI_CMD_PANEL;
pinfo.pdest = DISPLAY_1;
pinfo.wait_cycle = 0;
pinfo.bpp = 24;
@@ -834,7 +2356,226 @@ static int __init mipi_video_sharp_init(void)
pinfo.height = 103;
pinfo.camera_backlight = 183;
- pinfo.lcdc.h_back_porch = 50;
+ pinfo.lcdc.h_back_porch = 27;
+ pinfo.lcdc.h_front_porch = 38;
+ pinfo.lcdc.h_pulse_width = 10;
+ pinfo.lcdc.v_back_porch = 4;
+ pinfo.lcdc.v_front_porch = 4;
+ pinfo.lcdc.v_pulse_width = 2;
+
+ pinfo.lcd.v_back_porch = pinfo.lcdc.v_back_porch;
+ pinfo.lcd.v_front_porch = pinfo.lcdc.v_front_porch;
+ pinfo.lcd.v_pulse_width = pinfo.lcdc.v_pulse_width;
+
+ pinfo.lcd.primary_vsync_init = pinfo.yres;
+ pinfo.lcd.primary_rdptr_irq = 0;
+ pinfo.lcd.primary_start_pos = pinfo.yres +
+ pinfo.lcd.v_back_porch + pinfo.lcd.v_front_porch - 1;
+
+ pinfo.lcdc.border_clr = 0;
+ pinfo.lcdc.underflow_clr = 0xff;
+ pinfo.lcdc.hsync_skew = 0;
+ pinfo.bl_max = 255;
+ pinfo.bl_min = 1;
+ pinfo.fb_num = 2;
+ pinfo.clk_rate = 830000000;
+
+ pinfo.lcd.vsync_enable = TRUE;
+ pinfo.lcd.hw_vsync_mode = TRUE;
+ pinfo.lcd.refx100 = 6000;
+
+ pinfo.mipi.mode = DSI_CMD_MODE;
+ pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
+ pinfo.mipi.vc = 0;
+
+ pinfo.mipi.data_lane0 = TRUE;
+ pinfo.mipi.data_lane1 = TRUE;
+ pinfo.mipi.data_lane2 = TRUE;
+ pinfo.mipi.data_lane3 = TRUE;
+
+ pinfo.mipi.tx_eot_append = TRUE;
+ pinfo.mipi.t_clk_post = 0x3;
+ pinfo.mipi.t_clk_pre = 0x2B;
+ pinfo.mipi.stream = 0;
+ pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_NONE;
+ pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
+ pinfo.mipi.te_sel = 1;
+ pinfo.mipi.interleave_max = 1;
+ pinfo.mipi.insert_dcs_cmd = TRUE;
+ pinfo.mipi.wr_mem_continue = 0x3c;
+ pinfo.mipi.wr_mem_start = 0x2c;
+
+ pinfo.mipi.frame_rate = 60;
+ pinfo.mipi.dsi_phy_db = &dsi_jdi_cmd_mode_phy_db;
+ pinfo.mipi.esc_byte_ratio = 5;
+
+ ret = mipi_m7_device_register(&pinfo, MIPI_DSI_PRIM,
+ MIPI_DSI_PANEL_FWVGA_PT);
+
+ strncat(ptype, "PANEL_ID_M7_JDI_RENESAS", ptype_len);
+ cmd_on_cmds = jdi_renesas_cmd_on_cmds;
+ cmd_on_cmds_count = ARRAY_SIZE(jdi_renesas_cmd_on_cmds);
+ display_on_cmds = renesas_display_on_cmds;
+ display_on_cmds_count = ARRAY_SIZE(renesas_display_on_cmds);
+ display_off_cmds = jdi_display_off_cmds;
+ display_off_cmds_count = ARRAY_SIZE(jdi_display_off_cmds);
+ backlight_cmds = samsung_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(samsung_cmd_backlight_cmds);
+ dim_on_cmds = jdi_renesas_dim_on_cmds;
+ dim_on_cmds_count = ARRAY_SIZE(jdi_renesas_dim_on_cmds);
+ dim_off_cmds = jdi_renesas_dim_off_cmds;
+ dim_off_cmds_count = ARRAY_SIZE(jdi_renesas_dim_off_cmds);
+ color_en_on_cmds = sharp_renesas_c1_color_enhance_on_cmds;
+ color_en_on_cmds_count = ARRAY_SIZE(sharp_renesas_c1_color_enhance_on_cmds);
+ color_en_off_cmds = sharp_renesas_c1_color_enhance_off_cmds;
+ color_en_off_cmds_count = ARRAY_SIZE(sharp_renesas_c1_color_enhance_off_cmds);
+ sre_ctrl_cmds = sharp_renesas_sre_ctrl_cmds;
+ sre_ctrl_cmds_count = ARRAY_SIZE(sharp_renesas_sre1_ctrl_cmds);
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+ set_cabc_UI_cmds = sharp_renesas_set_cabc_UI_cmds;
+ set_cabc_UI_cmds_count = ARRAY_SIZE(sharp_renesas_set_cabc_UI_cmds);
+ set_cabc_Video_cmds = sharp_renesas_set_cabc_Video_cmds;
+ set_cabc_Video_cmds_count = ARRAY_SIZE(sharp_renesas_set_cabc_Video_cmds);
+ set_cabc_Camera_cmds = sharp_renesas_set_cabc_Video_cmds;
+ set_cabc_Camera_cmds_count = ARRAY_SIZE(sharp_renesas_set_cabc_Video_cmds);
+#endif
+ mdp_gamma = mdp_gamma_renesas;
+ mdp_gamma_count = ARRAY_SIZE(mdp_gamma_renesas);
+
+ pwm_min = 6;
+ pwm_default = 69;
+ pwm_max = 255;
+
+ PR_DISP_INFO("%s\n", __func__);
+
+ return ret;
+}
+
+static int __init mipi_cmd_sharp_init(void)
+{
+ int ret;
+
+ pinfo.xres = 1080;
+ pinfo.yres = 1920;
+ pinfo.type = MIPI_CMD_PANEL;
+ pinfo.pdest = DISPLAY_1;
+ pinfo.wait_cycle = 0;
+ pinfo.bpp = 24;
+ pinfo.width = 58;
+ pinfo.height = 103;
+ pinfo.camera_backlight = 183;
+
+ pinfo.lcdc.h_back_porch = 27;
+ pinfo.lcdc.h_front_porch = 38;
+ pinfo.lcdc.h_pulse_width = 10;
+ pinfo.lcdc.v_back_porch = 4;
+ pinfo.lcdc.v_front_porch = 4;
+ pinfo.lcdc.v_pulse_width = 2;
+
+ pinfo.lcd.v_back_porch = pinfo.lcdc.v_back_porch;
+ pinfo.lcd.v_front_porch = pinfo.lcdc.v_front_porch;
+ pinfo.lcd.v_pulse_width = pinfo.lcdc.v_pulse_width;
+
+ pinfo.lcd.primary_vsync_init = pinfo.yres;
+ pinfo.lcd.primary_rdptr_irq = 0;
+ pinfo.lcd.primary_start_pos = pinfo.yres +
+ pinfo.lcd.v_back_porch + pinfo.lcd.v_front_porch - 1;
+
+ pinfo.lcdc.border_clr = 0;
+ pinfo.lcdc.underflow_clr = 0xff;
+ pinfo.lcdc.hsync_skew = 0;
+ pinfo.bl_max = 255;
+ pinfo.bl_min = 1;
+ pinfo.fb_num = 2;
+ pinfo.clk_rate = 830000000;
+
+
+ pinfo.lcd.vsync_enable = TRUE;
+ pinfo.lcd.hw_vsync_mode = TRUE;
+ pinfo.lcd.refx100 = 6000;
+
+ pinfo.mipi.mode = DSI_CMD_MODE;
+ pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
+ pinfo.mipi.vc = 0;
+
+ pinfo.mipi.data_lane0 = TRUE;
+ pinfo.mipi.data_lane1 = TRUE;
+ pinfo.mipi.data_lane2 = TRUE;
+ pinfo.mipi.data_lane3 = TRUE;
+
+ pinfo.mipi.tx_eot_append = TRUE;
+ pinfo.mipi.t_clk_post = 0x3;
+ pinfo.mipi.t_clk_pre = 0x2B;
+ pinfo.mipi.stream = 0;
+ pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_NONE;
+ pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
+ pinfo.mipi.te_sel = 1;
+ pinfo.mipi.interleave_max = 1;
+ pinfo.mipi.insert_dcs_cmd = TRUE;
+ pinfo.mipi.wr_mem_continue = 0x3c;
+ pinfo.mipi.wr_mem_start = 0x2c;
+
+ pinfo.mipi.frame_rate = 60;
+ pinfo.mipi.dsi_phy_db = &dsi_jdi_cmd_mode_phy_db;
+ pinfo.mipi.esc_byte_ratio = 5;
+
+ ret = mipi_m7_device_register(&pinfo, MIPI_DSI_PRIM,
+ MIPI_DSI_PANEL_FWVGA_PT);
+
+ strncat(ptype, "PANEL_ID_M7_SHARP_RENESAS_CMD", ptype_len);
+ cmd_on_cmds = sharp_renesas_cmd_on_cmds;
+ cmd_on_cmds_count = ARRAY_SIZE(sharp_renesas_cmd_on_cmds);
+ display_on_cmds = renesas_display_on_cmds;
+ display_on_cmds_count = ARRAY_SIZE(renesas_display_on_cmds);
+ display_off_cmds = sharp_display_off_cmds;
+ display_off_cmds_count = ARRAY_SIZE(sharp_display_off_cmds);
+ backlight_cmds = sharp_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(sharp_cmd_backlight_cmds);
+ dim_on_cmds = sharp_cmd_dim_on_cmds;
+ dim_on_cmds_count = ARRAY_SIZE(sharp_cmd_dim_on_cmds);
+ dim_off_cmds = sharp_cmd_dim_off_cmds;
+ dim_off_cmds_count = ARRAY_SIZE(sharp_cmd_dim_off_cmds);
+ color_en_on_cmds = sharp_renesas_c1_color_enhance_on_cmds;
+ color_en_on_cmds_count = ARRAY_SIZE(sharp_renesas_c1_color_enhance_on_cmds);
+ color_en_off_cmds = sharp_renesas_c1_color_enhance_off_cmds;
+ color_en_off_cmds_count = ARRAY_SIZE(sharp_renesas_c1_color_enhance_off_cmds);
+ sre_ctrl_cmds = sharp_renesas_sre_ctrl_cmds;
+ sre_ctrl_cmds_count = ARRAY_SIZE(sharp_renesas_sre1_ctrl_cmds);
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+ set_cabc_UI_cmds = sharp_renesas_set_cabc_UI_cmds;
+ set_cabc_UI_cmds_count = ARRAY_SIZE(sharp_renesas_set_cabc_UI_cmds);
+ set_cabc_Video_cmds = sharp_renesas_set_cabc_Video_cmds;
+ set_cabc_Video_cmds_count = ARRAY_SIZE(sharp_renesas_set_cabc_Video_cmds);
+ set_cabc_Camera_cmds = sharp_renesas_set_cabc_Video_cmds;
+ set_cabc_Camera_cmds_count = ARRAY_SIZE(sharp_renesas_set_cabc_Video_cmds);
+#endif
+ mdp_gamma = mdp_gamma_renesas;
+ mdp_gamma_count = ARRAY_SIZE(mdp_gamma_renesas);
+
+ pwm_min = 6;
+ pwm_default = 69;
+ pwm_max = 255;
+
+ PR_DISP_INFO("%s\n", __func__);
+ return ret;
+
+}
+
+static int __init mipi_video_sharp_init(void)
+{
+ int ret;
+
+ pinfo.xres = 1080;
+ pinfo.yres = 1920;
+ pinfo.type = MIPI_VIDEO_PANEL;
+ pinfo.pdest = DISPLAY_1;
+ pinfo.wait_cycle = 0;
+ pinfo.bpp = 24;
+ pinfo.width = 61;
+ pinfo.height = 110;
+ pinfo.camera_backlight = 176;
+
+ pinfo.lcdc.h_back_porch = 58;
pinfo.lcdc.h_front_porch = 100;
pinfo.lcdc.h_pulse_width = 10;
pinfo.lcdc.v_back_porch = 4;
@@ -845,21 +2586,18 @@ static int __init mipi_video_sharp_init(void)
pinfo.lcd.v_front_porch = 4;
pinfo.lcd.v_pulse_width = 2;
- pinfo.lcd.vsync_enable = TRUE;
- pinfo.lcd.hw_vsync_mode = TRUE;
-
pinfo.lcd.primary_vsync_init = pinfo.yres;
pinfo.lcd.primary_rdptr_irq = 0;
pinfo.lcd.primary_start_pos = pinfo.yres +
- pinfo.lcd.v_back_porch + pinfo.lcd.v_front_porch - 1;
+ pinfo.lcd.v_back_porch + pinfo.lcd.v_front_porch - 1;
- pinfo.lcdc.border_clr = 0;
- pinfo.lcdc.underflow_clr = 0xff;
+ pinfo.lcdc.border_clr = 0;
+ pinfo.lcdc.underflow_clr = 0xff;
pinfo.lcdc.hsync_skew = 0;
pinfo.bl_max = 255;
pinfo.bl_min = 1;
pinfo.fb_num = 2;
- pinfo.clk_rate = 848000000;
+ pinfo.clk_rate = 860000000;
pinfo.mipi.mode = DSI_VIDEO_MODE;
pinfo.mipi.pulse_mode_hsa_he = TRUE;
@@ -878,38 +2616,53 @@ static int __init mipi_video_sharp_init(void)
pinfo.mipi.data_lane3 = TRUE;
pinfo.mipi.tx_eot_append = TRUE;
- pinfo.mipi.t_clk_post = 0x02;
- pinfo.mipi.t_clk_pre = 0x2C;
- pinfo.mipi.stream = 0;
+ pinfo.mipi.t_clk_post = 0x05;
+ pinfo.mipi.t_clk_pre = 0x2D;
+ pinfo.mipi.stream = 0;
pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
pinfo.mipi.frame_rate = 60;
pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;
- pinfo.mipi.esc_byte_ratio = 2;
+ pinfo.mipi.esc_byte_ratio = 5;
- ret = mipi_monarudo_device_register(&pinfo, MIPI_DSI_PRIM,
+ ret = mipi_m7_device_register(&pinfo, MIPI_DSI_PRIM,
MIPI_DSI_PANEL_FWVGA_PT);
if (ret)
pr_err("%s: failed to register device!\n", __func__);
- strncat(ptype, "PANEL_ID_DLX_SHARP_RENESAS", ptype_len);
+ if (panel_type == PANEL_ID_DLXJ_SHARP_RENESAS) {
+ strncat(ptype, "PANEL_ID_DLXJ_SHARP_RENESAS", ptype_len);
+ video_on_cmds = sharp_video_on_cmds;
+ video_on_cmds_count = ARRAY_SIZE(sharp_video_on_cmds);
+ } else {
+ strncat(ptype, "PANEL_ID_M7_SHARP_RENESAS", ptype_len);
+ video_on_cmds = m7_sharp_video_on_cmds;
+ video_on_cmds_count = ARRAY_SIZE(m7_sharp_video_on_cmds);
- video_on_cmds = sharp_video_on_cmds;
- video_on_cmds_count = ARRAY_SIZE(sharp_video_on_cmds);
+ }
display_on_cmds = renesas_display_on_cmds;
display_on_cmds_count = ARRAY_SIZE(renesas_display_on_cmds);
display_off_cmds = sharp_display_off_cmds;
display_off_cmds_count = ARRAY_SIZE(sharp_display_off_cmds);
+ backlight_cmds = renesas_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(renesas_cmd_backlight_cmds);
+ dim_on_cmds = renesas_dim_on_cmds;
+ dim_on_cmds_count = ARRAY_SIZE(renesas_dim_on_cmds);
+ dim_off_cmds = renesas_dim_off_cmds;
+ dim_off_cmds_count = ARRAY_SIZE(renesas_dim_off_cmds);
+ color_en_on_cmds = sharp_renesas_color_enhance_on_cmds;
+ color_en_on_cmds_count = ARRAY_SIZE(sharp_renesas_color_enhance_on_cmds);
+ color_en_off_cmds = sharp_renesas_color_enhance_off_cmds;
+ color_en_off_cmds_count = ARRAY_SIZE(sharp_renesas_color_enhance_off_cmds);
+
+ pwm_min = 13;
+ pwm_default = 82;
+ pwm_max = 255;
PR_DISP_INFO("%s\n", __func__);
return ret;
}
-static const struct i2c_device_id pwm_i2c_id[] = {
- { "pwm_i2c", 0 },
- { }
-};
-
static int __init mipi_video_sony_init(void)
{
int ret;
@@ -924,7 +2677,7 @@ static int __init mipi_video_sony_init(void)
pinfo.height = 110;
pinfo.camera_backlight = 176;
- pinfo.lcdc.h_back_porch = 50;
+ pinfo.lcdc.h_back_porch = 58;
pinfo.lcdc.h_front_porch = 100;
pinfo.lcdc.h_pulse_width = 10;
pinfo.lcdc.v_back_porch = 3;
@@ -935,21 +2688,18 @@ static int __init mipi_video_sony_init(void)
pinfo.lcd.v_front_porch = 3;
pinfo.lcd.v_pulse_width = 2;
- pinfo.lcd.vsync_enable = TRUE;
- pinfo.lcd.hw_vsync_mode = TRUE;
-
pinfo.lcd.primary_vsync_init = pinfo.yres;
pinfo.lcd.primary_rdptr_irq = 0;
pinfo.lcd.primary_start_pos = pinfo.yres +
pinfo.lcd.v_back_porch + pinfo.lcd.v_front_porch - 1;
- pinfo.lcdc.border_clr = 0; /* blk */
- pinfo.lcdc.underflow_clr = 0xff; /* blue */
+ pinfo.lcdc.border_clr = 0;
+ pinfo.lcdc.underflow_clr = 0xff;
pinfo.lcdc.hsync_skew = 0;
pinfo.bl_max = 255;
pinfo.bl_min = 1;
pinfo.fb_num = 2;
- pinfo.clk_rate = 848000000;
+ pinfo.clk_rate = 860000000;
pinfo.mipi.mode = DSI_VIDEO_MODE;
pinfo.mipi.pulse_mode_hsa_he = TRUE;
@@ -968,32 +2718,194 @@ static int __init mipi_video_sony_init(void)
pinfo.mipi.data_lane3 = TRUE;
pinfo.mipi.tx_eot_append = TRUE;
- pinfo.mipi.t_clk_post = 0x02;
- pinfo.mipi.t_clk_pre = 0x2C;
- pinfo.mipi.stream = 0; /* dma_p */
+ pinfo.mipi.t_clk_post = 0x05;
+ pinfo.mipi.t_clk_pre = 0x2D;
+ pinfo.mipi.stream = 0;
pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_SW;
pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
pinfo.mipi.frame_rate = 60;
pinfo.mipi.dsi_phy_db = &dsi_video_mode_phy_db;
- pinfo.mipi.esc_byte_ratio = 2;
+ pinfo.mipi.esc_byte_ratio = 5;
- ret = mipi_monarudo_device_register(&pinfo, MIPI_DSI_PRIM,
+ ret = mipi_m7_device_register(&pinfo, MIPI_DSI_PRIM,
MIPI_DSI_PANEL_FWVGA_PT);
if (ret)
pr_err("%s: failed to register device!\n", __func__);
- strncat(ptype, "PANEL_ID_DLX_SONY_RENESAS", ptype_len);
-
video_on_cmds = sony_video_on_cmds;
video_on_cmds_count = ARRAY_SIZE(sony_video_on_cmds);
display_on_cmds = renesas_display_on_cmds;
display_on_cmds_count = ARRAY_SIZE(renesas_display_on_cmds);
display_off_cmds = sony_display_off_cmds;
display_off_cmds_count = ARRAY_SIZE(sony_display_off_cmds);
+ backlight_cmds = renesas_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(renesas_cmd_backlight_cmds);
+ dim_on_cmds = renesas_dim_on_cmds;
+ dim_on_cmds_count = ARRAY_SIZE(renesas_dim_on_cmds);
+ dim_off_cmds = renesas_dim_off_cmds;
+ dim_off_cmds_count = ARRAY_SIZE(renesas_dim_off_cmds);
+ color_en_on_cmds = NULL;
+ color_en_on_cmds_count = 0;
+ color_en_off_cmds = NULL;
+ color_en_off_cmds_count = 0;
+
+ pwm_min = 13;
+ pwm_default = 82;
+ pwm_max = 255;
+
+ return ret;
+}
+
+static int __init mipi_command_samsung_init(void)
+{
+ int ret;
+
+ pinfo.xres = 1080;
+ pinfo.yres = 1920;
+ pinfo.type = MIPI_CMD_PANEL;
+ pinfo.pdest = DISPLAY_1;
+ pinfo.wait_cycle = 0;
+ pinfo.bpp = 24;
+ pinfo.width = 58;
+ pinfo.height = 103;
+ pinfo.camera_backlight = 183;
+
+ pinfo.lcdc.h_back_porch = 27;
+ pinfo.lcdc.h_front_porch = 38;
+ pinfo.lcdc.h_pulse_width = 10;
+ pinfo.lcdc.v_back_porch = 4;
+ pinfo.lcdc.v_front_porch = 4;
+ pinfo.lcdc.v_pulse_width = 2;
+
+ pinfo.lcd.v_back_porch = pinfo.lcdc.v_back_porch;
+ pinfo.lcd.v_front_porch = pinfo.lcdc.v_front_porch;
+ pinfo.lcd.v_pulse_width = pinfo.lcdc.v_pulse_width;
+
+ pinfo.lcd.primary_vsync_init = pinfo.yres;
+ pinfo.lcd.primary_rdptr_irq = 0;
+ pinfo.lcd.primary_start_pos = pinfo.yres +
+ pinfo.lcd.v_back_porch + pinfo.lcd.v_front_porch - 1;
+
+ pinfo.lcdc.border_clr = 0;
+ pinfo.lcdc.underflow_clr = 0xff;
+ pinfo.lcdc.hsync_skew = 0;
+ pinfo.bl_max = 255;
+ pinfo.bl_min = 1;
+ pinfo.fb_num = 2;
+ pinfo.clk_rate = 830000000;
+
+
+ pinfo.lcd.vsync_enable = TRUE;
+ pinfo.lcd.hw_vsync_mode = TRUE;
+ pinfo.lcd.refx100 = 6000;
+
+ pinfo.mipi.mode = DSI_CMD_MODE;
+ pinfo.mipi.dst_format = DSI_CMD_DST_FORMAT_RGB888;
+ pinfo.mipi.vc = 0;
+
+ pinfo.mipi.data_lane0 = TRUE;
+ pinfo.mipi.data_lane1 = TRUE;
+ pinfo.mipi.data_lane2 = TRUE;
+ pinfo.mipi.data_lane3 = TRUE;
+ pinfo.mipi.tx_eot_append = TRUE;
+ pinfo.mipi.t_clk_post = 0x3;
+ pinfo.mipi.t_clk_pre = 0x2B;
+ pinfo.mipi.stream = 0;
+ pinfo.mipi.mdp_trigger = DSI_CMD_TRIGGER_NONE;
+ pinfo.mipi.dma_trigger = DSI_CMD_TRIGGER_SW;
+ pinfo.mipi.te_sel = 1;
+ pinfo.mipi.interleave_max = 1;
+ pinfo.mipi.insert_dcs_cmd = TRUE;
+ pinfo.mipi.wr_mem_continue = 0x3c;
+ pinfo.mipi.wr_mem_start = 0x2c;
+ pinfo.mipi.esc_byte_ratio = 5;
+
+ pinfo.mipi.frame_rate = 60;
+
+ pinfo.lcdc.no_set_tear = 1;
+
+ pinfo.mipi.dsi_phy_db = &dsi_jdi_cmd_mode_phy_db;
+
+#ifdef CONFIG_FB_MSM_ESD_WORKAROUND
+ m7_panel_data.esd_workaround = true;
+#endif
+
+ ret = mipi_m7_device_register(&pinfo, MIPI_DSI_PRIM,
+ MIPI_DSI_PANEL_FWVGA_PT);
+
+ if(panel_type == PANEL_ID_M7_JDI_SAMSUNG) {
+ strncat(ptype, "PANEL_ID_M7_JDI_SAMSUNG", ptype_len);
+ cmd_on_cmds = samsung_jdi_panel_cmd_mode_cmds;
+ cmd_on_cmds_count = ARRAY_SIZE(samsung_jdi_panel_cmd_mode_cmds);
+ backlight_cmds = samsung_cmd_backlight_cmds_nop;
+ backlight_cmds_count = ARRAY_SIZE(samsung_cmd_backlight_cmds_nop);
+ mdp_gamma = mdp_gamma_jdi;
+ mdp_gamma_count = ARRAY_SIZE(mdp_gamma_jdi);
+ } else if(panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2) {
+ strncat(ptype, "PANEL_ID_M7_JDI_SAMSUNG_C2", ptype_len);
+ cmd_on_cmds = samsung_jdi_panel_cmd_mode_cmds_c2_nvm;
+ cmd_on_cmds_count = ARRAY_SIZE(samsung_jdi_panel_cmd_mode_cmds_c2_nvm);
+ backlight_cmds = samsung_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(samsung_cmd_backlight_cmds);
+ mdp_gamma = mdp_gamma_jdi;
+ mdp_gamma_count = ARRAY_SIZE(mdp_gamma_jdi);
+ } else if(panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2_1) {
+ strncat(ptype, "PANEL_ID_M7_JDI_SAMSUNG_C2_1", ptype_len);
+ cmd_on_cmds = samsung_jdi_panel_cmd_mode_cmds_c2_1;
+ cmd_on_cmds_count = ARRAY_SIZE(samsung_jdi_panel_cmd_mode_cmds_c2_1);
+ backlight_cmds = samsung_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(samsung_cmd_backlight_cmds);
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+ set_cabc_UI_cmds = jdi_samsung_set_cabc_UI_cmds;
+ set_cabc_UI_cmds_count = ARRAY_SIZE(jdi_samsung_set_cabc_UI_cmds);
+ set_cabc_Video_cmds = jdi_samsung_set_cabc_UI_cmds;
+ set_cabc_Video_cmds_count = ARRAY_SIZE(jdi_samsung_set_cabc_UI_cmds);
+ set_cabc_Camera_cmds = jdi_samsung_set_cabc_Video_cmds;
+ set_cabc_Camera_cmds_count = ARRAY_SIZE(jdi_samsung_set_cabc_Video_cmds);
+#endif
+ } else {
+ strncat(ptype, "PANEL_ID_M7_JDI_SAMSUNG_C2_2", ptype_len);
+ cmd_on_cmds = samsung_jdi_panel_cmd_mode_cmds_c2_2;
+ cmd_on_cmds_count = ARRAY_SIZE(samsung_jdi_panel_cmd_mode_cmds_c2_2);
+ backlight_cmds = samsung_cmd_backlight_cmds;
+ backlight_cmds_count = ARRAY_SIZE(samsung_cmd_backlight_cmds);
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+ set_cabc_UI_cmds = jdi_samsung_set_cabc_UI_cmds;
+ set_cabc_UI_cmds_count = ARRAY_SIZE(jdi_samsung_set_cabc_UI_cmds);
+ set_cabc_Video_cmds = jdi_samsung_set_cabc_UI_cmds;
+ set_cabc_Video_cmds_count = ARRAY_SIZE(jdi_samsung_set_cabc_UI_cmds);
+ set_cabc_Camera_cmds = jdi_samsung_set_cabc_Video_cmds;
+ set_cabc_Camera_cmds_count = ARRAY_SIZE(jdi_samsung_set_cabc_Video_cmds);
+#endif
+ }
+
+ display_on_cmds = samsung_display_on_cmds;
+ display_on_cmds_count = ARRAY_SIZE(samsung_display_on_cmds);
+ display_off_cmds = samsung_display_off_cmds;
+ display_off_cmds_count = ARRAY_SIZE(samsung_display_off_cmds);
+ dim_on_cmds = samsung_dim_on_cmds;
+ dim_on_cmds_count = ARRAY_SIZE(samsung_dim_on_cmds);
+ dim_off_cmds = samsung_dim_off_cmds;
+ dim_off_cmds_count = ARRAY_SIZE(samsung_dim_off_cmds);
+ color_en_on_cmds = samsung_color_enhance_on_cmds;
+ color_en_on_cmds_count = ARRAY_SIZE(samsung_color_enhance_on_cmds);
+ color_en_off_cmds = samsung_color_enhance_off_cmds;
+ color_en_off_cmds_count = ARRAY_SIZE(samsung_color_enhance_on_cmds);
+
+ pwm_min = 6;
+ pwm_default = 69;
+ pwm_max = 255;
+
+ PR_DISP_INFO("%s\n", __func__);
return ret;
}
+static const struct i2c_device_id pwm_i2c_id[] = {
+ { "pwm_i2c", 0 },
+ { }
+};
+
static int pwm_i2c_probe(struct i2c_client *client,
const struct i2c_device_id *id)
{
@@ -1022,11 +2934,14 @@ static void __exit pwm_i2c_remove(void)
i2c_del_driver(&pwm_i2c_driver);
}
-void __init monarudo_init_fb(void)
+void __init m7_init_fb(void)
{
platform_device_register(&msm_fb_device);
+ if (panel_type == PANEL_ID_M7_SHARP_RENESAS)
+ mdp_pdata.cont_splash_enabled = 0x1;
+
if(panel_type != PANEL_ID_NONE) {
msm_fb_register_device("mdp", &mdp_pdata);
msm_fb_register_device("mipi_dsi", &mipi_dsi_pdata);
@@ -1039,11 +2954,11 @@ void __init monarudo_init_fb(void)
#endif
}
-static int __init monarudo_panel_init(void)
+static int __init m7_panel_init(void)
{
int ret;
- if (panel_type == PANEL_ID_NONE) {
+ if(panel_type == PANEL_ID_NONE) {
PR_DISP_INFO("%s panel ID = PANEL_ID_NONE\n", __func__);
return 0;
}
@@ -1053,19 +2968,49 @@ static int __init monarudo_panel_init(void)
if (ret)
pr_err(KERN_ERR "%s: failed to add i2c driver\n", __func__);
- if (panel_type == PANEL_ID_DLX_SHARP_RENESAS) {
+ mipi_dsi_buf_alloc(&m7_panel_tx_buf, DSI_BUF_SIZE);
+ mipi_dsi_buf_alloc(&m7_panel_rx_buf, DSI_BUF_SIZE);
+
+ if (panel_type == PANEL_ID_DLXJ_SHARP_RENESAS) {
mipi_video_sharp_init();
- PR_DISP_INFO("match PANEL_ID_DLX_SHARP_RENESAS panel_type\n");
- } else if (panel_type == PANEL_ID_DLX_SONY_RENESAS) {
+ PR_DISP_INFO("%s panel ID = PANEL_ID_DLXJ_SHARP_RENESAS\n", __func__);
+ } else if (panel_type == PANEL_ID_DLXJ_SONY_RENESAS) {
mipi_video_sony_init();
- PR_DISP_INFO("match PANEL_ID_DLX_SONY_RENESAS panel_type\n");
+ PR_DISP_INFO("%s panel ID = PANEL_ID_DLXJ_SONY_RENESAS\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_JDI_SAMSUNG) {
+ mipi_command_samsung_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_JDI_SAMSUNG\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2) {
+ mipi_command_samsung_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_JDI_SAMSUNG_C2\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2_1) {
+ mipi_command_samsung_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_JDI_SAMSUNG_C2_1\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_JDI_SAMSUNG_C2_2) {
+ mipi_command_samsung_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_JDI_SAMSUNG_C2_2\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_SHARP_RENESAS) {
+ mipi_video_sharp_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_SHARP_RENESAS\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_SHARP_RENESAS_C1) {
+ mipi_cmd_sharp_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_SHARP_RENESAS_CMD\n", __func__);
+ } else if (panel_type == PANEL_ID_M7_JDI_RENESAS) {
+ mipi_cmd_jdi_renesas_init();
+ PR_DISP_INFO("%s panel ID = PANEL_ID_M7_JDI_RENESAS_CMD\n", __func__);
} else {
- PR_DISP_INFO("Mis-match panel_type = %x\n", panel_type);
+ PR_DISP_ERR("%s: panel not supported!!\n", __func__);
return -ENODEV;
}
+ pwmic_ver = i2c_smbus_read_byte_data(blk_pwm_client, 0x1f);
+ PR_DISP_INFO("%s: PWM IC version A%d\n", __func__, pwmic_ver);
+
+#ifdef CONFIG_FB_MSM_CABC_LEVEL_CONTROL
+ mutex_init(&set_cabc_mutex);
+#endif
PR_DISP_INFO("%s\n", __func__);
return platform_driver_register(&this_driver);
}
-device_initcall_sync(monarudo_panel_init);
+device_initcall_sync(m7_panel_init);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment