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 struct charlcd {
13 	const struct charlcd_ops *ops;
14 	const unsigned char *char_conv;	/* Optional */
15 
16 	int ifwidth;			/* 4-bit or 8-bit (default) */
17 	int height;
18 	int width;
19 	int bwidth;			/* Default set by charlcd_alloc() */
20 	int hwidth;			/* Default set by charlcd_alloc() */
21 
22 	void *drvdata;			/* Set by charlcd_alloc() */
23 };
24 
25 struct charlcd_ops {
26 	/* Required */
27 	void (*write_cmd)(struct charlcd *lcd, int cmd);
28 	void (*write_data)(struct charlcd *lcd, int data);
29 
30 	/* Optional */
31 	void (*write_cmd_raw4)(struct charlcd *lcd, int cmd);	/* 4-bit only */
32 	void (*clear_fast)(struct charlcd *lcd);
33 	void (*backlight)(struct charlcd *lcd, int on);
34 };
35 
36 struct charlcd *charlcd_alloc(unsigned int drvdata_size);
37 void charlcd_free(struct charlcd *lcd);
38 
39 int charlcd_register(struct charlcd *lcd);
40 int charlcd_unregister(struct charlcd *lcd);
41 
42 void charlcd_poke(struct charlcd *lcd);
43 
44 #endif /* CHARLCD_H */
45