xref: /openbmc/linux/drivers/auxdisplay/charlcd.h (revision d3a2fb81)
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 enum charlcd_onoff {
13 	CHARLCD_OFF = 0,
14 	CHARLCD_ON,
15 };
16 
17 struct charlcd {
18 	const struct charlcd_ops *ops;
19 	const unsigned char *char_conv;	/* Optional */
20 
21 	int height;
22 	int width;
23 
24 	/* Contains the LCD X and Y offset */
25 	struct {
26 		unsigned long x;
27 		unsigned long y;
28 	} addr;
29 
30 	void *drvdata;
31 };
32 
33 /**
34  * struct charlcd_ops - Functions used by charlcd. Drivers have to implement
35  * these.
36  * @clear_fast: Clear the whole display and set cursor to position 0, 0.
37  * Optional.
38  * @backlight: Turn backlight on or off. Optional.
39  * @print: Print one character to the display at current cursor position.
40  * The buffered cursor position is advanced by charlcd. The cursor should not
41  * wrap to the next line at the end of a line.
42  * @gotoxy: Set cursor to x, y. The x and y values to set the cursor to are
43  * previously set in addr.x and addr.y by charlcd.
44  */
45 struct charlcd_ops {
46 	void (*clear_fast)(struct charlcd *lcd);
47 	void (*backlight)(struct charlcd *lcd, enum charlcd_onoff on);
48 	int (*print)(struct charlcd *lcd, int c);
49 	int (*gotoxy)(struct charlcd *lcd);
50 };
51 
52 struct charlcd *charlcd_alloc(void);
53 void charlcd_free(struct charlcd *lcd);
54 
55 int charlcd_register(struct charlcd *lcd);
56 int charlcd_unregister(struct charlcd *lcd);
57 
58 void charlcd_poke(struct charlcd *lcd);
59 
60 #endif /* CHARLCD_H */
61