From 9439635aa27e7604d01dddb30a505a3402f3b4df Mon Sep 17 00:00:00 2001 From: Marcin Bukat Date: Mon, 24 Nov 2014 18:29:04 +0100 Subject: hwstub: lua functions for atj213x/irivere150 Change-Id: I3ab32996b4b6603fd7d66eee5b3bfd795b79eee1 Reviewed-on: http://gerrit.rockbox.org/1049 Reviewed-by: Marcin Bukat Tested: Marcin Bukat --- utils/hwstub/tools/lua/atj/gpio.lua | 65 +++++++++++++++++++++++++++++++++++++ utils/hwstub/tools/lua/atj/lcm.lua | 31 ++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 utils/hwstub/tools/lua/atj/gpio.lua create mode 100644 utils/hwstub/tools/lua/atj/lcm.lua (limited to 'utils/hwstub/tools/lua/atj') diff --git a/utils/hwstub/tools/lua/atj/gpio.lua b/utils/hwstub/tools/lua/atj/gpio.lua new file mode 100644 index 0000000000..970d271187 --- /dev/null +++ b/utils/hwstub/tools/lua/atj/gpio.lua @@ -0,0 +1,65 @@ +ATJ.gpio = {} + +function ATJ.gpio.muxsel(dev) + if type(dev) == "string" then + if dev == "LCM" then dev = 0 + elseif dev == "SD" then dev = 1 + elseif dev == "NAND" then dev = 2 + else error("Invalid mux string " .. dev) + end + end + + local mfctl0 = HW.GPIO.MFCTL0.read() + if dev == 0 then + -- LCM (taken from WELCOME.BIN) + mfctl0 = bit32.band(mfctl0, 0xfe3f3f00) + mfctl0 = bit32.bor(mfctl0, 0x00808092) + elseif dev == 1 then + -- SD (taken from CARD.DRV) + mfctl0 = bit32.band(mfctl0, 0xff3ffffc) + mfctl0 = bit32.bor(mfctl0, 0x01300004) + elseif dev == 2 then + -- NAND (taken from BROM dump) + mfctl0 = bit32.band(mfctl0, 0xfe3ff300) + mfctl0 = bit32.bor(mfctl0, 0x00400449) + end + + -- enable multifunction mux + HW.GPIO.MFCTL1.write(0x80000000) + + -- write multifunction mux selection + HW.GPIO.MFCTL0.write(mfctl0) +end + +function ATJ.gpio.outen(port, pin, en) + if type(port) == "string" then + if port == "PORTA" then + HW.GPIO.AOUTEN.write(bit32.replace(HW.GPIO.AOUTEN.read(), en, pin, 1)) + elseif port == "PORTB" then + HW.GPIO.BOUTEN.write(bit32.replace(HW.GPIO.BOUTEN.read(), en, pin, 1)) + else error("Invalid port string " .. port) + end + end +end + +function ATJ.gpio.inen(port, pin) + if type(port) == "string" then + if port == "PORTA" then + HW.GPIO.AINEN.write(bit32.replace(HW.GPIO.AINEN.read(), en, pin, 1)) + elseif port == "PORTB" then + HW.GPIO.BINEN.write(bit32.replace(HW.GPIO.BINEN.read(), en, pin, 1)) + else error("Invalid port string " .. port) + end + end +end + +function ATJ.gpio.set(port, pin, val) + if type(port) == "string" then + if port == "PORTA" then + HW.GPIO.ADAT.write(bit32.replace(HW.GPIO.ADAT.read(), val, pin, 1)) + elseif port == "PORTB" then + HW.GPIO.BDAT.write(bit32.replace(HW.GPIO.BDAT.read(), val, pin, 1)) + else error("Invalid port string " .. port) + end + end +end diff --git a/utils/hwstub/tools/lua/atj/lcm.lua b/utils/hwstub/tools/lua/atj/lcm.lua new file mode 100644 index 0000000000..feaa8b7158 --- /dev/null +++ b/utils/hwstub/tools/lua/atj/lcm.lua @@ -0,0 +1,31 @@ +ATJ.lcm = {} + +function ATJ.lcm.wait_fifo_empty() + while (bit32.band(HW.YUV2RGB.CTL.read(), 0x04) == 0) do + end +end + +function ATJ.lcm.rs_command() + ATJ.lcm.wait_fifo_empty() + HW.YUV2RGB.CTL.write(0x802ae) +end + +function ATJ.lcm.rs_data() + ATJ.lcm.wait_fifo_empty() + HW.YUV2RGB.CTL.write(0x902ae) +end + +function ATJ.lcm.fb_data() + ATJ.lcm.rs_command() + HW.YUV2RGB.FIFODATA.write(0x22) + HW.YUV2RGB.CTL.write(0xa02ae) +end + +function ATJ.lcm.init() + HW.CMU.DEVCLKEN.write(bit32.bor(HW.CMU.DEVCLKEN.read(), 0x102)) + ATJ.gpio.muxsel("LCM") + hwstub.udelay(1) + ATJ.lcm.rs_command() + HW.YUV2RGB.CLKCTL.write(0x102) +end + -- cgit v1.2.3