Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
Раскорчевать TS_LIB
sasamy
Добавлено 11.03.2011 23:00 Редактировалось 11.03.2011 23:05 Сообщение: 31
sasamy
4.70

Пункты: 76880
Регистрация: 14.08.2009
Попробуйте в обработчике прерываний вот это зауоментировать (поставить // там где плюсики)

Цитата

--- linux-2.6.31.12/drivers/input/touchscreen/ads7846.c 2010-01-18 21:30:45.000000000 +0300
+++ linux-2.6.31.12-rt21/drivers/input/touchscreen/ads7846.c 2010-10-08 21:15:15.000000000 +0400
@@ -753,8 +753,8 @@
unsigned long flags;

spin_lock_irqsave(&ts->lock, flags);
- if (likely(get_pendown_state(ts))) {
- if (!ts->irq_disabled) {
+// if (likely(get_pendown_state(ts))) {
+// if (!ts->irq_disabled) {
/* The ARM do_simple_IRQ() dispatcher doesn't act
* like the other dispatchers: it will report IRQs
* even after they've been disabled. We work around
@@ -765,8 +765,8 @@
ts->pending = 1;
hrtimer_start(&ts->timer, ktime_set(0, TS_POLL_DELAY),
HRTIMER_MODE_REL);
- }
- }
+// }
+// }
spin_unlock_irqrestore(&ts->lock, flags);

return IRQ_HANDLED;


сомневаюсь что это правильное решение в вашем случае но хотя бы попробуйте.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 12.03.2011 14:09 Сообщение: 32
Pavel Ivanchenko
Admin
4.39

Пункты: 91348
Регистрация: 24.03.2009
Пол: Мужчина
Я тут увлекся подключением "родного" контроллера TP (TSADCC) у 9G45, позже создам отдельную тему.
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 13.03.2011 14:05 Сообщение: 33
Pavel Ivanchenko
Admin
4.39

Пункты: 91348
Регистрация: 24.03.2009
Пол: Мужчина
Два дня интенсивных экспериментов, без результата, я пока иссяк ...
Итак, по поводу "Попробуйте в обработчике прерываний вот это зауоментировать ..", мы тогда бодались с тем, что от дребезга нажатия на экран ядро тихо падало (из-за каких то косяков с обработкой прерываний), а в этом случае виснет только драйвер и явно ожидая ответа (при возникающей ошибке при передаче команды контроллеру).
Первой була тупейшая идея - добавить в драйвер секундный таймер и тупо посылать команду чтения, чтобы выводить его из стопора.
В принципе, такой механизм оказался вполне приемлем, при общении через ts_print, при этом все работает, но в ts_test такой "пинок" весит драйвер (если после выйти из ts_test, этот "пинок" приведет драйвер в чувства).
Дальше я попытался сделать некий детект зависания драйвера, т.к. во время гклюка драйвер интенсивно крутится в hard_irq обработчике, детектор получился корявый.
Заметил странность (хотя, пожалуй, тут сплошные странности :)), количество вызовов обработчика парерывания hard_irq при работе утилиты ts_print и ts_test радикально различается, для ts_test это около сотни в секунду, а для ts_test это около тысячи в секунду (при условии постоянного нажатия на экран).
Пробовал играть с частотой SPI и более надежным чтением с шины - без результата.
Начал выкорчевывать ts_test, на предмет поиска причины, основная гипотеза была из-за синхронной наводки, т.е. нажали на экран - пошла SPI передача и синхронное обновление FB которое приводит к сбою SPI передачи, но похоже дело не в этом, никакой зависимости не обнаружил.
Привел ts_test к подобию ts_print (т.е. отключил все на экране), работает, но стоит вывести на экран начальную страницу (две строки и кнопки) и при этом во время работы не выводить ничего более на FB - этого уже достаточно для зависания драйвера. Причем, если прервать ts_test и запустить ts_print (с экраном от ts_test) тоже виснет, хотя, например, при выводе видео на экран повисания ts_test я не обнаруживал.

Мой текущий драйвер для экспериментов:Attachment file: uploads/forum/forum-138WwTTlwB-7.rar
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.03.2011 15:04 Сообщение: 34
sasamy
4.70

Пункты: 76880
Регистрация: 14.08.2009
А настройки передаваемые драйверу ads7846 пробовали менять в файле борды ?

static struct ads7846_platform_data ads_info = {
.model = 7843,
.x_min = 150,
....
итд
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 13.03.2011 15:09 Сообщение: 35
Pavel Ivanchenko
Admin
4.39

Пункты: 91348
Регистрация: 24.03.2009
Пол: Мужчина
Немного крутил, никакой разницы не заметил.
Спуститься к концу Подняться к началу
Персональная информация
sherr
Добавлено 13.03.2011 16:27 Редактировалось 13.03.2011 16:52 Сообщение: 36
sherr
0

Пункты: 6512
Регистрация: 02.11.2009
В таком случае три вопроса (возможно глупых)
1. Возможно ли в драйвере вообще убрать прерывания
(меня бы и поллинг устроил для начала)
2. На базе чего экспериментальная версия драйвера -
2,6,36 или 2,6,38 , и что она сейчас делает (секундный таймер итд),
3, У меня на рабочей частоте (кадровая 42/сек) вообще
не работает TS_test . Не могли бы вы прислать измененный
файл платы а также собранный zlinux и rootfs - для контроля - сравнения.

ps еще осмелюсь напомнить, что при 480х272 и даже 640х480 этот же драйвер на этом же экране не виснет вроде бы ...
Спуститься к концу Подняться к началу
Персональная информация
Pavel Ivanchenko
Добавлено 13.03.2011 16:49 Сообщение: 37
Pavel Ivanchenko
Admin
4.39

Пункты: 91348
Регистрация: 24.03.2009
Пол: Мужчина
1. Если сможете сделать, пожалуйста :)
2. на базе драйвера 2.6.38
3. могу
Сейчас виыяснил, что драйвер 2.6.38 даже на 4,3" панелях виснет (не сразу, но виснет).
Спуститься к концу Подняться к началу
Персональная информация
sherr
Добавлено 13.03.2011 16:55 Сообщение: 38
sherr
0

Пункты: 6512
Регистрация: 02.11.2009
Мал я пока драйверы ковырять
Файлики жду с нетерпением
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.03.2011 20:44 Сообщение: 39
sasamy
4.70

Пункты: 76880
Регистрация: 14.08.2009
Я тут посмотрел ядро которое с диском идет - там в конфигурации нет "виртуального регулятора"
Device Drivers --->
[*] Voltage and Current Regulator Support --->
[*] Provide a dummy regulator if regulator lookups fail

Я помню на 2.6.35 c imx233 без этого драйвер ads7846 вооще не заводился а тут все работает - какие-то изменения вносились ? но в любом случае нужно бы его включить.
Спуститься к концу Подняться к началу
Персональная информация
sherr
Добавлено 13.03.2011 21:45 Редактировалось 13.03.2011 23:07 Сообщение: 40
sherr
0

Пункты: 6512
Регистрация: 02.11.2009
Цитата
Я тут посмотрел ядро которое с диском идет - там в конфигурации нет "виртуального регулятора"
Device Drivers --->
[*] Voltage and Current Regulator Support --->
[*] Provide a dummy regulator if regulator lookups fail

Я помню на 2.6.35 c imx233 без этого драйвер ads7846 вооще не заводился а тут все работает - какие-то изменения вносились ? но в любом случае нужно бы его включить.

А чего этот регулятор будет регулировать в 9G45 ( понятно
что в IMX233 есть чего) ? Но, однакоб попробую вместе с переделанным драйвером.

Ну вот и попробовал - не помогло , более того теперь даже на пониженной частоте
не работает, хуже того - не работает даже при перешивке назад исходного ядра
и рутфс - это уж совсем ни в какие ворота...
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux