/* Copyright 2018 Canaan Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#include <stddef.h>
#include <stdint.h>
#include "sysctl.h"
#include "fpioa.h"

volatile fpioa_t *const fpioa = (volatile fpioa_t *)FPIOA_BASE_ADDR;

/**
 * @brief      Internal used FPIOA function initialize cell
 *
 *             This is NOT fpioa_io_config_t, can't assign directly
 *
 */
typedef struct _fpioa_assign_t
{
    uint32_t ch_sel : 8;
    /* Channel select from 256 input. */
    uint32_t ds : 4;
    /* Driving selector. */
    uint32_t oe_en : 1;
    /* Static output enable, will AND with OE_INV. */
    uint32_t oe_inv : 1;
    /* Invert output enable. */
    uint32_t do_sel : 1;
    /* Data output select: 0 for DO, 1 for OE. */
    uint32_t do_inv : 1;
    /* Invert the result of data output select (DO_SEL). */
    uint32_t pu : 1;
    /* Pull up enable. 0 for nothing, 1 for pull up. */
    uint32_t pd : 1;
    /* Pull down enable. 0 for nothing, 1 for pull down. */
    uint32_t resv0 : 1;
    /* Reserved bits. */
    uint32_t sl : 1;
    /* Slew rate control enable. */
    uint32_t ie_en : 1;
    /* Static input enable, will AND with IE_INV. */
    uint32_t ie_inv : 1;
    /* Invert input enable. */
    uint32_t di_inv : 1;
    /* Invert Data input. */
    uint32_t st : 1;
    /* Schmitt trigger. */
    uint32_t tie_en : 1;
    /* Input tie enable, 1 for enable, 0 for disable. */
    uint32_t tie_val : 1;
    /* Input tie value, 1 for high, 0 for low. */
    uint32_t resv1 : 5;
    /* Reserved bits. */
    uint32_t pad_di : 1;
    /* Read current PAD's data input. */
} __attribute__((packed, aligned(4))) fpioa_assign_t;

