1 /*
2  * Copyright (c) 2021 Hubert Miś
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 /**
8  * @file
9  * @brief FT8XX reference API
10  */
11 
12 #ifndef ZEPHYR_DRIVERS_MISC_FT8XX_FT8XX_REFERENCE_API_H_
13 #define ZEPHYR_DRIVERS_MISC_FT8XX_FT8XX_REFERENCE_API_H_
14 
15 #include <stdint.h>
16 
17 #include <zephyr/drivers/misc/ft8xx/ft8xx_copro.h>
18 #include <zephyr/drivers/misc/ft8xx/ft8xx_common.h>
19 #include <zephyr/drivers/misc/ft8xx/ft8xx_dl.h>
20 #include <zephyr/drivers/misc/ft8xx/ft8xx_memory.h>
21 
22 #ifdef __cplusplus
23 extern "C" {
24 #endif
25 
26 /**
27  * @brief FT8xx reference API
28  *
29  * API defined according to FT800 Programmers Guide API reference definition.
30  *
31  * @note Function names defined in this header may easily collide with names
32  *       provided by other modules. Include this header with caution. If naming
33  *       conflict occurs instead of including this header, use @c ft8xx_
34  *       prefixed names.
35  *
36  * @defgroup ft8xx_reference_api FT8xx reference API
37  * @ingroup ft8xx_interface
38  * @{
39  */
40 
41 /**
42  * @brief Write 1 byte (8 bits) to FT8xx memory
43  *
44  * @param address Memory address to write to
45  * @param data Byte to write
46  */
wr8(uint32_t address,uint8_t data)47 static inline void wr8(uint32_t address, uint8_t data)
48 {
49 	ft8xx_wr8(address, data);
50 }
51 
52 /**
53  * @brief Write 2 bytes (16 bits) to FT8xx memory
54  *
55  * @param address Memory address to write to
56  * @param data Value to write
57  */
wr16(uint32_t address,uint16_t data)58 static inline void wr16(uint32_t address, uint16_t data)
59 {
60 	ft8xx_wr16(address, data);
61 }
62 
63 /**
64  * @brief Write 4 bytes (32 bits) to FT8xx memory
65  *
66  * @param address Memory address to write to
67  * @param data Value to write
68  */
wr32(uint32_t address,uint32_t data)69 static inline void wr32(uint32_t address, uint32_t data)
70 {
71 	ft8xx_wr32(address, data);
72 }
73 
74 /**
75  * @brief Read 1 byte (8 bits) from FT8xx memory
76  *
77  * @param address Memory address to read from
78  *
79  * @return Value read from memory
80  */
rd8(uint32_t address)81 static inline uint8_t rd8(uint32_t address)
82 {
83 	return ft8xx_rd8(address);
84 }
85 
86 /**
87  * @brief Read 2 bytes (16 bits) from FT8xx memory
88  *
89  * @param address Memory address to read from
90  *
91  * @return Value read from memory
92  */
rd16(uint32_t address)93 static inline uint16_t rd16(uint32_t address)
94 {
95 	return ft8xx_rd16(address);
96 }
97 
98 /**
99  * @brief Read 4 bytes (32 bits) from FT8xx memory
100  *
101  * @param address Memory address to read from
102  *
103  * @return Value read from memory
104  */
rd32(uint32_t address)105 static inline uint32_t rd32(uint32_t address)
106 {
107 	return ft8xx_rd32(address);
108 }
109 
110 
111 /** Co-processor widget is drawn in 3D effect */
112 #define OPT_3D        FT8XX_OPT_3D
113 /** Co-processor option to decode the JPEG image to RGB565 format */
114 #define OPT_RGB565    FT8XX_OPT_RGB565
115 /** Co-processor option to decode the JPEG image to L8 format, i.e., monochrome */
116 #define OPT_MONO      FT8XX_OPT_MONO
117 /** No display list commands generated for bitmap decoded from JPEG image */
118 #define OPT_NODL      FT8XX_OPT_NODL
119 /** Co-processor widget is drawn without 3D effect */
120 #define OPT_FLAT      FT8XX_OPT_FLAT
121 /** The number is treated as 32 bit signed integer */
122 #define OPT_SIGNED    FT8XX_OPT_SIGNED
123 /** Co-processor widget centers horizontally */
124 #define OPT_CENTERX   FT8XX_OPT_CENTERX
125 /** Co-processor widget centers vertically */
126 #define OPT_CENTERY   FT8XX_OPT_CENTERY
127 /** Co-processor widget centers horizontally and vertically */
128 #define OPT_CENTER    FT8XX_OPT_CENTER
129 /** The label on the Coprocessor widget is right justified */
130 #define OPT_RIGHTX    FT8XX_OPT_RIGHTX
131 /** Co-processor widget has no background drawn */
132 #define OPT_NOBACK    FT8XX_OPT_NOBACK
133 /** Co-processor clock widget is drawn without hour ticks.
134  *  Gauge widget is drawn without major and minor ticks.
135  */
136 #define OPT_NOTICKS   FT8XX_OPT_NOTICKS
137 /** Co-processor clock widget is drawn without hour and minutes hands,
138  * only seconds hand is drawn
139  */
140 #define OPT_NOHM      FT8XX_OPT_NOHM
141 /** The Co-processor gauge has no pointer */
142 #define OPT_NOPOINTER FT8XX_OPT_NOPOINTER
143 /** Co-processor clock widget is drawn without seconds hand */
144 #define OPT_NOSECS    FT8XX_OPT_NOSECS
145 /** Co-processor clock widget is drawn without hour, minutes and seconds hands */
146 #define OPT_NOHANDS   FT8XX_OPT_NOHANDS
147 
148 /**
149  * @brief Execute a display list command by co-processor engine
150  *
151  * @param command Display list command to execute
152  */
cmd(uint32_t command)153 static inline void cmd(uint32_t command)
154 {
155 	ft8xx_copro_cmd(command);
156 }
157 
158 /**
159  * @brief Start a new display list
160  */
cmd_dlstart(void)161 static inline void cmd_dlstart(void)
162 {
163 	ft8xx_copro_cmd_dlstart();
164 }
165 
166 /**
167  * @brief Swap the current display list
168  */
cmd_swap(void)169 static inline void cmd_swap(void)
170 {
171 	ft8xx_copro_cmd_swap();
172 }
173 
174 /**
175  * @brief Draw text
176  *
177  * By default (x,y) is the top-left pixel of the text and the value of
178  * @p options is zero. OPT_CENTERX centers the text horizontally, OPT_CENTERY
179  * centers it vertically. OPT_CENTER centers the text in both directions.
180  * OPT_RIGHTX right-justifies the text, so that the x is the rightmost pixel.
181  *
182  * @param x x-coordinate of text base, in pixels
183  * @param y y-coordinate of text base, in pixels
184  * @param font Font to use for text, 0-31. 16-31 are ROM fonts
185  * @param options Options to apply
186  * @param s Character string to display, terminated with a null character
187  */
cmd_text(int16_t x,int16_t y,int16_t font,uint16_t options,const char * s)188 static inline void cmd_text(int16_t x,
189 			   int16_t y,
190 			   int16_t font,
191 			   uint16_t options,
192 			   const char *s)
193 {
194 	ft8xx_copro_cmd_text(x, y, font, options, s);
195 }
196 
197 /**
198  * @brief Draw a decimal number
199  *
200  * By default (@p x, @p y) is the top-left pixel of the text. OPT_CENTERX
201  * centers the text horizontally, OPT_CENTERY centers it vertically. OPT_CENTER
202  * centers the text in both directions. OPT_RIGHTX right-justifies the text, so
203  * that the @p x is the rightmost pixel. By default the number is displayed
204  * with no leading zeroes, but if a width 1-9 is specified in the @p options,
205  * then the number is padded if necessary with leading zeroes so that it has
206  * the given width. If OPT_SIGNED is given, the number is treated as signed,
207  * and prefixed by a minus sign if negative.
208  *
209  * @param x x-coordinate of text base, in pixels
210  * @param y y-coordinate of text base, in pixels
211  * @param font Font to use for text, 0-31. 16-31 are ROM fonts
212  * @param options Options to apply
213  * @param n The number to display.
214  */
cmd_number(int16_t x,int16_t y,int16_t font,uint16_t options,int32_t n)215 static inline void cmd_number(int16_t x,
216 			     int16_t y,
217 			     int16_t font,
218 			     uint16_t options,
219 			     int32_t n)
220 {
221 	ft8xx_copro_cmd_number(x, y, font, options, n);
222 }
223 
224 /**
225  * @brief Execute the touch screen calibration routine
226  *
227  * The calibration procedure collects three touches from the touch screen, then
228  * computes and loads an appropriate matrix into REG_TOUCH_TRANSFORM_A-F. To
229  * use it, create a display list and then use CMD_CALIBRATE. The co-processor
230  * engine overlays the touch targets on the current display list, gathers the
231  * calibration input and updates REG_TOUCH_TRANSFORM_A-F.
232  *
233  * @param result Calibration result, written with 0 on failure of calibration
234  */
cmd_calibrate(uint32_t * result)235 static inline void cmd_calibrate(uint32_t *result)
236 {
237 	ft8xx_copro_cmd_calibrate(result);
238 }
239 
240 
241 /** Rectangular pixel arrays, in various color formats */
242 #define BITMAPS      FT8XX_BITMAPS
243 /** Anti-aliased points, point radius is 1-256 pixels */
244 #define POINTS       FT8XX_POINTS
245 /**
246  * Anti-aliased lines, with width from 0 to 4095 1/16th of pixel units.
247  * (width is from center of the line to boundary)
248  */
249 #define LINES        FT8XX_LINES
250 /** Anti-aliased lines, connected head-to-tail */
251 #define LINE_STRIP   FT8XX_LINE_STRIP
252 /** Edge strips for right */
253 #define EDGE_STRIP_R FT8XX_EDGE_STRIP_R
254 /** Edge strips for left */
255 #define EDGE_STRIP_L FT8XX_EDGE_STRIP_L
256 /** Edge strips for above */
257 #define EDGE_STRIP_A FT8XX_EDGE_STRIP_A
258 /** Edge strips for below */
259 #define EDGE_STRIP_B FT8XX_EDGE_STRIP_B
260 /**
261  * Round-cornered rectangles, curvature of the corners can be adjusted using
262  * LINE_WIDTH
263  */
264 #define RECTS        FT8XX_RECTS
265 
266 /**
267  * @brief Begin drawing a graphics primitive
268  *
269  * The valid primitives are defined as:
270  * - @ref BITMAPS
271  * - @ref POINTS
272  * - @ref LINES
273  * - @ref LINE_STRIP
274  * - @ref EDGE_STRIP_R
275  * - @ref EDGE_STRIP_L
276  * - @ref EDGE_STRIP_A
277  * - @ref EDGE_STRIP_B
278  * - @ref RECTS
279  *
280  * The primitive to be drawn is selected by the @ref BEGIN command. Once the
281  * primitive is selected, it will be valid till the new primitive is selected
282  * by the @ref BEGIN command.
283  *
284  * @note The primitive drawing operation will not be performed until
285  *       @ref VERTEX2II or @ref VERTEX2F is executed.
286  *
287  * @param prim Graphics primitive
288  */
289 #define BEGIN(prim) FT8XX_BEGIN(prim)
290 
291 /**
292  * @brief Clear buffers to preset values
293  *
294  * Setting @p c to true will clear the color buffer of the FT8xx to the preset
295  * value. Setting this bit to false will maintain the color buffer of the FT8xx
296  * with an unchanged value. The preset value is defined in command
297  * @ref CLEAR_COLOR_RGB for RGB channel and CLEAR_COLOR_A for alpha channel.
298  *
299  * Setting @p s to true will clear the stencil buffer of the FT8xx to the preset
300  * value. Setting this bit to false will maintain the stencil buffer of the
301  * FT8xx with an unchanged value. The preset value is defined in command
302  * CLEAR_STENCIL.
303  *
304  * Setting @p t to true will clear the tag buffer of the FT8xx to the preset
305  * value. Setting this bit to false will maintain the tag buffer of the FT8xx
306  * with an unchanged value. The preset value is defined in command CLEAR_TAG.
307  *
308  * @param c Clear color buffer
309  * @param s Clear stencil buffer
310  * @param t Clear tag buffer
311  */
312 #define CLEAR(c, s, t) FT8XX_CLEAR(c, s, t)
313 
314 /**
315  * @brief Specify clear values for red, green and blue channels
316  *
317  * Sets the color values used by a following @ref CLEAR.
318  *
319  * @param red Red value used when the color buffer is cleared
320  * @param green Green value used when the color buffer is cleared
321  * @param blue Blue value used when the color buffer is cleared
322  */
323 #define CLEAR_COLOR_RGB(red, green, blue) FT8XX_CLEAR_COLOR_RGB(red, green, blue)
324 
325 /**
326  * @brief Set the current color red, green and blue
327  *
328  * Sets red, green and blue values of the FT8xx color buffer which will be
329  * applied to the following draw operation.
330  *
331  * @param red Red value for the current color
332  * @param green Green value for the current color
333  * @param blue Blue value for the current color
334  */
335 #define COLOR_RGB(red, green, blue) FT8XX_COLOR_RGB(red, green, blue)
336 
337 /**
338  * @brief End the display list
339  *
340  * FT8xx will ignore all the commands following this command.
341  */
342 #define DISPLAY() FT8XX_DISPLAY()
343 
344 /**
345  * @brief End drawing a graphics primitive
346  *
347  * It is recommended to have an @ref END for each @ref BEGIN. Whereas advanced
348  * users can avoid the usage of @ref END in order to save extra graphics
349  * instructions in the display list RAM.
350  */
351 #define END() FT8XX_END()
352 
353 /**
354  * @brief Specify the width of lines to be drawn with primitive @ref LINES
355  *
356  * Sets the width of drawn lines. The width is the distance from the center of
357  * the line to the outermost drawn pixel, in units of 1/16 pixel. The valid
358  * range is from 16 to 4095 in terms of 1/16th pixel units.
359  *
360  * @note The @ref LINE_WIDTH command will affect the @ref LINES,
361  *       @ref LINE_STRIP, @ref RECTS, @ref EDGE_STRIP_A /B/R/L primitives.
362  *
363  * @param width Line width in 1/16 pixel
364  */
365 #define LINE_WIDTH(width) FT8XX_LINE_WIDTH(width)
366 
367 /**
368  * @brief Attach the tag value for the following graphics objects.
369  *
370  * The initial value of the tag buffer of the FT8xx is specified by command
371  * CLEAR_TAG and taken effect by command @ref CLEAR. @ref TAG command can
372  * specify the value of the tag buffer of the FT8xx that applies to the graphics
373  * objects when they are drawn on the screen. This @ref TAG value will be
374  * assigned to all the following objects, unless the TAG_MASK command is used to
375  * disable it.  Once the following graphics objects are drawn, they are attached
376  * with the tag value successfully. When the graphics objects attached with the
377  * tag value are touched, the register @ref REG_TOUCH_TAG will be updated with
378  * the tag value of the graphics object being touched. If there is no @ref TAG
379  * commands in one display list, all the graphics objects rendered by the
380  * display list will report tag value as 255 in @ref REG_TOUCH_TAG when they
381  * were touched.
382  *
383  * @param s Tag value 1-255
384  */
385 #define TAG(s) FT8XX_TAG(s)
386 
387 /**
388  * @brief Start the operation of graphics primitives at the specified coordinate
389  *
390  * The range of coordinates is from -16384 to +16383 in terms of 1/16th pixel
391  * units.  The negative x coordinate value means the coordinate in the left
392  * virtual screen from (0, 0), while the negative y coordinate value means the
393  * coordinate in the upper virtual screen from (0, 0). If drawing on the
394  * negative coordinate position, the drawing operation will not be visible.
395  *
396  * @param x Signed x-coordinate in 1/16 pixel precision
397  * @param y Signed y-coordinate in 1/16 pixel precision
398  */
399 #define VERTEX2F(x, y) FT8XX_VERTEX2F(x, y)
400 
401 /**
402  * @brief Start the operation of graphics primitive at the specified coordinates
403  *
404  * The valid range of @p handle is from 0 to 31. From 16 to 31 the bitmap handle
405  * is dedicated to the FT8xx built-in font.
406  *
407  * Cell number is the index of bitmap with same bitmap layout and format.
408  * For example, for handle 31, the cell 65 means the character "A" in the
409  * largest built in font.
410  *
411  * @param x x-coordinate in pixels, from 0 to 511
412  * @param y y-coordinate in pixels, from 0 to 511
413  * @param handle Bitmap handle
414  * @param cell Cell number
415  */
416 #define VERTEX2II(x, y, handle, cell) FT8XX_VERTEX2II(x, y, handle, cell)
417 
418 
419 #if defined(CONFIG_FT800)
420 /** Main parts of FT800 memory map */
421 enum ft8xx_memory_map_t {
422 	RAM_G         = FT800_RAM_G,
423 	ROM_CHIPID    = FT800_ROM_CHIPID,
424 	ROM_FONT      = FT800_ROM_FONT,
425 	ROM_FONT_ADDR = FT800_ROM_FONT_ADDR,
426 	RAM_DL        = FT800_RAM_DL,
427 	RAM_PAL       = FT800_RAM_PAL,
428 	REG_          = FT800_REG_,
429 	RAM_CMD       = FT800_RAM_CMD
430 };
431 #else /* Definition of FT810 memory map */
432 /** Main parts of FT810 memory map */
433 enum ft8xx_memory_map_t {
434 	RAM_G         = FT810_RAM_G,
435 	RAM_DL        = FT810_RAM_DL,
436 	REG_          = FT810_REG_,
437 	RAM_CMD       = FT810_RAM_CMD
438 };
439 #endif
440 
441 #if defined(CONFIG_FT800)
442 /** FT800 register addresses */
443 enum ft8xx_register_address_t {
444 	REG_ID         = FT800_REG_ID,
445 	REG_FRAMES     = FT800_REG_FRAMES,
446 	REG_CLOCK      = FT800_REG_CLOCK,
447 	REG_FREQUENCY  = FT800_REG_FREQUENCY,
448 	REG_RENDERMODE = FT800_REG_RENDERMODE,
449 	REG_SNAPY      = FT800_REG_SNAPY,
450 	REG_SNAPSHOT   = FT800_REG_SNAPSHOT,
451 	REG_CPURESET   = FT800_REG_CPURESET,
452 	REG_TAP_CRC    = FT800_REG_TAP_CRC,
453 	REG_TAP_MASK   = FT800_REG_TAP_MASK,
454 	REG_HCYCLE     = FT800_REG_HCYCLE,
455 	REG_HOFFSET    = FT800_REG_HOFFSET,
456 	REG_HSIZE      = FT800_REG_HSIZE,
457 	REG_HSYNC0     = FT800_REG_HSYNC0,
458 	REG_HSYNC1     = FT800_REG_HSYNC1,
459 	REG_VCYCLE     = FT800_REG_VCYCLE,
460 	REG_VOFFSET    = FT800_REG_VOFFSET,
461 	REG_VSIZE      = FT800_REG_VSIZE,
462 	REG_VSYNC0     = FT800_REG_VSYNC0,
463 	REG_VSYNC1     = FT800_REG_VSYNC1,
464 	REG_DLSWAP     = FT800_REG_DLSWAP,
465 	REG_ROTATE     = FT800_REG_ROTATE,
466 	REG_OUTBITS    = FT800_REG_OUTBITS,
467 	REG_DITHER     = FT800_REG_DITHER,
468 	REG_SWIZZLE    = FT800_REG_SWIZZLE,
469 	REG_CSPREAD    = FT800_REG_CSPREAD,
470 	REG_PCLK_POL   = FT800_REG_PCLK_POL,
471 	REG_PCLK       = FT800_REG_PCLK,
472 	REG_TAG_X      = FT800_REG_TAG_X,
473 	REG_TAG_Y      = FT800_REG_TAG_Y,
474 	REG_TAG        = FT800_REG_TAG,
475 	REG_VOL_PB     = FT800_REG_VOL_PB,
476 	REG_VOL_SOUND  = FT800_REG_VOL_SOUND,
477 	REG_SOUND      = FT800_REG_SOUND,
478 	REG_PLAY       = FT800_REG_PLAY,
479 	REG_GPIO_DIR   = FT800_REG_GPIO_DIR,
480 	REG_GPIO       = FT800_REG_GPIO,
481 
482 	REG_INT_FLAGS  = FT800_REG_INT_FLAGS,
483 	REG_INT_EN     = FT800_REG_INT_EN,
484 	REG_INT_MASK   = FT800_REG_INT_MASK,
485 	REG_PLAYBACK_START = FT800_REG_PLAYBACK_START,
486 	REG_PLAYBACK_LENGTH = FT800_REG_PLAYBACK_LENGTH,
487 	REG_PLAYBACK_READPTR = FT800_REG_PLAYBACK_READPTR,
488 	REG_PLAYBACK_FREQ = FT800_REG_PLAYBACK_FREQ,
489 	REG_PLAYBACK_FORMAT = FT800_REG_PLAYBACK_FORMAT,
490 	REG_PLAYBACK_LOOP = FT800_REG_PLAYBACK_LOOP,
491 	REG_PLAYBACK_PLAY = FT800_REG_PLAYBACK_PLAY,
492 	REG_PWM_HZ     = FT800_REG_PWM_HZ,
493 	REG_PWM_DUTY   = FT800_REG_PWM_DUTY,
494 	REG_MACRO_0    = FT800_REG_MACRO_0,
495 	REG_MACRO_1    = FT800_REG_MACRO_1,
496 
497 	REG_CMD_READ   = FT800_REG_CMD_READ,
498 	REG_CMD_WRITE  = FT800_REG_CMD_WRITE,
499 	REG_CMD_DL     = FT800_REG_CMD_DL,
500 	REG_TOUCH_MODE = FT800_REG_TOUCH_MODE,
501 	REG_TOUCH_ADC_MODE = FT800_REG_TOUCH_ADC_MODE,
502 	REG_TOUCH_CHARGE = FT800_REG_TOUCH_CHARGE,
503 	REG_TOUCH_SETTLE = FT800_REG_TOUCH_SETTLE,
504 	REG_TOUCH_OVERSAMPLE = FT800_REG_TOUCH_OVERSAMPLE,
505 	REG_TOUCH_RZTHRESH = FT800_REG_TOUCH_RZTHRESH,
506 	REG_TOUCH_RAW_XY = FT800_REG_TOUCH_RAW_XY,
507 	REG_TOUCH_RZ   = FT800_REG_TOUCH_RZ,
508 	REG_TOUCH_SCREEN_XY = FT800_REG_TOUCH_SCREEN_XY,
509 	REG_TOUCH_TAG_XY = FT800_REG_TOUCH_TAG_XY,
510 	REG_TOUCH_TAG  = FT800_REG_TOUCH_TAG,
511 	REG_TOUCH_TRANSFORM_A = FT800_REG_TOUCH_TRANSFORM_A,
512 	REG_TOUCH_TRANSFORM_B = FT800_REG_TOUCH_TRANSFORM_B,
513 	REG_TOUCH_TRANSFORM_C = FT800_REG_TOUCH_TRANSFORM_C,
514 	REG_TOUCH_TRANSFORM_D = FT800_REG_TOUCH_TRANSFORM_D,
515 	REG_TOUCH_TRANSFORM_E = FT800_REG_TOUCH_TRANSFORM_E,
516 	REG_TOUCH_TRANSFORM_F = FT800_REG_TOUCH_TRANSFORM_F,
517 
518 	REG_TOUCH_DIRECT_XY = FT800_REG_TOUCH_DIRECT_XY,
519 	REG_TOUCH_DIRECT_Z1Z2 = FT800_REG_TOUCH_DIRECT_Z1Z2,
520 
521 	REG_TRACKER    = FT800_REG_TRACKER
522 };
523 #else /* Definition of FT810 registers */
524 /** FT810 register addresses */
525 enum ft8xx_register_address_t {
526 	REG_TRIM       = FT810_REG_TRIM,
527 
528 	REG_ID         = FT810_REG_ID,
529 	REG_FRAMES     = FT810_REG_FRAMES,
530 	REG_CLOCK      = FT810_REG_CLOCK,
531 	REG_FREQUENCY  = FT810_REG_FREQUENCY,
532 	REG_RENDERMODE = FT810_REG_RENDERMODE,
533 	REG_SNAPY      = FT810_REG_SNAPY,
534 	REG_SNAPSHOT   = FT810_REG_SNAPSHOT,
535 	REG_CPURESET   = FT810_REG_CPURESET,
536 	REG_TAP_CRC    = FT810_REG_TAP_CRC,
537 	REG_TAP_MASK   = FT810_REG_TAP_MASK,
538 	REG_HCYCLE     = FT810_REG_HCYCLE,
539 	REG_HOFFSET    = FT810_REG_HOFFSET,
540 	REG_HSIZE      = FT810_REG_HSIZE,
541 	REG_HSYNC0     = FT810_REG_HSYNC0,
542 	REG_HSYNC1     = FT810_REG_HSYNC1,
543 	REG_VCYCLE     = FT810_REG_VCYCLE,
544 	REG_VOFFSET    = FT810_REG_VOFFSET,
545 	REG_VSIZE      = FT810_REG_VSIZE,
546 	REG_VSYNC0     = FT810_REG_VSYNC0,
547 	REG_VSYNC1     = FT810_REG_VSYNC1,
548 	REG_DLSWAP     = FT810_REG_DLSWAP,
549 	REG_ROTATE     = FT810_REG_ROTATE,
550 	REG_OUTBITS    = FT810_REG_OUTBITS,
551 	REG_DITHER     = FT810_REG_DITHER,
552 	REG_SWIZZLE    = FT810_REG_SWIZZLE,
553 	REG_CSPREAD    = FT810_REG_CSPREAD,
554 	REG_PCLK_POL   = FT810_REG_PCLK_POL,
555 	REG_PCLK       = FT810_REG_PCLK,
556 	REG_TAG_X      = FT810_REG_TAG_X,
557 	REG_TAG_Y      = FT810_REG_TAG_Y,
558 	REG_TAG        = FT810_REG_TAG,
559 	REG_VOL_PB     = FT810_REG_VOL_PB,
560 	REG_VOL_SOUND  = FT810_REG_VOL_SOUND,
561 	REG_SOUND      = FT810_REG_SOUND,
562 	REG_PLAY       = FT810_REG_PLAY,
563 	REG_GPIO_DIR   = FT810_REG_GPIO_DIR,
564 	REG_GPIO       = FT810_REG_GPIO,
565 	REG_GPIOX_DIR  = FT810_REG_GPIOX_DIR,
566 	REG_GPIOX      = FT810_REG_GPIOX,
567 
568 	REG_INT_FLAGS  = FT810_REG_INT_FLAGS,
569 	REG_INT_EN     = FT810_REG_INT_EN,
570 	REG_INT_MASK   = FT810_REG_INT_MASK,
571 	REG_PLAYBACK_START = FT810_REG_PLAYBACK_START,
572 	REG_PLAYBACK_LENGTH = FT810_REG_PLAYBACK_LENGTH,
573 	REG_PLAYBACK_READPTR = FT810_REG_PLAYBACK_READPTR,
574 	REG_PLAYBACK_FREQ = FT810_REG_PLAYBACK_FREQ,
575 	REG_PLAYBACK_FORMAT = FT810_REG_PLAYBACK_FORMAT,
576 	REG_PLAYBACK_LOOP = FT810_REG_PLAYBACK_LOOP,
577 	REG_PLAYBACK_PLAY = FT810_REG_PLAYBACK_PLAY,
578 	REG_PWM_HZ     = FT810_REG_PWM_HZ,
579 	REG_PWM_DUTY   = FT810_REG_PWM_DUTY,
580 
581 	REG_CMD_READ   = FT810_REG_CMD_READ,
582 	REG_CMD_WRITE  = FT810_REG_CMD_WRITE,
583 	REG_CMD_DL     = FT810_REG_CMD_DL,
584 	REG_TOUCH_MODE = FT810_REG_TOUCH_MODE,
585 	REG_TOUCH_ADC_MODE = FT810_REG_TOUCH_ADC_MODE,
586 	REG_TOUCH_CHARGE = FT810_REG_TOUCH_CHARGE,
587 	REG_TOUCH_SETTLE = FT810_REG_TOUCH_SETTLE,
588 	REG_TOUCH_OVERSAMPLE = FT810_REG_TOUCH_OVERSAMPLE,
589 	REG_TOUCH_RZTHRESH = FT810_REG_TOUCH_RZTHRESH,
590 	REG_TOUCH_RAW_XY = FT810_REG_TOUCH_RAW_XY,
591 	REG_TOUCH_RZ   = FT810_REG_TOUCH_RZ,
592 	REG_TOUCH_SCREEN_XY = FT810_REG_TOUCH_SCREEN_XY,
593 	REG_TOUCH_TAG_XY = FT810_REG_TOUCH_TAG_XY,
594 	REG_TOUCH_TAG  = FT810_REG_TOUCH_TAG,
595 	REG_TOUCH_TRANSFORM_A = FT810_REG_TOUCH_TRANSFORM_A,
596 	REG_TOUCH_TRANSFORM_B = FT810_REG_TOUCH_TRANSFORM_B,
597 	REG_TOUCH_TRANSFORM_C = FT810_REG_TOUCH_TRANSFORM_C,
598 	REG_TOUCH_TRANSFORM_D = FT810_REG_TOUCH_TRANSFORM_D,
599 	REG_TOUCH_TRANSFORM_E = FT810_REG_TOUCH_TRANSFORM_E,
600 	REG_TOUCH_TRANSFORM_F = FT810_REG_TOUCH_TRANSFORM_F,
601 	REG_TOUCH_CONFIG = FT810_REG_TOUCH_CONFIG,
602 
603 	REG_SPI_WIDTH  = FT810_REG_SPI_WIDTH,
604 
605 	REG_TOUCH_DIRECT_XY = FT810_REG_TOUCH_DIRECT_XY,
606 	REG_TOUCH_DIRECT_Z1Z2 = FT810_REG_TOUCH_DIRECT_Z1Z2,
607 
608 	REG_CMDB_SPACE = FT810_REG_CMDB_SPACE,
609 	REG_CMDB_WRITE = FT810_REG_CMDB_WRITE,
610 
611 	REG_TRACKER    = FT810_REG_TRACKER,
612 	REG_TRACKER1   = FT810_REG_TRACKER1,
613 	REG_TRACKER2   = FT810_REG_TRACKER2,
614 	REG_TRACKER3   = FT810_REG_TRACKER3,
615 	REG_TRACKER4   = FT810_REG_TRACKER4,
616 	REG_MEDIAFIFO_READ = FT810_REG_MEDIAFIFO_READ,
617 	REG_MEDIAFIFO_WRITE = FT810_REG_MEDIAFIFO_WRITE,
618 };
619 #endif
620 
621 /**
622  * @}
623  */
624 
625 #ifdef __cplusplus
626 }
627 #endif
628 
629 #endif /* ZEPHYR_DRIVERS_MISC_FT8XX_FT8XX_REFERENCE_API_H_ */
630