diff options
Diffstat (limited to 'drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c')
-rw-r--r-- | drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c | 67 |
1 files changed, 53 insertions, 14 deletions
diff --git a/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c b/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c index e75798edbb59..10267461991c 100644 --- a/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c +++ b/drivers/video/omap2/displays/panel-sharp-lq043t1dg01.c | |||
@@ -39,6 +39,41 @@ static struct omap_video_timings sharp_lq_timings = { | |||
39 | .vbp = 2, | 39 | .vbp = 2, |
40 | }; | 40 | }; |
41 | 41 | ||
42 | static int sharp_lq_panel_power_on(struct omap_dss_device *dssdev) | ||
43 | { | ||
44 | int r; | ||
45 | |||
46 | r = omapdss_dpi_display_enable(dssdev); | ||
47 | if (r) | ||
48 | goto err0; | ||
49 | |||
50 | /* wait couple of vsyncs until enabling the LCD */ | ||
51 | msleep(50); | ||
52 | |||
53 | if (dssdev->platform_enable) { | ||
54 | r = dssdev->platform_enable(dssdev); | ||
55 | if (r) | ||
56 | goto err1; | ||
57 | } | ||
58 | |||
59 | return 0; | ||
60 | err1: | ||
61 | omapdss_dpi_display_disable(dssdev); | ||
62 | err0: | ||
63 | return r; | ||
64 | } | ||
65 | |||
66 | static void sharp_lq_panel_power_off(struct omap_dss_device *dssdev) | ||
67 | { | ||
68 | if (dssdev->platform_disable) | ||
69 | dssdev->platform_disable(dssdev); | ||
70 | |||
71 | /* wait at least 5 vsyncs after disabling the LCD */ | ||
72 | msleep(100); | ||
73 | |||
74 | omapdss_dpi_display_disable(dssdev); | ||
75 | } | ||
76 | |||
42 | static int sharp_lq_panel_probe(struct omap_dss_device *dssdev) | 77 | static int sharp_lq_panel_probe(struct omap_dss_device *dssdev) |
43 | { | 78 | { |
44 | 79 | ||
@@ -58,36 +93,40 @@ static int sharp_lq_panel_enable(struct omap_dss_device *dssdev) | |||
58 | { | 93 | { |
59 | int r = 0; | 94 | int r = 0; |
60 | 95 | ||
96 | r = sharp_lq_panel_power_on(dssdev); | ||
97 | if (r) | ||
98 | return r; | ||
61 | 99 | ||
62 | /* wait couple of vsyncs until enabling the LCD */ | 100 | dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; |
63 | msleep(50); | ||
64 | |||
65 | if (dssdev->platform_enable) | ||
66 | r = dssdev->platform_enable(dssdev); | ||
67 | 101 | ||
68 | return r; | 102 | return 0; |
69 | } | 103 | } |
70 | 104 | ||
71 | static void sharp_lq_panel_disable(struct omap_dss_device *dssdev) | 105 | static void sharp_lq_panel_disable(struct omap_dss_device *dssdev) |
72 | { | 106 | { |
107 | sharp_lq_panel_power_off(dssdev); | ||
73 | 108 | ||
74 | if (dssdev->platform_disable) | 109 | dssdev->state = OMAP_DSS_DISPLAY_DISABLED; |
75 | dssdev->platform_disable(dssdev); | ||
76 | |||
77 | /* wait at least 5 vsyncs after disabling the LCD */ | ||
78 | |||
79 | msleep(100); | ||
80 | } | 110 | } |
81 | 111 | ||
82 | static int sharp_lq_panel_suspend(struct omap_dss_device *dssdev) | 112 | static int sharp_lq_panel_suspend(struct omap_dss_device *dssdev) |
83 | { | 113 | { |
84 | sharp_lq_panel_disable(dssdev); | 114 | sharp_lq_panel_power_off(dssdev); |
115 | dssdev->state = OMAP_DSS_DISPLAY_SUSPENDED; | ||
85 | return 0; | 116 | return 0; |
86 | } | 117 | } |
87 | 118 | ||
88 | static int sharp_lq_panel_resume(struct omap_dss_device *dssdev) | 119 | static int sharp_lq_panel_resume(struct omap_dss_device *dssdev) |
89 | { | 120 | { |
90 | return sharp_lq_panel_enable(dssdev); | 121 | int r = 0; |
122 | |||
123 | r = sharp_lq_panel_power_on(dssdev); | ||
124 | if (r) | ||
125 | return r; | ||
126 | |||
127 | dssdev->state = OMAP_DSS_DISPLAY_ACTIVE; | ||
128 | |||
129 | return 0; | ||
91 | } | 130 | } |
92 | 131 | ||
93 | static struct omap_dss_driver sharp_lq_driver = { | 132 | static struct omap_dss_driver sharp_lq_driver = { |