1 /*
2  * Copyright (c) 2016, Freescale Semiconductor, Inc.
3  * Copyright 2016-2017,2019,2022,2024 NXP
4  * All rights reserved.
5  *
6  * SPDX-License-Identifier: BSD-3-Clause
7  */
8 
9 #include "fsl_ili9341.h"
10 
FT9341_Init(ili9341_send_byte_t _writeData,ili9341_send_byte_t _writeCommand)11 void FT9341_Init(ili9341_send_byte_t _writeData, ili9341_send_byte_t _writeCommand)
12 {
13     SDK_DelayAtLeastUs(ILI9341_RESET_CANCEL_MS * 1000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
14 
15     _writeCommand(ILI9341_CMD_DISPLAYOFF);
16 
17     _writeCommand(ILI9341_CMD_PWRA);
18     _writeData(0x39);
19     _writeData(0x2C);
20     _writeData(0x00);
21     _writeData(0x34);
22     _writeData(0x02);
23     _writeCommand(ILI9341_CMD_PWRB);
24     _writeData(0x00);
25     _writeData(0x83);
26     _writeData(0x30);
27     _writeCommand(ILI9341_CMD_DTCA);
28     _writeData(0x85);
29     _writeData(0x01);
30     _writeData(0x79);
31     _writeCommand(ILI9341_CMD_DTCB);
32     _writeData(0x00);
33     _writeData(0x00);
34     _writeCommand(ILI9341_CMD_PWRSEQ);
35     _writeData(0x64);
36     _writeData(0x03);
37     _writeData(0x12);
38     _writeData(0x81);
39     _writeCommand(ILI9341_CMD_PRC);
40     _writeData(0x20);
41     _writeCommand(ILI9341_CMD_PWR1);
42     _writeData(0x26);
43     _writeCommand(ILI9341_CMD_PWR2);
44     _writeData(0x11);
45     _writeCommand(ILI9341_CMD_VCOM1);
46     _writeData(0x35);
47     _writeData(0x3E);
48     _writeCommand(ILI9341_CMD_VCOM2);
49     _writeData(0xBE);
50     _writeCommand(ILI9341_CMD_MAC);
51     _writeData(0x28);
52     _writeCommand(ILI9341_CMD_PIXELFORMAT);
53     _writeData(0x55);
54     _writeCommand(ILI9341_CMD_FRC);
55     _writeData(0x00);
56     _writeData(0x1F);
57     _writeCommand(ILI9341_CMD_DFC);
58     _writeData(0x0A);
59     _writeData(0x82);
60     _writeData(0x27);
61     _writeData(0x00);
62     _writeCommand(ILI9341_CMD_3GAMMAEN);
63     _writeData(0x00);
64     _writeCommand(ILI9341_CMD_COLADDR);
65     _writeData(0x00);
66     _writeData(0x00);
67     _writeData(0x00);
68     _writeData(0xEF);
69     _writeCommand(ILI9341_CMD_PAGEADDR);
70     _writeData(0x00);
71     _writeData(0x00);
72     _writeData(0x01);
73     _writeData(0x3F);
74     _writeCommand(ILI9341_CMD_GAMMA);
75     _writeData(0x01);
76     _writeCommand(ILI9341_CMD_PGAMMA);
77     _writeData(0x0FU);
78     _writeData(0x31U);
79     _writeData(0x2BU);
80     _writeData(0x0CU);
81     _writeData(0x0EU);
82     _writeData(0x08U);
83     _writeData(0x4EU);
84     _writeData(0xF1U);
85     _writeData(0x37U);
86     _writeData(0x07U);
87     _writeData(0x10U);
88     _writeData(0x03U);
89     _writeData(0x0EU);
90     _writeData(0x09U);
91     _writeData(0x00U);
92     _writeCommand(ILI9341_CMD_NGAMMA);
93     _writeData(0x00U);
94     _writeData(0x0EU);
95     _writeData(0x14U);
96     _writeData(0x03U);
97     _writeData(0x11U);
98     _writeData(0x07U);
99     _writeData(0x31U);
100     _writeData(0xC1U);
101     _writeData(0x48U);
102     _writeData(0x08U);
103     _writeData(0x0FU);
104     _writeData(0x0CU);
105     _writeData(0x31U);
106     _writeData(0x36U);
107     _writeData(0x0FU);
108     _writeCommand(ILI9341_CMD_SLEEPOUT);
109     _writeCommand(ILI9341_CMD_DISPLAYON);
110 }
111 
FT9341_Init1(ili9341_send_cmd_data_t sendCmdData)112 void FT9341_Init1(ili9341_send_cmd_data_t sendCmdData)
113 {
114     SDK_DelayAtLeastUs(ILI9341_RESET_CANCEL_MS * 1000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
115 
116     sendCmdData(ILI9341_CMD_DISPLAYOFF, NULL, 0U);
117     sendCmdData(ILI9341_CMD_PWRA, (const uint8_t[]){0x39U, 0x2CU, 0x00U, 0x34U, 0x02U}, 5u);
118     sendCmdData(ILI9341_CMD_PWRB, (const uint8_t[]){0x00U, 0x83U, 0x30U}, 3u);
119     sendCmdData(ILI9341_CMD_DTCA, (const uint8_t[]){0x85U, 0x01U, 0x79U}, 3u);
120     sendCmdData(ILI9341_CMD_DTCB, (const uint8_t[]){0x00U, 0x00U}, 2u);
121     sendCmdData(ILI9341_CMD_PWRSEQ, (const uint8_t[]){0x64U, 0x03U, 0x12U, 0x81U}, 4u);
122     sendCmdData(ILI9341_CMD_PRC, (const uint8_t[]){0x20U}, 1u);
123     sendCmdData(ILI9341_CMD_PWR1, (const uint8_t[]){0x26U}, 1u);
124     sendCmdData(ILI9341_CMD_PWR2, (const uint8_t[]){0x11U}, 1u);
125     sendCmdData(ILI9341_CMD_VCOM1, (const uint8_t[]){0x35U, 0x3eU}, 2u);
126     sendCmdData(ILI9341_CMD_VCOM2, (const uint8_t[]){0xBEU}, 1u);
127     sendCmdData(ILI9341_CMD_MAC, (const uint8_t[]){0x28U}, 1u);
128     sendCmdData(ILI9341_CMD_PIXELFORMAT, (const uint8_t[]){0x55U}, 1u);
129     sendCmdData(ILI9341_CMD_FRC, (const uint8_t[]){0x00U, 0x1FU}, 2u);
130     sendCmdData(ILI9341_CMD_DFC, (const uint8_t[]){0x0aU, 0x82U, 0x27U, 0x00}, 4u);
131     sendCmdData(ILI9341_CMD_3GAMMAEN, (const uint8_t[]){0x00U}, 1u);
132     sendCmdData(ILI9341_CMD_COLADDR, (const uint8_t[]){0x00U, 0x00U, 0x00U, 0xEFU}, 4u);
133     sendCmdData(ILI9341_CMD_PAGEADDR, (const uint8_t[]){0x00U, 0x00U, 0x01U, 0x3FU}, 4u);
134     sendCmdData(ILI9341_CMD_GAMMA, (const uint8_t[]){0x01U}, 1u);
135     sendCmdData(ILI9341_CMD_PGAMMA,
136                 (const uint8_t[]){0x0FU, 0x31U, 0x2BU, 0x0CU, 0x0EU, 0x08U, 0x4EU, 0xF1U, 0x37U, 0x07U, 0x10U, 0x03U,
137                                   0x0EU, 0x09U, 0x00U},
138                 15u);
139     sendCmdData(ILI9341_CMD_NGAMMA,
140                 (const uint8_t[]){0x00U, 0x0EU, 0x14U, 0x03U, 0x11U, 0x07U, 0x31U, 0xC1U, 0x48U, 0x08U, 0x0FU, 0x0CU,
141                                   0x31U, 0x36U, 0x0FU},
142                 15u);
143 
144     sendCmdData(ILI9341_CMD_SLEEPOUT, NULL, 0U);
145     sendCmdData(ILI9341_CMD_DISPLAYON, NULL, 0U);
146 }
147 
148 #if ILI9341_USE_DBI_IFACE
ILI9341_InitDBI(ili9341_handle_t * handle,const ili9341_config_t * config,dbi_iface_t * dbiIface)149 status_t ILI9341_InitDBI(ili9341_handle_t *handle, const ili9341_config_t *config, dbi_iface_t *dbiIface)
150 {
151     handle->dbiIface = dbiIface;
152 
153     SDK_DelayAtLeastUs(ILI9341_RESET_CANCEL_MS * 1000U, SDK_DEVICE_MAXIMUM_CPU_CLOCK_FREQUENCY);
154 
155     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DISPLAYOFF, NULL, 0U);
156     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWRA, (const uint8_t[]){0x39U, 0x2CU, 0x00U, 0x34U, 0x02U}, 5u);
157     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWRB, (const uint8_t[]){0x00U, 0x83U, 0x30U}, 3u);
158     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DTCA, (const uint8_t[]){0x85U, 0x01U, 0x79U}, 3u);
159     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DTCB, (const uint8_t[]){0x00U, 0x00U}, 2u);
160     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWRSEQ, (const uint8_t[]){0x64U, 0x03U, 0x12U, 0x81U}, 4u);
161     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PRC, (const uint8_t[]){0x20U}, 1u);
162     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWR1, (const uint8_t[]){0x26U}, 1u);
163     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PWR2, (const uint8_t[]){0x11U}, 1u);
164     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_VCOM1, (const uint8_t[]){0x35U, 0x3eU}, 2u);
165     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_VCOM2, (const uint8_t[]){0xBEU}, 1u);
166     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_MAC, (const uint8_t[]){0x28U}, 1u);
167     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PIXELFORMAT, (const uint8_t[]){0x55U}, 1u);
168     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_FRC, (const uint8_t[]){0x00U, 0x1FU}, 2u);
169     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DFC, (const uint8_t[]){0x0aU, 0x82U, 0x27U, 0x00}, 4u);
170     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_3GAMMAEN, (const uint8_t[]){0x00U}, 1u);
171     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_COLADDR, (const uint8_t[]){0x00U, 0x00U, 0x00U, 0xEFU}, 4u);
172     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PAGEADDR, (const uint8_t[]){0x00U, 0x00U, 0x01U, 0x3FU}, 4u);
173     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_GAMMA, (const uint8_t[]){0x01U}, 1u);
174     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_PGAMMA,
175                            (const uint8_t[]){0x0FU, 0x31U, 0x2BU, 0x0CU, 0x0EU, 0x08U, 0x4EU, 0xF1U, 0x37U, 0x07U,
176                                              0x10U, 0x03U, 0x0EU, 0x09U, 0x00U},
177                            15u);
178     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_NGAMMA,
179                            (const uint8_t[]){0x00U, 0x0EU, 0x14U, 0x03U, 0x11U, 0x07U, 0x31U, 0xC1U, 0x48U, 0x08U,
180                                              0x0FU, 0x0CU, 0x31U, 0x36U, 0x0FU},
181                            15u);
182 
183     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_SLEEPOUT, NULL, 0U);
184     DBI_IFACE_WriteCmdData(dbiIface, ILI9341_CMD_DISPLAYON, NULL, 0U);
185 
186     return kStatus_Success;
187 }
188 
189 #endif
190