blob: 4fee28d22b58c005c1e550c6b444a643b6ac6726 [file] [log] [blame]
Sudip Mukherjee81dee672015-03-03 16:21:06 +05301#ifndef LYNX_HW750_H__
2#define LYNX_HW750_H__
3
4
5#define DEFAULT_SM750_CHIP_CLOCK 290
6#define DEFAULT_SM750LE_CHIP_CLOCK 333
7#ifndef SM750LE_REVISION_ID
8#define SM750LE_REVISION_ID (unsigned char)0xfe
9#endif
10
11//#define DEFAULT_MEM_CLOCK (DEFAULT_SM750_CHIP_CLOCK/1)
12//#define DEFAULT_MASTER_CLOCK (DEFAULT_SM750_CHIP_CLOCK/3)
13
14
15enum sm750_pnltype{
16
17 sm750_24TFT = 0,/* 24bit tft */
18
19 sm750_dualTFT = 2,/* dual 18 bit tft */
20
21 sm750_doubleTFT = 1,/* 36 bit double pixel tft */
22};
23
24/* vga channel is not concerned */
25enum sm750_dataflow{
26 sm750_simul_pri,/* primary => all head */
27
28 sm750_simul_sec,/* secondary => all head */
29
30 sm750_dual_normal,/* primary => panel head and secondary => crt */
31
32 sm750_dual_swap,/* primary => crt head and secondary => panel */
33};
34
35
36enum sm750_channel{
37 sm750_primary = 0,
38 /* enum value equal to the register filed data */
39 sm750_secondary = 1,
40};
41
42enum sm750_path{
43 sm750_panel = 1,
44 sm750_crt = 2,
45 sm750_pnc = 3,/* panel and crt */
46};
47
48struct init_status{
49 ushort powerMode;
50 /* below three clocks are in unit of MHZ*/
51 ushort chip_clk;
52 ushort mem_clk;
53 ushort master_clk;
54 ushort setAllEngOff;
55 ushort resetMemory;
56};
57
58struct sm750_state{
59 struct init_status initParm;
60 enum sm750_pnltype pnltype;
61 enum sm750_dataflow dataflow;
62 int nocrt;
63 int xLCD;
64 int yLCD;
65};
66
67/* sm750_share stands for a presentation of two frame buffer
Carlos E. Garcia69e98df2015-04-24 09:40:42 -040068 that use one sm750 adaptor, it is similar to the super class of lynx_share
Sudip Mukherjee81dee672015-03-03 16:21:06 +053069 in C++
70*/
71
72struct sm750_share{
73 /* it's better to put lynx_share struct to the first place of sm750_share */
74 struct lynx_share share;
75 struct sm750_state state;
76 int hwCursor;
77 /* 0: no hardware cursor
78 1: primary crtc hw cursor enabled,
79 2: secondary crtc hw cursor enabled
80 3: both ctrc hw cursor enabled
81 */
82};
83
Isaac Assegaie9f490e2015-06-02 03:14:20 -070084int hw_sm750_map(struct lynx_share* share, struct pci_dev* pdev);
85int hw_sm750_inithw(struct lynx_share*, struct pci_dev *);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053086void hw_sm750_initAccel(struct lynx_share *);
87int hw_sm750_deWait(void);
88int hw_sm750le_deWait(void);
89
90resource_size_t hw_sm750_getVMSize(struct lynx_share *);
Isaac Assegaie9f490e2015-06-02 03:14:20 -070091int hw_sm750_output_checkMode(struct lynxfb_output*, struct fb_var_screeninfo*);
92int hw_sm750_output_setMode(struct lynxfb_output*, struct fb_var_screeninfo*, struct fb_fix_screeninfo*);
93int hw_sm750_crtc_checkMode(struct lynxfb_crtc*, struct fb_var_screeninfo*);
94int hw_sm750_crtc_setMode(struct lynxfb_crtc*, struct fb_var_screeninfo*, struct fb_fix_screeninfo*);
95int hw_sm750_setColReg(struct lynxfb_crtc*, ushort, ushort, ushort, ushort);
96int hw_sm750_setBLANK(struct lynxfb_output*, int);
97int hw_sm750le_setBLANK(struct lynxfb_output*, int);
Sudip Mukherjee81dee672015-03-03 16:21:06 +053098void hw_sm750_crtc_clear(struct lynxfb_crtc*);
99void hw_sm750_output_clear(struct lynxfb_output*);
100int hw_sm750_pan_display(struct lynxfb_crtc *crtc,
101 const struct fb_var_screeninfo *var,
102 const struct fb_info *info);
103
104#endif