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