rename packages/ to recipes/ per earlier agreement
[openembedded.git] / recipes / linux / linux-omap-pm / 0009-DSS-OMAPFB-allocate-fbmem-only-for-fb0-or-if-spes.patch
1 From bd4fd1dd3be7ff31a6cf779f0683d617280ac92e Mon Sep 17 00:00:00 2001
2 From: Tomi Valkeinen <tomi.valkeinen@nokia.com>
3 Date: Wed, 7 Jan 2009 16:44:17 +0200
4 Subject: [PATCH] DSS: OMAPFB: allocate fbmem only for fb0, or if spesified in vram arg
5
6 ---
7  drivers/video/omap2/omapfb-main.c |   65 +++++++++++++++++++-----------------
8  1 files changed, 34 insertions(+), 31 deletions(-)
9
10 diff --git a/drivers/video/omap2/omapfb-main.c b/drivers/video/omap2/omapfb-main.c
11 index 76bd416..9dbff42 100644
12 --- a/drivers/video/omap2/omapfb-main.c
13 +++ b/drivers/video/omap2/omapfb-main.c
14 @@ -939,11 +939,12 @@ static int omapfb_alloc_fbmem_display(struct omapfb2_device *fbdev, int fbnum,
15                 break;
16         }
17  
18 -       size = display->panel->timings.x_res * display->panel->timings.y_res *
19 -               bytespp;
20 -
21 -       if (def_vram > size)
22 +       if (def_vram)
23                 size = def_vram;
24 +       else
25 +               size = display->panel->timings.x_res *
26 +                       display->panel->timings.y_res *
27 +                       bytespp;
28  
29         return omapfb_alloc_fbmem(fbdev, fbnum, size);
30  }
31 @@ -956,13 +957,25 @@ static int omapfb_allocate_all_fbs(struct omapfb2_device *fbdev)
32         memset(vrams, 0, sizeof(vrams));
33  
34         if (def_vram) {
35 -               char *p = def_vram;
36 +               char str[64];
37 +               char *tok, *s;
38 +
39 +               if (strlen(def_vram) > sizeof(str) - 1) {
40 +                       dev_err(fbdev->dev, "Illegal vram parameters\n");
41 +                       return -EINVAL;
42 +               }
43 +
44 +               strcpy(str, def_vram);
45 +
46 +               s = str;
47                 i = 0;
48  
49 -               while (true) {
50 +               while ((tok = strsep(&s, ","))) {
51                         unsigned long size;
52  
53 -                       size = memparse(p, &p);
54 +                       printk("param '%s'\n", tok);
55 +
56 +                       size = memparse(tok, NULL);
57  
58                         if (size == 0) {
59                                 dev_err(fbdev->dev, "illegal vram size\n");
60 @@ -970,19 +983,18 @@ static int omapfb_allocate_all_fbs(struct omapfb2_device *fbdev)
61                         }
62  
63                         vrams[i++] = size;
64 -
65 -                       if (*p != ',')
66 -                               break;
67 -
68 -                       p++;
69                 }
70         }
71  
72         for (i = 0; i < fbdev->num_fbs; i++) {
73 -               r = omapfb_alloc_fbmem_display(fbdev, i, vrams[i]);
74 +               /* allocate memory automatically only for fb0, or if
75 +                * excplicitly defined with vram option */
76 +               if (i == 0 || vrams[i] != 0) {
77 +                       r = omapfb_alloc_fbmem_display(fbdev, i, vrams[i]);
78  
79 -               if (r)
80 -                       return r;
81 +                       if (r)
82 +                               return r;
83 +               }
84         }
85  
86         for (i = 0; i < fbdev->num_fbs; i++) {
87 @@ -1167,24 +1179,15 @@ static int omapfb_create_framebuffers(struct omapfb2_device *fbdev)
88                         dev_err(fbdev->dev, "failed to change mode\n");
89         }
90  
91 -       /* Enable the first framebuffer that has overlay that is connected
92 -        * to display. Usually this would be the GFX plane. */
93 -       r = 0;
94 -       for (i = 0; i < fbdev->num_fbs; i++) {
95 -               struct omapfb_info *ofbi = FB2OFB(fbdev->fbs[i]);
96 -               int t;
97 +       /* Enable fb0 */
98 +       if (fbdev->num_fbs > 0) {
99 +               struct omapfb_info *ofbi = FB2OFB(fbdev->fbs[0]);
100  
101 -               for (t = 0; t < ofbi->num_overlays; t++) {
102 -                       struct omap_overlay *ovl = ofbi->overlays[t];
103 -                       if (ovl->manager && ovl->manager->display) {
104 -                               ovl->enable(ovl, 1);
105 -                               r = 1;
106 -                               break;
107 -                       }
108 -               }
109 +               if (ofbi->num_overlays > 0 ) {
110 +                       struct omap_overlay *ovl = ofbi->overlays[0];
111  
112 -               if (r)
113 -                       break;
114 +                       ovl->enable(ovl, 1);
115 +               }
116         }
117  
118         DBG("create_framebuffers done\n");
119 -- 
120 1.5.6.3
121