+ /* attempt to extract this from FB then */
+ fd = open(fbname, O_RDWR);
+ if (fd == -1) {
+ err_perror("open %s", fbname);
+ return -1;
+ }
+
+ ret = ioctl(fd, FBIOGET_VSCREENINFO, &fbvar);
+ close(fd);
+ if (ret == -1) {
+ err_perror("ioctl %s", fbname);
+ return -1;
+ }
+
+ if (fbvar.xres == 0 || fbvar.yres == 0) {
+ err("VSCREENINFO has nothing meaningful");
+ return -1;
+ }
+
+ pdata->screen_w = fbvar.xres;
+ pdata->screen_h = fbvar.yres;
+ return 0;
+}
+
+static int osdl_setup_omap_layer(struct SDL_PrivateVideoData *pdata,
+ const char *fbname, int width, int height, int bpp)
+{
+ int x = 0, y = 0, w = width, h = height; /* layer size and pos */
+ int screen_w = w, screen_h = h;
+ const char *tmp;
+ int ret, fd;
+
+ if (pdata->screen_w != 0)
+ screen_w = pdata->screen_w;
+ if (pdata->screen_h != 0)
+ screen_h = pdata->screen_h;
+
+ fd = open(fbname, O_RDWR);
+ if (fd == -1) {
+ err_perror("open %s", fbname);
+ return -1;
+ }
+
+ /* FIXME: assuming layer doesn't change here */
+ if (pdata->saved_layer == NULL) {
+ struct omapfb_saved_layer *slayer;
+ slayer = calloc(1, sizeof(*slayer));
+ if (slayer == NULL)
+ return -1;
+
+ ret = ioctl(fd, OMAPFB_QUERY_PLANE, &slayer->pi);
+ if (ret != 0) {
+ err_perror("QUERY_PLANE");
+ return -1;
+ }
+
+ ret = ioctl(fd, OMAPFB_QUERY_MEM, &slayer->mi);
+ if (ret != 0) {
+ err_perror("QUERY_MEM");
+ return -1;
+ }
+
+ pdata->saved_layer = slayer;
+ }
+