/* Function list */
static const fpioa_assign_t function_config[FUNC_MAX] =
{
    {
        .ch_sel  = FUNC_JTAG_TCLK,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_JTAG_TDI,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_JTAG_TMS,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_JTAG_TDO,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D5,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D6,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_D7,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_SS0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_SS1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_SS2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_SS3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_ARB,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 1,
        .tie_val = 1,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI0_SCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UARTHS_RX,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UARTHS_TX,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV6,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV7,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CLK_SPI1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CLK_I2C1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS5,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS6,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS7,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS8,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS9,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS10,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS11,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS12,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS13,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS14,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS15,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS16,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS17,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS18,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS19,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS20,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS21,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS22,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS23,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS24,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS25,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS26,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS27,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS28,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS29,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS30,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIOHS31,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO5,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO6,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_GPIO7,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_RX,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_TX,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_RX,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_TX,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_RX,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_TX,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D5,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D6,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_D7,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_SS0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_SS1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_SS2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_SS3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_ARB,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 1,
        .tie_val = 1,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI1_SCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI_SLAVE_D0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 1,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI_SLAVE_SS,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SPI_SLAVE_SCLK,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_MCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_SCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_WS,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_IN_D0,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_IN_D1,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_IN_D2,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_IN_D3,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_OUT_D0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_OUT_D1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_OUT_D2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S0_OUT_D3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_MCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_SCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_WS,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_IN_D0,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_IN_D1,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_IN_D2,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_IN_D3,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_OUT_D0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_OUT_D1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_OUT_D2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S1_OUT_D3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_MCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_SCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_WS,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_IN_D0,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_IN_D1,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_IN_D2,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_IN_D3,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_OUT_D0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_OUT_D1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_OUT_D2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2S2_OUT_D3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV0,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV1,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV2,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV3,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV4,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_RESV5,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2C0_SCLK,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2C0_SDA,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2C1_SCLK,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2C1_SDA,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2C2_SCLK,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_I2C2_SDA,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_XCLK,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_RST,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_PWDN,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_VSYNC,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_HREF,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_PCLK,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D0,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D1,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D2,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D3,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D4,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D5,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D6,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CMOS_D7,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SCCB_SCLK,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_SCCB_SDA,
        .ds      = 0x0,
        .oe_en   = 1,
        .oe_inv  = 1,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_CTS,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_DSR,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_DCD,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_RI,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_SIR_IN,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_DTR,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_RTS,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_OUT2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_OUT1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_SIR_OUT,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_BAUD,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_RE,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_DE,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART1_RS485_EN,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_CTS,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_DSR,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_DCD,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_RI,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_SIR_IN,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_DTR,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_RTS,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_OUT2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_OUT1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_SIR_OUT,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_BAUD,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_RE,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_DE,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART2_RS485_EN,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_CTS,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_DSR,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_DCD,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_RI,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_SIR_IN,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_DTR,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_RTS,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_OUT2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_OUT1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_SIR_OUT,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_BAUD,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_RE,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_DE,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_UART3_RS485_EN,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER0_TOGGLE1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER0_TOGGLE2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER0_TOGGLE3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER0_TOGGLE4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER1_TOGGLE1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER1_TOGGLE2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER1_TOGGLE3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER1_TOGGLE4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER2_TOGGLE1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER2_TOGGLE2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER2_TOGGLE3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_TIMER2_TOGGLE4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CLK_SPI2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CLK_I2C2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL5,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL6,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL7,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL8,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL9,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL10,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL11,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL12,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL13,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL14,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 1,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 1,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL15,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL16,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL17,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_CONSTANT,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_INTERNAL18,
        .ds      = 0x0,
        .oe_en   = 0,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 1,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 1,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG0,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG1,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG2,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG3,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG4,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG5,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG6,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG7,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG8,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG9,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG10,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG11,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG12,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG13,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG14,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG15,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG16,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG17,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG18,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG19,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG20,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG21,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG22,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG23,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG24,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG25,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG26,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG27,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG28,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG29,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG30,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
    {
        .ch_sel  = FUNC_DEBUG31,
        .ds      = 0xf,
        .oe_en   = 1,
        .oe_inv  = 0,
        .do_sel  = 0,
        .do_inv  = 0,
        .pu      = 0,
        .pd      = 0,
        .resv1   = 0,
        .sl      = 0,
        .ie_en   = 0,
        .ie_inv  = 0,
        .di_inv  = 0,
        .st      = 0,
        .tie_en  = 0,
        .tie_val = 0,
        .resv0   = 0,
        .pad_di  = 0
    },
};

int fpioa_init(void)
{
    int i = 0;

    /* Enable fpioa clock in system controller */
    sysctl_clock_enable(SYSCTL_CLOCK_FPIOA);

    /* Initialize tie */
    fpioa_tie_t tie = { 0 };

    /* Set tie enable and tie value */
    for (i = 0; i < FUNC_MAX; i++)
    {
        tie.en[i / 32] |= (function_config[i].tie_en << (i % 32));
        tie.val[i / 32] |= (function_config[i].tie_val << (i % 32));
    }

    /* Atomic write every 32bit register to fpioa function */
    for (i = 0; i < FUNC_MAX / 32; i++)
    {
        /* Set value before enable */
        fpioa->tie.val[i] = tie.val[i];
        fpioa->tie.en[i] = tie.en[i];
    }

    return 0;
}

int fpioa_get_io(int number, fpioa_io_config_t *cfg)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO || cfg == NULL)
        return -1;
    /* Atomic read register */
    *cfg = fpioa->io[number];
    return 0;
}

int fpioa_set_io(int number, fpioa_io_config_t *cfg)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO || cfg == NULL)
        return -1;
    /* Atomic write register */
    fpioa->io[number] = *cfg;
    return 0;
}

