#include <unistd.h>
#include <sys/ioctl.h>
#include <linux/fb.h>
-#include <termios.h>
+#include <linux/omapfb.h>
#include <linux/kd.h>
int main()
{
struct fb_var_screeninfo fbvar;
- struct termios kbd_termios;
+ struct omapfb_plane_info pi;
+ struct omapfb_mem_info mi;
int ret, fbdev, kbdfd;
- FILE *tios_f;
fbdev = open("/dev/fb0", O_RDWR);
if (fbdev == -1) {
- perror("open");
- return 1;
+ perror("open fb0");
+ goto end_fb0;
}
ret = ioctl(fbdev, FBIOGET_VSCREENINFO, &fbvar);
if (ret == -1) {
perror("FBIOGET_VSCREENINFO ioctl");
- goto end_fb;
+ goto end_fb0;
}
if (fbvar.yoffset != 0) {
printf("ok\n");
}
-end_fb:
- close(fbdev);
+end_fb0:
+ if (fbdev >= 0)
+ close(fbdev);
+
+ fbdev = open("/dev/fb1", O_RDWR);
+ if (fbdev == -1) {
+ perror("open fb1");
+ goto end_fb1;
+ }
+
+ ret = ioctl(fbdev, OMAPFB_QUERY_PLANE, &pi);
+ ret |= ioctl(fbdev, OMAPFB_QUERY_MEM, &mi);
+ if (ret != 0)
+ perror("QUERY_*");
- tios_f = fopen("/tmp/pico_tios", "rb");
- if (tios_f != NULL) {
- kbdfd = open("/dev/tty", O_RDWR);
- if (kbdfd == -1) {
- perror("open /dev/tty");
- return 1;
- }
+ pi.enabled = 0;
+ ret = ioctl(fbdev, OMAPFB_SETUP_PLANE, &pi);
+ if (ret != 0)
+ perror("SETUP_PLANE");
- if (fread(&kbd_termios, sizeof(kbd_termios), 1, tios_f) == 1) {
- if (ioctl(kbdfd, KDSETMODE, KD_TEXT) == -1)
- perror("KDSETMODE KD_TEXT");
+ mi.size = 0;
+ ret = ioctl(fbdev, OMAPFB_SETUP_MEM, &mi);
+ if (ret != 0)
+ perror("SETUP_MEM");
- printf("restoring termios.. ");
- if (tcsetattr(kbdfd, TCSAFLUSH, &kbd_termios) == -1)
- perror("tcsetattr");
- else
- printf("ok\n");
- }
+end_fb1:
+ if (fbdev >= 0)
+ close(fbdev);
- close(kbdfd);
- fclose(tios_f);
+ kbdfd = open("/dev/tty", O_RDWR);
+ if (kbdfd == -1) {
+ perror("open /dev/tty");
+ return 1;
}
+ if (ioctl(kbdfd, KDSETMODE, KD_TEXT) == -1)
+ perror("KDSETMODE KD_TEXT");
+
+ close(kbdfd);
+
return 0;
}