blob: bcba2f00db0ca52f586088a567c7823b7e82ccae [file] [log] [blame]
#include <stdint.h>
#include "common.h"
#include "Galois_memmap.h"
#include "global.h"
#include "pinmux.h"
#include "lgpl_printf.h"
#define BITS_PER_PIN 3
#define PINS_PER_REG 10
static int pinmux_write_internal(unsigned int baseaddr, unsigned int index, unsigned int value)
{
unsigned int addr, field, pinmux;
addr = baseaddr + ((index / PINS_PER_REG) << 2);
field = (index % PINS_PER_REG) * BITS_PER_PIN;
pinmux = readl(addr); // read current pinmux
pinmux &= ~(0x7 << field);
pinmux |= (value << field);
writel(pinmux, addr);
return 0;
}
int pinmux_write(int index, unsigned int value)
{
unsigned int addr = 0;
if((index >= SOC_PINMUX_INDEX_START) && (index < SOC_PINMUX_INDEX_MAX)) {
//SOC
addr = MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_pinMuxCntlBus;
return pinmux_write_internal(addr, (index - SOC_PINMUX_INDEX_START), value);
}
return -1;
}
void pinmux_display(void)
{
unsigned int i = 0;
unsigned int baseaddr = MEMMAP_CHIP_CTRL_REG_BASE + RA_Gbl_pinMuxCntlBus;
//total 7 registers
for(i = 0; i < 7; i++)
lgpl_printf("Pinmux reg %d: 0x%08x = 0x%08x\n", i, baseaddr + i*4, readl(baseaddr + i*4));
}