/*
 * Joshua Henderson <joshua.henderson@microchip.com>
 * Copyright (C) 2015 Microchip Technology Inc.  All rights reserved.
 *
 *  This program is free software; you can distribute it and/or modify it
 *  under the terms of the GNU General Public License (Version 2) as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope it will be useful, but WITHOUT
 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 *  for more details.
 */
#ifndef _PIC32MZDA_EARLY_PIN_H
#define _PIC32MZDA_EARLY_PIN_H

/*
 * This is a complete, yet overly simplistic and unoptimized, PIC32MZDA PPS
 * configuration only useful before we have full pinctrl initialized.
 */

/* Input PPS Functions */
enum {
	IN_FUNC_INT3,
	IN_FUNC_T2CK,
	IN_FUNC_T6CK,
	IN_FUNC_IC3,
	IN_FUNC_IC7,
	IN_FUNC_U1RX,
	IN_FUNC_U2CTS,
	IN_FUNC_U5RX,
	IN_FUNC_U6CTS,
	IN_FUNC_SDI1,
	IN_FUNC_SDI3,
	IN_FUNC_SDI5,
	IN_FUNC_SS6,
	IN_FUNC_REFCLKI1,
	IN_FUNC_INT4,
	IN_FUNC_T5CK,
	IN_FUNC_T7CK,
	IN_FUNC_IC4,
	IN_FUNC_IC8,
	IN_FUNC_U3RX,
	IN_FUNC_U4CTS,
	IN_FUNC_SDI2,
	IN_FUNC_SDI4,
	IN_FUNC_C1RX,
	IN_FUNC_REFCLKI4,
	IN_FUNC_INT2,
	IN_FUNC_T3CK,
	IN_FUNC_T8CK,
	IN_FUNC_IC2,
	IN_FUNC_IC5,
	IN_FUNC_IC9,
	IN_FUNC_U1CTS,
	IN_FUNC_U2RX,
	IN_FUNC_U5CTS,
	IN_FUNC_SS1,
	IN_FUNC_SS3,
	IN_FUNC_SS4,
	IN_FUNC_SS5,
	IN_FUNC_C2RX,
	IN_FUNC_INT1,
	IN_FUNC_T4CK,
	IN_FUNC_T9CK,
	IN_FUNC_IC1,
	IN_FUNC_IC6,
	IN_FUNC_U3CTS,
	IN_FUNC_U4RX,
	IN_FUNC_U6RX,
	IN_FUNC_SS2,
	IN_FUNC_SDI6,
	IN_FUNC_OCFA,
	IN_FUNC_REFCLKI3,
};

/* Input PPS Pins */
#define IN_RPD2 0x00
#define IN_RPG8 0x01
#define IN_RPF4 0x02
#define IN_RPD10 0x03
#define IN_RPF1 0x04
#define IN_RPB9 0x05
#define IN_RPB10 0x06
#define IN_RPC14 0x07
#define IN_RPB5 0x08
#define IN_RPC1 0x0A
#define IN_RPD14 0x0B
#define IN_RPG1 0x0C
#define IN_RPA14 0x0D
#define IN_RPD6 0x0E
#define IN_RPD3 0x00
#define IN_RPG7 0x01
#define IN_RPF5 0x02
#define IN_RPD11 0x03
#define IN_RPF0 0x04
#define IN_RPB1 0x05
#define IN_RPE5 0x06
#define IN_RPC13 0x07
#define IN_RPB3 0x08
#define IN_RPC4 0x0A
#define IN_RPD15 0x0B
#define IN_RPG0 0x0C
#define IN_RPA15 0x0D
#define IN_RPD7 0x0E
#define IN_RPD9 0x00
#define IN_RPG6 0x01
#define IN_RPB8 0x02
#define IN_RPB15 0x03
#define IN_RPD4 0x04
#define IN_RPB0 0x05
#define IN_RPE3 0x06
#define IN_RPB7 0x07
#define IN_RPF12 0x09
#define IN_RPD12 0x0A
#define IN_RPF8 0x0B
#define IN_RPC3 0x0C
#define IN_RPE9 0x0D
#define IN_RPD1 0x00
#define IN_RPG9 0x01
#define IN_RPB14 0x02
#define IN_RPD0 0x03
#define IN_RPB6 0x05
#define IN_RPD5 0x06
#define IN_RPB2 0x07
#define IN_RPF3 0x08
#define IN_RPF13 0x09
#define IN_RPF2 0x0B
#define IN_RPC2 0x0C
#define IN_RPE8 0x0D

