diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-12 15:05:15 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-12 15:05:15 -0500 |
commit | d027db132b395dabfac208e52a7e510e441bb9d2 (patch) | |
tree | 24b055b2385f9848e77e646ce475991d8675c3c4 /drivers/video | |
parent | d01e4afdbb65e030fd6f1f96c30a558e2eb0f279 (diff) | |
parent | 5faf7cbb848da827f6ea1458b5a1c26a44e7510a (diff) |
Merge tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC updates from Olof Johansson:
"This contains the bulk of new SoC development for this merge window.
Two new platforms have been added, the sunxi platforms (Allwinner A1x
SoCs) by Maxime Ripard, and a generic Broadcom platform for a new
series of ARMv7 platforms from them, where the hope is that we can
keep the platform code generic enough to have them all share one mach
directory. The new Broadcom platform is contributed by Christian
Daudt.
Highbank has grown support for Calxeda's next generation of hardware,
ECX-2000.
clps711x has seen a lot of cleanup from Alexander Shiyan, and he's
also taken on maintainership of the platform.
Beyond this there has been a bunch of work from a number of people on
converting more platforms to IRQ domains, pinctrl conversion, cleanup
and general feature enablement across most of the active platforms."
Fix up trivial conflicts as per Olof.
* tag 'soc' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (174 commits)
mfd: vexpress-sysreg: Remove LEDs code
irqchip: irq-sunxi: Add terminating entry for sunxi_irq_dt_ids
clocksource: sunxi_timer: Add terminating entry for sunxi_timer_dt_ids
irq: versatile: delete dangling variable
ARM: sunxi: add missing include for mdelay()
ARM: EXYNOS: Avoid early use of of_machine_is_compatible()
ARM: dts: add node for PL330 MDMA1 controller for exynos4
ARM: EXYNOS: Add support for secondary CPU bring-up on Exynos4412
ARM: EXYNOS: add UART3 to DEBUG_LL ports
ARM: S3C24XX: Add clkdev entry for camif-upll clock
ARM: SAMSUNG: Add s3c24xx/s3c64xx CAMIF GPIO setup helpers
ARM: sunxi: Add missing sun4i.dtsi file
pinctrl: samsung: Do not initialise statics to 0
ARM i.MX6: remove gate_mask from pllv3
ARM i.MX6: Fix ethernet PLL clocks
ARM i.MX6: rename PLLs according to datasheet
ARM i.MX6: Add pwm support
ARM i.MX51: Add pwm support
ARM i.MX53: Add pwm support
ARM: mx5: Replace clk_register_clkdev with clock DT lookup
...
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/clps711xfb.c | 156 |
1 files changed, 19 insertions, 137 deletions
diff --git a/drivers/video/clps711xfb.c b/drivers/video/clps711xfb.c index f994c8b8f10a..63ecdf8f7baf 100644 --- a/drivers/video/clps711xfb.c +++ b/drivers/video/clps711xfb.c | |||
@@ -22,19 +22,15 @@ | |||
22 | #include <linux/mm.h> | 22 | #include <linux/mm.h> |
23 | #include <linux/module.h> | 23 | #include <linux/module.h> |
24 | #include <linux/kernel.h> | 24 | #include <linux/kernel.h> |
25 | #include <linux/seq_file.h> | ||
26 | #include <linux/slab.h> | 25 | #include <linux/slab.h> |
27 | #include <linux/fb.h> | 26 | #include <linux/fb.h> |
28 | #include <linux/init.h> | 27 | #include <linux/init.h> |
29 | #include <linux/proc_fs.h> | ||
30 | #include <linux/delay.h> | 28 | #include <linux/delay.h> |
31 | 29 | ||
32 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
33 | #include <asm/mach-types.h> | 31 | #include <asm/mach-types.h> |
34 | #include <linux/uaccess.h> | 32 | #include <linux/uaccess.h> |
35 | 33 | ||
36 | #include <mach/syspld.h> | ||
37 | |||
38 | struct fb_info *cfb; | 34 | struct fb_info *cfb; |
39 | 35 | ||
40 | #define CMAP_MAX_SIZE 16 | 36 | #define CMAP_MAX_SIZE 16 |
@@ -162,44 +158,12 @@ clps7111fb_set_par(struct fb_info *info) | |||
162 | 158 | ||
163 | static int clps7111fb_blank(int blank, struct fb_info *info) | 159 | static int clps7111fb_blank(int blank, struct fb_info *info) |
164 | { | 160 | { |
165 | if (blank) { | 161 | /* Enable/Disable LCD controller. */ |
166 | if (machine_is_edb7211()) { | 162 | if (blank) |
167 | /* Turn off the LCD backlight. */ | 163 | clps_writel(clps_readl(SYSCON1) & ~SYSCON1_LCDEN, SYSCON1); |
168 | clps_writeb(clps_readb(PDDR) & ~EDB_PD3_LCDBL, PDDR); | 164 | else |
169 | 165 | clps_writel(clps_readl(SYSCON1) | SYSCON1_LCDEN, SYSCON1); | |
170 | /* Power off the LCD DC-DC converter. */ | ||
171 | clps_writeb(clps_readb(PDDR) & ~EDB_PD1_LCD_DC_DC_EN, PDDR); | ||
172 | |||
173 | /* Delay for a little while (half a second). */ | ||
174 | udelay(100); | ||
175 | |||
176 | /* Power off the LCD panel. */ | ||
177 | clps_writeb(clps_readb(PDDR) & ~EDB_PD2_LCDEN, PDDR); | ||
178 | |||
179 | /* Power off the LCD controller. */ | ||
180 | clps_writel(clps_readl(SYSCON1) & ~SYSCON1_LCDEN, | ||
181 | SYSCON1); | ||
182 | } | ||
183 | } else { | ||
184 | if (machine_is_edb7211()) { | ||
185 | /* Power up the LCD controller. */ | ||
186 | clps_writel(clps_readl(SYSCON1) | SYSCON1_LCDEN, | ||
187 | SYSCON1); | ||
188 | |||
189 | /* Power up the LCD panel. */ | ||
190 | clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR); | ||
191 | |||
192 | /* Delay for a little while. */ | ||
193 | udelay(100); | ||
194 | 166 | ||
195 | /* Power up the LCD DC-DC converter. */ | ||
196 | clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN, | ||
197 | PDDR); | ||
198 | |||
199 | /* Turn on the LCD backlight. */ | ||
200 | clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR); | ||
201 | } | ||
202 | } | ||
203 | return 0; | 167 | return 0; |
204 | } | 168 | } |
205 | 169 | ||
@@ -214,63 +178,7 @@ static struct fb_ops clps7111fb_ops = { | |||
214 | .fb_imageblit = cfb_imageblit, | 178 | .fb_imageblit = cfb_imageblit, |
215 | }; | 179 | }; |
216 | 180 | ||
217 | static int backlight_proc_show(struct seq_file *m, void *v) | 181 | static void __devinit clps711x_guess_lcd_params(struct fb_info *info) |
218 | { | ||
219 | if (machine_is_edb7211()) { | ||
220 | seq_printf(m, "%d\n", | ||
221 | (clps_readb(PDDR) & EDB_PD3_LCDBL) ? 1 : 0); | ||
222 | } | ||
223 | |||
224 | return 0; | ||
225 | } | ||
226 | |||
227 | static int backlight_proc_open(struct inode *inode, struct file *file) | ||
228 | { | ||
229 | return single_open(file, backlight_proc_show, NULL); | ||
230 | } | ||
231 | |||
232 | static ssize_t backlight_proc_write(struct file *file, const char *buffer, | ||
233 | size_t count, loff_t *pos) | ||
234 | { | ||
235 | unsigned char char_value; | ||
236 | int value; | ||
237 | |||
238 | if (count < 1) { | ||
239 | return -EINVAL; | ||
240 | } | ||
241 | |||
242 | if (copy_from_user(&char_value, buffer, 1)) | ||
243 | return -EFAULT; | ||
244 | |||
245 | value = char_value - '0'; | ||
246 | |||
247 | if (machine_is_edb7211()) { | ||
248 | unsigned char port_d; | ||
249 | |||
250 | port_d = clps_readb(PDDR); | ||
251 | |||
252 | if (value) { | ||
253 | port_d |= EDB_PD3_LCDBL; | ||
254 | } else { | ||
255 | port_d &= ~EDB_PD3_LCDBL; | ||
256 | } | ||
257 | |||
258 | clps_writeb(port_d, PDDR); | ||
259 | } | ||
260 | |||
261 | return count; | ||
262 | } | ||
263 | |||
264 | static const struct file_operations backlight_proc_fops = { | ||
265 | .owner = THIS_MODULE, | ||
266 | .open = backlight_proc_open, | ||
267 | .read = seq_read, | ||
268 | .llseek = seq_lseek, | ||
269 | .release = single_release, | ||
270 | .write = backlight_proc_write, | ||
271 | }; | ||
272 | |||
273 | static void __init clps711x_guess_lcd_params(struct fb_info *info) | ||
274 | { | 182 | { |
275 | unsigned int lcdcon, syscon, size; | 183 | unsigned int lcdcon, syscon, size; |
276 | unsigned long phys_base = PAGE_OFFSET; | 184 | unsigned long phys_base = PAGE_OFFSET; |
@@ -358,7 +266,7 @@ static void __init clps711x_guess_lcd_params(struct fb_info *info) | |||
358 | info->fix.type = FB_TYPE_PACKED_PIXELS; | 266 | info->fix.type = FB_TYPE_PACKED_PIXELS; |
359 | } | 267 | } |
360 | 268 | ||
361 | int __init clps711xfb_init(void) | 269 | static int __devinit clps711x_fb_probe(struct platform_device *pdev) |
362 | { | 270 | { |
363 | int err = -ENOMEM; | 271 | int err = -ENOMEM; |
364 | 272 | ||
@@ -378,55 +286,29 @@ int __init clps711xfb_init(void) | |||
378 | 286 | ||
379 | fb_alloc_cmap(&cfb->cmap, CMAP_MAX_SIZE, 0); | 287 | fb_alloc_cmap(&cfb->cmap, CMAP_MAX_SIZE, 0); |
380 | 288 | ||
381 | if (!proc_create("backlight", 0444, NULL, &backlight_proc_fops)) { | ||
382 | printk("Couldn't create the /proc entry for the backlight.\n"); | ||
383 | return -EINVAL; | ||
384 | } | ||
385 | |||
386 | /* | ||
387 | * Power up the LCD | ||
388 | */ | ||
389 | if (machine_is_p720t()) { | ||
390 | PLD_LCDEN = PLD_LCDEN_EN; | ||
391 | PLD_PWR |= (PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON); | ||
392 | } | ||
393 | |||
394 | if (machine_is_edb7211()) { | ||
395 | /* Power up the LCD panel. */ | ||
396 | clps_writeb(clps_readb(PDDR) | EDB_PD2_LCDEN, PDDR); | ||
397 | |||
398 | /* Delay for a little while. */ | ||
399 | udelay(100); | ||
400 | |||
401 | /* Power up the LCD DC-DC converter. */ | ||
402 | clps_writeb(clps_readb(PDDR) | EDB_PD1_LCD_DC_DC_EN, PDDR); | ||
403 | |||
404 | /* Turn on the LCD backlight. */ | ||
405 | clps_writeb(clps_readb(PDDR) | EDB_PD3_LCDBL, PDDR); | ||
406 | } | ||
407 | |||
408 | err = register_framebuffer(cfb); | 289 | err = register_framebuffer(cfb); |
409 | 290 | ||
410 | out: return err; | 291 | out: return err; |
411 | } | 292 | } |
412 | 293 | ||
413 | static void __exit clps711xfb_exit(void) | 294 | static int __devexit clps711x_fb_remove(struct platform_device *pdev) |
414 | { | 295 | { |
415 | unregister_framebuffer(cfb); | 296 | unregister_framebuffer(cfb); |
416 | kfree(cfb); | 297 | kfree(cfb); |
417 | 298 | ||
418 | /* | 299 | return 0; |
419 | * Power down the LCD | ||
420 | */ | ||
421 | if (machine_is_p720t()) { | ||
422 | PLD_LCDEN = 0; | ||
423 | PLD_PWR &= ~(PLD_S4_ON|PLD_S3_ON|PLD_S2_ON|PLD_S1_ON); | ||
424 | } | ||
425 | } | 300 | } |
426 | 301 | ||
427 | module_init(clps711xfb_init); | 302 | static struct platform_driver clps711x_fb_driver = { |
428 | module_exit(clps711xfb_exit); | 303 | .driver = { |
304 | .name = "video-clps711x", | ||
305 | .owner = THIS_MODULE, | ||
306 | }, | ||
307 | .probe = clps711x_fb_probe, | ||
308 | .remove = __devexit_p(clps711x_fb_remove), | ||
309 | }; | ||
310 | module_platform_driver(clps711x_fb_driver); | ||
429 | 311 | ||
430 | MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>"); | 312 | MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>"); |
431 | MODULE_DESCRIPTION("CLPS711x framebuffer driver"); | 313 | MODULE_DESCRIPTION("CLPS711X framebuffer driver"); |
432 | MODULE_LICENSE("GPL"); | 314 | MODULE_LICENSE("GPL"); |