Да, хорошо кони бегут!
А я только начал задумываться о том, какой бы недорогой дисплей можно было бы подключить к 9260.
Мне кажется, что MI0220PT маловат размером, при том же разрешении можно и более 3 дюймов, например MI0320FT (3,2").
Цена в два раза выше, но в наличии.
Не дошло же до меня самого что mplayer-у можно явно указать декодер для звука :) Сказал я ему использовать mad и чудеса - больше 50% загрузка процессора на фильме не была. Пора распаивать кодек и переписать атмеловский драйвер чтобы отвязаться от spi на звуке :) а то с ним экран иногда подергивается.
Вот так я перекодировал видео
# mencoder pobeg.avi -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4:vhq:vqmin=2:vqmax=20:vmax_b_frames=2:vbitrate=256 -vf scale=176:128 -ofps 25 -lameopts cbr:br=96:aq=5:mode=3 -o 2.avi
Вот так запускал mplayer
# mplayer -ac mad 2.avi
а вот такой максимум был при воспроизведении
Разобрался с драйверами.Переписал под ls020 Ваш драйвер.Начал прицеплять и понял что у меня свободен только SPI1.Все бы ничего но единственный вывод CS отдан аудио-кодеку(такая вот плата) остальные 2 отданы оперативке.Хочу сделать через драйвер.Так и не понял какой вывод использовать как выбор чипа? что тогда написать в board-sam9260ek.c?
Типо:
{
.modalias ="ls020_lcd",
.chip_select =?????,
.max_speed_hz=200000,
.bus_num=1,
},
что в моем случае писать вместо вопросиков,
плата SK-MAT91SAM9260 аудио кодек скоро придет-распаяю.Так что у него CS отбирать не вариант(
В атмеловских драйверах используется програмное управление cs через gpio. В файле
arch/arm/mach-at91/at91sam9260_devices.c
есть такой массив, вкотром прописаны стандартные пины (как если бы cs управлялись аппаратно по даташиту) так вот мне кажется если вместо тех cs которые заняты памятью подствить любоые свободные gpio то все будет прекрасно работать
static const unsigned spi1_standard_cs[4] = { AT91_PIN_PB3, AT91_PIN_PC5, AT91_PIN_PC4, AT91_PIN_PC3 };
Например, есть свободный gpio AT91_PIN_PB5 и занят SPI1_NPCS1=AT91_PIN_PC5 под память, вписываем место AT91_PIN_PC5 в массив AT91_PIN_PB5 и указываем в описании соответствующий chip_select
Я собирал в buildroot с внешним тулчайном с uclibc и eabi, так что смотрите если что в package/multimedia/mplayer патчи лежат в этой же директории, ключи можно посмотреть в mplayer.mk. Пробовал сам собрать версию посвежее - не получилось, так что как говорится от добра добра не ищут - зачем новое если старое отлично работает :)
что-то тут не так - в какойто из них должно быть
at91_set_gpio_output(LCD_RS,0) как я понимаю
для чего такая длительаня задержка ?
неправильно - нужно передать адес а не значение, правильно будет
spi_write(spi, &type, 1);
Можно сразу перевести spi в 16 битный режим, в ls020 нет префиксного байта для команды или данных - там все передачи чисто 16 битные, надо только массивы инициализации скорректировать под 16 битные данные. Например вместо
static u16 INIT1[12]={
0xFDFD, 0xFDFD, 0xEF00, 0xEE04, 0x1B04, 0xFEFE,
0xFEFE, 0xEF90, 0x4A04, 0x7F3F, 0xEE04, 0x4306};
и тд - все команды в этом lcd 16 битные. Потом в probe вместо spi->bits_per_word = 8; заменить на spi->bits_per_word = 16;
при не нужно будет делать этот цикл
for(i = 0; i < MEM_LEN; i += 2) {
shadow[i] = buffer[i+1];
shadow[i+1] = buffer[i];
}
он съедает много от процессора а сразу передавать сам буфер - при этом нужно подругому выделить память под буфер - нужен когеретный с dma - чтобы был одновременный доступ и pdc и процессора к этому буферу, смотрите мой последний вариант. При этом нужен буфер в два раза больше - еще такой же для приема из-за глюка в атмеловском драйвере spi - он неправильно разбивает на куски буфер длинней страницы памяти в 4 кб - это все нужно чтобы сообщить драйверу spi что наш буфер уже смапен на dma и передать ему физические адреса этих буферов - через spi_write это невозможно сделать, только через spi_sync которому передается не просто адрес буфера а полная информация в структуре spi_transfer. Это то что с наскоку разглядел - к сожаление в этом форуме не работает форматирование кода.