int fpioa_set_io_pull(int number, fpioa_pull_t pull)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO || pull >= FPIOA_PULL_MAX)
        return -1;

    /* Atomic read register */
    fpioa_io_config_t cfg = fpioa->io[number];

    switch (pull)
    {
        case FPIOA_PULL_NONE:
            cfg.pu = 0;
            cfg.pd = 0;
            break;
        case FPIOA_PULL_DOWN:
            cfg.pu = 0;
            cfg.pd = 1;
            break;
        case FPIOA_PULL_UP:
            cfg.pu = 1;
            cfg.pd = 0;
            break;
        default:
            break;
    }
    /* Atomic write register */
    fpioa->io[number] = cfg;
    return 0;
}

int fpioa_get_io_pull(int number)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO)
        return -1;

    fpioa_pull_t pull;
    /* Atomic read register */
    fpioa_io_config_t cfg = fpioa->io[number];

    if (cfg.pu == 0 && cfg.pd == 1)
        pull = FPIOA_PULL_DOWN;
    else if (cfg.pu == 1 && cfg.pd == 0)
        pull = FPIOA_PULL_UP;
    else
        pull = FPIOA_PULL_NONE;
    return pull;
}

int fpioa_set_io_driving(int number, fpioa_driving_t driving)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO || driving >= FPIOA_DRIVING_MAX)
        return -1;

    /* Atomic read register */
    fpioa_io_config_t cfg = fpioa->io[number];
    /* Set IO driving */
    cfg.ds = driving;
    /* Atomic write register */
    fpioa->io[number] = cfg;
    return 0;
}

int fpioa_get_io_driving(int number)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO)
        return -1;

    return fpioa->io[number].ds;
}

int fpioa_set_function_raw(int number, fpioa_function_t function)
{
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO || function < 0 || function >= FUNC_MAX)
        return -1;
    /* Atomic write register */
    fpioa->io[number] =(const fpioa_io_config_t)
    {
        .ch_sel = function_config[function].ch_sel,
        .ds     = function_config[function].ds,
        .oe_en  = function_config[function].oe_en,
        .oe_inv = function_config[function].oe_inv,
        .do_sel = function_config[function].do_sel,
        .do_inv = function_config[function].do_inv,
        .pu     = function_config[function].pu,
        .pd     = function_config[function].pd,
        .sl     = function_config[function].sl,
        .ie_en  = function_config[function].ie_en,
        .ie_inv = function_config[function].ie_inv,
        .di_inv = function_config[function].di_inv,
        .st     = function_config[function].st,
        /* resv and pad_di do not need initialization */
    };
    return 0;
}

int fpioa_set_function(int number, fpioa_function_t function)
{
    uint8_t index = 0;
    /* Check parameters */
    if (number < 0 || number >= FPIOA_NUM_IO || function < 0 || function >= FUNC_MAX)
        return -1;
    if (function == FUNC_RESV0)
    {
        fpioa_set_function_raw(number, FUNC_RESV0);
        return 0;
    }
    /* Compare all IO */
    for (index = 0; index < FPIOA_NUM_IO; index++)
    {
        if ((fpioa->io[index].ch_sel == function) && (index != number))
            fpioa_set_function_raw(index, FUNC_RESV0);
    }
    fpioa_set_function_raw(number, function);
    return 0;
}

int fpioa_set_tie_enable(fpioa_function_t function, int enable)
{
    /* Check parameters */
    if (function < 0 || function >= FUNC_MAX)
        return -1;
    /* Set tie enable */
    if (enable)
        fpioa->tie.en[function / 32] |= (1UL << (function % 32));
    else
        fpioa->tie.en[function / 32] &= (~(1UL << (function % 32)));
    return 0;
}

int fpioa_set_tie_value(fpioa_function_t function, int value)
{
    /* Check parameters */
    if (function < 0 || function >= FUNC_MAX)
        return -1;
    /* Set tie value */
    if (value)
        fpioa->tie.val[function / 32] |= (1UL << (function % 32));
    else
        fpioa->tie.val[function / 32] &= (~(1UL << (function % 32)));
    return 0;
}

int fpioa_get_io_by_function(fpioa_function_t function)
{
    int index = 0;
    for (index = 0; index < FPIOA_NUM_IO; index++)
    {
        if (fpioa->io[index].ch_sel == function)
            return index;
    }

    return -1;
}
