lin
2025-07-30 fcd736bf35fd93b563e9bbf594f2aa7b62028cc9
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/*
 * Definitions for AUO-K190X framebuffer drivers
 *
 * Copyright (C) 2012 Heiko Stuebner <heiko@sntech.de>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */
 
#ifndef _LINUX_VIDEO_AUO_K190XFB_H_
#define _LINUX_VIDEO_AUO_K190XFB_H_
 
/* Controller standby command needs a param */
#define AUOK190X_QUIRK_STANDBYPARAM    (1 << 0)
 
/* Controller standby is completely broken */
#define AUOK190X_QUIRK_STANDBYBROKEN    (1 << 1)
 
/*
 * Resolutions for the displays
 */
#define AUOK190X_RESOLUTION_800_600        0
#define AUOK190X_RESOLUTION_1024_768        1
#define AUOK190X_RESOLUTION_600_800        4
#define AUOK190X_RESOLUTION_768_1024        5
 
/*
 * struct used by auok190x. board specific stuff comes from *board
 */
struct auok190xfb_par {
   struct fb_info *info;
   struct auok190x_board *board;
 
   struct regulator *regulator;
 
   struct mutex io_lock;
   struct delayed_work work;
   wait_queue_head_t waitq;
   int resolution;
   int rotation;
   int consecutive_threshold;
   int update_cnt;
 
   /* panel and controller informations */
   int epd_type;
   int panel_size_int;
   int panel_size_float;
   int panel_model;
   int tcon_version;
   int lut_version;
 
   /* individual controller callbacks */
   void (*update_partial)(struct auok190xfb_par *par, u16 y1, u16 y2);
   void (*update_all)(struct auok190xfb_par *par);
   bool (*need_refresh)(struct auok190xfb_par *par);
   void (*init)(struct auok190xfb_par *par);
   void (*recover)(struct auok190xfb_par *par);
 
   int update_mode; /* mode to use for updates */
   int last_mode; /* update mode last used */
   int flash;
 
   /* power management */
   int autosuspend_delay;
   bool standby;
   bool manual_standby;
};
 
/**
 * Board specific platform-data
 * @init:        initialize the controller interface
 * @cleanup:        cleanup the controller interface
 * @wait_for_rdy:    wait until the controller is not busy anymore
 * @set_ctl:        change an interface control
 * @set_hdb:        write a value to the data register
 * @get_hdb:        read a value from the data register
 * @setup_irq:        method to setup the irq handling on the busy gpio
 * @gpio_nsleep:    sleep gpio
 * @gpio_nrst:        reset gpio
 * @gpio_nbusy:        busy gpio
 * @resolution:        one of the AUOK190X_RESOLUTION constants
 * @rotation:        rotation of the framebuffer
 * @quirks:        controller quirks to honor
 * @fps:        frames per second for defio
 */
struct auok190x_board {
   int (*init)(struct auok190xfb_par *);
   void (*cleanup)(struct auok190xfb_par *);
   int (*wait_for_rdy)(struct auok190xfb_par *);
 
   void (*set_ctl)(struct auok190xfb_par *, unsigned char, u8);
   void (*set_hdb)(struct auok190xfb_par *, u16);
   u16 (*get_hdb)(struct auok190xfb_par *);
 
   int (*setup_irq)(struct fb_info *);
 
   int gpio_nsleep;
   int gpio_nrst;
   int gpio_nbusy;
 
   int resolution;
   int quirks;
   int fps;
};
 
#endif