Вроде и I2C нормально работает и драйвер для TSC2007 есть. Но!
Кто будет делать - не забудьте поправить адрес Вашей TSC - по умолчанию стоит 0х48. Драйвер не видит отсутствие устройства на шине! А при обращении в /dev/event0 - падает с сегфолтом.
Дальше начинается интереснее - на TSC есть вывод pen_irq - назначение - по тычкам в тач формировать импульс для сигнала процу - что данные о положении надо читать. Ес-но на проце надо за энтим сигналом следить. А чтобы следить надо перферию настроить.
Смотрим в драйвер и видим что при открытии пытаются настроить запихав в NUC900_VA_IRQ+0х84 значение 0х1. Смотрю в даташит и в файло map.h... Ничего не понимаю - по данному дефайну тупо возвращается 0хF000 0000. В даташите такого адреса нет...
Попробовал пихнуть данные по аресу NUC900_PA_IRQ (0xF000 2000) - падаем с сешфолтом...
Проделки китайцев?
UPD: так драйвер завел, и даже перевел прерывание на IRQ2... Но так и осталось непонятно почему адрес не соответствует нужному...
NUC900_PA_IRQ - это физический адрес, именно он указан в документации.
NUC900_VA_IRQ - это виртуальный адрес, который linux присваивает группе регистров AIC.
Драйвер Linux'а работает с виртуальными адресами.
2 Artemius: спасибо. Так и подумал... но пред опыт (91SAM9260) был маленько другой - там адресация была прямая...
Еще вопросик: когда компилирую приложение при помощи arm-none-linux-gnueabi-xxx то при запуске на платформе выдает сообщение - not found. Понимаю что скомпилировано либо не тем либо неправильно. Но readelf показывает что это arm 32 little endian и далее... где я не прав?
а слово dinamic (наврал д.б. shared) там не фигурирует? если размер аппликухи небольшой, то ключ -static должен помочь горю..
или смотрите каких либ не хватает в системе..
Да, я ремапил область физических адресов в виртуальное пространство ядра. Просто я это делал явно, а тут - ... не совсем "правильный" подход, на мой взгляд.
Спасибо, попробую.
UPD: сейчас собрал ts_lib с ключом в configure --disable-shared... readelf в динамической секции показывает что есть зависимости от библиотек libdl, uclibc, libc. Раньше еще была libts... при попытке запуска на плате вылазит сообщение
# ts_calibrate
-sh: ts_calibrate: not found
Во всех папках lib вышеуказанные библиотеки есть...
Сборку производил экспортировав CC, CXX на всякий случай ARCH и CROSS_SOMPILE добавлял при make. Вроде все правильно и при сборке видно что компилер вызывается армовский, но не пашед...
Еще интереснее сейчас:
Ну что не может прочитать калибровочный файл - понятно, он просто пустой. Но вот что загрузить модуль не может:
помнится, я успешно собирал кросскомпилером tslib (для 9g45) - все работало..
поищу в понедельник - может архив остался с ключами для сборки
кстати, там баг был, касательно обсчета координат
сорцы брал с сайта Дебьяна
Буду признателен - не помешает. Однако дело кажется не в tslib, а в QT - я его собрал раньше чем тот tslib который есть сейчас. Пробую пересобрать QT - посмотрю что получится.
А не могли бы еще выложить файлик ts_calibrate собраный?
извиняюсь, ввел в заблуждение, похоже что-то другое собирал кроссом. а это собирал прямо на плате (сейчас не уточнить - все законсервированно)
насчет ts_calibrate посмотрю - точно должен лежать