Commit | Line | Data |
---|---|---|
2874c5fd | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
39f8ea46 GU |
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 | |
39f8ea46 GU |
7 | */ |
8 | ||
390235c3 MY |
9 | #ifndef _CHARLCD_H |
10 | #define _CHARLCD_H | |
11 | ||
01ec46df LP |
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 | ||
66ce7d5c LP |
19 | enum charlcd_onoff { |
20 | CHARLCD_OFF = 0, | |
21 | CHARLCD_ON, | |
22 | }; | |
23 | ||
d2f2187e LP |
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 | ||
39f8ea46 GU |
39 | struct charlcd { |
40 | const struct charlcd_ops *ops; | |
41 | const unsigned char *char_conv; /* Optional */ | |
42 | ||
43 | int height; | |
44 | int width; | |
39f8ea46 | 45 | |
11588b59 LP |
46 | /* Contains the LCD X and Y offset */ |
47 | struct { | |
48 | unsigned long x; | |
49 | unsigned long y; | |
50 | } addr; | |
51 | ||
2545c1c9 | 52 | void *drvdata; |
39f8ea46 GU |
53 | }; |
54 | ||
b26deabb LP |
55 | /** |
56 | * struct charlcd_ops - Functions used by charlcd. Drivers have to implement | |
57 | * these. | |
58 | * @clear_fast: Clear the whole display and set cursor to position 0, 0. | |
59 | * Optional. | |
60 | * @backlight: Turn backlight on or off. Optional. | |
61 | * @print: Print one character to the display at current cursor position. | |
b26deabb LP |
62 | * The buffered cursor position is advanced by charlcd. The cursor should not |
63 | * wrap to the next line at the end of a line. | |
d3a2fb81 LP |
64 | * @gotoxy: Set cursor to x, y. The x and y values to set the cursor to are |
65 | * previously set in addr.x and addr.y by charlcd. | |
88645a86 LP |
66 | * @home: Set cursor to 0, 0. The values in addr.x and addr.y are set to 0, 0 by |
67 | * charlcd prior to calling this function. | |
45421ffe LP |
68 | * @clear_display: Again clear the whole display, set the cursor to 0, 0. The |
69 | * values in addr.x and addr.y are set to 0, 0 by charlcd prior to calling this | |
70 | * function. | |
01ec46df | 71 | * @init_display: Initialize the display. |
d2f2187e LP |
72 | * @shift_cursor: Shift cursor left or right one position. |
73 | * @shift_display: Shift whole display content left or right. | |
74 | * @display: Turn display on or off. | |
75 | * @cursor: Turn cursor on or off. | |
76 | * @blink: Turn cursor blink on or off. | |
77 | * @lines: One or two lines. | |
b26deabb | 78 | */ |
39f8ea46 | 79 | struct charlcd_ops { |
39f8ea46 | 80 | void (*clear_fast)(struct charlcd *lcd); |
66ce7d5c | 81 | void (*backlight)(struct charlcd *lcd, enum charlcd_onoff on); |
b26deabb | 82 | int (*print)(struct charlcd *lcd, int c); |
d3a2fb81 | 83 | int (*gotoxy)(struct charlcd *lcd); |
88645a86 | 84 | int (*home)(struct charlcd *lcd); |
45421ffe | 85 | int (*clear_display)(struct charlcd *lcd); |
01ec46df | 86 | int (*init_display)(struct charlcd *lcd); |
d2f2187e LP |
87 | int (*shift_cursor)(struct charlcd *lcd, enum charlcd_shift_dir dir); |
88 | int (*shift_display)(struct charlcd *lcd, enum charlcd_shift_dir dir); | |
89 | int (*display)(struct charlcd *lcd, enum charlcd_onoff on); | |
90 | int (*cursor)(struct charlcd *lcd, enum charlcd_onoff on); | |
91 | int (*blink)(struct charlcd *lcd, enum charlcd_onoff on); | |
92 | int (*fontsize)(struct charlcd *lcd, enum charlcd_fontsize size); | |
93 | int (*lines)(struct charlcd *lcd, enum charlcd_lines lines); | |
39f8ea46 GU |
94 | }; |
95 | ||
2bf82b5a | 96 | void charlcd_backlight(struct charlcd *lcd, enum charlcd_onoff on); |
2545c1c9 | 97 | struct charlcd *charlcd_alloc(void); |
8e44fc85 | 98 | void charlcd_free(struct charlcd *lcd); |
39f8ea46 GU |
99 | |
100 | int charlcd_register(struct charlcd *lcd); | |
101 | int charlcd_unregister(struct charlcd *lcd); | |
102 | ||
103 | void charlcd_poke(struct charlcd *lcd); | |
390235c3 MY |
104 | |
105 | #endif /* CHARLCD_H */ |