diff options
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/amifb.c | 1 | ||||
-rw-r--r-- | drivers/video/backlight/88pm860x_bl.c | 49 | ||||
-rw-r--r-- | drivers/video/backlight/Kconfig | 6 | ||||
-rw-r--r-- | drivers/video/backlight/Makefile | 1 | ||||
-rw-r--r-- | drivers/video/backlight/apple_bl.c | 23 | ||||
-rw-r--r-- | drivers/video/backlight/da9052_bl.c | 187 | ||||
-rw-r--r-- | drivers/video/backlight/locomolcd.c | 9 | ||||
-rw-r--r-- | drivers/video/backlight/tosa_lcd.c | 2 | ||||
-rw-r--r-- | drivers/video/bt431.h | 1 | ||||
-rw-r--r-- | drivers/video/bt455.h | 1 | ||||
-rw-r--r-- | drivers/video/console/fbcon.c | 1 | ||||
-rw-r--r-- | drivers/video/console/newport_con.c | 1 | ||||
-rw-r--r-- | drivers/video/cyber2000fb.c | 1 | ||||
-rw-r--r-- | drivers/video/dnfb.c | 1 | ||||
-rw-r--r-- | drivers/video/mx3fb.c | 4 | ||||
-rw-r--r-- | drivers/video/neofb.c | 1 | ||||
-rw-r--r-- | drivers/video/omap2/vrfb.c | 1 | ||||
-rw-r--r-- | drivers/video/pmag-ba-fb.c | 1 | ||||
-rw-r--r-- | drivers/video/pmagb-b-fb.c | 1 | ||||
-rw-r--r-- | drivers/video/q40fb.c | 1 | ||||
-rw-r--r-- | drivers/video/sa1100fb.c | 493 | ||||
-rw-r--r-- | drivers/video/sa1100fb.h | 76 | ||||
-rw-r--r-- | drivers/video/savage/savagefb_driver.c | 1 |
23 files changed, 401 insertions, 462 deletions
diff --git a/drivers/video/amifb.c b/drivers/video/amifb.c index f23cae094f1b..887df9d81422 100644 --- a/drivers/video/amifb.c +++ b/drivers/video/amifb.c | |||
@@ -53,7 +53,6 @@ | |||
53 | #include <linux/platform_device.h> | 53 | #include <linux/platform_device.h> |
54 | #include <linux/uaccess.h> | 54 | #include <linux/uaccess.h> |
55 | 55 | ||
56 | #include <asm/system.h> | ||
57 | #include <asm/irq.h> | 56 | #include <asm/irq.h> |
58 | #include <asm/amigahw.h> | 57 | #include <asm/amigahw.h> |
59 | #include <asm/amigaints.h> | 58 | #include <asm/amigaints.h> |
diff --git a/drivers/video/backlight/88pm860x_bl.c b/drivers/video/backlight/88pm860x_bl.c index 915943af3f21..f49181c73113 100644 --- a/drivers/video/backlight/88pm860x_bl.c +++ b/drivers/video/backlight/88pm860x_bl.c | |||
@@ -67,6 +67,28 @@ static inline int wled_idc(int port) | |||
67 | return ret; | 67 | return ret; |
68 | } | 68 | } |
69 | 69 | ||
70 | static int backlight_power_set(struct pm860x_chip *chip, int port, | ||
71 | int on) | ||
72 | { | ||
73 | int ret = -EINVAL; | ||
74 | |||
75 | switch (port) { | ||
76 | case PM8606_BACKLIGHT1: | ||
77 | ret = on ? pm8606_osc_enable(chip, WLED1_DUTY) : | ||
78 | pm8606_osc_disable(chip, WLED1_DUTY); | ||
79 | break; | ||
80 | case PM8606_BACKLIGHT2: | ||
81 | ret = on ? pm8606_osc_enable(chip, WLED2_DUTY) : | ||
82 | pm8606_osc_disable(chip, WLED2_DUTY); | ||
83 | break; | ||
84 | case PM8606_BACKLIGHT3: | ||
85 | ret = on ? pm8606_osc_enable(chip, WLED3_DUTY) : | ||
86 | pm8606_osc_disable(chip, WLED3_DUTY); | ||
87 | break; | ||
88 | } | ||
89 | return ret; | ||
90 | } | ||
91 | |||
70 | static int pm860x_backlight_set(struct backlight_device *bl, int brightness) | 92 | static int pm860x_backlight_set(struct backlight_device *bl, int brightness) |
71 | { | 93 | { |
72 | struct pm860x_backlight_data *data = bl_get_data(bl); | 94 | struct pm860x_backlight_data *data = bl_get_data(bl); |
@@ -79,6 +101,9 @@ static int pm860x_backlight_set(struct backlight_device *bl, int brightness) | |||
79 | else | 101 | else |
80 | value = brightness; | 102 | value = brightness; |
81 | 103 | ||
104 | if (brightness) | ||
105 | backlight_power_set(chip, data->port, 1); | ||
106 | |||
82 | ret = pm860x_reg_write(data->i2c, wled_a(data->port), value); | 107 | ret = pm860x_reg_write(data->i2c, wled_a(data->port), value); |
83 | if (ret < 0) | 108 | if (ret < 0) |
84 | goto out; | 109 | goto out; |
@@ -115,6 +140,9 @@ static int pm860x_backlight_set(struct backlight_device *bl, int brightness) | |||
115 | if (ret < 0) | 140 | if (ret < 0) |
116 | goto out; | 141 | goto out; |
117 | 142 | ||
143 | if (brightness == 0) | ||
144 | backlight_power_set(chip, data->port, 0); | ||
145 | |||
118 | dev_dbg(chip->dev, "set brightness %d\n", value); | 146 | dev_dbg(chip->dev, "set brightness %d\n", value); |
119 | data->current_brightness = value; | 147 | data->current_brightness = value; |
120 | return 0; | 148 | return 0; |
@@ -170,7 +198,6 @@ static int pm860x_backlight_probe(struct platform_device *pdev) | |||
170 | struct backlight_device *bl; | 198 | struct backlight_device *bl; |
171 | struct resource *res; | 199 | struct resource *res; |
172 | struct backlight_properties props; | 200 | struct backlight_properties props; |
173 | unsigned char value; | ||
174 | char name[MFD_NAME_SIZE]; | 201 | char name[MFD_NAME_SIZE]; |
175 | int ret; | 202 | int ret; |
176 | 203 | ||
@@ -217,26 +244,6 @@ static int pm860x_backlight_probe(struct platform_device *pdev) | |||
217 | 244 | ||
218 | platform_set_drvdata(pdev, bl); | 245 | platform_set_drvdata(pdev, bl); |
219 | 246 | ||
220 | /* Enable reference VSYS */ | ||
221 | ret = pm860x_reg_read(data->i2c, PM8606_VSYS); | ||
222 | if (ret < 0) | ||
223 | goto out; | ||
224 | if ((ret & PM8606_VSYS_EN) == 0) { | ||
225 | value = ret | PM8606_VSYS_EN; | ||
226 | ret = pm860x_reg_write(data->i2c, PM8606_VSYS, value); | ||
227 | if (ret < 0) | ||
228 | goto out; | ||
229 | } | ||
230 | /* Enable reference OSC */ | ||
231 | ret = pm860x_reg_read(data->i2c, PM8606_MISC); | ||
232 | if (ret < 0) | ||
233 | goto out; | ||
234 | if ((ret & PM8606_MISC_OSC_EN) == 0) { | ||
235 | value = ret | PM8606_MISC_OSC_EN; | ||
236 | ret = pm860x_reg_write(data->i2c, PM8606_MISC, value); | ||
237 | if (ret < 0) | ||
238 | goto out; | ||
239 | } | ||
240 | /* read current backlight */ | 247 | /* read current backlight */ |
241 | ret = pm860x_backlight_get_brightness(bl); | 248 | ret = pm860x_backlight_get_brightness(bl); |
242 | if (ret < 0) | 249 | if (ret < 0) |
diff --git a/drivers/video/backlight/Kconfig b/drivers/video/backlight/Kconfig index 7ed9991fa747..af16884491ed 100644 --- a/drivers/video/backlight/Kconfig +++ b/drivers/video/backlight/Kconfig | |||
@@ -245,6 +245,12 @@ config BACKLIGHT_DA903X | |||
245 | If you have a LCD backlight connected to the WLED output of DA9030 | 245 | If you have a LCD backlight connected to the WLED output of DA9030 |
246 | or DA9034 WLED output, say Y here to enable this driver. | 246 | or DA9034 WLED output, say Y here to enable this driver. |
247 | 247 | ||
248 | config BACKLIGHT_DA9052 | ||
249 | tristate "Dialog DA9052/DA9053 WLED" | ||
250 | depends on PMIC_DA9052 | ||
251 | help | ||
252 | Enable the Backlight Driver for DA9052-BC and DA9053-AA/Bx PMICs. | ||
253 | |||
248 | config BACKLIGHT_MAX8925 | 254 | config BACKLIGHT_MAX8925 |
249 | tristate "Backlight driver for MAX8925" | 255 | tristate "Backlight driver for MAX8925" |
250 | depends on MFD_MAX8925 | 256 | depends on MFD_MAX8925 |
diff --git a/drivers/video/backlight/Makefile b/drivers/video/backlight/Makefile index 8071eb656147..36855ae887d6 100644 --- a/drivers/video/backlight/Makefile +++ b/drivers/video/backlight/Makefile | |||
@@ -29,6 +29,7 @@ obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o | |||
29 | obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o | 29 | obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o |
30 | obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o | 30 | obj-$(CONFIG_BACKLIGHT_PWM) += pwm_bl.o |
31 | obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o | 31 | obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o |
32 | obj-$(CONFIG_BACKLIGHT_DA9052) += da9052_bl.o | ||
32 | obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o | 33 | obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o |
33 | obj-$(CONFIG_BACKLIGHT_APPLE) += apple_bl.o | 34 | obj-$(CONFIG_BACKLIGHT_APPLE) += apple_bl.o |
34 | obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o | 35 | obj-$(CONFIG_BACKLIGHT_TOSA) += tosa_bl.o |
diff --git a/drivers/video/backlight/apple_bl.c b/drivers/video/backlight/apple_bl.c index be98d152b7fd..a523b255e124 100644 --- a/drivers/video/backlight/apple_bl.c +++ b/drivers/video/backlight/apple_bl.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/io.h> | 24 | #include <linux/io.h> |
25 | #include <linux/pci.h> | 25 | #include <linux/pci.h> |
26 | #include <linux/acpi.h> | 26 | #include <linux/acpi.h> |
27 | #include <linux/atomic.h> | ||
27 | 28 | ||
28 | static struct backlight_device *apple_backlight_device; | 29 | static struct backlight_device *apple_backlight_device; |
29 | 30 | ||
@@ -221,14 +222,32 @@ static struct acpi_driver apple_bl_driver = { | |||
221 | }, | 222 | }, |
222 | }; | 223 | }; |
223 | 224 | ||
225 | static atomic_t apple_bl_registered = ATOMIC_INIT(0); | ||
226 | |||
227 | int apple_bl_register(void) | ||
228 | { | ||
229 | if (atomic_xchg(&apple_bl_registered, 1) == 0) | ||
230 | return acpi_bus_register_driver(&apple_bl_driver); | ||
231 | |||
232 | return 0; | ||
233 | } | ||
234 | EXPORT_SYMBOL_GPL(apple_bl_register); | ||
235 | |||
236 | void apple_bl_unregister(void) | ||
237 | { | ||
238 | if (atomic_xchg(&apple_bl_registered, 0) == 1) | ||
239 | acpi_bus_unregister_driver(&apple_bl_driver); | ||
240 | } | ||
241 | EXPORT_SYMBOL_GPL(apple_bl_unregister); | ||
242 | |||
224 | static int __init apple_bl_init(void) | 243 | static int __init apple_bl_init(void) |
225 | { | 244 | { |
226 | return acpi_bus_register_driver(&apple_bl_driver); | 245 | return apple_bl_register(); |
227 | } | 246 | } |
228 | 247 | ||
229 | static void __exit apple_bl_exit(void) | 248 | static void __exit apple_bl_exit(void) |
230 | { | 249 | { |
231 | acpi_bus_unregister_driver(&apple_bl_driver); | 250 | apple_bl_unregister(); |
232 | } | 251 | } |
233 | 252 | ||
234 | module_init(apple_bl_init); | 253 | module_init(apple_bl_init); |
diff --git a/drivers/video/backlight/da9052_bl.c b/drivers/video/backlight/da9052_bl.c new file mode 100644 index 000000000000..b628d68f5162 --- /dev/null +++ b/drivers/video/backlight/da9052_bl.c | |||
@@ -0,0 +1,187 @@ | |||
1 | /* | ||
2 | * Backlight Driver for Dialog DA9052 PMICs | ||
3 | * | ||
4 | * Copyright(c) 2012 Dialog Semiconductor Ltd. | ||
5 | * | ||
6 | * Author: David Dajun Chen <dchen@diasemi.com> | ||
7 | * | ||
8 | * This program is free software; you can redistribute it and/or modify | ||
9 | * it under the terms of the GNU General Public License as published by | ||
10 | * the Free Software Foundation; either version 2 of the License, or | ||
11 | * (at your option) any later version. | ||
12 | * | ||
13 | */ | ||
14 | |||
15 | #include <linux/backlight.h> | ||
16 | #include <linux/delay.h> | ||
17 | #include <linux/fb.h> | ||
18 | #include <linux/module.h> | ||
19 | #include <linux/platform_device.h> | ||
20 | |||
21 | #include <linux/mfd/da9052/da9052.h> | ||
22 | #include <linux/mfd/da9052/reg.h> | ||
23 | |||
24 | #define DA9052_MAX_BRIGHTNESS 0xFF | ||
25 | |||
26 | enum { | ||
27 | DA9052_WLEDS_OFF, | ||
28 | DA9052_WLEDS_ON, | ||
29 | }; | ||
30 | |||
31 | enum { | ||
32 | DA9052_TYPE_WLED1, | ||
33 | DA9052_TYPE_WLED2, | ||
34 | DA9052_TYPE_WLED3, | ||
35 | }; | ||
36 | |||
37 | static unsigned char wled_bank[] = { | ||
38 | DA9052_LED1_CONF_REG, | ||
39 | DA9052_LED2_CONF_REG, | ||
40 | DA9052_LED3_CONF_REG, | ||
41 | }; | ||
42 | |||
43 | struct da9052_bl { | ||
44 | struct da9052 *da9052; | ||
45 | uint brightness; | ||
46 | uint state; | ||
47 | uint led_reg; | ||
48 | }; | ||
49 | |||
50 | static int da9052_adjust_wled_brightness(struct da9052_bl *wleds) | ||
51 | { | ||
52 | unsigned char boost_en; | ||
53 | unsigned char i_sink; | ||
54 | int ret; | ||
55 | |||
56 | boost_en = 0x3F; | ||
57 | i_sink = 0xFF; | ||
58 | if (wleds->state == DA9052_WLEDS_OFF) { | ||
59 | boost_en = 0x00; | ||
60 | i_sink = 0x00; | ||
61 | } | ||
62 | |||
63 | ret = da9052_reg_write(wleds->da9052, DA9052_BOOST_REG, boost_en); | ||
64 | if (ret < 0) | ||
65 | return ret; | ||
66 | |||
67 | ret = da9052_reg_write(wleds->da9052, DA9052_LED_CONT_REG, i_sink); | ||
68 | if (ret < 0) | ||
69 | return ret; | ||
70 | |||
71 | ret = da9052_reg_write(wleds->da9052, wled_bank[wleds->led_reg], 0x0); | ||
72 | if (ret < 0) | ||
73 | return ret; | ||
74 | |||
75 | msleep(10); | ||
76 | |||
77 | if (wleds->brightness) { | ||
78 | ret = da9052_reg_write(wleds->da9052, wled_bank[wleds->led_reg], | ||
79 | wleds->brightness); | ||
80 | if (ret < 0) | ||
81 | return ret; | ||
82 | } | ||
83 | |||
84 | return 0; | ||
85 | } | ||
86 | |||
87 | static int da9052_backlight_update_status(struct backlight_device *bl) | ||
88 | { | ||
89 | int brightness = bl->props.brightness; | ||
90 | struct da9052_bl *wleds = bl_get_data(bl); | ||
91 | |||
92 | wleds->brightness = brightness; | ||
93 | wleds->state = DA9052_WLEDS_ON; | ||
94 | |||
95 | return da9052_adjust_wled_brightness(wleds); | ||
96 | } | ||
97 | |||
98 | static int da9052_backlight_get_brightness(struct backlight_device *bl) | ||
99 | { | ||
100 | struct da9052_bl *wleds = bl_get_data(bl); | ||
101 | |||
102 | return wleds->brightness; | ||
103 | } | ||
104 | |||
105 | static const struct backlight_ops da9052_backlight_ops = { | ||
106 | .update_status = da9052_backlight_update_status, | ||
107 | .get_brightness = da9052_backlight_get_brightness, | ||
108 | }; | ||
109 | |||
110 | static int da9052_backlight_probe(struct platform_device *pdev) | ||
111 | { | ||
112 | struct backlight_device *bl; | ||
113 | struct backlight_properties props; | ||
114 | struct da9052_bl *wleds; | ||
115 | |||
116 | wleds = devm_kzalloc(&pdev->dev, sizeof(struct da9052_bl), GFP_KERNEL); | ||
117 | if (!wleds) | ||
118 | return -ENOMEM; | ||
119 | |||
120 | wleds->da9052 = dev_get_drvdata(pdev->dev.parent); | ||
121 | wleds->brightness = 0; | ||
122 | wleds->led_reg = platform_get_device_id(pdev)->driver_data; | ||
123 | wleds->state = DA9052_WLEDS_OFF; | ||
124 | |||
125 | props.type = BACKLIGHT_RAW; | ||
126 | props.max_brightness = DA9052_MAX_BRIGHTNESS; | ||
127 | |||
128 | bl = backlight_device_register(pdev->name, wleds->da9052->dev, wleds, | ||
129 | &da9052_backlight_ops, &props); | ||
130 | if (IS_ERR(bl)) { | ||
131 | dev_err(&pdev->dev, "Failed to register backlight\n"); | ||
132 | devm_kfree(&pdev->dev, wleds); | ||
133 | return PTR_ERR(bl); | ||
134 | } | ||
135 | |||
136 | bl->props.max_brightness = DA9052_MAX_BRIGHTNESS; | ||
137 | bl->props.brightness = 0; | ||
138 | platform_set_drvdata(pdev, bl); | ||
139 | |||
140 | return da9052_adjust_wled_brightness(wleds); | ||
141 | } | ||
142 | |||
143 | static int da9052_backlight_remove(struct platform_device *pdev) | ||
144 | { | ||
145 | struct backlight_device *bl = platform_get_drvdata(pdev); | ||
146 | struct da9052_bl *wleds = bl_get_data(bl); | ||
147 | |||
148 | wleds->brightness = 0; | ||
149 | wleds->state = DA9052_WLEDS_OFF; | ||
150 | da9052_adjust_wled_brightness(wleds); | ||
151 | backlight_device_unregister(bl); | ||
152 | devm_kfree(&pdev->dev, wleds); | ||
153 | |||
154 | return 0; | ||
155 | } | ||
156 | |||
157 | static struct platform_device_id da9052_wled_ids[] = { | ||
158 | { | ||
159 | .name = "da9052-wled1", | ||
160 | .driver_data = DA9052_TYPE_WLED1, | ||
161 | }, | ||
162 | { | ||
163 | .name = "da9052-wled2", | ||
164 | .driver_data = DA9052_TYPE_WLED2, | ||
165 | }, | ||
166 | { | ||
167 | .name = "da9052-wled3", | ||
168 | .driver_data = DA9052_TYPE_WLED3, | ||
169 | }, | ||
170 | }; | ||
171 | |||
172 | static struct platform_driver da9052_wled_driver = { | ||
173 | .probe = da9052_backlight_probe, | ||
174 | .remove = da9052_backlight_remove, | ||
175 | .id_table = da9052_wled_ids, | ||
176 | .driver = { | ||
177 | .name = "da9052-wled", | ||
178 | .owner = THIS_MODULE, | ||
179 | }, | ||
180 | }; | ||
181 | |||
182 | module_platform_driver(da9052_wled_driver); | ||
183 | |||
184 | MODULE_AUTHOR("David Dajun Chen <dchen@diasemi.com>"); | ||
185 | MODULE_DESCRIPTION("Backlight driver for DA9052 PMIC"); | ||
186 | MODULE_LICENSE("GPL"); | ||
187 | MODULE_ALIAS("platform:da9052-backlight"); | ||
diff --git a/drivers/video/backlight/locomolcd.c b/drivers/video/backlight/locomolcd.c index be20b5cbe26c..3a6d5419e3e3 100644 --- a/drivers/video/backlight/locomolcd.c +++ b/drivers/video/backlight/locomolcd.c | |||
@@ -229,14 +229,7 @@ static struct locomo_driver poodle_lcd_driver = { | |||
229 | 229 | ||
230 | static int __init locomolcd_init(void) | 230 | static int __init locomolcd_init(void) |
231 | { | 231 | { |
232 | int ret = locomo_driver_register(&poodle_lcd_driver); | 232 | return locomo_driver_register(&poodle_lcd_driver); |
233 | if (ret) | ||
234 | return ret; | ||
235 | |||
236 | #ifdef CONFIG_SA1100_COLLIE | ||
237 | sa1100fb_lcd_power = locomolcd_power; | ||
238 | #endif | ||
239 | return 0; | ||
240 | } | 233 | } |
241 | 234 | ||
242 | static void __exit locomolcd_exit(void) | 235 | static void __exit locomolcd_exit(void) |
diff --git a/drivers/video/backlight/tosa_lcd.c b/drivers/video/backlight/tosa_lcd.c index a2161f631a83..2231aec23918 100644 --- a/drivers/video/backlight/tosa_lcd.c +++ b/drivers/video/backlight/tosa_lcd.c | |||
@@ -271,7 +271,7 @@ static int tosa_lcd_resume(struct spi_device *spi) | |||
271 | } | 271 | } |
272 | #else | 272 | #else |
273 | #define tosa_lcd_suspend NULL | 273 | #define tosa_lcd_suspend NULL |
274 | #define tosa_lcd_reume NULL | 274 | #define tosa_lcd_resume NULL |
275 | #endif | 275 | #endif |
276 | 276 | ||
277 | static struct spi_driver tosa_lcd_driver = { | 277 | static struct spi_driver tosa_lcd_driver = { |
diff --git a/drivers/video/bt431.h b/drivers/video/bt431.h index c826f2787bad..04e0cfbba538 100644 --- a/drivers/video/bt431.h +++ b/drivers/video/bt431.h | |||
@@ -8,7 +8,6 @@ | |||
8 | * archive for more details. | 8 | * archive for more details. |
9 | */ | 9 | */ |
10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
11 | #include <asm/system.h> | ||
12 | 11 | ||
13 | /* | 12 | /* |
14 | * Bt431 cursor generator registers, 32-bit aligned. | 13 | * Bt431 cursor generator registers, 32-bit aligned. |
diff --git a/drivers/video/bt455.h b/drivers/video/bt455.h index b7591fea7add..80f61b03e9ae 100644 --- a/drivers/video/bt455.h +++ b/drivers/video/bt455.h | |||
@@ -8,7 +8,6 @@ | |||
8 | * archive for more details. | 8 | * archive for more details. |
9 | */ | 9 | */ |
10 | #include <linux/types.h> | 10 | #include <linux/types.h> |
11 | #include <asm/system.h> | ||
12 | 11 | ||
13 | /* | 12 | /* |
14 | * Bt455 byte-wide registers, 32-bit aligned. | 13 | * Bt455 byte-wide registers, 32-bit aligned. |
diff --git a/drivers/video/console/fbcon.c b/drivers/video/console/fbcon.c index 8745637e4b7e..2e471c22abf5 100644 --- a/drivers/video/console/fbcon.c +++ b/drivers/video/console/fbcon.c | |||
@@ -77,7 +77,6 @@ | |||
77 | #include <linux/crc32.h> /* For counting font checksums */ | 77 | #include <linux/crc32.h> /* For counting font checksums */ |
78 | #include <asm/fb.h> | 78 | #include <asm/fb.h> |
79 | #include <asm/irq.h> | 79 | #include <asm/irq.h> |
80 | #include <asm/system.h> | ||
81 | 80 | ||
82 | #include "fbcon.h" | 81 | #include "fbcon.h" |
83 | 82 | ||
diff --git a/drivers/video/console/newport_con.c b/drivers/video/console/newport_con.c index a122d9287d16..6d1596629040 100644 --- a/drivers/video/console/newport_con.c +++ b/drivers/video/console/newport_con.c | |||
@@ -22,7 +22,6 @@ | |||
22 | 22 | ||
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/uaccess.h> | 24 | #include <asm/uaccess.h> |
25 | #include <asm/system.h> | ||
26 | #include <asm/page.h> | 25 | #include <asm/page.h> |
27 | #include <asm/pgtable.h> | 26 | #include <asm/pgtable.h> |
28 | #include <asm/gio_device.h> | 27 | #include <asm/gio_device.h> |
diff --git a/drivers/video/cyber2000fb.c b/drivers/video/cyber2000fb.c index 850380795b05..c1527f5b47ee 100644 --- a/drivers/video/cyber2000fb.c +++ b/drivers/video/cyber2000fb.c | |||
@@ -51,7 +51,6 @@ | |||
51 | #include <linux/i2c-algo-bit.h> | 51 | #include <linux/i2c-algo-bit.h> |
52 | 52 | ||
53 | #include <asm/pgtable.h> | 53 | #include <asm/pgtable.h> |
54 | #include <asm/system.h> | ||
55 | 54 | ||
56 | #ifdef __arm__ | 55 | #ifdef __arm__ |
57 | #include <asm/mach-types.h> | 56 | #include <asm/mach-types.h> |
diff --git a/drivers/video/dnfb.c b/drivers/video/dnfb.c index ec56d2544c73..49e3dda1a361 100644 --- a/drivers/video/dnfb.c +++ b/drivers/video/dnfb.c | |||
@@ -7,7 +7,6 @@ | |||
7 | #include <linux/platform_device.h> | 7 | #include <linux/platform_device.h> |
8 | 8 | ||
9 | #include <asm/setup.h> | 9 | #include <asm/setup.h> |
10 | #include <asm/system.h> | ||
11 | #include <asm/irq.h> | 10 | #include <asm/irq.h> |
12 | #include <asm/amigahw.h> | 11 | #include <asm/amigahw.h> |
13 | #include <asm/amigaints.h> | 12 | #include <asm/amigaints.h> |
diff --git a/drivers/video/mx3fb.c b/drivers/video/mx3fb.c index 727a5149d818..eec0d7b748eb 100644 --- a/drivers/video/mx3fb.c +++ b/drivers/video/mx3fb.c | |||
@@ -337,7 +337,7 @@ static void sdc_enable_channel(struct mx3fb_info *mx3_fbi) | |||
337 | 337 | ||
338 | /* This enables the channel */ | 338 | /* This enables the channel */ |
339 | if (mx3_fbi->cookie < 0) { | 339 | if (mx3_fbi->cookie < 0) { |
340 | mx3_fbi->txd = dma_chan->device->device_prep_slave_sg(dma_chan, | 340 | mx3_fbi->txd = dmaengine_prep_slave_sg(dma_chan, |
341 | &mx3_fbi->sg[0], 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); | 341 | &mx3_fbi->sg[0], 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); |
342 | if (!mx3_fbi->txd) { | 342 | if (!mx3_fbi->txd) { |
343 | dev_err(mx3fb->dev, "Cannot allocate descriptor on %d\n", | 343 | dev_err(mx3fb->dev, "Cannot allocate descriptor on %d\n", |
@@ -1091,7 +1091,7 @@ static int mx3fb_pan_display(struct fb_var_screeninfo *var, | |||
1091 | if (mx3_fbi->txd) | 1091 | if (mx3_fbi->txd) |
1092 | async_tx_ack(mx3_fbi->txd); | 1092 | async_tx_ack(mx3_fbi->txd); |
1093 | 1093 | ||
1094 | txd = dma_chan->device->device_prep_slave_sg(dma_chan, sg + | 1094 | txd = dmaengine_prep_slave_sg(dma_chan, sg + |
1095 | mx3_fbi->cur_ipu_buf, 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); | 1095 | mx3_fbi->cur_ipu_buf, 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); |
1096 | if (!txd) { | 1096 | if (!txd) { |
1097 | dev_err(fbi->device, | 1097 | dev_err(fbi->device, |
diff --git a/drivers/video/neofb.c b/drivers/video/neofb.c index fb3f67391105..afc9521173ef 100644 --- a/drivers/video/neofb.c +++ b/drivers/video/neofb.c | |||
@@ -71,7 +71,6 @@ | |||
71 | #include <asm/io.h> | 71 | #include <asm/io.h> |
72 | #include <asm/irq.h> | 72 | #include <asm/irq.h> |
73 | #include <asm/pgtable.h> | 73 | #include <asm/pgtable.h> |
74 | #include <asm/system.h> | ||
75 | 74 | ||
76 | #ifdef CONFIG_MTRR | 75 | #ifdef CONFIG_MTRR |
77 | #include <asm/mtrr.h> | 76 | #include <asm/mtrr.h> |
diff --git a/drivers/video/omap2/vrfb.c b/drivers/video/omap2/vrfb.c index fd2271600370..4e5b960c32c8 100644 --- a/drivers/video/omap2/vrfb.c +++ b/drivers/video/omap2/vrfb.c | |||
@@ -27,7 +27,6 @@ | |||
27 | #include <linux/bitops.h> | 27 | #include <linux/bitops.h> |
28 | #include <linux/mutex.h> | 28 | #include <linux/mutex.h> |
29 | 29 | ||
30 | #include <mach/io.h> | ||
31 | #include <plat/vrfb.h> | 30 | #include <plat/vrfb.h> |
32 | #include <plat/sdrc.h> | 31 | #include <plat/sdrc.h> |
33 | 32 | ||
diff --git a/drivers/video/pmag-ba-fb.c b/drivers/video/pmag-ba-fb.c index 0c69fa20251b..9b4a60b52a4c 100644 --- a/drivers/video/pmag-ba-fb.c +++ b/drivers/video/pmag-ba-fb.c | |||
@@ -33,7 +33,6 @@ | |||
33 | #include <linux/types.h> | 33 | #include <linux/types.h> |
34 | 34 | ||
35 | #include <asm/io.h> | 35 | #include <asm/io.h> |
36 | #include <asm/system.h> | ||
37 | 36 | ||
38 | #include <video/pmag-ba-fb.h> | 37 | #include <video/pmag-ba-fb.h> |
39 | 38 | ||
diff --git a/drivers/video/pmagb-b-fb.c b/drivers/video/pmagb-b-fb.c index 22fcb9a3d5c0..4e7a9c46e112 100644 --- a/drivers/video/pmagb-b-fb.c +++ b/drivers/video/pmagb-b-fb.c | |||
@@ -29,7 +29,6 @@ | |||
29 | #include <linux/types.h> | 29 | #include <linux/types.h> |
30 | 30 | ||
31 | #include <asm/io.h> | 31 | #include <asm/io.h> |
32 | #include <asm/system.h> | ||
33 | 32 | ||
34 | #include <video/pmagb-b-fb.h> | 33 | #include <video/pmagb-b-fb.h> |
35 | 34 | ||
diff --git a/drivers/video/q40fb.c b/drivers/video/q40fb.c index f5a39f5aa900..a104e8cd2f54 100644 --- a/drivers/video/q40fb.c +++ b/drivers/video/q40fb.c | |||
@@ -20,7 +20,6 @@ | |||
20 | 20 | ||
21 | #include <asm/uaccess.h> | 21 | #include <asm/uaccess.h> |
22 | #include <asm/setup.h> | 22 | #include <asm/setup.h> |
23 | #include <asm/system.h> | ||
24 | #include <asm/q40_master.h> | 23 | #include <asm/q40_master.h> |
25 | #include <linux/fb.h> | 24 | #include <linux/fb.h> |
26 | #include <linux/module.h> | 25 | #include <linux/module.h> |
diff --git a/drivers/video/sa1100fb.c b/drivers/video/sa1100fb.c index 98d55d0e2da5..b6325848ad61 100644 --- a/drivers/video/sa1100fb.c +++ b/drivers/video/sa1100fb.c | |||
@@ -173,282 +173,48 @@ | |||
173 | #include <linux/init.h> | 173 | #include <linux/init.h> |
174 | #include <linux/ioport.h> | 174 | #include <linux/ioport.h> |
175 | #include <linux/cpufreq.h> | 175 | #include <linux/cpufreq.h> |
176 | #include <linux/gpio.h> | ||
176 | #include <linux/platform_device.h> | 177 | #include <linux/platform_device.h> |
177 | #include <linux/dma-mapping.h> | 178 | #include <linux/dma-mapping.h> |
178 | #include <linux/mutex.h> | 179 | #include <linux/mutex.h> |
179 | #include <linux/io.h> | 180 | #include <linux/io.h> |
180 | 181 | ||
182 | #include <video/sa1100fb.h> | ||
183 | |||
181 | #include <mach/hardware.h> | 184 | #include <mach/hardware.h> |
182 | #include <asm/mach-types.h> | 185 | #include <asm/mach-types.h> |
183 | #include <mach/assabet.h> | ||
184 | #include <mach/shannon.h> | 186 | #include <mach/shannon.h> |
185 | 187 | ||
186 | /* | 188 | /* |
187 | * debugging? | ||
188 | */ | ||
189 | #define DEBUG 0 | ||
190 | /* | ||
191 | * Complain if VAR is out of range. | 189 | * Complain if VAR is out of range. |
192 | */ | 190 | */ |
193 | #define DEBUG_VAR 1 | 191 | #define DEBUG_VAR 1 |
194 | 192 | ||
195 | #undef ASSABET_PAL_VIDEO | ||
196 | |||
197 | #include "sa1100fb.h" | 193 | #include "sa1100fb.h" |
198 | 194 | ||
199 | extern void (*sa1100fb_backlight_power)(int on); | 195 | static const struct sa1100fb_rgb rgb_4 = { |
200 | extern void (*sa1100fb_lcd_power)(int on); | ||
201 | |||
202 | static struct sa1100fb_rgb rgb_4 = { | ||
203 | .red = { .offset = 0, .length = 4, }, | 196 | .red = { .offset = 0, .length = 4, }, |
204 | .green = { .offset = 0, .length = 4, }, | 197 | .green = { .offset = 0, .length = 4, }, |
205 | .blue = { .offset = 0, .length = 4, }, | 198 | .blue = { .offset = 0, .length = 4, }, |
206 | .transp = { .offset = 0, .length = 0, }, | 199 | .transp = { .offset = 0, .length = 0, }, |
207 | }; | 200 | }; |
208 | 201 | ||
209 | static struct sa1100fb_rgb rgb_8 = { | 202 | static const struct sa1100fb_rgb rgb_8 = { |
210 | .red = { .offset = 0, .length = 8, }, | 203 | .red = { .offset = 0, .length = 8, }, |
211 | .green = { .offset = 0, .length = 8, }, | 204 | .green = { .offset = 0, .length = 8, }, |
212 | .blue = { .offset = 0, .length = 8, }, | 205 | .blue = { .offset = 0, .length = 8, }, |
213 | .transp = { .offset = 0, .length = 0, }, | 206 | .transp = { .offset = 0, .length = 0, }, |
214 | }; | 207 | }; |
215 | 208 | ||
216 | static struct sa1100fb_rgb def_rgb_16 = { | 209 | static const struct sa1100fb_rgb def_rgb_16 = { |
217 | .red = { .offset = 11, .length = 5, }, | 210 | .red = { .offset = 11, .length = 5, }, |
218 | .green = { .offset = 5, .length = 6, }, | 211 | .green = { .offset = 5, .length = 6, }, |
219 | .blue = { .offset = 0, .length = 5, }, | 212 | .blue = { .offset = 0, .length = 5, }, |
220 | .transp = { .offset = 0, .length = 0, }, | 213 | .transp = { .offset = 0, .length = 0, }, |
221 | }; | 214 | }; |
222 | 215 | ||
223 | #ifdef CONFIG_SA1100_ASSABET | ||
224 | #ifndef ASSABET_PAL_VIDEO | ||
225 | /* | ||
226 | * The assabet uses a sharp LQ039Q2DS54 LCD module. It is actually | ||
227 | * takes an RGB666 signal, but we provide it with an RGB565 signal | ||
228 | * instead (def_rgb_16). | ||
229 | */ | ||
230 | static struct sa1100fb_mach_info lq039q2ds54_info __initdata = { | ||
231 | .pixclock = 171521, .bpp = 16, | ||
232 | .xres = 320, .yres = 240, | ||
233 | |||
234 | .hsync_len = 5, .vsync_len = 1, | ||
235 | .left_margin = 61, .upper_margin = 3, | ||
236 | .right_margin = 9, .lower_margin = 0, | ||
237 | |||
238 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
239 | |||
240 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
241 | .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), | ||
242 | }; | ||
243 | #else | ||
244 | static struct sa1100fb_mach_info pal_info __initdata = { | ||
245 | .pixclock = 67797, .bpp = 16, | ||
246 | .xres = 640, .yres = 512, | ||
247 | |||
248 | .hsync_len = 64, .vsync_len = 6, | ||
249 | .left_margin = 125, .upper_margin = 70, | ||
250 | .right_margin = 115, .lower_margin = 36, | ||
251 | |||
252 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
253 | .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512), | ||
254 | }; | ||
255 | #endif | ||
256 | #endif | ||
257 | |||
258 | #ifdef CONFIG_SA1100_H3600 | ||
259 | static struct sa1100fb_mach_info h3600_info __initdata = { | ||
260 | .pixclock = 174757, .bpp = 16, | ||
261 | .xres = 320, .yres = 240, | ||
262 | |||
263 | .hsync_len = 3, .vsync_len = 3, | ||
264 | .left_margin = 12, .upper_margin = 10, | ||
265 | .right_margin = 17, .lower_margin = 1, | ||
266 | |||
267 | .cmap_static = 1, | ||
268 | |||
269 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
270 | .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), | ||
271 | }; | ||
272 | |||
273 | static struct sa1100fb_rgb h3600_rgb_16 = { | ||
274 | .red = { .offset = 12, .length = 4, }, | ||
275 | .green = { .offset = 7, .length = 4, }, | ||
276 | .blue = { .offset = 1, .length = 4, }, | ||
277 | .transp = { .offset = 0, .length = 0, }, | ||
278 | }; | ||
279 | #endif | ||
280 | |||
281 | #ifdef CONFIG_SA1100_H3100 | ||
282 | static struct sa1100fb_mach_info h3100_info __initdata = { | ||
283 | .pixclock = 406977, .bpp = 4, | ||
284 | .xres = 320, .yres = 240, | ||
285 | |||
286 | .hsync_len = 26, .vsync_len = 41, | ||
287 | .left_margin = 4, .upper_margin = 0, | ||
288 | .right_margin = 4, .lower_margin = 0, | ||
289 | |||
290 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
291 | .cmap_greyscale = 1, | ||
292 | .cmap_inverse = 1, | ||
293 | |||
294 | .lccr0 = LCCR0_Mono | LCCR0_4PixMono | LCCR0_Sngl | LCCR0_Pas, | ||
295 | .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), | ||
296 | }; | ||
297 | #endif | ||
298 | |||
299 | #ifdef CONFIG_SA1100_COLLIE | ||
300 | static struct sa1100fb_mach_info collie_info __initdata = { | ||
301 | .pixclock = 171521, .bpp = 16, | ||
302 | .xres = 320, .yres = 240, | ||
303 | |||
304 | .hsync_len = 5, .vsync_len = 1, | ||
305 | .left_margin = 11, .upper_margin = 2, | ||
306 | .right_margin = 30, .lower_margin = 0, | ||
307 | |||
308 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
309 | |||
310 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
311 | .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2), | ||
312 | }; | ||
313 | #endif | ||
314 | |||
315 | #ifdef LART_GREY_LCD | ||
316 | static struct sa1100fb_mach_info lart_grey_info __initdata = { | ||
317 | .pixclock = 150000, .bpp = 4, | ||
318 | .xres = 320, .yres = 240, | ||
319 | |||
320 | .hsync_len = 1, .vsync_len = 1, | ||
321 | .left_margin = 4, .upper_margin = 0, | ||
322 | .right_margin = 2, .lower_margin = 0, | ||
323 | |||
324 | .cmap_greyscale = 1, | ||
325 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
326 | |||
327 | .lccr0 = LCCR0_Mono | LCCR0_Sngl | LCCR0_Pas | LCCR0_4PixMono, | ||
328 | .lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512), | ||
329 | }; | ||
330 | #endif | ||
331 | #ifdef LART_COLOR_LCD | ||
332 | static struct sa1100fb_mach_info lart_color_info __initdata = { | ||
333 | .pixclock = 150000, .bpp = 16, | ||
334 | .xres = 320, .yres = 240, | ||
335 | |||
336 | .hsync_len = 2, .vsync_len = 3, | ||
337 | .left_margin = 69, .upper_margin = 14, | ||
338 | .right_margin = 8, .lower_margin = 4, | ||
339 | |||
340 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
341 | .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512), | ||
342 | }; | ||
343 | #endif | ||
344 | #ifdef LART_VIDEO_OUT | ||
345 | static struct sa1100fb_mach_info lart_video_info __initdata = { | ||
346 | .pixclock = 39721, .bpp = 16, | ||
347 | .xres = 640, .yres = 480, | ||
348 | |||
349 | .hsync_len = 95, .vsync_len = 2, | ||
350 | .left_margin = 40, .upper_margin = 32, | ||
351 | .right_margin = 24, .lower_margin = 11, | ||
352 | |||
353 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
354 | |||
355 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
356 | .lccr3 = LCCR3_OutEnL | LCCR3_PixFlEdg | LCCR3_ACBsDiv(512), | ||
357 | }; | ||
358 | #endif | ||
359 | |||
360 | #ifdef LART_KIT01_LCD | ||
361 | static struct sa1100fb_mach_info lart_kit01_info __initdata = { | ||
362 | .pixclock = 63291, .bpp = 16, | ||
363 | .xres = 640, .yres = 480, | ||
364 | |||
365 | .hsync_len = 64, .vsync_len = 3, | ||
366 | .left_margin = 122, .upper_margin = 45, | ||
367 | .right_margin = 10, .lower_margin = 10, | ||
368 | |||
369 | .lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act, | ||
370 | .lccr3 = LCCR3_OutEnH | LCCR3_PixFlEdg | ||
371 | }; | ||
372 | #endif | ||
373 | |||
374 | #ifdef CONFIG_SA1100_SHANNON | ||
375 | static struct sa1100fb_mach_info shannon_info __initdata = { | ||
376 | .pixclock = 152500, .bpp = 8, | ||
377 | .xres = 640, .yres = 480, | ||
378 | |||
379 | .hsync_len = 4, .vsync_len = 3, | ||
380 | .left_margin = 2, .upper_margin = 0, | ||
381 | .right_margin = 1, .lower_margin = 0, | ||
382 | |||
383 | .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, | ||
384 | |||
385 | .lccr0 = LCCR0_Color | LCCR0_Dual | LCCR0_Pas, | ||
386 | .lccr3 = LCCR3_ACBsDiv(512), | ||
387 | }; | ||
388 | #endif | ||
389 | |||
390 | 216 | ||
391 | 217 | ||
392 | static struct sa1100fb_mach_info * __init | ||
393 | sa1100fb_get_machine_info(struct sa1100fb_info *fbi) | ||
394 | { | ||
395 | struct sa1100fb_mach_info *inf = NULL; | ||
396 | |||
397 | /* | ||
398 | * R G B T | ||
399 | * default {11,5}, { 5,6}, { 0,5}, { 0,0} | ||
400 | * h3600 {12,4}, { 7,4}, { 1,4}, { 0,0} | ||
401 | * freebird { 8,4}, { 4,4}, { 0,4}, {12,4} | ||
402 | */ | ||
403 | #ifdef CONFIG_SA1100_ASSABET | ||
404 | if (machine_is_assabet()) { | ||
405 | #ifndef ASSABET_PAL_VIDEO | ||
406 | inf = &lq039q2ds54_info; | ||
407 | #else | ||
408 | inf = &pal_info; | ||
409 | #endif | ||
410 | } | ||
411 | #endif | ||
412 | #ifdef CONFIG_SA1100_H3100 | ||
413 | if (machine_is_h3100()) { | ||
414 | inf = &h3100_info; | ||
415 | } | ||
416 | #endif | ||
417 | #ifdef CONFIG_SA1100_H3600 | ||
418 | if (machine_is_h3600()) { | ||
419 | inf = &h3600_info; | ||
420 | fbi->rgb[RGB_16] = &h3600_rgb_16; | ||
421 | } | ||
422 | #endif | ||
423 | #ifdef CONFIG_SA1100_COLLIE | ||
424 | if (machine_is_collie()) { | ||
425 | inf = &collie_info; | ||
426 | } | ||
427 | #endif | ||
428 | #ifdef CONFIG_SA1100_LART | ||
429 | if (machine_is_lart()) { | ||
430 | #ifdef LART_GREY_LCD | ||
431 | inf = &lart_grey_info; | ||
432 | #endif | ||
433 | #ifdef LART_COLOR_LCD | ||
434 | inf = &lart_color_info; | ||
435 | #endif | ||
436 | #ifdef LART_VIDEO_OUT | ||
437 | inf = &lart_video_info; | ||
438 | #endif | ||
439 | #ifdef LART_KIT01_LCD | ||
440 | inf = &lart_kit01_info; | ||
441 | #endif | ||
442 | } | ||
443 | #endif | ||
444 | #ifdef CONFIG_SA1100_SHANNON | ||
445 | if (machine_is_shannon()) { | ||
446 | inf = &shannon_info; | ||
447 | } | ||
448 | #endif | ||
449 | return inf; | ||
450 | } | ||
451 | |||
452 | static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_info *); | 218 | static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_info *); |
453 | static void set_ctrlr_state(struct sa1100fb_info *fbi, u_int state); | 219 | static void set_ctrlr_state(struct sa1100fb_info *fbi, u_int state); |
454 | 220 | ||
@@ -533,7 +299,7 @@ sa1100fb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, | |||
533 | * is what you poke into the framebuffer to produce the | 299 | * is what you poke into the framebuffer to produce the |
534 | * colour you requested. | 300 | * colour you requested. |
535 | */ | 301 | */ |
536 | if (fbi->cmap_inverse) { | 302 | if (fbi->inf->cmap_inverse) { |
537 | red = 0xffff - red; | 303 | red = 0xffff - red; |
538 | green = 0xffff - green; | 304 | green = 0xffff - green; |
539 | blue = 0xffff - blue; | 305 | blue = 0xffff - blue; |
@@ -607,14 +373,14 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
607 | var->xres = MIN_XRES; | 373 | var->xres = MIN_XRES; |
608 | if (var->yres < MIN_YRES) | 374 | if (var->yres < MIN_YRES) |
609 | var->yres = MIN_YRES; | 375 | var->yres = MIN_YRES; |
610 | if (var->xres > fbi->max_xres) | 376 | if (var->xres > fbi->inf->xres) |
611 | var->xres = fbi->max_xres; | 377 | var->xres = fbi->inf->xres; |
612 | if (var->yres > fbi->max_yres) | 378 | if (var->yres > fbi->inf->yres) |
613 | var->yres = fbi->max_yres; | 379 | var->yres = fbi->inf->yres; |
614 | var->xres_virtual = max(var->xres_virtual, var->xres); | 380 | var->xres_virtual = max(var->xres_virtual, var->xres); |
615 | var->yres_virtual = max(var->yres_virtual, var->yres); | 381 | var->yres_virtual = max(var->yres_virtual, var->yres); |
616 | 382 | ||
617 | DPRINTK("var->bits_per_pixel=%d\n", var->bits_per_pixel); | 383 | dev_dbg(fbi->dev, "var->bits_per_pixel=%d\n", var->bits_per_pixel); |
618 | switch (var->bits_per_pixel) { | 384 | switch (var->bits_per_pixel) { |
619 | case 4: | 385 | case 4: |
620 | rgbidx = RGB_4; | 386 | rgbidx = RGB_4; |
@@ -638,16 +404,16 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
638 | var->blue = fbi->rgb[rgbidx]->blue; | 404 | var->blue = fbi->rgb[rgbidx]->blue; |
639 | var->transp = fbi->rgb[rgbidx]->transp; | 405 | var->transp = fbi->rgb[rgbidx]->transp; |
640 | 406 | ||
641 | DPRINTK("RGBT length = %d:%d:%d:%d\n", | 407 | dev_dbg(fbi->dev, "RGBT length = %d:%d:%d:%d\n", |
642 | var->red.length, var->green.length, var->blue.length, | 408 | var->red.length, var->green.length, var->blue.length, |
643 | var->transp.length); | 409 | var->transp.length); |
644 | 410 | ||
645 | DPRINTK("RGBT offset = %d:%d:%d:%d\n", | 411 | dev_dbg(fbi->dev, "RGBT offset = %d:%d:%d:%d\n", |
646 | var->red.offset, var->green.offset, var->blue.offset, | 412 | var->red.offset, var->green.offset, var->blue.offset, |
647 | var->transp.offset); | 413 | var->transp.offset); |
648 | 414 | ||
649 | #ifdef CONFIG_CPU_FREQ | 415 | #ifdef CONFIG_CPU_FREQ |
650 | printk(KERN_DEBUG "dma period = %d ps, clock = %d kHz\n", | 416 | dev_dbg(fbi->dev, "dma period = %d ps, clock = %d kHz\n", |
651 | sa1100fb_display_dma_period(var), | 417 | sa1100fb_display_dma_period(var), |
652 | cpufreq_get(smp_processor_id())); | 418 | cpufreq_get(smp_processor_id())); |
653 | #endif | 419 | #endif |
@@ -655,22 +421,10 @@ sa1100fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) | |||
655 | return 0; | 421 | return 0; |
656 | } | 422 | } |
657 | 423 | ||
658 | static inline void sa1100fb_set_truecolor(u_int is_true_color) | 424 | static void sa1100fb_set_visual(struct sa1100fb_info *fbi, u32 visual) |
659 | { | 425 | { |
660 | if (machine_is_assabet()) { | 426 | if (fbi->inf->set_visual) |
661 | #if 1 // phase 4 or newer Assabet's | 427 | fbi->inf->set_visual(visual); |
662 | if (is_true_color) | ||
663 | ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB); | ||
664 | else | ||
665 | ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB); | ||
666 | #else | ||
667 | // older Assabet's | ||
668 | if (is_true_color) | ||
669 | ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB); | ||
670 | else | ||
671 | ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB); | ||
672 | #endif | ||
673 | } | ||
674 | } | 428 | } |
675 | 429 | ||
676 | /* | 430 | /* |
@@ -683,11 +437,11 @@ static int sa1100fb_set_par(struct fb_info *info) | |||
683 | struct fb_var_screeninfo *var = &info->var; | 437 | struct fb_var_screeninfo *var = &info->var; |
684 | unsigned long palette_mem_size; | 438 | unsigned long palette_mem_size; |
685 | 439 | ||
686 | DPRINTK("set_par\n"); | 440 | dev_dbg(fbi->dev, "set_par\n"); |
687 | 441 | ||
688 | if (var->bits_per_pixel == 16) | 442 | if (var->bits_per_pixel == 16) |
689 | fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; | 443 | fbi->fb.fix.visual = FB_VISUAL_TRUECOLOR; |
690 | else if (!fbi->cmap_static) | 444 | else if (!fbi->inf->cmap_static) |
691 | fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; | 445 | fbi->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR; |
692 | else { | 446 | else { |
693 | /* | 447 | /* |
@@ -704,7 +458,7 @@ static int sa1100fb_set_par(struct fb_info *info) | |||
704 | 458 | ||
705 | palette_mem_size = fbi->palette_size * sizeof(u16); | 459 | palette_mem_size = fbi->palette_size * sizeof(u16); |
706 | 460 | ||
707 | DPRINTK("palette_mem_size = 0x%08lx\n", (u_long) palette_mem_size); | 461 | dev_dbg(fbi->dev, "palette_mem_size = 0x%08lx\n", palette_mem_size); |
708 | 462 | ||
709 | fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size); | 463 | fbi->palette_cpu = (u16 *)(fbi->map_cpu + PAGE_SIZE - palette_mem_size); |
710 | fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size; | 464 | fbi->palette_dma = fbi->map_dma + PAGE_SIZE - palette_mem_size; |
@@ -712,7 +466,7 @@ static int sa1100fb_set_par(struct fb_info *info) | |||
712 | /* | 466 | /* |
713 | * Set (any) board control register to handle new color depth | 467 | * Set (any) board control register to handle new color depth |
714 | */ | 468 | */ |
715 | sa1100fb_set_truecolor(fbi->fb.fix.visual == FB_VISUAL_TRUECOLOR); | 469 | sa1100fb_set_visual(fbi, fbi->fb.fix.visual); |
716 | sa1100fb_activate_var(var, fbi); | 470 | sa1100fb_activate_var(var, fbi); |
717 | 471 | ||
718 | return 0; | 472 | return 0; |
@@ -728,7 +482,7 @@ sa1100fb_set_cmap(struct fb_cmap *cmap, int kspc, int con, | |||
728 | /* | 482 | /* |
729 | * Make sure the user isn't doing something stupid. | 483 | * Make sure the user isn't doing something stupid. |
730 | */ | 484 | */ |
731 | if (!kspc && (fbi->fb.var.bits_per_pixel == 16 || fbi->cmap_static)) | 485 | if (!kspc && (fbi->fb.var.bits_per_pixel == 16 || fbi->inf->cmap_static)) |
732 | return -EINVAL; | 486 | return -EINVAL; |
733 | 487 | ||
734 | return gen_set_cmap(cmap, kspc, con, info); | 488 | return gen_set_cmap(cmap, kspc, con, info); |
@@ -775,7 +529,7 @@ static int sa1100fb_blank(int blank, struct fb_info *info) | |||
775 | struct sa1100fb_info *fbi = (struct sa1100fb_info *)info; | 529 | struct sa1100fb_info *fbi = (struct sa1100fb_info *)info; |
776 | int i; | 530 | int i; |
777 | 531 | ||
778 | DPRINTK("sa1100fb_blank: blank=%d\n", blank); | 532 | dev_dbg(fbi->dev, "sa1100fb_blank: blank=%d\n", blank); |
779 | 533 | ||
780 | switch (blank) { | 534 | switch (blank) { |
781 | case FB_BLANK_POWERDOWN: | 535 | case FB_BLANK_POWERDOWN: |
@@ -863,43 +617,43 @@ static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_ | |||
863 | u_int half_screen_size, yres, pcd; | 617 | u_int half_screen_size, yres, pcd; |
864 | u_long flags; | 618 | u_long flags; |
865 | 619 | ||
866 | DPRINTK("Configuring SA1100 LCD\n"); | 620 | dev_dbg(fbi->dev, "Configuring SA1100 LCD\n"); |
867 | 621 | ||
868 | DPRINTK("var: xres=%d hslen=%d lm=%d rm=%d\n", | 622 | dev_dbg(fbi->dev, "var: xres=%d hslen=%d lm=%d rm=%d\n", |
869 | var->xres, var->hsync_len, | 623 | var->xres, var->hsync_len, |
870 | var->left_margin, var->right_margin); | 624 | var->left_margin, var->right_margin); |
871 | DPRINTK("var: yres=%d vslen=%d um=%d bm=%d\n", | 625 | dev_dbg(fbi->dev, "var: yres=%d vslen=%d um=%d bm=%d\n", |
872 | var->yres, var->vsync_len, | 626 | var->yres, var->vsync_len, |
873 | var->upper_margin, var->lower_margin); | 627 | var->upper_margin, var->lower_margin); |
874 | 628 | ||
875 | #if DEBUG_VAR | 629 | #if DEBUG_VAR |
876 | if (var->xres < 16 || var->xres > 1024) | 630 | if (var->xres < 16 || var->xres > 1024) |
877 | printk(KERN_ERR "%s: invalid xres %d\n", | 631 | dev_err(fbi->dev, "%s: invalid xres %d\n", |
878 | fbi->fb.fix.id, var->xres); | 632 | fbi->fb.fix.id, var->xres); |
879 | if (var->hsync_len < 1 || var->hsync_len > 64) | 633 | if (var->hsync_len < 1 || var->hsync_len > 64) |
880 | printk(KERN_ERR "%s: invalid hsync_len %d\n", | 634 | dev_err(fbi->dev, "%s: invalid hsync_len %d\n", |
881 | fbi->fb.fix.id, var->hsync_len); | 635 | fbi->fb.fix.id, var->hsync_len); |
882 | if (var->left_margin < 1 || var->left_margin > 255) | 636 | if (var->left_margin < 1 || var->left_margin > 255) |
883 | printk(KERN_ERR "%s: invalid left_margin %d\n", | 637 | dev_err(fbi->dev, "%s: invalid left_margin %d\n", |
884 | fbi->fb.fix.id, var->left_margin); | 638 | fbi->fb.fix.id, var->left_margin); |
885 | if (var->right_margin < 1 || var->right_margin > 255) | 639 | if (var->right_margin < 1 || var->right_margin > 255) |
886 | printk(KERN_ERR "%s: invalid right_margin %d\n", | 640 | dev_err(fbi->dev, "%s: invalid right_margin %d\n", |
887 | fbi->fb.fix.id, var->right_margin); | 641 | fbi->fb.fix.id, var->right_margin); |
888 | if (var->yres < 1 || var->yres > 1024) | 642 | if (var->yres < 1 || var->yres > 1024) |
889 | printk(KERN_ERR "%s: invalid yres %d\n", | 643 | dev_err(fbi->dev, "%s: invalid yres %d\n", |
890 | fbi->fb.fix.id, var->yres); | 644 | fbi->fb.fix.id, var->yres); |
891 | if (var->vsync_len < 1 || var->vsync_len > 64) | 645 | if (var->vsync_len < 1 || var->vsync_len > 64) |
892 | printk(KERN_ERR "%s: invalid vsync_len %d\n", | 646 | dev_err(fbi->dev, "%s: invalid vsync_len %d\n", |
893 | fbi->fb.fix.id, var->vsync_len); | 647 | fbi->fb.fix.id, var->vsync_len); |
894 | if (var->upper_margin < 0 || var->upper_margin > 255) | 648 | if (var->upper_margin < 0 || var->upper_margin > 255) |
895 | printk(KERN_ERR "%s: invalid upper_margin %d\n", | 649 | dev_err(fbi->dev, "%s: invalid upper_margin %d\n", |
896 | fbi->fb.fix.id, var->upper_margin); | 650 | fbi->fb.fix.id, var->upper_margin); |
897 | if (var->lower_margin < 0 || var->lower_margin > 255) | 651 | if (var->lower_margin < 0 || var->lower_margin > 255) |
898 | printk(KERN_ERR "%s: invalid lower_margin %d\n", | 652 | dev_err(fbi->dev, "%s: invalid lower_margin %d\n", |
899 | fbi->fb.fix.id, var->lower_margin); | 653 | fbi->fb.fix.id, var->lower_margin); |
900 | #endif | 654 | #endif |
901 | 655 | ||
902 | new_regs.lccr0 = fbi->lccr0 | | 656 | new_regs.lccr0 = fbi->inf->lccr0 | |
903 | LCCR0_LEN | LCCR0_LDM | LCCR0_BAM | | 657 | LCCR0_LEN | LCCR0_LDM | LCCR0_BAM | |
904 | LCCR0_ERM | LCCR0_LtlEnd | LCCR0_DMADel(0); | 658 | LCCR0_ERM | LCCR0_LtlEnd | LCCR0_DMADel(0); |
905 | 659 | ||
@@ -914,7 +668,7 @@ static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_ | |||
914 | * the YRES parameter. | 668 | * the YRES parameter. |
915 | */ | 669 | */ |
916 | yres = var->yres; | 670 | yres = var->yres; |
917 | if (fbi->lccr0 & LCCR0_Dual) | 671 | if (fbi->inf->lccr0 & LCCR0_Dual) |
918 | yres /= 2; | 672 | yres /= 2; |
919 | 673 | ||
920 | new_regs.lccr2 = | 674 | new_regs.lccr2 = |
@@ -924,14 +678,14 @@ static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_ | |||
924 | LCCR2_EndFrmDel(var->lower_margin); | 678 | LCCR2_EndFrmDel(var->lower_margin); |
925 | 679 | ||
926 | pcd = get_pcd(var->pixclock, cpufreq_get(0)); | 680 | pcd = get_pcd(var->pixclock, cpufreq_get(0)); |
927 | new_regs.lccr3 = LCCR3_PixClkDiv(pcd) | fbi->lccr3 | | 681 | new_regs.lccr3 = LCCR3_PixClkDiv(pcd) | fbi->inf->lccr3 | |
928 | (var->sync & FB_SYNC_HOR_HIGH_ACT ? LCCR3_HorSnchH : LCCR3_HorSnchL) | | 682 | (var->sync & FB_SYNC_HOR_HIGH_ACT ? LCCR3_HorSnchH : LCCR3_HorSnchL) | |
929 | (var->sync & FB_SYNC_VERT_HIGH_ACT ? LCCR3_VrtSnchH : LCCR3_VrtSnchL); | 683 | (var->sync & FB_SYNC_VERT_HIGH_ACT ? LCCR3_VrtSnchH : LCCR3_VrtSnchL); |
930 | 684 | ||
931 | DPRINTK("nlccr0 = 0x%08lx\n", new_regs.lccr0); | 685 | dev_dbg(fbi->dev, "nlccr0 = 0x%08lx\n", new_regs.lccr0); |
932 | DPRINTK("nlccr1 = 0x%08lx\n", new_regs.lccr1); | 686 | dev_dbg(fbi->dev, "nlccr1 = 0x%08lx\n", new_regs.lccr1); |
933 | DPRINTK("nlccr2 = 0x%08lx\n", new_regs.lccr2); | 687 | dev_dbg(fbi->dev, "nlccr2 = 0x%08lx\n", new_regs.lccr2); |
934 | DPRINTK("nlccr3 = 0x%08lx\n", new_regs.lccr3); | 688 | dev_dbg(fbi->dev, "nlccr3 = 0x%08lx\n", new_regs.lccr3); |
935 | 689 | ||
936 | half_screen_size = var->bits_per_pixel; | 690 | half_screen_size = var->bits_per_pixel; |
937 | half_screen_size = half_screen_size * var->xres * var->yres / 16; | 691 | half_screen_size = half_screen_size * var->xres * var->yres / 16; |
@@ -951,9 +705,12 @@ static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_ | |||
951 | * Only update the registers if the controller is enabled | 705 | * Only update the registers if the controller is enabled |
952 | * and something has changed. | 706 | * and something has changed. |
953 | */ | 707 | */ |
954 | if ((LCCR0 != fbi->reg_lccr0) || (LCCR1 != fbi->reg_lccr1) || | 708 | if (readl_relaxed(fbi->base + LCCR0) != fbi->reg_lccr0 || |
955 | (LCCR2 != fbi->reg_lccr2) || (LCCR3 != fbi->reg_lccr3) || | 709 | readl_relaxed(fbi->base + LCCR1) != fbi->reg_lccr1 || |
956 | (DBAR1 != fbi->dbar1) || (DBAR2 != fbi->dbar2)) | 710 | readl_relaxed(fbi->base + LCCR2) != fbi->reg_lccr2 || |
711 | readl_relaxed(fbi->base + LCCR3) != fbi->reg_lccr3 || | ||
712 | readl_relaxed(fbi->base + DBAR1) != fbi->dbar1 || | ||
713 | readl_relaxed(fbi->base + DBAR2) != fbi->dbar2) | ||
957 | sa1100fb_schedule_work(fbi, C_REENABLE); | 714 | sa1100fb_schedule_work(fbi, C_REENABLE); |
958 | 715 | ||
959 | return 0; | 716 | return 0; |
@@ -967,18 +724,18 @@ static int sa1100fb_activate_var(struct fb_var_screeninfo *var, struct sa1100fb_ | |||
967 | */ | 724 | */ |
968 | static inline void __sa1100fb_backlight_power(struct sa1100fb_info *fbi, int on) | 725 | static inline void __sa1100fb_backlight_power(struct sa1100fb_info *fbi, int on) |
969 | { | 726 | { |
970 | DPRINTK("backlight o%s\n", on ? "n" : "ff"); | 727 | dev_dbg(fbi->dev, "backlight o%s\n", on ? "n" : "ff"); |
971 | 728 | ||
972 | if (sa1100fb_backlight_power) | 729 | if (fbi->inf->backlight_power) |
973 | sa1100fb_backlight_power(on); | 730 | fbi->inf->backlight_power(on); |
974 | } | 731 | } |
975 | 732 | ||
976 | static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on) | 733 | static inline void __sa1100fb_lcd_power(struct sa1100fb_info *fbi, int on) |
977 | { | 734 | { |
978 | DPRINTK("LCD power o%s\n", on ? "n" : "ff"); | 735 | dev_dbg(fbi->dev, "LCD power o%s\n", on ? "n" : "ff"); |
979 | 736 | ||
980 | if (sa1100fb_lcd_power) | 737 | if (fbi->inf->lcd_power) |
981 | sa1100fb_lcd_power(on); | 738 | fbi->inf->lcd_power(on); |
982 | } | 739 | } |
983 | 740 | ||
984 | static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi) | 741 | static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi) |
@@ -1008,14 +765,25 @@ static void sa1100fb_setup_gpio(struct sa1100fb_info *fbi) | |||
1008 | } | 765 | } |
1009 | 766 | ||
1010 | if (mask) { | 767 | if (mask) { |
768 | unsigned long flags; | ||
769 | |||
770 | /* | ||
771 | * SA-1100 requires the GPIO direction register set | ||
772 | * appropriately for the alternate function. Hence | ||
773 | * we set it here via bitmask rather than excessive | ||
774 | * fiddling via the GPIO subsystem - and even then | ||
775 | * we'll still have to deal with GAFR. | ||
776 | */ | ||
777 | local_irq_save(flags); | ||
1011 | GPDR |= mask; | 778 | GPDR |= mask; |
1012 | GAFR |= mask; | 779 | GAFR |= mask; |
780 | local_irq_restore(flags); | ||
1013 | } | 781 | } |
1014 | } | 782 | } |
1015 | 783 | ||
1016 | static void sa1100fb_enable_controller(struct sa1100fb_info *fbi) | 784 | static void sa1100fb_enable_controller(struct sa1100fb_info *fbi) |
1017 | { | 785 | { |
1018 | DPRINTK("Enabling LCD controller\n"); | 786 | dev_dbg(fbi->dev, "Enabling LCD controller\n"); |
1019 | 787 | ||
1020 | /* | 788 | /* |
1021 | * Make sure the mode bits are present in the first palette entry | 789 | * Make sure the mode bits are present in the first palette entry |
@@ -1024,43 +792,46 @@ static void sa1100fb_enable_controller(struct sa1100fb_info *fbi) | |||
1024 | fbi->palette_cpu[0] |= palette_pbs(&fbi->fb.var); | 792 | fbi->palette_cpu[0] |= palette_pbs(&fbi->fb.var); |
1025 | 793 | ||
1026 | /* Sequence from 11.7.10 */ | 794 | /* Sequence from 11.7.10 */ |
1027 | LCCR3 = fbi->reg_lccr3; | 795 | writel_relaxed(fbi->reg_lccr3, fbi->base + LCCR3); |
1028 | LCCR2 = fbi->reg_lccr2; | 796 | writel_relaxed(fbi->reg_lccr2, fbi->base + LCCR2); |
1029 | LCCR1 = fbi->reg_lccr1; | 797 | writel_relaxed(fbi->reg_lccr1, fbi->base + LCCR1); |
1030 | LCCR0 = fbi->reg_lccr0 & ~LCCR0_LEN; | 798 | writel_relaxed(fbi->reg_lccr0 & ~LCCR0_LEN, fbi->base + LCCR0); |
1031 | DBAR1 = fbi->dbar1; | 799 | writel_relaxed(fbi->dbar1, fbi->base + DBAR1); |
1032 | DBAR2 = fbi->dbar2; | 800 | writel_relaxed(fbi->dbar2, fbi->base + DBAR2); |
1033 | LCCR0 |= LCCR0_LEN; | 801 | writel_relaxed(fbi->reg_lccr0 | LCCR0_LEN, fbi->base + LCCR0); |
1034 | 802 | ||
1035 | if (machine_is_shannon()) { | 803 | if (machine_is_shannon()) |
1036 | GPDR |= SHANNON_GPIO_DISP_EN; | 804 | gpio_set_value(SHANNON_GPIO_DISP_EN, 1); |
1037 | GPSR |= SHANNON_GPIO_DISP_EN; | 805 | |
1038 | } | 806 | dev_dbg(fbi->dev, "DBAR1: 0x%08x\n", readl_relaxed(fbi->base + DBAR1)); |
1039 | 807 | dev_dbg(fbi->dev, "DBAR2: 0x%08x\n", readl_relaxed(fbi->base + DBAR2)); | |
1040 | DPRINTK("DBAR1 = 0x%08x\n", DBAR1); | 808 | dev_dbg(fbi->dev, "LCCR0: 0x%08x\n", readl_relaxed(fbi->base + LCCR0)); |
1041 | DPRINTK("DBAR2 = 0x%08x\n", DBAR2); | 809 | dev_dbg(fbi->dev, "LCCR1: 0x%08x\n", readl_relaxed(fbi->base + LCCR1)); |
1042 | DPRINTK("LCCR0 = 0x%08x\n", LCCR0); | 810 | dev_dbg(fbi->dev, "LCCR2: 0x%08x\n", readl_relaxed(fbi->base + LCCR2)); |
1043 | DPRINTK("LCCR1 = 0x%08x\n", LCCR1); | 811 | dev_dbg(fbi->dev, "LCCR3: 0x%08x\n", readl_relaxed(fbi->base + LCCR3)); |
1044 | DPRINTK("LCCR2 = 0x%08x\n", LCCR2); | ||
1045 | DPRINTK("LCCR3 = 0x%08x\n", LCCR3); | ||
1046 | } | 812 | } |
1047 | 813 | ||
1048 | static void sa1100fb_disable_controller(struct sa1100fb_info *fbi) | 814 | static void sa1100fb_disable_controller(struct sa1100fb_info *fbi) |
1049 | { | 815 | { |
1050 | DECLARE_WAITQUEUE(wait, current); | 816 | DECLARE_WAITQUEUE(wait, current); |
817 | u32 lccr0; | ||
1051 | 818 | ||
1052 | DPRINTK("Disabling LCD controller\n"); | 819 | dev_dbg(fbi->dev, "Disabling LCD controller\n"); |
1053 | 820 | ||
1054 | if (machine_is_shannon()) { | 821 | if (machine_is_shannon()) |
1055 | GPCR |= SHANNON_GPIO_DISP_EN; | 822 | gpio_set_value(SHANNON_GPIO_DISP_EN, 0); |
1056 | } | ||
1057 | 823 | ||
1058 | set_current_state(TASK_UNINTERRUPTIBLE); | 824 | set_current_state(TASK_UNINTERRUPTIBLE); |
1059 | add_wait_queue(&fbi->ctrlr_wait, &wait); | 825 | add_wait_queue(&fbi->ctrlr_wait, &wait); |
1060 | 826 | ||
1061 | LCSR = 0xffffffff; /* Clear LCD Status Register */ | 827 | /* Clear LCD Status Register */ |
1062 | LCCR0 &= ~LCCR0_LDM; /* Enable LCD Disable Done Interrupt */ | 828 | writel_relaxed(~0, fbi->base + LCSR); |
1063 | LCCR0 &= ~LCCR0_LEN; /* Disable LCD Controller */ | 829 | |
830 | lccr0 = readl_relaxed(fbi->base + LCCR0); | ||
831 | lccr0 &= ~LCCR0_LDM; /* Enable LCD Disable Done Interrupt */ | ||
832 | writel_relaxed(lccr0, fbi->base + LCCR0); | ||
833 | lccr0 &= ~LCCR0_LEN; /* Disable LCD Controller */ | ||
834 | writel_relaxed(lccr0, fbi->base + LCCR0); | ||
1064 | 835 | ||
1065 | schedule_timeout(20 * HZ / 1000); | 836 | schedule_timeout(20 * HZ / 1000); |
1066 | remove_wait_queue(&fbi->ctrlr_wait, &wait); | 837 | remove_wait_queue(&fbi->ctrlr_wait, &wait); |
@@ -1072,14 +843,15 @@ static void sa1100fb_disable_controller(struct sa1100fb_info *fbi) | |||
1072 | static irqreturn_t sa1100fb_handle_irq(int irq, void *dev_id) | 843 | static irqreturn_t sa1100fb_handle_irq(int irq, void *dev_id) |
1073 | { | 844 | { |
1074 | struct sa1100fb_info *fbi = dev_id; | 845 | struct sa1100fb_info *fbi = dev_id; |
1075 | unsigned int lcsr = LCSR; | 846 | unsigned int lcsr = readl_relaxed(fbi->base + LCSR); |
1076 | 847 | ||
1077 | if (lcsr & LCSR_LDD) { | 848 | if (lcsr & LCSR_LDD) { |
1078 | LCCR0 |= LCCR0_LDM; | 849 | u32 lccr0 = readl_relaxed(fbi->base + LCCR0) | LCCR0_LDM; |
850 | writel_relaxed(lccr0, fbi->base + LCCR0); | ||
1079 | wake_up(&fbi->ctrlr_wait); | 851 | wake_up(&fbi->ctrlr_wait); |
1080 | } | 852 | } |
1081 | 853 | ||
1082 | LCSR = lcsr; | 854 | writel_relaxed(lcsr, fbi->base + LCSR); |
1083 | return IRQ_HANDLED; | 855 | return IRQ_HANDLED; |
1084 | } | 856 | } |
1085 | 857 | ||
@@ -1268,7 +1040,7 @@ sa1100fb_freq_policy(struct notifier_block *nb, unsigned long val, | |||
1268 | switch (val) { | 1040 | switch (val) { |
1269 | case CPUFREQ_ADJUST: | 1041 | case CPUFREQ_ADJUST: |
1270 | case CPUFREQ_INCOMPATIBLE: | 1042 | case CPUFREQ_INCOMPATIBLE: |
1271 | printk(KERN_DEBUG "min dma period: %d ps, " | 1043 | dev_dbg(fbi->dev, "min dma period: %d ps, " |
1272 | "new clock %d kHz\n", sa1100fb_min_dma_period(fbi), | 1044 | "new clock %d kHz\n", sa1100fb_min_dma_period(fbi), |
1273 | policy->max); | 1045 | policy->max); |
1274 | /* todo: fill in min/max values */ | 1046 | /* todo: fill in min/max values */ |
@@ -1318,7 +1090,7 @@ static int sa1100fb_resume(struct platform_device *dev) | |||
1318 | * cache. Once this area is remapped, all virtual memory | 1090 | * cache. Once this area is remapped, all virtual memory |
1319 | * access to the video memory should occur at the new region. | 1091 | * access to the video memory should occur at the new region. |
1320 | */ | 1092 | */ |
1321 | static int __init sa1100fb_map_video_memory(struct sa1100fb_info *fbi) | 1093 | static int __devinit sa1100fb_map_video_memory(struct sa1100fb_info *fbi) |
1322 | { | 1094 | { |
1323 | /* | 1095 | /* |
1324 | * We reserve one page for the palette, plus the size | 1096 | * We reserve one page for the palette, plus the size |
@@ -1344,7 +1116,7 @@ static int __init sa1100fb_map_video_memory(struct sa1100fb_info *fbi) | |||
1344 | } | 1116 | } |
1345 | 1117 | ||
1346 | /* Fake monspecs to fill in fbinfo structure */ | 1118 | /* Fake monspecs to fill in fbinfo structure */ |
1347 | static struct fb_monspecs monspecs __initdata = { | 1119 | static struct fb_monspecs monspecs __devinitdata = { |
1348 | .hfmin = 30000, | 1120 | .hfmin = 30000, |
1349 | .hfmax = 70000, | 1121 | .hfmax = 70000, |
1350 | .vfmin = 50, | 1122 | .vfmin = 50, |
@@ -1352,10 +1124,11 @@ static struct fb_monspecs monspecs __initdata = { | |||
1352 | }; | 1124 | }; |
1353 | 1125 | ||
1354 | 1126 | ||
1355 | static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) | 1127 | static struct sa1100fb_info * __devinit sa1100fb_init_fbinfo(struct device *dev) |
1356 | { | 1128 | { |
1357 | struct sa1100fb_mach_info *inf; | 1129 | struct sa1100fb_mach_info *inf = dev->platform_data; |
1358 | struct sa1100fb_info *fbi; | 1130 | struct sa1100fb_info *fbi; |
1131 | unsigned i; | ||
1359 | 1132 | ||
1360 | fbi = kmalloc(sizeof(struct sa1100fb_info) + sizeof(u32) * 16, | 1133 | fbi = kmalloc(sizeof(struct sa1100fb_info) + sizeof(u32) * 16, |
1361 | GFP_KERNEL); | 1134 | GFP_KERNEL); |
@@ -1390,8 +1163,6 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) | |||
1390 | fbi->rgb[RGB_8] = &rgb_8; | 1163 | fbi->rgb[RGB_8] = &rgb_8; |
1391 | fbi->rgb[RGB_16] = &def_rgb_16; | 1164 | fbi->rgb[RGB_16] = &def_rgb_16; |
1392 | 1165 | ||
1393 | inf = sa1100fb_get_machine_info(fbi); | ||
1394 | |||
1395 | /* | 1166 | /* |
1396 | * People just don't seem to get this. We don't support | 1167 | * People just don't seem to get this. We don't support |
1397 | * anything but correct entries now, so panic if someone | 1168 | * anything but correct entries now, so panic if someone |
@@ -1402,13 +1173,10 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) | |||
1402 | panic("sa1100fb error: invalid LCCR3 fields set or zero " | 1173 | panic("sa1100fb error: invalid LCCR3 fields set or zero " |
1403 | "pixclock."); | 1174 | "pixclock."); |
1404 | 1175 | ||
1405 | fbi->max_xres = inf->xres; | ||
1406 | fbi->fb.var.xres = inf->xres; | 1176 | fbi->fb.var.xres = inf->xres; |
1407 | fbi->fb.var.xres_virtual = inf->xres; | 1177 | fbi->fb.var.xres_virtual = inf->xres; |
1408 | fbi->max_yres = inf->yres; | ||
1409 | fbi->fb.var.yres = inf->yres; | 1178 | fbi->fb.var.yres = inf->yres; |
1410 | fbi->fb.var.yres_virtual = inf->yres; | 1179 | fbi->fb.var.yres_virtual = inf->yres; |
1411 | fbi->max_bpp = inf->bpp; | ||
1412 | fbi->fb.var.bits_per_pixel = inf->bpp; | 1180 | fbi->fb.var.bits_per_pixel = inf->bpp; |
1413 | fbi->fb.var.pixclock = inf->pixclock; | 1181 | fbi->fb.var.pixclock = inf->pixclock; |
1414 | fbi->fb.var.hsync_len = inf->hsync_len; | 1182 | fbi->fb.var.hsync_len = inf->hsync_len; |
@@ -1419,14 +1187,16 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) | |||
1419 | fbi->fb.var.lower_margin = inf->lower_margin; | 1187 | fbi->fb.var.lower_margin = inf->lower_margin; |
1420 | fbi->fb.var.sync = inf->sync; | 1188 | fbi->fb.var.sync = inf->sync; |
1421 | fbi->fb.var.grayscale = inf->cmap_greyscale; | 1189 | fbi->fb.var.grayscale = inf->cmap_greyscale; |
1422 | fbi->cmap_inverse = inf->cmap_inverse; | ||
1423 | fbi->cmap_static = inf->cmap_static; | ||
1424 | fbi->lccr0 = inf->lccr0; | ||
1425 | fbi->lccr3 = inf->lccr3; | ||
1426 | fbi->state = C_STARTUP; | 1190 | fbi->state = C_STARTUP; |
1427 | fbi->task_state = (u_char)-1; | 1191 | fbi->task_state = (u_char)-1; |
1428 | fbi->fb.fix.smem_len = fbi->max_xres * fbi->max_yres * | 1192 | fbi->fb.fix.smem_len = inf->xres * inf->yres * |
1429 | fbi->max_bpp / 8; | 1193 | inf->bpp / 8; |
1194 | fbi->inf = inf; | ||
1195 | |||
1196 | /* Copy the RGB bitfield overrides */ | ||
1197 | for (i = 0; i < NR_RGB; i++) | ||
1198 | if (inf->rgb[i]) | ||
1199 | fbi->rgb[i] = inf->rgb[i]; | ||
1430 | 1200 | ||
1431 | init_waitqueue_head(&fbi->ctrlr_wait); | 1201 | init_waitqueue_head(&fbi->ctrlr_wait); |
1432 | INIT_WORK(&fbi->task, sa1100fb_task); | 1202 | INIT_WORK(&fbi->task, sa1100fb_task); |
@@ -1438,13 +1208,20 @@ static struct sa1100fb_info * __init sa1100fb_init_fbinfo(struct device *dev) | |||
1438 | static int __devinit sa1100fb_probe(struct platform_device *pdev) | 1208 | static int __devinit sa1100fb_probe(struct platform_device *pdev) |
1439 | { | 1209 | { |
1440 | struct sa1100fb_info *fbi; | 1210 | struct sa1100fb_info *fbi; |
1211 | struct resource *res; | ||
1441 | int ret, irq; | 1212 | int ret, irq; |
1442 | 1213 | ||
1214 | if (!pdev->dev.platform_data) { | ||
1215 | dev_err(&pdev->dev, "no platform LCD data\n"); | ||
1216 | return -EINVAL; | ||
1217 | } | ||
1218 | |||
1219 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | ||
1443 | irq = platform_get_irq(pdev, 0); | 1220 | irq = platform_get_irq(pdev, 0); |
1444 | if (irq < 0) | 1221 | if (irq < 0 || !res) |
1445 | return -EINVAL; | 1222 | return -EINVAL; |
1446 | 1223 | ||
1447 | if (!request_mem_region(0xb0100000, 0x10000, "LCD")) | 1224 | if (!request_mem_region(res->start, resource_size(res), "LCD")) |
1448 | return -EBUSY; | 1225 | return -EBUSY; |
1449 | 1226 | ||
1450 | fbi = sa1100fb_init_fbinfo(&pdev->dev); | 1227 | fbi = sa1100fb_init_fbinfo(&pdev->dev); |
@@ -1452,6 +1229,10 @@ static int __devinit sa1100fb_probe(struct platform_device *pdev) | |||
1452 | if (!fbi) | 1229 | if (!fbi) |
1453 | goto failed; | 1230 | goto failed; |
1454 | 1231 | ||
1232 | fbi->base = ioremap(res->start, resource_size(res)); | ||
1233 | if (!fbi->base) | ||
1234 | goto failed; | ||
1235 | |||
1455 | /* Initialize video memory */ | 1236 | /* Initialize video memory */ |
1456 | ret = sa1100fb_map_video_memory(fbi); | 1237 | ret = sa1100fb_map_video_memory(fbi); |
1457 | if (ret) | 1238 | if (ret) |
@@ -1459,14 +1240,16 @@ static int __devinit sa1100fb_probe(struct platform_device *pdev) | |||
1459 | 1240 | ||
1460 | ret = request_irq(irq, sa1100fb_handle_irq, 0, "LCD", fbi); | 1241 | ret = request_irq(irq, sa1100fb_handle_irq, 0, "LCD", fbi); |
1461 | if (ret) { | 1242 | if (ret) { |
1462 | printk(KERN_ERR "sa1100fb: request_irq failed: %d\n", ret); | 1243 | dev_err(&pdev->dev, "request_irq failed: %d\n", ret); |
1463 | goto failed; | 1244 | goto failed; |
1464 | } | 1245 | } |
1465 | 1246 | ||
1466 | #ifdef ASSABET_PAL_VIDEO | 1247 | if (machine_is_shannon()) { |
1467 | if (machine_is_assabet()) | 1248 | ret = gpio_request_one(SHANNON_GPIO_DISP_EN, |
1468 | ASSABET_BCR_clear(ASSABET_BCR_LCD_ON); | 1249 | GPIOF_OUT_INIT_LOW, "display enable"); |
1469 | #endif | 1250 | if (ret) |
1251 | goto err_free_irq; | ||
1252 | } | ||
1470 | 1253 | ||
1471 | /* | 1254 | /* |
1472 | * This makes sure that our colour bitfield | 1255 | * This makes sure that our colour bitfield |
@@ -1478,7 +1261,7 @@ static int __devinit sa1100fb_probe(struct platform_device *pdev) | |||
1478 | 1261 | ||
1479 | ret = register_framebuffer(&fbi->fb); | 1262 | ret = register_framebuffer(&fbi->fb); |
1480 | if (ret < 0) | 1263 | if (ret < 0) |
1481 | goto err_free_irq; | 1264 | goto err_reg_fb; |
1482 | 1265 | ||
1483 | #ifdef CONFIG_CPU_FREQ | 1266 | #ifdef CONFIG_CPU_FREQ |
1484 | fbi->freq_transition.notifier_call = sa1100fb_freq_transition; | 1267 | fbi->freq_transition.notifier_call = sa1100fb_freq_transition; |
@@ -1490,12 +1273,17 @@ static int __devinit sa1100fb_probe(struct platform_device *pdev) | |||
1490 | /* This driver cannot be unloaded at the moment */ | 1273 | /* This driver cannot be unloaded at the moment */ |
1491 | return 0; | 1274 | return 0; |
1492 | 1275 | ||
1276 | err_reg_fb: | ||
1277 | if (machine_is_shannon()) | ||
1278 | gpio_free(SHANNON_GPIO_DISP_EN); | ||
1493 | err_free_irq: | 1279 | err_free_irq: |
1494 | free_irq(irq, fbi); | 1280 | free_irq(irq, fbi); |
1495 | failed: | 1281 | failed: |
1282 | if (fbi) | ||
1283 | iounmap(fbi->base); | ||
1496 | platform_set_drvdata(pdev, NULL); | 1284 | platform_set_drvdata(pdev, NULL); |
1497 | kfree(fbi); | 1285 | kfree(fbi); |
1498 | release_mem_region(0xb0100000, 0x10000); | 1286 | release_mem_region(res->start, resource_size(res)); |
1499 | return ret; | 1287 | return ret; |
1500 | } | 1288 | } |
1501 | 1289 | ||
@@ -1505,6 +1293,7 @@ static struct platform_driver sa1100fb_driver = { | |||
1505 | .resume = sa1100fb_resume, | 1293 | .resume = sa1100fb_resume, |
1506 | .driver = { | 1294 | .driver = { |
1507 | .name = "sa11x0-fb", | 1295 | .name = "sa11x0-fb", |
1296 | .owner = THIS_MODULE, | ||
1508 | }, | 1297 | }, |
1509 | }; | 1298 | }; |
1510 | 1299 | ||
diff --git a/drivers/video/sa1100fb.h b/drivers/video/sa1100fb.h index 1c3b459865d8..fc5d4292fad6 100644 --- a/drivers/video/sa1100fb.h +++ b/drivers/video/sa1100fb.h | |||
@@ -10,44 +10,15 @@ | |||
10 | * for more details. | 10 | * for more details. |
11 | */ | 11 | */ |
12 | 12 | ||
13 | /* | 13 | #define LCCR0 0x0000 /* LCD Control Reg. 0 */ |
14 | * These are the bitfields for each | 14 | #define LCSR 0x0004 /* LCD Status Reg. */ |
15 | * display depth that we support. | 15 | #define DBAR1 0x0010 /* LCD DMA Base Address Reg. channel 1 */ |
16 | */ | 16 | #define DCAR1 0x0014 /* LCD DMA Current Address Reg. channel 1 */ |
17 | struct sa1100fb_rgb { | 17 | #define DBAR2 0x0018 /* LCD DMA Base Address Reg. channel 2 */ |
18 | struct fb_bitfield red; | 18 | #define DCAR2 0x001C /* LCD DMA Current Address Reg. channel 2 */ |
19 | struct fb_bitfield green; | 19 | #define LCCR1 0x0020 /* LCD Control Reg. 1 */ |
20 | struct fb_bitfield blue; | 20 | #define LCCR2 0x0024 /* LCD Control Reg. 2 */ |
21 | struct fb_bitfield transp; | 21 | #define LCCR3 0x0028 /* LCD Control Reg. 3 */ |
22 | }; | ||
23 | |||
24 | /* | ||
25 | * This structure describes the machine which we are running on. | ||
26 | */ | ||
27 | struct sa1100fb_mach_info { | ||
28 | u_long pixclock; | ||
29 | |||
30 | u_short xres; | ||
31 | u_short yres; | ||
32 | |||
33 | u_char bpp; | ||
34 | u_char hsync_len; | ||
35 | u_char left_margin; | ||
36 | u_char right_margin; | ||
37 | |||
38 | u_char vsync_len; | ||
39 | u_char upper_margin; | ||
40 | u_char lower_margin; | ||
41 | u_char sync; | ||
42 | |||
43 | u_int cmap_greyscale:1, | ||
44 | cmap_inverse:1, | ||
45 | cmap_static:1, | ||
46 | unused:29; | ||
47 | |||
48 | u_int lccr0; | ||
49 | u_int lccr3; | ||
50 | }; | ||
51 | 22 | ||
52 | /* Shadows for LCD controller registers */ | 23 | /* Shadows for LCD controller registers */ |
53 | struct sa1100fb_lcd_reg { | 24 | struct sa1100fb_lcd_reg { |
@@ -57,19 +28,11 @@ struct sa1100fb_lcd_reg { | |||
57 | unsigned long lccr3; | 28 | unsigned long lccr3; |
58 | }; | 29 | }; |
59 | 30 | ||
60 | #define RGB_4 (0) | ||
61 | #define RGB_8 (1) | ||
62 | #define RGB_16 (2) | ||
63 | #define NR_RGB 3 | ||
64 | |||
65 | struct sa1100fb_info { | 31 | struct sa1100fb_info { |
66 | struct fb_info fb; | 32 | struct fb_info fb; |
67 | struct device *dev; | 33 | struct device *dev; |
68 | struct sa1100fb_rgb *rgb[NR_RGB]; | 34 | const struct sa1100fb_rgb *rgb[NR_RGB]; |
69 | 35 | void __iomem *base; | |
70 | u_int max_bpp; | ||
71 | u_int max_xres; | ||
72 | u_int max_yres; | ||
73 | 36 | ||
74 | /* | 37 | /* |
75 | * These are the addresses we mapped | 38 | * These are the addresses we mapped |
@@ -88,12 +51,6 @@ struct sa1100fb_info { | |||
88 | dma_addr_t dbar1; | 51 | dma_addr_t dbar1; |
89 | dma_addr_t dbar2; | 52 | dma_addr_t dbar2; |
90 | 53 | ||
91 | u_int lccr0; | ||
92 | u_int lccr3; | ||
93 | u_int cmap_inverse:1, | ||
94 | cmap_static:1, | ||
95 | unused:30; | ||
96 | |||
97 | u_int reg_lccr0; | 54 | u_int reg_lccr0; |
98 | u_int reg_lccr1; | 55 | u_int reg_lccr1; |
99 | u_int reg_lccr2; | 56 | u_int reg_lccr2; |
@@ -109,6 +66,8 @@ struct sa1100fb_info { | |||
109 | struct notifier_block freq_transition; | 66 | struct notifier_block freq_transition; |
110 | struct notifier_block freq_policy; | 67 | struct notifier_block freq_policy; |
111 | #endif | 68 | #endif |
69 | |||
70 | const struct sa1100fb_mach_info *inf; | ||
112 | }; | 71 | }; |
113 | 72 | ||
114 | #define TO_INF(ptr,member) container_of(ptr,struct sa1100fb_info,member) | 73 | #define TO_INF(ptr,member) container_of(ptr,struct sa1100fb_info,member) |
@@ -130,15 +89,6 @@ struct sa1100fb_info { | |||
130 | #define SA1100_NAME "SA1100" | 89 | #define SA1100_NAME "SA1100" |
131 | 90 | ||
132 | /* | 91 | /* |
133 | * Debug macros | ||
134 | */ | ||
135 | #if DEBUG | ||
136 | # define DPRINTK(fmt, args...) printk("%s: " fmt, __func__ , ## args) | ||
137 | #else | ||
138 | # define DPRINTK(fmt, args...) | ||
139 | #endif | ||
140 | |||
141 | /* | ||
142 | * Minimum X and Y resolutions | 92 | * Minimum X and Y resolutions |
143 | */ | 93 | */ |
144 | #define MIN_XRES 64 | 94 | #define MIN_XRES 64 |
diff --git a/drivers/video/savage/savagefb_driver.c b/drivers/video/savage/savagefb_driver.c index beb495044b24..cee7803a0a1c 100644 --- a/drivers/video/savage/savagefb_driver.c +++ b/drivers/video/savage/savagefb_driver.c | |||
@@ -56,7 +56,6 @@ | |||
56 | #include <asm/io.h> | 56 | #include <asm/io.h> |
57 | #include <asm/irq.h> | 57 | #include <asm/irq.h> |
58 | #include <asm/pgtable.h> | 58 | #include <asm/pgtable.h> |
59 | #include <asm/system.h> | ||
60 | 59 | ||
61 | #ifdef CONFIG_MTRR | 60 | #ifdef CONFIG_MTRR |
62 | #include <asm/mtrr.h> | 61 | #include <asm/mtrr.h> |