/* Output PPS Pins */
enum {
	OUT_RPD2,
	OUT_RPG8,
	OUT_RPF4,
	OUT_RPD10,
	OUT_RPF1,
	OUT_RPB9,
	OUT_RPB10,
	OUT_RPC14,
	OUT_RPB5,
	OUT_RPC1,
	OUT_RPD14,
	OUT_RPG1,
	OUT_RPA14,
	OUT_RPD6,
	OUT_RPD3,
	OUT_RPG7,
	OUT_RPF5,
	OUT_RPD11,
	OUT_RPF0,
	OUT_RPB1,
	OUT_RPE5,
	OUT_RPC13,
	OUT_RPB3,
	OUT_RPC4,
	OUT_RPD15,
	OUT_RPG0,
	OUT_RPA15,
	OUT_RPD7,
	OUT_RPD9,
	OUT_RPG6,
	OUT_RPB8,
	OUT_RPB15,
	OUT_RPD4,
	OUT_RPB0,
	OUT_RPE3,
	OUT_RPB7,
	OUT_RPF12,
	OUT_RPD12,
	OUT_RPF8,
	OUT_RPC3,
	OUT_RPE9,
	OUT_RPD1,
	OUT_RPG9,
	OUT_RPB14,
	OUT_RPD0,
	OUT_RPB6,
	OUT_RPD5,
	OUT_RPB2,
	OUT_RPF3,
	OUT_RPF13,
	OUT_RPC2,
	OUT_RPE8,
	OUT_RPF2,
};

/* Output PPS Functions */
#define OUT_FUNC_U3TX 0x01
#define OUT_FUNC_U4RTS 0x02
#define OUT_FUNC_SDO1 0x05
#define OUT_FUNC_SDO2 0x06
#define OUT_FUNC_SDO3 0x07
#define OUT_FUNC_SDO5 0x09
#define OUT_FUNC_SS6 0x0A
#define OUT_FUNC_OC3 0x0B
#define OUT_FUNC_OC6 0x0C
#define OUT_FUNC_REFCLKO4 0x0D
#define OUT_FUNC_C2OUT 0x0E
#define OUT_FUNC_C1TX 0x0F
#define OUT_FUNC_U1TX 0x01
#define OUT_FUNC_U2RTS 0x02
#define OUT_FUNC_U5TX 0x03
#define OUT_FUNC_U6RTS 0x04
#define OUT_FUNC_SDO1 0x05
#define OUT_FUNC_SDO2 0x06
#define OUT_FUNC_SDO3 0x07
#define OUT_FUNC_SDO4 0x08
#define OUT_FUNC_SDO5 0x09
#define OUT_FUNC_OC4 0x0B
#define OUT_FUNC_OC7 0x0C
#define OUT_FUNC_REFCLKO1 0x0F
#define OUT_FUNC_U3RTS 0x01
#define OUT_FUNC_U4TX 0x02
#define OUT_FUNC_U6TX 0x04
#define OUT_FUNC_SS1 0x05
#define OUT_FUNC_SS3 0x07
#define OUT_FUNC_SS4 0x08
#define OUT_FUNC_SS5 0x09
#define OUT_FUNC_SDO6 0x0A
#define OUT_FUNC_OC5 0x0B
#define OUT_FUNC_OC8 0x0C
#define OUT_FUNC_C1OUT 0x0E
#define OUT_FUNC_REFCLKO3 0x0F
#define OUT_FUNC_U1RTS 0x01
#define OUT_FUNC_U2TX 0x02
#define OUT_FUNC_U5RTS 0x03
#define OUT_FUNC_U6TX 0x04
#define OUT_FUNC_SS2 0x06
#define OUT_FUNC_SDO4 0x08
#define OUT_FUNC_SDO6 0x0A
#define OUT_FUNC_OC2 0x0B
#define OUT_FUNC_OC1 0x0C
#define OUT_FUNC_OC9 0x0D
#define OUT_FUNC_C2TX 0x0F

void pic32_pps_input(int function, int pin);
void pic32_pps_output(int function, int pin);

#endif
