+ /* attempt to extract this from FB then */
+ ret = read_vscreeninfo(fbname, &pdata->phys_w, &pdata->phys_h);
+ if (ret != 0 && strcmp(fbname, "/dev/fb0") != 0) {
+ /* last resort */
+ ret = read_vscreeninfo("/dev/fb0", &pdata->phys_w, &pdata->phys_h);
+ }
+
+ if (ret != 0) {
+ err("VSCREENINFO has nothing meaningful");
+ return -1;
+ }
+
+ return 0;
+}
+
+static int osdl_setup_omap_layer(struct SDL_PrivateVideoData *pdata,
+ const char *fbname, int width, int height, int bpp, int *buffer_count)
+{
+ int x = 0, y = 0, w = width, h = height; /* layer size and pos */
+ int screen_w = w, screen_h = h;
+ int tmp_w, tmp_h;
+ const char *tmp;
+ int retval = -1;
+ int ret, fd;
+
+ pdata->layer_x = pdata->layer_y = pdata->layer_w = pdata->layer_h = 0;
+
+ if (pdata->phys_w != 0)
+ screen_w = pdata->phys_w;
+ if (pdata->phys_h != 0)
+ screen_h = pdata->phys_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_state *slayer;
+ slayer = calloc(1, sizeof(*slayer));
+ if (slayer == NULL)
+ goto out;
+
+ ret = ioctl(fd, OMAPFB_QUERY_PLANE, &slayer->pi_old);
+ if (ret != 0) {
+ err_perror("QUERY_PLANE");
+ goto out;
+ }
+
+ ret = ioctl(fd, OMAPFB_QUERY_MEM, &slayer->mi_old);
+ if (ret != 0) {
+ err_perror("QUERY_MEM");
+ goto out;
+ }
+
+ pdata->saved_layer = slayer;
+ }
+