rockbox/utils/hwstub/tools/lua/fiiox1.lua

147 lines
3.4 KiB
Lua
Raw Normal View History

--
-- 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
FIIOX1.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.hw_detect()
FIIOX1.init_backligt()
FIIOX1.test_backlight()
FIIOX1.init_lcd()
end