]>
Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
53c43c5c GKH |
2 | #ifndef OLPC_DCON_H_ |
3 | #define OLPC_DCON_H_ | |
4 | ||
5 | #include <linux/notifier.h> | |
6 | #include <linux/workqueue.h> | |
7 | ||
8 | /* DCON registers */ | |
9 | ||
10 | #define DCON_REG_ID 0 | |
11 | #define DCON_REG_MODE 1 | |
12 | ||
13 | #define MODE_PASSTHRU (1<<0) | |
14 | #define MODE_SLEEP (1<<1) | |
15 | #define MODE_SLEEP_AUTO (1<<2) | |
16 | #define MODE_BL_ENABLE (1<<3) | |
17 | #define MODE_BLANK (1<<4) | |
18 | #define MODE_CSWIZZLE (1<<5) | |
19 | #define MODE_COL_AA (1<<6) | |
20 | #define MODE_MONO_LUMA (1<<7) | |
21 | #define MODE_SCAN_INT (1<<8) | |
22 | #define MODE_CLOCKDIV (1<<9) | |
23 | #define MODE_DEBUG (1<<14) | |
24 | #define MODE_SELFTEST (1<<15) | |
25 | ||
26 | #define DCON_REG_HRES 0x2 | |
27 | #define DCON_REG_HTOTAL 0x3 | |
28 | #define DCON_REG_HSYNC_WIDTH 0x4 | |
29 | #define DCON_REG_VRES 0x5 | |
30 | #define DCON_REG_VTOTAL 0x6 | |
31 | #define DCON_REG_VSYNC_WIDTH 0x7 | |
32 | #define DCON_REG_TIMEOUT 0x8 | |
33 | #define DCON_REG_SCAN_INT 0x9 | |
34 | #define DCON_REG_BRIGHT 0xa | |
35 | #define DCON_REG_MEM_OPT_A 0x41 | |
36 | #define DCON_REG_MEM_OPT_B 0x42 | |
37 | ||
38 | /* Load Delay Locked Loop (DLL) settings for clock delay */ | |
39 | #define MEM_DLL_CLOCK_DELAY (1<<0) | |
40 | /* Memory controller power down function */ | |
41 | #define MEM_POWER_DOWN (1<<8) | |
42 | /* Memory controller software reset */ | |
43 | #define MEM_SOFT_RESET (1<<0) | |
44 | ||
45 | /* Status values */ | |
46 | ||
47 | #define DCONSTAT_SCANINT 0 | |
48 | #define DCONSTAT_SCANINT_DCON 1 | |
49 | #define DCONSTAT_DISPLAYLOAD 2 | |
50 | #define DCONSTAT_MISSED 3 | |
51 | ||
52 | /* Source values */ | |
53 | ||
54 | #define DCON_SOURCE_DCON 0 | |
55 | #define DCON_SOURCE_CPU 1 | |
56 | ||
57 | /* Interrupt */ | |
58 | #define DCON_IRQ 6 | |
59 | ||
60 | struct dcon_priv { | |
61 | struct i2c_client *client; | |
62 | struct fb_info *fbinfo; | |
63 | struct backlight_device *bl_dev; | |
64 | ||
65 | wait_queue_head_t waitq; | |
66 | struct work_struct switch_source; | |
67 | struct notifier_block reboot_nb; | |
68 | ||
69 | /* Shadow register for the DCON_REG_MODE register */ | |
70 | u8 disp_mode; | |
71 | ||
72 | /* The current backlight value - this saves us some smbus traffic */ | |
73 | u8 bl_val; | |
74 | ||
75 | /* Current source, initialized at probe time */ | |
76 | int curr_src; | |
77 | ||
78 | /* Desired source */ | |
79 | int pending_src; | |
80 | ||
81 | /* Variables used during switches */ | |
82 | bool switched; | |
83 | ktime_t irq_time; | |
84 | ktime_t load_time; | |
85 | ||
86 | /* Current output type; true == mono, false == color */ | |
87 | bool mono; | |
88 | bool asleep; | |
89 | /* This get set while controlling fb blank state from the driver */ | |
90 | bool ignore_fb_events; | |
91 | }; | |
92 | ||
93 | struct dcon_platform_data { | |
94 | int (*init)(struct dcon_priv *); | |
95 | void (*bus_stabilize_wiggle)(void); | |
96 | void (*set_dconload)(int); | |
97 | int (*read_status)(u8 *); | |
98 | }; | |
99 | ||
100 | #include <linux/interrupt.h> | |
101 | ||
102 | irqreturn_t dcon_interrupt(int irq, void *id); | |
103 | ||
104 | #ifdef CONFIG_FB_OLPC_DCON_1 | |
105 | extern struct dcon_platform_data dcon_pdata_xo_1; | |
106 | #endif | |
107 | ||
108 | #ifdef CONFIG_FB_OLPC_DCON_1_5 | |
109 | extern struct dcon_platform_data dcon_pdata_xo_1_5; | |
110 | #endif | |
111 | ||
112 | #endif |