1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* include/linux/sm501.h |
3 | * |
4 | * Copyright (c) 2006 Simtec Electronics |
5 | * Ben Dooks <ben@simtec.co.uk> |
6 | * Vincent Sanders <vince@simtec.co.uk> |
7 | */ |
8 | |
9 | extern int sm501_unit_power(struct device *dev, |
10 | unsigned int unit, unsigned int to); |
11 | |
12 | extern unsigned long sm501_set_clock(struct device *dev, |
13 | int clksrc, unsigned long freq); |
14 | |
15 | extern unsigned long sm501_find_clock(struct device *dev, |
16 | int clksrc, unsigned long req_freq); |
17 | |
18 | /* sm501_misc_control |
19 | * |
20 | * Modify the SM501's MISC_CONTROL register |
21 | */ |
22 | |
23 | extern int sm501_misc_control(struct device *dev, |
24 | unsigned long set, unsigned long clear); |
25 | |
26 | /* sm501_modify_reg |
27 | * |
28 | * Modify a register in the SM501 which may be shared with other |
29 | * drivers. |
30 | */ |
31 | |
32 | extern unsigned long sm501_modify_reg(struct device *dev, |
33 | unsigned long reg, |
34 | unsigned long set, |
35 | unsigned long clear); |
36 | |
37 | |
38 | /* Platform data definitions */ |
39 | |
40 | #define SM501FB_FLAG_USE_INIT_MODE (1<<0) |
41 | #define SM501FB_FLAG_DISABLE_AT_EXIT (1<<1) |
42 | #define SM501FB_FLAG_USE_HWCURSOR (1<<2) |
43 | #define SM501FB_FLAG_USE_HWACCEL (1<<3) |
44 | #define SM501FB_FLAG_PANEL_NO_FPEN (1<<4) |
45 | #define SM501FB_FLAG_PANEL_NO_VBIASEN (1<<5) |
46 | #define SM501FB_FLAG_PANEL_INV_FPEN (1<<6) |
47 | #define SM501FB_FLAG_PANEL_INV_VBIASEN (1<<7) |
48 | |
49 | struct sm501_platdata_fbsub { |
50 | struct fb_videomode *def_mode; |
51 | unsigned int def_bpp; |
52 | unsigned long max_mem; |
53 | unsigned int flags; |
54 | }; |
55 | |
56 | enum sm501_fb_routing { |
57 | SM501_FB_OWN = 0, /* CRT=>CRT, Panel=>Panel */ |
58 | SM501_FB_CRT_PANEL = 1, /* Panel=>CRT, Panel=>Panel */ |
59 | }; |
60 | |
61 | /* sm501_platdata_fb flag field bit definitions */ |
62 | |
63 | #define SM501_FBPD_SWAP_FB_ENDIAN (1<<0) /* need to endian swap */ |
64 | |
65 | /* sm501_platdata_fb |
66 | * |
67 | * configuration data for the framebuffer driver |
68 | */ |
69 | |
70 | struct sm501_platdata_fb { |
71 | enum sm501_fb_routing fb_route; |
72 | unsigned int flags; |
73 | struct sm501_platdata_fbsub *fb_crt; |
74 | struct sm501_platdata_fbsub *fb_pnl; |
75 | }; |
76 | |
77 | /* gpio i2c |
78 | * |
79 | * Note, we have to pass in the bus number, as the number used will be |
80 | * passed to the i2c-gpio driver's platform_device.id, subsequently used |
81 | * to register the i2c bus. |
82 | */ |
83 | |
84 | struct sm501_platdata_gpio_i2c { |
85 | unsigned int bus_num; |
86 | unsigned int pin_sda; |
87 | unsigned int pin_scl; |
88 | int udelay; |
89 | int timeout; |
90 | }; |
91 | |
92 | /* sm501_initdata |
93 | * |
94 | * use for initialising values that may not have been setup |
95 | * before the driver is loaded. |
96 | */ |
97 | |
98 | struct sm501_reg_init { |
99 | unsigned long set; |
100 | unsigned long mask; |
101 | }; |
102 | |
103 | #define SM501_USE_USB_HOST (1<<0) |
104 | #define SM501_USE_USB_SLAVE (1<<1) |
105 | #define SM501_USE_SSP0 (1<<2) |
106 | #define SM501_USE_SSP1 (1<<3) |
107 | #define SM501_USE_UART0 (1<<4) |
108 | #define SM501_USE_UART1 (1<<5) |
109 | #define SM501_USE_FBACCEL (1<<6) |
110 | #define SM501_USE_AC97 (1<<7) |
111 | #define SM501_USE_I2S (1<<8) |
112 | #define SM501_USE_GPIO (1<<9) |
113 | |
114 | #define SM501_USE_ALL (0xffffffff) |
115 | |
116 | struct sm501_initdata { |
117 | struct sm501_reg_init gpio_low; |
118 | struct sm501_reg_init gpio_high; |
119 | struct sm501_reg_init misc_timing; |
120 | struct sm501_reg_init misc_control; |
121 | |
122 | unsigned long devices; |
123 | unsigned long mclk; /* non-zero to modify */ |
124 | unsigned long m1xclk; /* non-zero to modify */ |
125 | }; |
126 | |
127 | /* sm501_init_gpio |
128 | * |
129 | * default gpio settings |
130 | */ |
131 | |
132 | struct sm501_init_gpio { |
133 | struct sm501_reg_init gpio_data_low; |
134 | struct sm501_reg_init gpio_data_high; |
135 | struct sm501_reg_init gpio_ddr_low; |
136 | struct sm501_reg_init gpio_ddr_high; |
137 | }; |
138 | |
139 | #define SM501_FLAG_SUSPEND_OFF (1<<4) |
140 | |
141 | /* sm501_platdata |
142 | * |
143 | * This is passed with the platform device to allow the board |
144 | * to control the behaviour of the SM501 driver(s) which attach |
145 | * to the device. |
146 | * |
147 | */ |
148 | |
149 | struct sm501_platdata { |
150 | struct sm501_initdata *init; |
151 | struct sm501_init_gpio *init_gpiop; |
152 | struct sm501_platdata_fb *fb; |
153 | |
154 | int flags; |
155 | int gpio_base; |
156 | |
157 | int (*get_power)(struct device *dev); |
158 | int (*set_power)(struct device *dev, unsigned int on); |
159 | |
160 | struct sm501_platdata_gpio_i2c *gpio_i2c; |
161 | unsigned int gpio_i2c_nr; |
162 | }; |
163 | |
164 | #if defined(CONFIG_PPC32) |
165 | #define smc501_readl(addr) ioread32be((addr)) |
166 | #define smc501_writel(val, addr) iowrite32be((val), (addr)) |
167 | #else |
168 | #define smc501_readl(addr) readl(addr) |
169 | #define smc501_writel(val, addr) writel(val, addr) |
170 | #endif |
171 | |