Новости и вопросы с полей.
На контроллер ЛСД не поступают тактовые импульсы.
Я обнаружил что в родной прошивке данный "клок" включается так:
CODE
EXPORT scu_set_disp_clk
scu_set_disp_clk
; CODE XREF: scu_lcm_enable+10^Yp
; scu_lcd_enable+4^Yp ...
LDR R2, =0x93007000 ;задать регистру Р2 адрес 0x93007000
LDR R3, [R2,#0x80] ;косвенно считать в регистр Р3 содержимое памяти по адресу Р2+смещение 0x80
BIC R3, R3, #0x100
STR R3, [R2,#0x80]
BIC R3, R3, #0xFF
SUB R0, R0, #1
ORR R0, R0, R3
STR R0, [R2,#0x80]
ORR R0, R0, #0x100
STR R0, [R2,#0x80]
BX LR
; End of function scu_set_disp_clk
Получается, что в ядре просто нужно создать таймер, который бы записывал по адресу 0x93007080 значение FF для включения и 00 для выключения.
Но я не как не могу найти в поисковике как писать драйвера таймеров, я попробовал решить проблему "в лоб" и сделать записть регистра вот так
writeb(0xFF, SPMP8000_SCU_A_BASE + SCU_A_LCD_CLK_CFG);
и вот так
__raw_writeb(0xFF, SPMP8000_SCU_A_BASE + SCU_A_LCD_CLK_CFG);
Соответсвенно задав в заголовочных файлах значения
Код
#define SPMP8000_SCU_A_BASE 0x93007000
#define SCU_A_LCD_CLK_CFG 0x80
И естественно получил ошибки типа
Unable to handle kernel NULL pointer dereference at virtual address 93007080
и
g request at virtual address 93007080
т.к. ядро естественно пытается обращатся к виртуальным адресам.
Подскажите пожалуйста как правильно написать драйвер clock и что можно взять за основу. За ранее спасибо.