diff options
Diffstat (limited to 'utils/hwstub/tools/lua')
-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 | |||
60 | function PP.debug(...) | 60 | function PP.debug(...) |
61 | if PP.debug_on then print(...) end | 61 | if PP.debug_on then print(...) end |
62 | end | 62 | end |
63 | |||
64 | hh = h:create_topic("debug") | ||
65 | hh:add("PP.debug(...) prints some debug output if PP.debug_on is true and does nothing otherwise.") | ||
66 | |||
67 | PP.debug_on = false | ||
68 | |||
69 | if PP.info.chip ~= nil then | ||
70 | require "pp/gpio" | ||
71 | 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 @@ | |||
1 | --- | ||
2 | --- GPIO | ||
3 | --- | ||
4 | PP.gpio = {} | ||
5 | |||
6 | local h = HELP:get_topic("PP"):create_topic("gpio") | ||
7 | h:add("TODO") | ||
8 | |||
9 | local hh = h:create_topic("pin") | ||
10 | hh:add("TODO") | ||
11 | |||
12 | function PP.gpio.pin(bank,pin) | ||
13 | if type(bank) == "string" then | ||
14 | if string.len(bank) ~= 1 then | ||
15 | error("Invalid bank " .. bank) | ||
16 | end | ||
17 | bank = string.byte(bank) | ||
18 | if bank < string.byte("A") or bank > string.byte("Z") then | ||
19 | error("Invalid bank " .. bank) | ||
20 | end | ||
21 | bank = bank - string.byte("A") | ||
22 | end | ||
23 | if pin < 0 or pin >= 8 then | ||
24 | error("invalid pin " .. pin) | ||
25 | end | ||
26 | PP.debug(string.format("gpio: get pin B%dP%d", bank, pin)) | ||
27 | local t = { | ||
28 | read = function() | ||
29 | return bit32.extract(HW.GPIO.INPUT_VALn[bank].read(), pin) | ||
30 | end, | ||
31 | |||
32 | write = function(val) | ||
33 | local v = HW.GPIO.OUTPUT_VALn[bank].read() | ||
34 | v = bit32.replace(v, val and 1 or 0, pin) | ||
35 | HW.GPIO.OUTPUT_VALn[bank].write(v) | ||
36 | end, | ||
37 | |||
38 | enable = function(val) | ||
39 | if val == nil then | ||
40 | val = false | ||
41 | end | ||
42 | local v = HW.GPIO.ENABLEn[bank].read() | ||
43 | v = bit32.replace(v, val and 1 or 0, pin) | ||
44 | HW.GPIO.ENABLEn[bank].write(v) | ||
45 | end, | ||
46 | |||
47 | output_enable = function(val) | ||
48 | if val == nil then | ||
49 | val = false | ||
50 | end | ||
51 | local v = HW.GPIO.OUTPUT_ENn[bank].read() | ||
52 | v = bit32.replace(v, val and 1 or 0, pin) | ||
53 | HW.GPIO.OUTPUT_ENn[bank].write(v) | ||
54 | end, | ||
55 | |||
56 | muxsel = function(x) | ||
57 | |||
58 | end, | ||
59 | |||
60 | pull = function(val) | ||
61 | |||
62 | end, | ||
63 | } | ||
64 | return t | ||
65 | 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 @@ | |||
1 | -- | ||
2 | -- Sansa View | ||
3 | -- | ||
4 | SANSAVIEW = {} | ||
5 | |||
6 | function SANSAVIEW.set_backlight(val) | ||
7 | -- backlight is PD0 | ||
8 | PP.gpio.pin("D",0).enable(true) | ||
9 | PP.gpio.pin("D",0).output_enable(true) | ||
10 | PP.gpio.pin("D",0).write(val) | ||
11 | end | ||
12 | |||
13 | function SANSAVIEW.lcd_reset() | ||
14 | PP.gpio.pin("B", 2).write(true) | ||
15 | PP.gpio.pin("B", 2).write(false) | ||
16 | PP.gpio.pin("B", 2).write(true) | ||
17 | end | ||
18 | |||
19 | function SANSAVIEW.lcd_send_msg(count, val) | ||
20 | local clock = PP.gpio.pin("H", 6) | ||
21 | local data = PP.gpio.pin("H", 4) | ||
22 | local cs = PP.gpio.pin("H", 7) | ||
23 | clock.write(true) | ||
24 | cs.write(false) | ||
25 | for i = count-1, 0, -1 do | ||
26 | data.write(bit32.extract(val, i) == 1) | ||
27 | clock.write(false) | ||
28 | clock.write(true) | ||
29 | end | ||
30 | cs.write(true) | ||
31 | end | ||
32 | |||
33 | function SANSAVIEW.lcd_write_cmd(cmd) | ||
34 | SANSAVIEW.lcd_send_msg(24, bit32.bor(0x700000, cmd)) | ||
35 | end | ||
36 | |||
37 | function SANSAVIEW.lcd_write_data(data) | ||
38 | SANSAVIEW.lcd_send_msg(24, bit32.bor(0x720000, data)) | ||
39 | end | ||
40 | |||
41 | function SANSAVIEW.lcd_write_reg(cmd, data) | ||
42 | SANSAVIEW.lcd_write_cmd(cmd) | ||
43 | SANSAVIEW.lcd_write_data(data) | ||
44 | end | ||
45 | |||
46 | function SANSAVIEW.lcd_init() | ||
47 | -- lcd reset | ||
48 | PP.gpio.pin("B", 2).enable(true) | ||
49 | PP.gpio.pin("B", 2).write(true) | ||
50 | PP.gpio.pin("B", 2).output_enable(true) | ||
51 | -- lcd type | ||
52 | PP.gpio.pin("G", 3).enable(true) | ||
53 | PP.gpio.pin("G", 3).output_enable(false) | ||
54 | -- spi data | ||
55 | PP.gpio.pin("H", 4).enable(true) | ||
56 | PP.gpio.pin("H", 4).write(true) | ||
57 | PP.gpio.pin("H", 4).output_enable(true) | ||
58 | -- spi clock | ||
59 | PP.gpio.pin("H", 6).enable(true) | ||
60 | PP.gpio.pin("H", 6).write(true) | ||
61 | PP.gpio.pin("H", 6).output_enable(true) | ||
62 | -- spi cs | ||
63 | PP.gpio.pin("H", 7).enable(true) | ||
64 | PP.gpio.pin("H", 7).write(true) | ||
65 | PP.gpio.pin("H", 7).output_enable(true) | ||
66 | -- lcd unk | ||
67 | PP.gpio.pin("J", 1).enable(false) | ||
68 | PP.gpio.pin("J", 1).write(false) | ||
69 | PP.gpio.pin("J", 1).output_enable(false) | ||
70 | |||
71 | HW.SYS.DEV1.write(bit32.bor(HW.SYS.DEV1.read(),0xfc000000)) | ||
72 | HW.SYS.DEV3.write(bit32.bor(HW.SYS.DEV3.read(),0xc300000)) | ||
73 | HW.SYS.DEV2.write(0x40000000) | ||
74 | |||
75 | SANSAVIEW.lcd_reset() | ||
76 | SANSAVIEW.lcd_type = PP.gpio.pin("G", 3).read() | ||
77 | print(string.format("sansaview: lcd type is %s", SANSAVIEW.lcd_type)) | ||
78 | |||
79 | SANSAVIEW.lcd_write_reg(0xE5, 0x8000) | ||
80 | SANSAVIEW.lcd_write_reg(0x0, 0x1) | ||
81 | SANSAVIEW.lcd_write_reg(0x1, 0x100) | ||
82 | SANSAVIEW.lcd_write_reg(0x2, 0x700) | ||
83 | SANSAVIEW.lcd_write_reg(0x3, 0x1230) | ||
84 | SANSAVIEW.lcd_write_reg(0x4, 0x0) | ||
85 | SANSAVIEW.lcd_write_reg(0x8, 0x408) | ||
86 | SANSAVIEW.lcd_write_reg(0x9, 0x0) | ||
87 | SANSAVIEW.lcd_write_reg(0xa, 0x0) | ||
88 | SANSAVIEW.lcd_write_reg(0xd, 0x0) | ||
89 | SANSAVIEW.lcd_write_reg(0xf, 0x2) | ||
90 | SANSAVIEW.lcd_write_reg(0x10, 0x0) | ||
91 | SANSAVIEW.lcd_write_reg(0x11, 0x0) | ||
92 | SANSAVIEW.lcd_write_reg(0x12, 0x0) | ||
93 | SANSAVIEW.lcd_write_reg(0x13, 0x0) | ||
94 | SANSAVIEW.lcd_write_reg(0x10, 0x17B0) | ||
95 | SANSAVIEW.lcd_write_reg(0x11, 0x7) | ||
96 | SANSAVIEW.lcd_write_reg(0x12, 0x13c) | ||
97 | |||
98 | if SANSAVIEW.lcd_type == 0 then | ||
99 | SANSAVIEW.lcd_write_reg(0x13, 0x1700) | ||
100 | SANSAVIEW.lcd_write_reg(0x29, 0x10) | ||
101 | SANSAVIEW.lcd_write_reg(0x20, 0x0) | ||
102 | SANSAVIEW.lcd_write_reg(0x21, 0x0) | ||
103 | |||
104 | SANSAVIEW.lcd_write_reg(0x30, 0x7) | ||
105 | SANSAVIEW.lcd_write_reg(0x31, 0x403) | ||
106 | SANSAVIEW.lcd_write_reg(0x32, 0x400) | ||
107 | SANSAVIEW.lcd_write_reg(0x35, 0x3) | ||
108 | SANSAVIEW.lcd_write_reg(0x36, 0xF07) | ||
109 | SANSAVIEW.lcd_write_reg(0x37, 0x606) | ||
110 | SANSAVIEW.lcd_write_reg(0x38, 0x106) | ||
111 | SANSAVIEW.lcd_write_reg(0x39, 0x7) | ||
112 | else | ||
113 | SANSAVIEW.lcd_write_reg(0x13, 0x1800) | ||
114 | SANSAVIEW.lcd_write_reg(0x29, 0x13) | ||
115 | SANSAVIEW.lcd_write_reg(0x20, 0x0) | ||
116 | SANSAVIEW.lcd_write_reg(0x21, 0x0) | ||
117 | |||
118 | SANSAVIEW.lcd_write_reg(0x30, 0x2) | ||
119 | SANSAVIEW.lcd_write_reg(0x31, 0x606) | ||
120 | SANSAVIEW.lcd_write_reg(0x32, 0x501) | ||
121 | SANSAVIEW.lcd_write_reg(0x35, 0x206) | ||
122 | SANSAVIEW.lcd_write_reg(0x36, 0x504) | ||
123 | SANSAVIEW.lcd_write_reg(0x37, 0x707) | ||
124 | SANSAVIEW.lcd_write_reg(0x38, 0x306) | ||
125 | SANSAVIEW.lcd_write_reg(0x39, 0x7) | ||
126 | end | ||
127 | |||
128 | SANSAVIEW.lcd_write_reg(0x3c, 0x700) | ||
129 | SANSAVIEW.lcd_write_reg(0x3d, 0x700) | ||
130 | |||
131 | SANSAVIEW.lcd_write_reg(0x50, 0x0) | ||
132 | SANSAVIEW.lcd_write_reg(0x51, 0xef) -- 239 - LCD_WIDTH | ||
133 | SANSAVIEW.lcd_write_reg(0x52, 0x0) | ||
134 | SANSAVIEW.lcd_write_reg(0x53, 0x13f) -- 319 - LCD_HEIGHT | ||
135 | |||
136 | SANSAVIEW.lcd_write_reg(0x60, 0x2700) | ||
137 | SANSAVIEW.lcd_write_reg(0x61, 0x1) | ||
138 | SANSAVIEW.lcd_write_reg(0x6a, 0x0) | ||
139 | |||
140 | SANSAVIEW.lcd_write_reg(0x80, 0x0) | ||
141 | SANSAVIEW.lcd_write_reg(0x81, 0x0) | ||
142 | SANSAVIEW.lcd_write_reg(0x82, 0x0) | ||
143 | SANSAVIEW.lcd_write_reg(0x83, 0x0) | ||
144 | SANSAVIEW.lcd_write_reg(0x84, 0x0) | ||
145 | SANSAVIEW.lcd_write_reg(0x85, 0x0) | ||
146 | |||
147 | SANSAVIEW.lcd_write_reg(0x90, 0x10) | ||
148 | SANSAVIEW.lcd_write_reg(0x92, 0x0) | ||
149 | SANSAVIEW.lcd_write_reg(0x93, 0x3) | ||
150 | SANSAVIEW.lcd_write_reg(0x95, 0x110) | ||
151 | SANSAVIEW.lcd_write_reg(0x97, 0x0) | ||
152 | SANSAVIEW.lcd_write_reg(0x98, 0x0) | ||
153 | |||
154 | SANSAVIEW.lcd_write_reg(0xc, 0x110) | ||
155 | SANSAVIEW.lcd_write_reg(0x7, 0x173) | ||
156 | end | ||
157 | |||
158 | function SANSAVIEW.init() | ||
159 | SANSAVIEW.set_backlight(true) | ||
160 | SANSAVIEW.lcd_init() | ||
161 | end | ||