mirror of
				https://github.com/Rockbox/rockbox.git
				synced 2025-10-29 00:36:22 -04:00 
			
		
		
		
	Change-Id: I3ab32996b4b6603fd7d66eee5b3bfd795b79eee1 Reviewed-on: http://gerrit.rockbox.org/1049 Reviewed-by: Marcin Bukat <marcin.bukat@gmail.com> Tested: Marcin Bukat <marcin.bukat@gmail.com>
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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
 |