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