1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
2 | /* |
3 | * Character LCD driver for Linux |
4 | * |
5 | * Copyright (C) 2000-2008, Willy Tarreau <w@1wt.eu> |
6 | * Copyright (C) 2016-2017 Glider bvba |
7 | */ |
8 | |
9 | #ifndef _CHARLCD_H |
10 | #define _CHARLCD_H |
11 | |
12 | #define LCD_FLAG_B 0x0004 /* Blink on */ |
13 | #define LCD_FLAG_C 0x0008 /* Cursor on */ |
14 | #define LCD_FLAG_D 0x0010 /* Display on */ |
15 | #define LCD_FLAG_F 0x0020 /* Large font mode */ |
16 | #define LCD_FLAG_N 0x0040 /* 2-rows mode */ |
17 | #define LCD_FLAG_L 0x0080 /* Backlight enabled */ |
18 | |
19 | enum charlcd_onoff { |
20 | CHARLCD_OFF = 0, |
21 | CHARLCD_ON, |
22 | }; |
23 | |
24 | enum charlcd_shift_dir { |
25 | CHARLCD_SHIFT_LEFT, |
26 | CHARLCD_SHIFT_RIGHT, |
27 | }; |
28 | |
29 | enum charlcd_fontsize { |
30 | CHARLCD_FONTSIZE_SMALL, |
31 | CHARLCD_FONTSIZE_LARGE, |
32 | }; |
33 | |
34 | enum charlcd_lines { |
35 | CHARLCD_LINES_1, |
36 | CHARLCD_LINES_2, |
37 | }; |
38 | |
39 | struct charlcd { |
40 | const struct charlcd_ops *ops; |
41 | const unsigned char *char_conv; /* Optional */ |
42 | |
43 | int height; |
44 | int width; |
45 | |
46 | /* Contains the LCD X and Y offset */ |
47 | struct { |
48 | unsigned long x; |
49 | unsigned long y; |
50 | } addr; |
51 | |
52 | void *drvdata; |
53 | }; |
54 | |
55 | /** |
56 | * struct charlcd_ops - Functions used by charlcd. Drivers have to implement |
57 | * these. |
58 | * @backlight: Turn backlight on or off. Optional. |
59 | * @print: Print one character to the display at current cursor position. |
60 | * The buffered cursor position is advanced by charlcd. The cursor should not |
61 | * wrap to the next line at the end of a line. |
62 | * @gotoxy: Set cursor to x, y. The x and y values to set the cursor to are |
63 | * previously set in addr.x and addr.y by charlcd. |
64 | * @home: Set cursor to 0, 0. The values in addr.x and addr.y are set to 0, 0 by |
65 | * charlcd prior to calling this function. |
66 | * @clear_display: Clear the whole display and set the cursor to 0, 0. The |
67 | * values in addr.x and addr.y are set to 0, 0 by charlcd after to calling this |
68 | * function. |
69 | * @init_display: Initialize the display. |
70 | * @shift_cursor: Shift cursor left or right one position. |
71 | * @shift_display: Shift whole display content left or right. |
72 | * @display: Turn display on or off. |
73 | * @cursor: Turn cursor on or off. |
74 | * @blink: Turn cursor blink on or off. |
75 | * @lines: One or two lines. |
76 | * @redefine_char: Redefine the actual pixel matrix of character. |
77 | */ |
78 | struct charlcd_ops { |
79 | void (*backlight)(struct charlcd *lcd, enum charlcd_onoff on); |
80 | int (*print)(struct charlcd *lcd, int c); |
81 | int (*gotoxy)(struct charlcd *lcd, unsigned int x, unsigned int y); |
82 | int (*home)(struct charlcd *lcd); |
83 | int (*clear_display)(struct charlcd *lcd); |
84 | int (*init_display)(struct charlcd *lcd); |
85 | int (*shift_cursor)(struct charlcd *lcd, enum charlcd_shift_dir dir); |
86 | int (*shift_display)(struct charlcd *lcd, enum charlcd_shift_dir dir); |
87 | int (*display)(struct charlcd *lcd, enum charlcd_onoff on); |
88 | int (*cursor)(struct charlcd *lcd, enum charlcd_onoff on); |
89 | int (*blink)(struct charlcd *lcd, enum charlcd_onoff on); |
90 | int (*fontsize)(struct charlcd *lcd, enum charlcd_fontsize size); |
91 | int (*lines)(struct charlcd *lcd, enum charlcd_lines lines); |
92 | int (*redefine_char)(struct charlcd *lcd, char *esc); |
93 | }; |
94 | |
95 | void charlcd_backlight(struct charlcd *lcd, enum charlcd_onoff on); |
96 | struct charlcd *charlcd_alloc(void); |
97 | void charlcd_free(struct charlcd *lcd); |
98 | |
99 | int charlcd_register(struct charlcd *lcd); |
100 | int charlcd_unregister(struct charlcd *lcd); |
101 | |
102 | void charlcd_poke(struct charlcd *lcd); |
103 | |
104 | #endif /* CHARLCD_H */ |
105 | |