Thomas Gleixner | 2874c5f | 2019-05-27 08:55:01 +0200 | [diff] [blame] | 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 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 |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 7 | */ |
| 8 | |
Masahiro Yamada | 390235c | 2019-08-06 16:14:45 +0900 | [diff] [blame] | 9 | #ifndef _CHARLCD_H |
| 10 | #define _CHARLCD_H |
| 11 | |
Lars Poeschel | 01ec46d | 2020-11-03 10:58:17 +0100 | [diff] [blame] | 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 | |
Lars Poeschel | 66ce7d5 | 2020-11-03 10:58:04 +0100 | [diff] [blame] | 19 | enum charlcd_onoff { |
| 20 | CHARLCD_OFF = 0, |
| 21 | CHARLCD_ON, |
| 22 | }; |
| 23 | |
Lars Poeschel | d2f2187 | 2020-11-03 10:58:18 +0100 | [diff] [blame] | 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 | |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 39 | struct charlcd { |
| 40 | const struct charlcd_ops *ops; |
| 41 | const unsigned char *char_conv; /* Optional */ |
| 42 | |
| 43 | int height; |
| 44 | int width; |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 45 | |
Lars Poeschel | 11588b5 | 2020-11-03 10:58:10 +0100 | [diff] [blame] | 46 | /* Contains the LCD X and Y offset */ |
| 47 | struct { |
| 48 | unsigned long x; |
| 49 | unsigned long y; |
| 50 | } addr; |
| 51 | |
Lars Poeschel | 2545c1c | 2020-11-03 10:58:06 +0100 | [diff] [blame] | 52 | void *drvdata; |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 53 | }; |
| 54 | |
Lars Poeschel | b26deab | 2020-11-03 10:58:11 +0100 | [diff] [blame] | 55 | /** |
| 56 | * struct charlcd_ops - Functions used by charlcd. Drivers have to implement |
| 57 | * these. |
Lars Poeschel | b26deab | 2020-11-03 10:58:11 +0100 | [diff] [blame] | 58 | * @backlight: Turn backlight on or off. Optional. |
| 59 | * @print: Print one character to the display at current cursor position. |
Lars Poeschel | b26deab | 2020-11-03 10:58:11 +0100 | [diff] [blame] | 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. |
Lars Poeschel | d3a2fb8 | 2020-11-03 10:58:12 +0100 | [diff] [blame] | 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. |
Lars Poeschel | 88645a8 | 2020-11-03 10:58:13 +0100 | [diff] [blame] | 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. |
Lars Poeschel | 377cf2c | 2020-11-03 10:58:23 +0100 | [diff] [blame^] | 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 |
Lars Poeschel | 45421ff | 2020-11-03 10:58:14 +0100 | [diff] [blame] | 68 | * function. |
Lars Poeschel | 01ec46d | 2020-11-03 10:58:17 +0100 | [diff] [blame] | 69 | * @init_display: Initialize the display. |
Lars Poeschel | d2f2187 | 2020-11-03 10:58:18 +0100 | [diff] [blame] | 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. |
Lars Poeschel | 339acb0 | 2020-11-03 10:58:20 +0100 | [diff] [blame] | 76 | * @redefine_char: Redefine the actual pixel matrix of character. |
Lars Poeschel | b26deab | 2020-11-03 10:58:11 +0100 | [diff] [blame] | 77 | */ |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 78 | struct charlcd_ops { |
Lars Poeschel | 66ce7d5 | 2020-11-03 10:58:04 +0100 | [diff] [blame] | 79 | void (*backlight)(struct charlcd *lcd, enum charlcd_onoff on); |
Lars Poeschel | b26deab | 2020-11-03 10:58:11 +0100 | [diff] [blame] | 80 | int (*print)(struct charlcd *lcd, int c); |
Lars Poeschel | d3a2fb8 | 2020-11-03 10:58:12 +0100 | [diff] [blame] | 81 | int (*gotoxy)(struct charlcd *lcd); |
Lars Poeschel | 88645a8 | 2020-11-03 10:58:13 +0100 | [diff] [blame] | 82 | int (*home)(struct charlcd *lcd); |
Lars Poeschel | 45421ff | 2020-11-03 10:58:14 +0100 | [diff] [blame] | 83 | int (*clear_display)(struct charlcd *lcd); |
Lars Poeschel | 01ec46d | 2020-11-03 10:58:17 +0100 | [diff] [blame] | 84 | int (*init_display)(struct charlcd *lcd); |
Lars Poeschel | d2f2187 | 2020-11-03 10:58:18 +0100 | [diff] [blame] | 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); |
Lars Poeschel | 339acb0 | 2020-11-03 10:58:20 +0100 | [diff] [blame] | 92 | int (*redefine_char)(struct charlcd *lcd, char *esc); |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 93 | }; |
| 94 | |
Lars Poeschel | 2bf82b5 | 2020-11-03 10:58:15 +0100 | [diff] [blame] | 95 | void charlcd_backlight(struct charlcd *lcd, enum charlcd_onoff on); |
Lars Poeschel | 2545c1c | 2020-11-03 10:58:06 +0100 | [diff] [blame] | 96 | struct charlcd *charlcd_alloc(void); |
Andy Shevchenko | 8e44fc8 | 2019-03-12 16:44:30 +0200 | [diff] [blame] | 97 | void charlcd_free(struct charlcd *lcd); |
Geert Uytterhoeven | 39f8ea4 | 2017-03-10 15:15:17 +0100 | [diff] [blame] | 98 | |
| 99 | int charlcd_register(struct charlcd *lcd); |
| 100 | int charlcd_unregister(struct charlcd *lcd); |
| 101 | |
| 102 | void charlcd_poke(struct charlcd *lcd); |
Masahiro Yamada | 390235c | 2019-08-06 16:14:45 +0900 | [diff] [blame] | 103 | |
| 104 | #endif /* CHARLCD_H */ |