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