bvdd
Re: bvdd
Исходник драйвера есть в ядре Cacko и, думаю, pdaxrom тоже. Документации нет.CGen писал(а):Кто может подсказать толком, что это такое?
Я только знаю, что устройство в /dev , которое дает доступ к каким-то специфичным для pxa270 ресурсам.
Где взять документацию, исходники и т.д. ?
в ядре 2.6 нет такого драйвера. Есть pxafb_overlay - 2 оверлея экрана и один оверлей курсора (/dev/fb1, fb2, fb3).CGen писал(а):Интересует всё
Точнее, как я его могу использовать.
Хочу оптимизировать некоторые вещи под pxa270, чтобы можно было X не загружать (SDL и т.д.).
Всё что мне попадалось было на японском.
Я понял, что это похоже на оверлеи.
1й поддерживает RGB цвет, 2й YUV и RGB, и 3й (курсорный) RGB.
Инициализация происходит подобно обычным фреймбуферам (с указанием доп инфы для цвета).
Вобще вся инфа по оверлеям и оптимизации есть в даташитах и аппнотесах на процессор pxa27x.
конечно) я инитю его так:
vsrc - указатель на оверлей
Код: Выделить всё
#define PIX_FMT_RGB 0
#define PIX_FMT_YCbCr444 2
#define PIX_FMT_YCbCr422 3
#define PIX_FMT_YCbCr420 4
#define PXA_OVL_SETUP(fmt, xpos, ypos) (((fmt & 7) << 20) | ((ypos & 0x3ff) << 10) | ((xpos & 0x3ff)))
struct fb_fix_screeninfo fix;
struct fb_var_screeninfo var;
int fb_fd;
fb_fd = open("/dev/fb0", O_RDWR);
if (fb_fd == -1) {
perror("open fbdevice");
return 1;
}
if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fix) < 0) {
perror("ioctl FBIOGET_FSCREENINFO");
close(fb_fd);
return 1;
}
if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &var) < 0) {
perror("ioctl FBIOGET_VSCREENINFO");
close(fb_fd);
return 1;
}
close(fb_fd);
fb_fd = open("/dev/fb2", O_RDWR);
if (fb_fd == -1) {
perror("open fbdevice2");
return 0;
}
printf("/dev/fb2 OK\n");
var.xres = 320;
var.yres = 240;
var.nonstd = PXA_OVL_SETUP(PIX_FMT_RGB, 0, 0);
if (ioctl(fb_fd, FBIOPUT_VSCREENINFO, &var) < 0) {
perror("ioctl FBIOPUT_VSCREENINFO2");
close(fb_fd);
return 0;
}
if (ioctl(fb_fd, FBIOGET_FSCREENINFO, &fix) < 0) {
perror("ioctl FBIOGET_FSCREENINFO2");
close(fb_fd);
return 0;
}
if (ioctl(fb_fd, FBIOGET_VSCREENINFO, &var) < 0) {
perror("ioctl FBIOGET_VSCREENINFO2");
close(fb_fd);
return 0;
}
printf("width = %d\nheight = %d\npitch = %d\n", var.xres, var.yres, fix.line_length);
printf("need map %d\n", fix.line_length * var.yres);
vscr = (word *) mmap(NULL, fix.line_length * var.yres, PROT_READ | PROT_WRITE, MAP_FILE | MAP_SHARED, fb_fd, 0);
if ((unsigned char *) vscr == (unsigned char *)-1) {
perror("mmap framebuffer");
close(fb_fd);
return 0;
}