diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/platforms/512x/mpc512x_shared.c | 22 | ||||
-rw-r--r-- | arch/powerpc/platforms/85xx/p1022_ds.c | 47 | ||||
-rw-r--r-- | arch/powerpc/platforms/86xx/mpc8610_hpcd.c | 55 | ||||
-rw-r--r-- | arch/powerpc/sysdev/fsl_soc.h | 25 |
4 files changed, 73 insertions, 76 deletions
diff --git a/arch/powerpc/platforms/512x/mpc512x_shared.c b/arch/powerpc/platforms/512x/mpc512x_shared.c index e41ebbdb3e12..3dc62f907a1e 100644 --- a/arch/powerpc/platforms/512x/mpc512x_shared.c +++ b/arch/powerpc/platforms/512x/mpc512x_shared.c | |||
@@ -66,8 +66,8 @@ struct fsl_diu_shared_fb { | |||
66 | bool in_use; | 66 | bool in_use; |
67 | }; | 67 | }; |
68 | 68 | ||
69 | unsigned int mpc512x_get_pixel_format(unsigned int bits_per_pixel, | 69 | u32 mpc512x_get_pixel_format(enum fsl_diu_monitor_port port, |
70 | int monitor_port) | 70 | unsigned int bits_per_pixel) |
71 | { | 71 | { |
72 | switch (bits_per_pixel) { | 72 | switch (bits_per_pixel) { |
73 | case 32: | 73 | case 32: |
@@ -80,11 +80,12 @@ unsigned int mpc512x_get_pixel_format(unsigned int bits_per_pixel, | |||
80 | return 0x00000400; | 80 | return 0x00000400; |
81 | } | 81 | } |
82 | 82 | ||
83 | void mpc512x_set_gamma_table(int monitor_port, char *gamma_table_base) | 83 | void mpc512x_set_gamma_table(enum fsl_diu_monitor_port port, |
84 | char *gamma_table_base) | ||
84 | { | 85 | { |
85 | } | 86 | } |
86 | 87 | ||
87 | void mpc512x_set_monitor_port(int monitor_port) | 88 | void mpc512x_set_monitor_port(enum fsl_diu_monitor_port port) |
88 | { | 89 | { |
89 | } | 90 | } |
90 | 91 | ||
@@ -182,14 +183,10 @@ void mpc512x_set_pixel_clock(unsigned int pixclock) | |||
182 | iounmap(ccm); | 183 | iounmap(ccm); |
183 | } | 184 | } |
184 | 185 | ||
185 | ssize_t mpc512x_show_monitor_port(int monitor_port, char *buf) | 186 | enum fsl_diu_monitor_port |
187 | mpc512x_valid_monitor_port(enum fsl_diu_monitor_port port) | ||
186 | { | 188 | { |
187 | return sprintf(buf, "0 - 5121 LCD\n"); | 189 | return FSL_DIU_PORT_DVI; |
188 | } | ||
189 | |||
190 | int mpc512x_set_sysfs_monitor_port(int val) | ||
191 | { | ||
192 | return 0; | ||
193 | } | 190 | } |
194 | 191 | ||
195 | static struct fsl_diu_shared_fb __attribute__ ((__aligned__(8))) diu_shared_fb; | 192 | static struct fsl_diu_shared_fb __attribute__ ((__aligned__(8))) diu_shared_fb; |
@@ -332,8 +329,7 @@ void __init mpc512x_setup_diu(void) | |||
332 | diu_ops.set_gamma_table = mpc512x_set_gamma_table; | 329 | diu_ops.set_gamma_table = mpc512x_set_gamma_table; |
333 | diu_ops.set_monitor_port = mpc512x_set_monitor_port; | 330 | diu_ops.set_monitor_port = mpc512x_set_monitor_port; |
334 | diu_ops.set_pixel_clock = mpc512x_set_pixel_clock; | 331 | diu_ops.set_pixel_clock = mpc512x_set_pixel_clock; |
335 | diu_ops.show_monitor_port = mpc512x_show_monitor_port; | 332 | diu_ops.valid_monitor_port = mpc512x_valid_monitor_port; |
336 | diu_ops.set_sysfs_monitor_port = mpc512x_set_sysfs_monitor_port; | ||
337 | diu_ops.release_bootmem = mpc512x_release_bootmem; | 333 | diu_ops.release_bootmem = mpc512x_release_bootmem; |
338 | #endif | 334 | #endif |
339 | } | 335 | } |
diff --git a/arch/powerpc/platforms/85xx/p1022_ds.c b/arch/powerpc/platforms/85xx/p1022_ds.c index 7eb5c40c069f..a13d3cce413c 100644 --- a/arch/powerpc/platforms/85xx/p1022_ds.c +++ b/arch/powerpc/platforms/85xx/p1022_ds.c | |||
@@ -93,8 +93,8 @@ | |||
93 | * The Area Descriptor is a 32-bit value that determine which bits in each | 93 | * The Area Descriptor is a 32-bit value that determine which bits in each |
94 | * pixel are to be used for each color. | 94 | * pixel are to be used for each color. |
95 | */ | 95 | */ |
96 | static unsigned int p1022ds_get_pixel_format(unsigned int bits_per_pixel, | 96 | static u32 p1022ds_get_pixel_format(enum fsl_diu_monitor_port port, |
97 | int monitor_port) | 97 | unsigned int bits_per_pixel) |
98 | { | 98 | { |
99 | switch (bits_per_pixel) { | 99 | switch (bits_per_pixel) { |
100 | case 32: | 100 | case 32: |
@@ -118,7 +118,8 @@ static unsigned int p1022ds_get_pixel_format(unsigned int bits_per_pixel, | |||
118 | * On some boards, the gamma table for some ports may need to be modified. | 118 | * On some boards, the gamma table for some ports may need to be modified. |
119 | * This is not the case on the P1022DS, so we do nothing. | 119 | * This is not the case on the P1022DS, so we do nothing. |
120 | */ | 120 | */ |
121 | static void p1022ds_set_gamma_table(int monitor_port, char *gamma_table_base) | 121 | static void p1022ds_set_gamma_table(enum fsl_diu_monitor_port port, |
122 | char *gamma_table_base) | ||
122 | { | 123 | { |
123 | } | 124 | } |
124 | 125 | ||
@@ -126,7 +127,7 @@ static void p1022ds_set_gamma_table(int monitor_port, char *gamma_table_base) | |||
126 | * p1022ds_set_monitor_port: switch the output to a different monitor port | 127 | * p1022ds_set_monitor_port: switch the output to a different monitor port |
127 | * | 128 | * |
128 | */ | 129 | */ |
129 | static void p1022ds_set_monitor_port(int monitor_port) | 130 | static void p1022ds_set_monitor_port(enum fsl_diu_monitor_port port) |
130 | { | 131 | { |
131 | struct device_node *pixis_node; | 132 | struct device_node *pixis_node; |
132 | u8 __iomem *brdcfg1; | 133 | u8 __iomem *brdcfg1; |
@@ -144,19 +145,21 @@ static void p1022ds_set_monitor_port(int monitor_port) | |||
144 | } | 145 | } |
145 | brdcfg1 += 9; /* BRDCFG1 is at offset 9 in the ngPIXIS */ | 146 | brdcfg1 += 9; /* BRDCFG1 is at offset 9 in the ngPIXIS */ |
146 | 147 | ||
147 | switch (monitor_port) { | 148 | switch (port) { |
148 | case 0: /* DVI */ | 149 | case FSL_DIU_PORT_DVI: |
150 | printk(KERN_INFO "%s:%u\n", __func__, __LINE__); | ||
149 | /* Enable the DVI port, disable the DFP and the backlight */ | 151 | /* Enable the DVI port, disable the DFP and the backlight */ |
150 | clrsetbits_8(brdcfg1, PX_BRDCFG1_DFPEN | PX_BRDCFG1_BACKLIGHT, | 152 | clrsetbits_8(brdcfg1, PX_BRDCFG1_DFPEN | PX_BRDCFG1_BACKLIGHT, |
151 | PX_BRDCFG1_DVIEN); | 153 | PX_BRDCFG1_DVIEN); |
152 | break; | 154 | break; |
153 | case 1: /* Single link LVDS */ | 155 | case FSL_DIU_PORT_LVDS: |
156 | printk(KERN_INFO "%s:%u\n", __func__, __LINE__); | ||
154 | /* Enable the DFP port, disable the DVI and the backlight */ | 157 | /* Enable the DFP port, disable the DVI and the backlight */ |
155 | clrsetbits_8(brdcfg1, PX_BRDCFG1_DVIEN | PX_BRDCFG1_BACKLIGHT, | 158 | clrsetbits_8(brdcfg1, PX_BRDCFG1_DVIEN | PX_BRDCFG1_BACKLIGHT, |
156 | PX_BRDCFG1_DFPEN); | 159 | PX_BRDCFG1_DFPEN); |
157 | break; | 160 | break; |
158 | default: | 161 | default: |
159 | pr_err("p1022ds: unsupported monitor port %i\n", monitor_port); | 162 | pr_err("p1022ds: unsupported monitor port %i\n", port); |
160 | } | 163 | } |
161 | } | 164 | } |
162 | 165 | ||
@@ -204,23 +207,18 @@ void p1022ds_set_pixel_clock(unsigned int pixclock) | |||
204 | } | 207 | } |
205 | 208 | ||
206 | /** | 209 | /** |
207 | * p1022ds_show_monitor_port: show the current monitor | 210 | * p1022ds_valid_monitor_port: set the monitor port for sysfs |
208 | * | ||
209 | * This function returns a string indicating whether the current monitor is | ||
210 | * set to DVI or LVDS. | ||
211 | */ | ||
212 | ssize_t p1022ds_show_monitor_port(int monitor_port, char *buf) | ||
213 | { | ||
214 | return sprintf(buf, "%c0 - DVI\n%c1 - Single link LVDS\n", | ||
215 | monitor_port == 0 ? '*' : ' ', monitor_port == 1 ? '*' : ' '); | ||
216 | } | ||
217 | |||
218 | /** | ||
219 | * p1022ds_set_sysfs_monitor_port: set the monitor port for sysfs | ||
220 | */ | 211 | */ |
221 | int p1022ds_set_sysfs_monitor_port(int val) | 212 | enum fsl_diu_monitor_port |
213 | p1022ds_valid_monitor_port(enum fsl_diu_monitor_port port) | ||
222 | { | 214 | { |
223 | return val < 2 ? val : 0; | 215 | switch (port) { |
216 | case FSL_DIU_PORT_DVI: | ||
217 | case FSL_DIU_PORT_LVDS: | ||
218 | return port; | ||
219 | default: | ||
220 | return FSL_DIU_PORT_DVI; /* Dual-link LVDS is not supported */ | ||
221 | } | ||
224 | } | 222 | } |
225 | 223 | ||
226 | #endif | 224 | #endif |
@@ -295,8 +293,7 @@ static void __init p1022_ds_setup_arch(void) | |||
295 | diu_ops.set_gamma_table = p1022ds_set_gamma_table; | 293 | diu_ops.set_gamma_table = p1022ds_set_gamma_table; |
296 | diu_ops.set_monitor_port = p1022ds_set_monitor_port; | 294 | diu_ops.set_monitor_port = p1022ds_set_monitor_port; |
297 | diu_ops.set_pixel_clock = p1022ds_set_pixel_clock; | 295 | diu_ops.set_pixel_clock = p1022ds_set_pixel_clock; |
298 | diu_ops.show_monitor_port = p1022ds_show_monitor_port; | 296 | diu_ops.valid_monitor_port = p1022ds_valid_monitor_port; |
299 | diu_ops.set_sysfs_monitor_port = p1022ds_set_sysfs_monitor_port; | ||
300 | #endif | 297 | #endif |
301 | 298 | ||
302 | #ifdef CONFIG_SMP | 299 | #ifdef CONFIG_SMP |
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c index a896511690c2..0d80e9614f31 100644 --- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c +++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c | |||
@@ -145,10 +145,10 @@ machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices); | |||
145 | (c2 << AD_COMP_2_SHIFT) | (c1 << AD_COMP_1_SHIFT) | \ | 145 | (c2 << AD_COMP_2_SHIFT) | (c1 << AD_COMP_1_SHIFT) | \ |
146 | (c0 << AD_COMP_0_SHIFT) | (size << AD_PIXEL_S_SHIFT)) | 146 | (c0 << AD_COMP_0_SHIFT) | (size << AD_PIXEL_S_SHIFT)) |
147 | 147 | ||
148 | unsigned int mpc8610hpcd_get_pixel_format(unsigned int bits_per_pixel, | 148 | u32 mpc8610hpcd_get_pixel_format(enum fsl_diu_monitor_port port, |
149 | int monitor_port) | 149 | unsigned int bits_per_pixel) |
150 | { | 150 | { |
151 | static const unsigned long pixelformat[][3] = { | 151 | static const u32 pixelformat[][3] = { |
152 | { | 152 | { |
153 | MAKE_AD(3, 0, 2, 1, 3, 8, 8, 8, 8), | 153 | MAKE_AD(3, 0, 2, 1, 3, 8, 8, 8, 8), |
154 | MAKE_AD(4, 2, 0, 1, 2, 8, 8, 8, 0), | 154 | MAKE_AD(4, 2, 0, 1, 2, 8, 8, 8, 0), |
@@ -163,7 +163,8 @@ unsigned int mpc8610hpcd_get_pixel_format(unsigned int bits_per_pixel, | |||
163 | unsigned int arch_monitor; | 163 | unsigned int arch_monitor; |
164 | 164 | ||
165 | /* The DVI port is mis-wired on revision 1 of this board. */ | 165 | /* The DVI port is mis-wired on revision 1 of this board. */ |
166 | arch_monitor = ((*pixis_arch == 0x01) && (monitor_port == 0))? 0 : 1; | 166 | arch_monitor = |
167 | ((*pixis_arch == 0x01) && (port == FSL_DIU_PORT_DVI)) ? 0 : 1; | ||
167 | 168 | ||
168 | switch (bits_per_pixel) { | 169 | switch (bits_per_pixel) { |
169 | case 32: | 170 | case 32: |
@@ -178,10 +179,11 @@ unsigned int mpc8610hpcd_get_pixel_format(unsigned int bits_per_pixel, | |||
178 | } | 179 | } |
179 | } | 180 | } |
180 | 181 | ||
181 | void mpc8610hpcd_set_gamma_table(int monitor_port, char *gamma_table_base) | 182 | void mpc8610hpcd_set_gamma_table(enum fsl_diu_monitor_port port, |
183 | char *gamma_table_base) | ||
182 | { | 184 | { |
183 | int i; | 185 | int i; |
184 | if (monitor_port == 2) { /* dual link LVDS */ | 186 | if (port == FSL_DIU_PORT_DLVDS) { |
185 | for (i = 0; i < 256*3; i++) | 187 | for (i = 0; i < 256*3; i++) |
186 | gamma_table_base[i] = (gamma_table_base[i] << 2) | | 188 | gamma_table_base[i] = (gamma_table_base[i] << 2) | |
187 | ((gamma_table_base[i] >> 6) & 0x03); | 189 | ((gamma_table_base[i] >> 6) & 0x03); |
@@ -192,17 +194,21 @@ void mpc8610hpcd_set_gamma_table(int monitor_port, char *gamma_table_base) | |||
192 | #define PX_BRDCFG0_DLINK (1 << 4) | 194 | #define PX_BRDCFG0_DLINK (1 << 4) |
193 | #define PX_BRDCFG0_DIU_MASK (PX_BRDCFG0_DVISEL | PX_BRDCFG0_DLINK) | 195 | #define PX_BRDCFG0_DIU_MASK (PX_BRDCFG0_DVISEL | PX_BRDCFG0_DLINK) |
194 | 196 | ||
195 | void mpc8610hpcd_set_monitor_port(int monitor_port) | 197 | void mpc8610hpcd_set_monitor_port(enum fsl_diu_monitor_port port) |
196 | { | 198 | { |
197 | static const u8 bdcfg[] = { | 199 | switch (port) { |
198 | PX_BRDCFG0_DVISEL | PX_BRDCFG0_DLINK, | 200 | case FSL_DIU_PORT_DVI: |
199 | PX_BRDCFG0_DLINK, | ||
200 | 0, | ||
201 | }; | ||
202 | |||
203 | if (monitor_port < 3) | ||
204 | clrsetbits_8(pixis_bdcfg0, PX_BRDCFG0_DIU_MASK, | 201 | clrsetbits_8(pixis_bdcfg0, PX_BRDCFG0_DIU_MASK, |
205 | bdcfg[monitor_port]); | 202 | PX_BRDCFG0_DVISEL | PX_BRDCFG0_DLINK); |
203 | break; | ||
204 | case FSL_DIU_PORT_LVDS: | ||
205 | clrsetbits_8(pixis_bdcfg0, PX_BRDCFG0_DIU_MASK, | ||
206 | PX_BRDCFG0_DLINK); | ||
207 | break; | ||
208 | case FSL_DIU_PORT_DLVDS: | ||
209 | clrbits8(pixis_bdcfg0, PX_BRDCFG0_DIU_MASK); | ||
210 | break; | ||
211 | } | ||
206 | } | 212 | } |
207 | 213 | ||
208 | void mpc8610hpcd_set_pixel_clock(unsigned int pixclock) | 214 | void mpc8610hpcd_set_pixel_clock(unsigned int pixclock) |
@@ -273,20 +279,10 @@ void mpc8610hpcd_set_pixel_clock(unsigned int pixclock) | |||
273 | iounmap(clkdvdr); | 279 | iounmap(clkdvdr); |
274 | } | 280 | } |
275 | 281 | ||
276 | ssize_t mpc8610hpcd_show_monitor_port(int monitor_port, char *buf) | 282 | enum fsl_diu_monitor_port |
277 | { | 283 | mpc8610hpcd_valid_monitor_port(enum fsl_diu_monitor_port port) |
278 | return snprintf(buf, PAGE_SIZE, | ||
279 | "%c0 - DVI\n" | ||
280 | "%c1 - Single link LVDS\n" | ||
281 | "%c2 - Dual link LVDS\n", | ||
282 | monitor_port == 0 ? '*' : ' ', | ||
283 | monitor_port == 1 ? '*' : ' ', | ||
284 | monitor_port == 2 ? '*' : ' '); | ||
285 | } | ||
286 | |||
287 | int mpc8610hpcd_set_sysfs_monitor_port(int val) | ||
288 | { | 284 | { |
289 | return val < 3 ? val : 0; | 285 | return port; |
290 | } | 286 | } |
291 | 287 | ||
292 | #endif | 288 | #endif |
@@ -318,8 +314,7 @@ static void __init mpc86xx_hpcd_setup_arch(void) | |||
318 | diu_ops.set_gamma_table = mpc8610hpcd_set_gamma_table; | 314 | diu_ops.set_gamma_table = mpc8610hpcd_set_gamma_table; |
319 | diu_ops.set_monitor_port = mpc8610hpcd_set_monitor_port; | 315 | diu_ops.set_monitor_port = mpc8610hpcd_set_monitor_port; |
320 | diu_ops.set_pixel_clock = mpc8610hpcd_set_pixel_clock; | 316 | diu_ops.set_pixel_clock = mpc8610hpcd_set_pixel_clock; |
321 | diu_ops.show_monitor_port = mpc8610hpcd_show_monitor_port; | 317 | diu_ops.valid_monitor_port = mpc8610hpcd_valid_monitor_port; |
322 | diu_ops.set_sysfs_monitor_port = mpc8610hpcd_set_sysfs_monitor_port; | ||
323 | #endif | 318 | #endif |
324 | 319 | ||
325 | pixis_node = of_find_compatible_node(NULL, NULL, "fsl,fpga-pixis"); | 320 | pixis_node = of_find_compatible_node(NULL, NULL, "fsl,fpga-pixis"); |
diff --git a/arch/powerpc/sysdev/fsl_soc.h b/arch/powerpc/sysdev/fsl_soc.h index 53609489a62b..064bc7089134 100644 --- a/arch/powerpc/sysdev/fsl_soc.h +++ b/arch/powerpc/sysdev/fsl_soc.h | |||
@@ -22,15 +22,24 @@ struct device_node; | |||
22 | extern void fsl_rstcr_restart(char *cmd); | 22 | extern void fsl_rstcr_restart(char *cmd); |
23 | 23 | ||
24 | #if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE) | 24 | #if defined(CONFIG_FB_FSL_DIU) || defined(CONFIG_FB_FSL_DIU_MODULE) |
25 | |||
26 | /* The different ports that the DIU can be connected to */ | ||
27 | enum fsl_diu_monitor_port { | ||
28 | FSL_DIU_PORT_DVI, /* DVI */ | ||
29 | FSL_DIU_PORT_LVDS, /* Single-link LVDS */ | ||
30 | FSL_DIU_PORT_DLVDS /* Dual-link LVDS */ | ||
31 | }; | ||
32 | |||
25 | struct platform_diu_data_ops { | 33 | struct platform_diu_data_ops { |
26 | unsigned int (*get_pixel_format) (unsigned int bits_per_pixel, | 34 | u32 (*get_pixel_format)(enum fsl_diu_monitor_port port, |
27 | int monitor_port); | 35 | unsigned int bpp); |
28 | void (*set_gamma_table) (int monitor_port, char *gamma_table_base); | 36 | void (*set_gamma_table)(enum fsl_diu_monitor_port port, |
29 | void (*set_monitor_port) (int monitor_port); | 37 | char *gamma_table_base); |
30 | void (*set_pixel_clock) (unsigned int pixclock); | 38 | void (*set_monitor_port)(enum fsl_diu_monitor_port port); |
31 | ssize_t (*show_monitor_port) (int monitor_port, char *buf); | 39 | void (*set_pixel_clock)(unsigned int pixclock); |
32 | int (*set_sysfs_monitor_port) (int val); | 40 | enum fsl_diu_monitor_port (*valid_monitor_port) |
33 | void (*release_bootmem) (void); | 41 | (enum fsl_diu_monitor_port port); |
42 | void (*release_bootmem)(void); | ||
34 | }; | 43 | }; |
35 | 44 | ||
36 | extern struct platform_diu_data_ops diu_ops; | 45 | extern struct platform_diu_data_ops diu_ops; |