diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/video/omap/lcd_ams_delta.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/video/omap/lcd_ams_delta.c')
-rw-r--r-- | drivers/video/omap/lcd_ams_delta.c | 102 |
1 files changed, 94 insertions, 8 deletions
diff --git a/drivers/video/omap/lcd_ams_delta.c b/drivers/video/omap/lcd_ams_delta.c index 1f7439955e02..6978ae4ef83a 100644 --- a/drivers/video/omap/lcd_ams_delta.c +++ b/drivers/video/omap/lcd_ams_delta.c | |||
@@ -24,13 +24,80 @@ | |||
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/io.h> | 25 | #include <linux/io.h> |
26 | #include <linux/delay.h> | 26 | #include <linux/delay.h> |
27 | #include <linux/lcd.h> | ||
27 | 28 | ||
28 | #include <mach/board-ams-delta.h> | 29 | #include <plat/board-ams-delta.h> |
29 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
30 | #include <mach/omapfb.h> | 31 | |
32 | #include "omapfb.h" | ||
31 | 33 | ||
32 | #define AMS_DELTA_DEFAULT_CONTRAST 112 | 34 | #define AMS_DELTA_DEFAULT_CONTRAST 112 |
33 | 35 | ||
36 | #define AMS_DELTA_MAX_CONTRAST 0x00FF | ||
37 | #define AMS_DELTA_LCD_POWER 0x0100 | ||
38 | |||
39 | |||
40 | /* LCD class device section */ | ||
41 | |||
42 | static int ams_delta_lcd; | ||
43 | |||
44 | static int ams_delta_lcd_set_power(struct lcd_device *dev, int power) | ||
45 | { | ||
46 | if (power == FB_BLANK_UNBLANK) { | ||
47 | if (!(ams_delta_lcd & AMS_DELTA_LCD_POWER)) { | ||
48 | omap_writeb(ams_delta_lcd & AMS_DELTA_MAX_CONTRAST, | ||
49 | OMAP_PWL_ENABLE); | ||
50 | omap_writeb(1, OMAP_PWL_CLK_ENABLE); | ||
51 | ams_delta_lcd |= AMS_DELTA_LCD_POWER; | ||
52 | } | ||
53 | } else { | ||
54 | if (ams_delta_lcd & AMS_DELTA_LCD_POWER) { | ||
55 | omap_writeb(0, OMAP_PWL_ENABLE); | ||
56 | omap_writeb(0, OMAP_PWL_CLK_ENABLE); | ||
57 | ams_delta_lcd &= ~AMS_DELTA_LCD_POWER; | ||
58 | } | ||
59 | } | ||
60 | return 0; | ||
61 | } | ||
62 | |||
63 | static int ams_delta_lcd_set_contrast(struct lcd_device *dev, int value) | ||
64 | { | ||
65 | if ((value >= 0) && (value <= AMS_DELTA_MAX_CONTRAST)) { | ||
66 | omap_writeb(value, OMAP_PWL_ENABLE); | ||
67 | ams_delta_lcd &= ~AMS_DELTA_MAX_CONTRAST; | ||
68 | ams_delta_lcd |= value; | ||
69 | } | ||
70 | return 0; | ||
71 | } | ||
72 | |||
73 | #ifdef CONFIG_LCD_CLASS_DEVICE | ||
74 | static int ams_delta_lcd_get_power(struct lcd_device *dev) | ||
75 | { | ||
76 | if (ams_delta_lcd & AMS_DELTA_LCD_POWER) | ||
77 | return FB_BLANK_UNBLANK; | ||
78 | else | ||
79 | return FB_BLANK_POWERDOWN; | ||
80 | } | ||
81 | |||
82 | static int ams_delta_lcd_get_contrast(struct lcd_device *dev) | ||
83 | { | ||
84 | if (!(ams_delta_lcd & AMS_DELTA_LCD_POWER)) | ||
85 | return 0; | ||
86 | |||
87 | return ams_delta_lcd & AMS_DELTA_MAX_CONTRAST; | ||
88 | } | ||
89 | |||
90 | static struct lcd_ops ams_delta_lcd_ops = { | ||
91 | .get_power = ams_delta_lcd_get_power, | ||
92 | .set_power = ams_delta_lcd_set_power, | ||
93 | .get_contrast = ams_delta_lcd_get_contrast, | ||
94 | .set_contrast = ams_delta_lcd_set_contrast, | ||
95 | }; | ||
96 | #endif | ||
97 | |||
98 | |||
99 | /* omapfb panel section */ | ||
100 | |||
34 | static int ams_delta_panel_init(struct lcd_panel *panel, | 101 | static int ams_delta_panel_init(struct lcd_panel *panel, |
35 | struct omapfb_device *fbdev) | 102 | struct omapfb_device *fbdev) |
36 | { | 103 | { |
@@ -47,10 +114,6 @@ static int ams_delta_panel_enable(struct lcd_panel *panel) | |||
47 | AMS_DELTA_LATCH2_LCD_NDISP); | 114 | AMS_DELTA_LATCH2_LCD_NDISP); |
48 | ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_VBLEN, | 115 | ams_delta_latch2_write(AMS_DELTA_LATCH2_LCD_VBLEN, |
49 | AMS_DELTA_LATCH2_LCD_VBLEN); | 116 | AMS_DELTA_LATCH2_LCD_VBLEN); |
50 | |||
51 | omap_writeb(1, OMAP_PWL_CLK_ENABLE); | ||
52 | omap_writeb(AMS_DELTA_DEFAULT_CONTRAST, OMAP_PWL_ENABLE); | ||
53 | |||
54 | return 0; | 117 | return 0; |
55 | } | 118 | } |
56 | 119 | ||
@@ -90,8 +153,31 @@ static struct lcd_panel ams_delta_panel = { | |||
90 | .get_caps = ams_delta_panel_get_caps, | 153 | .get_caps = ams_delta_panel_get_caps, |
91 | }; | 154 | }; |
92 | 155 | ||
156 | |||
157 | /* platform driver section */ | ||
158 | |||
93 | static int ams_delta_panel_probe(struct platform_device *pdev) | 159 | static int ams_delta_panel_probe(struct platform_device *pdev) |
94 | { | 160 | { |
161 | struct lcd_device *lcd_device = NULL; | ||
162 | #ifdef CONFIG_LCD_CLASS_DEVICE | ||
163 | int ret; | ||
164 | |||
165 | lcd_device = lcd_device_register("omapfb", &pdev->dev, NULL, | ||
166 | &ams_delta_lcd_ops); | ||
167 | |||
168 | if (IS_ERR(lcd_device)) { | ||
169 | ret = PTR_ERR(lcd_device); | ||
170 | dev_err(&pdev->dev, "failed to register device\n"); | ||
171 | return ret; | ||
172 | } | ||
173 | |||
174 | platform_set_drvdata(pdev, lcd_device); | ||
175 | lcd_device->props.max_contrast = AMS_DELTA_MAX_CONTRAST; | ||
176 | #endif | ||
177 | |||
178 | ams_delta_lcd_set_contrast(lcd_device, AMS_DELTA_DEFAULT_CONTRAST); | ||
179 | ams_delta_lcd_set_power(lcd_device, FB_BLANK_UNBLANK); | ||
180 | |||
95 | omapfb_register_panel(&ams_delta_panel); | 181 | omapfb_register_panel(&ams_delta_panel); |
96 | return 0; | 182 | return 0; |
97 | } | 183 | } |
@@ -123,12 +209,12 @@ struct platform_driver ams_delta_panel_driver = { | |||
123 | }, | 209 | }, |
124 | }; | 210 | }; |
125 | 211 | ||
126 | static int ams_delta_panel_drv_init(void) | 212 | static int __init ams_delta_panel_drv_init(void) |
127 | { | 213 | { |
128 | return platform_driver_register(&ams_delta_panel_driver); | 214 | return platform_driver_register(&ams_delta_panel_driver); |
129 | } | 215 | } |
130 | 216 | ||
131 | static void ams_delta_panel_drv_cleanup(void) | 217 | static void __exit ams_delta_panel_drv_cleanup(void) |
132 | { | 218 | { |
133 | platform_driver_unregister(&ams_delta_panel_driver); | 219 | platform_driver_unregister(&ams_delta_panel_driver); |
134 | } | 220 | } |