#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));
}
