summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/hwstub/tools/lua/pp.lua9
-rw-r--r--utils/hwstub/tools/lua/pp/gpio.lua65
-rw-r--r--utils/hwstub/tools/lua/sansaview.lua161
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
60function PP.debug(...) 60function PP.debug(...)
61 if PP.debug_on then print(...) end 61 if PP.debug_on then print(...) end
62end 62end
63
64hh = h:create_topic("debug")
65hh:add("PP.debug(...) prints some debug output if PP.debug_on is true and does nothing otherwise.")
66
67PP.debug_on = false
68
69if PP.info.chip ~= nil then
70 require "pp/gpio"
71end
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---
4PP.gpio = {}
5
6local h = HELP:get_topic("PP"):create_topic("gpio")
7h:add("TODO")
8
9local hh = h:create_topic("pin")
10hh:add("TODO")
11
12function 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
65end
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--
4SANSAVIEW = {}
5
6function 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)
11end
12
13function 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)
17end
18
19function 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)
31end
32
33function SANSAVIEW.lcd_write_cmd(cmd)
34 SANSAVIEW.lcd_send_msg(24, bit32.bor(0x700000, cmd))
35end
36
37function SANSAVIEW.lcd_write_data(data)
38 SANSAVIEW.lcd_send_msg(24, bit32.bor(0x720000, data))
39end
40
41function SANSAVIEW.lcd_write_reg(cmd, data)
42 SANSAVIEW.lcd_write_cmd(cmd)
43 SANSAVIEW.lcd_write_data(data)
44end
45
46function 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)
156end
157
158function SANSAVIEW.init()
159 SANSAVIEW.set_backlight(true)
160 SANSAVIEW.lcd_init()
161end