22 * Copyright (c) 2017 Jan Van Winkel <[email protected] > 33 * Copyright (c) 2019 Nordic Semiconductor ASA
44 * Copyright (c) 2019 Marc Reilly
5+ * Copyright (c) 2019 PHYTEC Messtechnik GmbH
56 *
67 * SPDX-License-Identifier: Apache-2.0
78 */
@@ -22,6 +23,14 @@ LOG_MODULE_REGISTER(display_st7789v);
2223#define ST7789V_CMD_DATA_PIN DT_INST_0_SITRONIX_ST7789V_CMD_DATA_GPIOS_PIN
2324#define ST7789V_RESET_PIN DT_INST_0_SITRONIX_ST7789V_RESET_GPIOS_PIN
2425
26+ static u8_t st7789v_porch_param [] = DT_INST_0_SITRONIX_ST7789V_PORCH_PARAM ;
27+ static u8_t st7789v_cmd2en_param [] = DT_INST_0_SITRONIX_ST7789V_CMD2EN_PARAM ;
28+ static u8_t st7789v_pwctrl1_param [] = DT_INST_0_SITRONIX_ST7789V_PWCTRL1_PARAM ;
29+ static u8_t st7789v_pvgam_param [] = DT_INST_0_SITRONIX_ST7789V_PVGAM_PARAM ;
30+ static u8_t st7789v_nvgam_param [] = DT_INST_0_SITRONIX_ST7789V_NVGAM_PARAM ;
31+ static u8_t st7789v_ram_param [] = DT_INST_0_SITRONIX_ST7789V_RAM_PARAM ;
32+ static u8_t st7789v_rgb_param [] = DT_INST_0_SITRONIX_ST7789V_RGB_PARAM ;
33+
2534struct st7789v_data {
2635 struct device * spi_dev ;
2736 struct spi_config spi_config ;
@@ -46,7 +55,7 @@ struct st7789v_data {
4655#define ST7789V_PIXEL_SIZE 3u
4756#endif
4857
49- void st7789v_set_lcd_margins (struct st7789v_data * data ,
58+ static void st7789v_set_lcd_margins (struct st7789v_data * data ,
5059 u16_t x_offset , u16_t y_offset )
5160{
5261 data -> x_offset = x_offset ;
@@ -58,7 +67,7 @@ static void st7789v_set_cmd(struct st7789v_data *data, int is_cmd)
5867 gpio_pin_write (data -> cmd_data_gpio , ST7789V_CMD_DATA_PIN , !is_cmd );
5968}
6069
61- void st7789v_transmit (struct st7789v_data * data , u8_t cmd ,
70+ static void st7789v_transmit (struct st7789v_data * data , u8_t cmd ,
6271 u8_t * tx_data , size_t tx_count )
6372{
6473 struct spi_buf tx_buf = { .buf = & cmd , .len = 1 };
@@ -247,6 +256,76 @@ static int st7789v_set_orientation(const struct device *dev,
247256 return - ENOTSUP ;
248257}
249258
259+ static void st7789v_lcd_init (struct st7789v_data * p_st7789v )
260+ {
261+ u8_t tmp ;
262+
263+ st7789v_set_lcd_margins (p_st7789v , 0 , 0 );
264+
265+ st7789v_transmit (p_st7789v , ST7789V_CMD_PORCTRL , st7789v_porch_param ,
266+ sizeof (st7789v_porch_param ));
267+
268+ st7789v_transmit (p_st7789v , ST7789V_CMD_CMD2EN , st7789v_cmd2en_param ,
269+ sizeof (st7789v_cmd2en_param ));
270+
271+ /* Digital Gamma Enable, default disabled */
272+ tmp = 0x00 ;
273+ st7789v_transmit (p_st7789v , ST7789V_CMD_DGMEN , & tmp , 1 );
274+
275+ /* Frame Rate Control in Normal Mode, default value */
276+ tmp = 0x0f ;
277+ st7789v_transmit (p_st7789v , ST7789V_CMD_FRCTRL2 , & tmp , 1 );
278+
279+ tmp = DT_INST_0_SITRONIX_ST7789V_GCTRL ;
280+ st7789v_transmit (p_st7789v , ST7789V_CMD_GCTRL , & tmp , 1 );
281+
282+ tmp = DT_INST_0_SITRONIX_ST7789V_VCOM ;
283+ st7789v_transmit (p_st7789v , ST7789V_CMD_VCOMS , & tmp , 1 );
284+
285+ #if (defined(DT_INST_0_SITRONIX_ST7789V_VRHS ) && \
286+ defined(DT_INST_0_SITRONIX_ST7789V_VDVS ))
287+ tmp = 0x01 ;
288+ st7789v_transmit (p_st7789v , ST7789V_CMD_VDVVRHEN , & tmp , 1 );
289+
290+ tmp = DT_INST_0_SITRONIX_ST7789V_VRHS ;
291+ st7789v_transmit (p_st7789v , ST7789V_CMD_VRH , & tmp , 1 );
292+
293+ tmp = DT_INST_0_SITRONIX_ST7789V_VDVS ;
294+ st7789v_transmit (p_st7789v , ST7789V_CMD_VDS , & tmp , 1 );
295+ #endif
296+
297+ st7789v_transmit (p_st7789v , ST7789V_CMD_PWCTRL1 , st7789v_pwctrl1_param ,
298+ sizeof (st7789v_pwctrl1_param ));
299+
300+ /* Memory Data Access Control */
301+ tmp = DT_INST_0_SITRONIX_ST7789V_MDAC ;
302+ st7789v_transmit (p_st7789v , ST7789V_CMD_MADCTL , & tmp , 1 );
303+
304+ /* Interface Pixel Format */
305+ tmp = DT_INST_0_SITRONIX_ST7789V_COLMOD ;
306+ st7789v_transmit (p_st7789v , ST7789V_CMD_COLMOD , & tmp , 1 );
307+
308+ tmp = DT_INST_0_SITRONIX_ST7789V_LCM ;
309+ st7789v_transmit (p_st7789v , ST7789V_CMD_LCMCTRL , & tmp , 1 );
310+
311+ tmp = DT_INST_0_SITRONIX_ST7789V_GAMMA ;
312+ st7789v_transmit (p_st7789v , ST7789V_CMD_GAMSET , & tmp , 1 );
313+
314+ st7789v_transmit (p_st7789v , ST7789V_CMD_INV_ON , NULL , 0 );
315+
316+ st7789v_transmit (p_st7789v , ST7789V_CMD_PVGAMCTRL , st7789v_pvgam_param ,
317+ sizeof (st7789v_pvgam_param ));
318+
319+ st7789v_transmit (p_st7789v , ST7789V_CMD_NVGAMCTRL , st7789v_nvgam_param ,
320+ sizeof (st7789v_nvgam_param ));
321+
322+ st7789v_transmit (p_st7789v , ST7789V_CMD_RAMCTRL , st7789v_ram_param ,
323+ sizeof (st7789v_ram_param ));
324+
325+ st7789v_transmit (p_st7789v , ST7789V_CMD_RGBCTRL , st7789v_rgb_param ,
326+ sizeof (st7789v_rgb_param ));
327+ }
328+
250329static int st7789v_init (struct device * dev )
251330{
252331 struct st7789v_data * data = (struct st7789v_data * )dev -> driver_data ;
0 commit comments