From 4fd9400458f131e61a18142105c2d2d3a082a057 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sat, 19 Mar 2016 21:57:58 +0000 Subject: hwstub/tools/shell: add JZ4760B and Fiio X1 code The jz code can do several useful things like dumping the IPL and SPL. The Fiio code can play with backlight and has code do dump the IPL and SPL with the correct parameters (extracted by reverse engineering). Change-Id: I317b3174f5db8d38c9a56670c1d45565142ec208 --- utils/hwstub/tools/lua/fiiox1.lua | 145 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 utils/hwstub/tools/lua/fiiox1.lua (limited to 'utils/hwstub/tools/lua/fiiox1.lua') diff --git a/utils/hwstub/tools/lua/fiiox1.lua b/utils/hwstub/tools/lua/fiiox1.lua new file mode 100644 index 0000000000..c038f4077b --- /dev/null +++ b/utils/hwstub/tools/lua/fiiox1.lua @@ -0,0 +1,145 @@ +-- +-- Fiio X1 +-- +FIIOX1 = {} + +-- 0 is PF3, 1 is PE1 +function FIIOX1.get_backlight_type() + return FIIOX1.bl_type +end + +-- 0 is V2, 1 is V1 +function FIIOX1.get_hw_type() + return FIIOX1.hw_type +end + +function FIIOX1.hw_detect() + -- PA12 is used to detect hardware version + JZ.gpio.pin(0, 12).std_gpio_out(1) + FIIOX1.hw_type = JZ.gpio.pin(0, 12).read() + -- PA13 is used to detect backlight type + JZ.gpio.pin(0, 13).std_gpio_out(1) + FIIOX1.bl_type = JZ.gpio.pin(0, 13).read() + + if FIIOX1.hw_type == 1 then + print("Fiio X1: hardware version: V01") + else + print("Fiio X1: hardware version: V02") + end + print(string.format("Fiio X1: backlight type: %s", FIIOX1.bl_type)) +end + +function FIIOX1.get_backlight_pin() + if FIIOX1.get_backlight_type() == 0 then + -- PF3 + return JZ.gpio.pin(5, 3) + else + -- PE1 + return JZ.gpio.pin(4, 1) + end +end + +function FIIOX1.init_backligt() + -- setup as output, high level to make no change + FIIOX1.get_backlight_pin().std_gpio_out(1) +end + +function FIIOX1.enable_backlight(en) + local pin = FIIOX1.get_backlight_pin() + pin.clr() + hwstub.mdelay(1) + if en then + pin.set() + end +end + +function FIIOX1.test_backlight() + print("backlight test") + print("enable backlight") + FIIOX1.enable_backlight(true) + print("sleep for 1 sec") + hwstub.mdelay(1000) + print("disable backlight") + FIIOX1.enable_backlight(false) + print("sleep for 1 sec") + hwstub.mdelay(1000) + print("enable backlight") + FIIOX1.enable_backlight(true) +end + +function FIIOX1.setup_fiio_lcd_pins() + -- PE4: reset pin + JZ.gpio.pin(4, 4).std_gpio_out(1) + -- PC9: unknown + JZ.gpio.pin(2, 9).std_gpio_out(0) + -- PC2: unknown + JZ.gpio.pin(2, 2).std_gpio_out(1) + -- PF0: unknown + JZ.gpio.pin(5, 0).std_gpio_out(1) +end + +function FIIOX1.lcd_reset() + local pin = JZ.gpio.pin(4, 4) + pin.set() + hwstub.mdelay(50) + pin.clr() + hwstub.mdelay(50) + pin.set() + hwstub.mdelay(150) +end + +function FIIOX1.init_lcd() + -- setup Fiio X1 specific pins + FIIOX1.setup_fiio_lcd_pins() + -- reset lcd + JZ.lcd_reset() +end + +-- call with nil to get automatic name +function FIIOX1.dump_ipl(file) + FIIOX1.hw_detect() + if file == nil then + file = "fiiox1_ipl_hw_v" .. FIIOX1.hw_type .. ".bin" + end + print("Dumping IPL to " .. file .." ...") + JZ.nand.rom.init() + JZ.nand.rom.read_flags() + local ipl = JZ.nand.rom.read_bootloader() + JZ.nand.rom.write_to_file(file, ipl) +end + +-- call with nil to get automatic name +function FIIOX1.dump_spl(file) + FIIOX1.hw_detect() + if file == nil then + file = "fiiox1_spl_hw_v" .. FIIOX1.hw_type .. ".bin" + end + print("Dumping SPL to " .. file .." ...") + -- hardcoded parameters are specific to the Fiio X1 + local nand_params = { + bus_width = 16, + row_cycle = 2, + col_cycle = 2, + page_size = 2048, + page_per_block = 64, + oob_size = 64, + badblock_pos = 0, + badblock_page = 0, + ecc_pos = 4, + ecc_size = 13, + ecc_level = 8, + addr_setup_time = 4, + addr_hold_time = 4, + write_strobe_time = 4, + read_strobe_time = 4, + recovery_time = 13, + } + local spl = JZ.nand.rom.read_spl(nand_params, 0x400, 0x200) + JZ.nand.rom.write_to_file(file, spl) +end + +function FIIOX1.init() + FIIOX1.init_backligt() + FIIOX1.test_backlight() + FIIOX1.init_lcd() +end -- cgit v1.2.3