diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-05-05 23:17:41 +0200 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-05-11 19:56:15 +0200 |
commit | d8071221c5a91fa51f75db9d7a53f1a82a78ffe4 (patch) | |
tree | cc16197e41197666daf76681b8faf97776fd78d8 /utils/hwstub | |
parent | 5b89e6618f023b46be1dc91ba4eab46e78bc7121 (diff) | |
download | rockbox-d8071221c5a91fa51f75db9d7a53f1a82a78ffe4.tar.gz rockbox-d8071221c5a91fa51f75db9d7a53f1a82a78ffe4.zip |
hwstub: add some PP and Sansa View code
Change-Id: If188a01adee2a0e1c7a46c424a0a9cde9f666831
Diffstat (limited to 'utils/hwstub')
-rw-r--r-- | utils/hwstub/tools/lua/pp.lua | 9 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/pp/gpio.lua | 65 | ||||
-rw-r--r-- | utils/hwstub/tools/lua/sansaview.lua | 161 |
3 files changed, 235 insertions, 0 deletions
diff --git a/utils/hwstub/tools/lua/pp.lua b/utils/hwstub/tools/lua/pp.lua index 5f2503040c..f9234780e5 100644 --- a/utils/hwstub/tools/lua/pp.lua +++ b/utils/hwstub/tools/lua/pp.lua @@ -60,3 +60,12 @@ PP.debug_on = false function PP.debug(...) if PP.debug_on then print(...) end end + +hh = h:create_topic("debug") +hh:add("PP.debug(...) prints some debug output if PP.debug_on is true and does nothing otherwise.") + +PP.debug_on = false + +if PP.info.chip ~= nil then + require "pp/gpio" +end diff --git a/utils/hwstub/tools/lua/pp/gpio.lua b/utils/hwstub/tools/lua/pp/gpio.lua new file mode 100644 index 0000000000..612c98057a --- /dev/null +++ b/utils/hwstub/tools/lua/pp/gpio.lua @@ -0,0 +1,65 @@ +--- +--- GPIO +--- +PP.gpio = {} + +local h = HELP:get_topic("PP"):create_topic("gpio") +h:add("TODO") + +local hh = h:create_topic("pin") +hh:add("TODO") + +function PP.gpio.pin(bank,pin) + if type(bank) == "string" then + if string.len(bank) ~= 1 then + error("Invalid bank " .. bank) + end + bank = string.byte(bank) + if bank < string.byte("A") or bank > string.byte("Z") then + error("Invalid bank " .. bank) + end + bank = bank - string.byte("A") + end + if pin < 0 or pin >= 8 then + error("invalid pin " .. pin) + end + PP.debug(string.format("gpio: get pin B%dP%d", bank, pin)) + local t = { + read = function() + return bit32.extract(HW.GPIO.INPUT_VALn[bank].read(), pin) + end, + + write = function(val) + local v = HW.GPIO.OUTPUT_VALn[bank].read() + v = bit32.replace(v, val and 1 or 0, pin) + HW.GPIO.OUTPUT_VALn[bank].write(v) + end, + + enable = function(val) + if val == nil then + val = false + end + local v = HW.GPIO.ENABLEn[bank].read() + v = bit32.replace(v, val and 1 or 0, pin) + HW.GPIO.ENABLEn[bank].write(v) + end, + + output_enable = function(val) + if val == nil then + val = false + end + local v = HW.GPIO.OUTPUT_ENn[bank].read() + v = bit32.replace(v, val and 1 or 0, pin) + HW.GPIO.OUTPUT_ENn[bank].write(v) + end, + + muxsel = function(x) + + end, + + pull = function(val) + + end, + } + return t +end diff --git a/utils/hwstub/tools/lua/sansaview.lua b/utils/hwstub/tools/lua/sansaview.lua new file mode 100644 index 0000000000..356157e9fb --- /dev/null +++ b/utils/hwstub/tools/lua/sansaview.lua @@ -0,0 +1,161 @@ +-- +-- Sansa View +-- +SANSAVIEW = {} + +function SANSAVIEW.set_backlight(val) + -- backlight is PD0 + PP.gpio.pin("D",0).enable(true) + PP.gpio.pin("D",0).output_enable(true) + PP.gpio.pin("D",0).write(val) +end + +function SANSAVIEW.lcd_reset() + PP.gpio.pin("B", 2).write(true) + PP.gpio.pin("B", 2).write(false) + PP.gpio.pin("B", 2).write(true) +end + +function SANSAVIEW.lcd_send_msg(count, val) + local clock = PP.gpio.pin("H", 6) + local data = PP.gpio.pin("H", 4) + local cs = PP.gpio.pin("H", 7) + clock.write(true) + cs.write(false) + for i = count-1, 0, -1 do + data.write(bit32.extract(val, i) == 1) + clock.write(false) + clock.write(true) + end + cs.write(true) +end + +function SANSAVIEW.lcd_write_cmd(cmd) + SANSAVIEW.lcd_send_msg(24, bit32.bor(0x700000, cmd)) +end + +function SANSAVIEW.lcd_write_data(data) + SANSAVIEW.lcd_send_msg(24, bit32.bor(0x720000, data)) +end + +function SANSAVIEW.lcd_write_reg(cmd, data) + SANSAVIEW.lcd_write_cmd(cmd) + SANSAVIEW.lcd_write_data(data) +end + +function SANSAVIEW.lcd_init() + -- lcd reset + PP.gpio.pin("B", 2).enable(true) + PP.gpio.pin("B", 2).write(true) + PP.gpio.pin("B", 2).output_enable(true) + -- lcd type + PP.gpio.pin("G", 3).enable(true) + PP.gpio.pin("G", 3).output_enable(false) + -- spi data + PP.gpio.pin("H", 4).enable(true) + PP.gpio.pin("H", 4).write(true) + PP.gpio.pin("H", 4).output_enable(true) + -- spi clock + PP.gpio.pin("H", 6).enable(true) + PP.gpio.pin("H", 6).write(true) + PP.gpio.pin("H", 6).output_enable(true) + -- spi cs + PP.gpio.pin("H", 7).enable(true) + PP.gpio.pin("H", 7).write(true) + PP.gpio.pin("H", 7).output_enable(true) + -- lcd unk + PP.gpio.pin("J", 1).enable(false) + PP.gpio.pin("J", 1).write(false) + PP.gpio.pin("J", 1).output_enable(false) + + HW.SYS.DEV1.write(bit32.bor(HW.SYS.DEV1.read(),0xfc000000)) + HW.SYS.DEV3.write(bit32.bor(HW.SYS.DEV3.read(),0xc300000)) + HW.SYS.DEV2.write(0x40000000) + + SANSAVIEW.lcd_reset() + SANSAVIEW.lcd_type = PP.gpio.pin("G", 3).read() + print(string.format("sansaview: lcd type is %s", SANSAVIEW.lcd_type)) + + SANSAVIEW.lcd_write_reg(0xE5, 0x8000) + SANSAVIEW.lcd_write_reg(0x0, 0x1) + SANSAVIEW.lcd_write_reg(0x1, 0x100) + SANSAVIEW.lcd_write_reg(0x2, 0x700) + SANSAVIEW.lcd_write_reg(0x3, 0x1230) + SANSAVIEW.lcd_write_reg(0x4, 0x0) + SANSAVIEW.lcd_write_reg(0x8, 0x408) + SANSAVIEW.lcd_write_reg(0x9, 0x0) + SANSAVIEW.lcd_write_reg(0xa, 0x0) + SANSAVIEW.lcd_write_reg(0xd, 0x0) + SANSAVIEW.lcd_write_reg(0xf, 0x2) + SANSAVIEW.lcd_write_reg(0x10, 0x0) + SANSAVIEW.lcd_write_reg(0x11, 0x0) + SANSAVIEW.lcd_write_reg(0x12, 0x0) + SANSAVIEW.lcd_write_reg(0x13, 0x0) + SANSAVIEW.lcd_write_reg(0x10, 0x17B0) + SANSAVIEW.lcd_write_reg(0x11, 0x7) + SANSAVIEW.lcd_write_reg(0x12, 0x13c) + + if SANSAVIEW.lcd_type == 0 then + SANSAVIEW.lcd_write_reg(0x13, 0x1700) + SANSAVIEW.lcd_write_reg(0x29, 0x10) + SANSAVIEW.lcd_write_reg(0x20, 0x0) + SANSAVIEW.lcd_write_reg(0x21, 0x0) + + SANSAVIEW.lcd_write_reg(0x30, 0x7) + SANSAVIEW.lcd_write_reg(0x31, 0x403) + SANSAVIEW.lcd_write_reg(0x32, 0x400) + SANSAVIEW.lcd_write_reg(0x35, 0x3) + SANSAVIEW.lcd_write_reg(0x36, 0xF07) + SANSAVIEW.lcd_write_reg(0x37, 0x606) + SANSAVIEW.lcd_write_reg(0x38, 0x106) + SANSAVIEW.lcd_write_reg(0x39, 0x7) + else + SANSAVIEW.lcd_write_reg(0x13, 0x1800) + SANSAVIEW.lcd_write_reg(0x29, 0x13) + SANSAVIEW.lcd_write_reg(0x20, 0x0) + SANSAVIEW.lcd_write_reg(0x21, 0x0) + + SANSAVIEW.lcd_write_reg(0x30, 0x2) + SANSAVIEW.lcd_write_reg(0x31, 0x606) + SANSAVIEW.lcd_write_reg(0x32, 0x501) + SANSAVIEW.lcd_write_reg(0x35, 0x206) + SANSAVIEW.lcd_write_reg(0x36, 0x504) + SANSAVIEW.lcd_write_reg(0x37, 0x707) + SANSAVIEW.lcd_write_reg(0x38, 0x306) + SANSAVIEW.lcd_write_reg(0x39, 0x7) + end + + SANSAVIEW.lcd_write_reg(0x3c, 0x700) + SANSAVIEW.lcd_write_reg(0x3d, 0x700) + + SANSAVIEW.lcd_write_reg(0x50, 0x0) + SANSAVIEW.lcd_write_reg(0x51, 0xef) -- 239 - LCD_WIDTH + SANSAVIEW.lcd_write_reg(0x52, 0x0) + SANSAVIEW.lcd_write_reg(0x53, 0x13f) -- 319 - LCD_HEIGHT + + SANSAVIEW.lcd_write_reg(0x60, 0x2700) + SANSAVIEW.lcd_write_reg(0x61, 0x1) + SANSAVIEW.lcd_write_reg(0x6a, 0x0) + + SANSAVIEW.lcd_write_reg(0x80, 0x0) + SANSAVIEW.lcd_write_reg(0x81, 0x0) + SANSAVIEW.lcd_write_reg(0x82, 0x0) + SANSAVIEW.lcd_write_reg(0x83, 0x0) + SANSAVIEW.lcd_write_reg(0x84, 0x0) + SANSAVIEW.lcd_write_reg(0x85, 0x0) + + SANSAVIEW.lcd_write_reg(0x90, 0x10) + SANSAVIEW.lcd_write_reg(0x92, 0x0) + SANSAVIEW.lcd_write_reg(0x93, 0x3) + SANSAVIEW.lcd_write_reg(0x95, 0x110) + SANSAVIEW.lcd_write_reg(0x97, 0x0) + SANSAVIEW.lcd_write_reg(0x98, 0x0) + + SANSAVIEW.lcd_write_reg(0xc, 0x110) + SANSAVIEW.lcd_write_reg(0x7, 0x173) +end + +function SANSAVIEW.init() + SANSAVIEW.set_backlight(true) + SANSAVIEW.lcd_init() +end |