ecos-rtos.in.ua 0 28 ноября, 2009 Опубликовано 28 ноября, 2009 · Жалоба Случилась у меня неприятность, отломалась ножка SDA на процесоре AT91SAM9260. Пришлось использовать драйвер i2c_gpio и свободный вывод. Теперь такая ситуация: все микросхемы на шине i2c работают (RTC, цифровой потенциометр, расширитель портов), не работает только ics1523, которая у меня отвечает за раздачу частот разверток на видеоконтроллер epson. Посмотрел я код драйвера ics1523, но он жестко завязан на аппаратный twi at91. Вопрос, реально ли переписать на использование драйвера i2c_gpio? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecos-rtos.in.ua 0 29 ноября, 2009 Опубликовано 29 ноября, 2009 · Жалоба Немного мыслей вслух. 1. Вызов функции at91_ics1523_SetTWIClock(60000). Можно не использовать, если частота фиксирована - 100кГц? 2. Вместо функций чтения и записи можно использовать i2c_smbus_read_byte() i2c_smbus_write_byte()? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
S_agent 0 3 декабря, 2009 Опубликовано 3 декабря, 2009 · Жалоба Немного мыслей вслух. 1. Вызов функции at91_ics1523_SetTWIClock(60000). Можно не использовать, если частота фиксирована - 100кГц? 2. Вместо функций чтения и записи можно использовать i2c_smbus_read_byte() i2c_smbus_write_byte()? можно, только похоже что наличие аппаратного(прямого) доступа к иис в этом драйвере обусловлено тем что он вызывается ранее системного иис. Посему убедитесь что инит видео будет происходить позже системного иис. ics1523 - будет уверенно работать на 100кГц. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecos-rtos.in.ua 0 12 декабря, 2009 Опубликовано 12 декабря, 2009 · Жалоба Написал на основе pcf8574 драйвер для ics1523, как для i2c chip. Получаю ошибку, не могу понять почему i2c-gpio i2c-gpio: using pins 55 (SDA) and 38 (SCL) ICS1523 Probe Run ICS1523 Init Run ICS1523 Inititialisatio START Unable to handle kernel NULL pointer dereference at virtual address 00000028 pgd = c0004000 [00000028] *pgd=00000000 Internal error: Oops: 5 [#1] Modules linked in: CPU: 0 Not tainted (2.6.27 #705) PC is at i2c_smbus_write_byte_data+0x10/0x4c LR is at ics1523_probe+0x64/0x1c4 pc : [<c0163f98>] lr : [<c01677f4>] psr: 60000013 sp : c3819dc8 ip : c3819e10 fp : c3819e0c r10: 00000000 r9 : 00000000 r8 : 00000000 r7 : c0291888 r6 : c0167790 r5 : c394f2c0 r4 : c395d200 r3 : c0284480 r2 : 00000000 r1 : 00000000 r0 : 00000026 Flags: nZCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel Control: 0005317f Table: 20004000 DAC: 00000017 Process swapper (pid: 1, stack limit = 0xc3818268) Stack: (0xc3819dc8 to 0xc381a000) 9dc0: c0291888 00000000 00000000 00000000 c3819dfc c3819de8 9de0: c01fa3a8 c0033f28 c395d200 c3819e04 c3819e34 c3819e10 c01677e4 c01fa394 9e00: c3819e34 c3819e10 c01677f4 c0163f98 00000008 c395d220 c395d200 c0167790 9e20: c0291888 00000000 c3819e54 c3819e38 c0163574 c01677a0 00000001 c395d220 9e40: c02918b4 c02918b4 c3819e74 c3819e58 c0121cf4 c0163500 c395d220 c395d2cc 9e60: c02918b4 00000000 c3819e94 c3819e78 c0121df0 c0121c30 c3834298 c02918b4 9e80: c0121da4 00000000 c3819ec4 c3819e98 c012157c c0121db4 c3920ae0 c3834298 9ea0: c3834298 c395d268 c00f5a0c c02918b4 c3920ae0 c0291154 c3819ed4 c3819ec8 9ec0: c0121b38 c012153c c3819f04 c3819ed8 c0120e58 c0121b28 c02614c6 c0015a60 9ee0: c0291888 c02918b4 c0015a60 c0291888 00000000 00000000 c3819f2c c3819f08 9f00: c0121fe4 c0120dc0 00000000 c0291154 c0015a60 c0291888 00000000 00000000 9f20: c3819f4c c3819f30 c0164940 c0121f5c c3818000 c001a140 c0015a60 00000000 9f40: c3819f5c c3819f50 c0015a78 c01648d0 c3819fd4 c3819f60 c001e284 c0015a70 9f60: c3819f8c c3819f70 c00abcb0 c00aba28 c3819f00 c3832260 c00abdb4 0000007f 9f80: c3819fbc c3819f90 c00553b8 c00abc40 c3819fac 00373231 00000000 c0010000 9fa0: 000000c0 c0019f30 00000000 00000000 c3819fd4 c001a140 c0019f30 00000000 9fc0: 00000000 00000000 c3819ff4 c3819fd8 c0008410 c001e240 00000000 00000001 9fe0: 00000000 00000000 00000000 c3819ff8 c0035c34 c00083a4 ffffffff bfbfffbf Backtrace: [<c0163f88>] (i2c_smbus_write_byte_data+0x0/0x4c) from [<c01677f4>] (ics1523_probe+0x64/0x1c4) [<c0167790>] (ics1523_probe+0x0/0x1c4) from [<c0163574>] (i2c_device_probe+0x84/0xa0) r8:00000000 r7:c0291888 r6:c0167790 r5:c395d200 r4:c395d220 r3:00000008 [<c01634f0>] (i2c_device_probe+0x0/0xa0) from [<c0121cf4>] (driver_probe_device+0xd4/0x184) r7:c02918b4 r6:c02918b4 r5:c395d220 r4:00000001 [<c0121c20>] (driver_probe_device+0x0/0x184) from [<c0121df0>] (__driver_attach+0x4c/0x70) r7:00000000 r6:c02918b4 r5:c395d2cc r4:c395d220 [<c0121da4>] (__driver_attach+0x0/0x70) from [<c012157c>] (bus_for_each_dev+0x50/0x80) r6:00000000 r5:c0121da4 r4:c02918b4 r3:c3834298 [<c012152c>] (bus_for_each_dev+0x0/0x80) from [<c0121b38>] (driver_attach+0x20/0x28) r6:c0291154 r5:c3920ae0 r4:c02918b4 [<c0121b18>] (driver_attach+0x0/0x28) from [<c0120e58>] (bus_add_driver+0xa8/0x210) [<c0120db0>] (bus_add_driver+0x0/0x210) from [<c0121fe4>] (driver_register+0x98/0x124) r8:00000000 r7:00000000 r6:c0291888 r5:c0015a60 r4:c02918b4 [<c0121f4c>] (driver_register+0x0/0x124) from [<c0164940>] (i2c_register_driver+0x80/0xdc) r8:00000000 r7:00000000 r6:c0291888 r5:c0015a60 r4:c0291154 r3:00000000 [<c01648c0>] (i2c_register_driver+0x0/0xdc) from [<c0015a78>] (ics1523_init+0x18/0x20) r6:00000000 r5:c0015a60 r4:c001a140 r3:c3818000 [<c0015a60>] (ics1523_init+0x0/0x20) from [<c001e284>] (do_one_initcall+0x54/0x184) [<c001e230>] (do_one_initcall+0x0/0x184) from [<c0008410>] (kernel_init+0x7c/0xf0) r8:00000000 r7:00000000 r6:00000000 r5:c0019f30 r4:c001a140 [<c0008394>] (kernel_init+0x0/0xf0) from [<c0035c34>] (do_exit+0x0/0x6e0) r5:00000000 r4:00000000 Code: e1a0c00d e92dd800 e24cb004 e24dd038 (e1d0e0b2) ---[ end trace 3c912652fab3ebf6 ]--- Kernel panic - not syncing: Attempted to kill init! Вылетает на строке i2c_smbus_write_byte_data (ICS_ADDR, ICS_ICR, 0); Что я делаю не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 13 декабря, 2009 Опубликовано 13 декабря, 2009 (изменено) · Жалоба Вылетает на строке i2c_smbus_write_byte_data (ICS_ADDR, ICS_ICR, 0); Что я делаю не так? Судя по заглавным буквам ICS_ADDR - это какая-то константа а должен передаваться указатель на структуру i2c_client s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value) а вообще - как искать ошибку в коде которого в глаза никто не видел - непонятно... хотя по такой ошибке можно сказать что все довольно печально там :) Изменено 13 декабря, 2009 пользователем sasamy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecos-rtos.in.ua 0 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба Судя по заглавным буквам ICS_ADDR - это какая-то константа а должен передаваться указатель на структуру i2c_client s32 i2c_smbus_write_byte_data(struct i2c_client *client, u8 command, u8 value) а вообще - как искать ошибку в коде которого в глаза никто не видел - непонятно... хотя по такой ошибке можно сказать что все довольно печально там :) За пинок в правильном направлении спасибо, помогло, поставил вместо ICS_ADDR client, все стало намного веселей. P.S. У меня ICS_ADDR 0x26 // ICS1523 address Теперь лог выглядит так ... ICS1523 Probe Run ICS1523 Init Run ICS1523 Inititialisatio START ICS1523 Initialisation STOP =======> nb_trial:1,ack:0,status:0xfe ... Вопрос к тем у кого такая-же плата (Siberia). Какие частоты должны выдаваться микросхемой? Какое значение переменной status у вас? Посему убедитесь что инит видео будет происходить позже системного иис. Как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба За пинок в правильном направлении спасибо Пожалуйста :) Как? Например я вижу это так - инициализировать синтезатор не в момент выполнения board-файла а позднее при загрузке модуля s1d13xxxfb.c, и тут два варианта: В1 делать динамические модули и явно указывать порядок загрузки В2 для статически слинкованых модулей - изменить порядок линковки в соответствующем Makefile в дереве исходников ядра. При этом я бы попробовал так: 1 переместить код инициализации в board-файле в радел драйвера платформы. Например см. board-yl-9200.c #if defined(CONFIG_FB_S1D135XX) || defined(CONFIG_FB_S1D13XXX_MODULE) #include <video/s1d13xxxfb.h> static void __init yl9200_init_video(void) { /* здесь инициализируем что нам нужно в том числе синтезатор частоты */ } ...... static struct s1d13xxxfb_pdata yl9200_s1dfb_pdata = { .initregs = yl9200_s1dfb_initregs, .initregssize = ARRAY_SIZE(yl9200_s1dfb_initregs), .platform_init_video = yl9200_init_video, }; ...... #endif platform_init_video - вызывается в драйвере s1d13xxxfb.c в ф-ции probe, соответственно нужно что бы к этому моменту подсистема i2c должна быть проинициализирована, чего мы и добивались в В1 и В2. Для В2 правим файл drivers/Makefile чтобы строка obj-y += i2c/ media/ оказалась перед obj-y += video/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecos-rtos.in.ua 0 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба Например я вижу это так - инициализировать синтезатор не в момент выполнения board-файла а позднее при загрузке модуля s1d13xxxfb.c, и тут два варианта: В1 делать динамические модули и явно указывать порядок загрузки В2 для статически слинкованых модулей - изменить порядок линковки в соответствующем Makefile в дереве исходников ядра. Заработал вариант 2, первый не пробовал. Большое спасибо, теперь я снова с графикой. Есть у меня TFT дисплей 3.8"(320x480). Для дисплея я разработал плату, цепляеться к Siberia через разъем для TFT. На данный момент подсветка работает, управляеться яркость (из консоли). На данном этапе я получил белый экран и все. Осталось разобраться с иницализацией в linux. Можете расказать как его прикрутить. Хотя бы в общих чертах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба Есть у меня TFT дисплей 3.8"(320x480). Для дисплея я разработал плату, цепляеться к Siberia через разъем для TFT. Можете расказать как его прикрутить. Хотя бы в общих чертах. Начну с того что не видел никогда ни сиберии ни контроллера ни вашего tft но глянув раз на исходник драйвера s1d13xxxfb.c можно заметить что в s1d13xxxfb_probe устанавливаются при желании значения регистров /* perform "manual" chip initialization, if needed */ if (pdata && pdata->initregs) s1d13xxxfb_runinit(info->par, pdata->initregs, pdata->initregssize); если pdata->initregs имеет ненулевое значение ну и дело техники заглянуть снова в board-yl-9200.c static struct s1d13xxxfb_regval yl9200_s1dfb_initregs[] = { {S1DREG_MISC, 0x00}, /* Miscellaneous Register*/ {S1DREG_COM_DISP_MODE, 0x01}, /* Display Mode Register, LCD only*/ ..... здесь описаны все регисты и присвоены начальные значения. Как минимум нужно LCD включить я так думаю в S1DREG_COM_DISP_MODE ну и в соответствии с даташитом на вашу стекляшку задать значения остальных регистров для подбора режима. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sasamy 1 13 декабря, 2009 Опубликовано 13 декабря, 2009 · Жалоба Кстати - вполне возможно и влоб все заработает с теми параметрами что в YL-9200, погуглил - не нашел что это за плата и какое стекло они туда ставят. Ну и еще интересно что драйвер поддерживает * TODO: - handle dual screen display (CRT and LCD at the same time). одновременную работу и crt и lcd. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ecos-rtos.in.ua 0 14 декабря, 2009 Опубликовано 14 декабря, 2009 · Жалоба Кстати - вполне возможно и влоб все заработает с теми параметрами что в YL-9200, погуглил - не нашел что это за плата и какое стекло они туда ставят. Ну и еще интересно что драйвер поддерживает * TODO: - handle dual screen display (CRT and LCD at the same time). одновременную работу и crt и lcd. Плата http://electronix.ru/forum/index.php?showforum=196 Плата для TFT http://electronix.ru/forum/index.php?showtopic=67365 TFT http://www.lcd88.com/Panel/Download.asp?Model=TD038STEC1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться