linux/drivers/auxdisplay/charlcd.h
<<
>>
Prefs
   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
  19enum charlcd_onoff {
  20        CHARLCD_OFF = 0,
  21        CHARLCD_ON,
  22};
  23
  24enum charlcd_shift_dir {
  25        CHARLCD_SHIFT_LEFT,
  26        CHARLCD_SHIFT_RIGHT,
  27};
  28
  29enum charlcd_fontsize {
  30        CHARLCD_FONTSIZE_SMALL,
  31        CHARLCD_FONTSIZE_LARGE,
  32};
  33
  34enum charlcd_lines {
  35        CHARLCD_LINES_1,
  36        CHARLCD_LINES_2,
  37};
  38
  39struct 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 */
  78struct 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
  95void charlcd_backlight(struct charlcd *lcd, enum charlcd_onoff on);
  96struct charlcd *charlcd_alloc(void);
  97void charlcd_free(struct charlcd *lcd);
  98
  99int charlcd_register(struct charlcd *lcd);
 100int charlcd_unregister(struct charlcd *lcd);
 101
 102void charlcd_poke(struct charlcd *lcd);
 103
 104#endif /* CHARLCD_H */
 105