/*****************************************************************************
 Copyright 2016 Broadcom Limited.  All rights reserved.

 This program is the proprietary software of Broadcom Limited and/or its
 licensors, and may only be used, duplicated, modified or distributed pursuant
 to the terms and conditions of a separate, written license agreement executed
 between you and Broadcom (an "Authorized License").

 Except as set forth in an Authorized License, Broadcom grants no license
 (express or implied), right to use, or waiver of any kind with respect to the
 Software, and Broadcom expressly reserves all rights in and to the Software
 and all intellectual property rights therein.  IF YOU HAVE NO AUTHORIZED
 LICENSE, THEN YOU HAVE NO RIGHT TO USE THIS SOFTWARE IN ANY WAY, AND SHOULD
 IMMEDIATELY NOTIFY BROADCOM AND DISCONTINUE ALL USE OF THE SOFTWARE.

  Except as expressly set forth in the Authorized License,
 1. This program, including its structure, sequence and organization,
    constitutes the valuable trade secrets of Broadcom, and you shall use all
    reasonable efforts to protect the confidentiality thereof, and to use this
    information only in connection with your use of Broadcom integrated
    circuit products.

 2. TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
    AND WITH ALL FAULTS AND BROADCOM MAKES NO PROMISES, REPRESENTATIONS OR
    WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT
    TO THE SOFTWARE.  BROADCOM SPECIFICALLY DISCLAIMS ANY AND ALL IMPLIED
    WARRANTIES OF TITLE, MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A
    PARTICULAR PURPOSE, LACK OF VIRUSES, ACCURACY OR COMPLETENESS,
    QUIET ENJOYMENT, QUIET POSSESSION OR CORRESPONDENCE TO DESCRIPTION.
    YOU ASSUME THE ENTIRE RISK ARISING OUT OF USE OR PERFORMANCE OF THE
    SOFTWARE.

 3. TO THE MAXIMUM EXTENT PERMITTED BY LAW, IN NO EVENT SHALL BROADCOM OR ITS
    LICENSORS BE LIABLE FOR (i) CONSEQUENTIAL, INCIDENTAL, SPECIAL, INDIRECT,
    OR EXEMPLARY DAMAGES WHATSOEVER ARISING OUT OF OR IN ANY WAY RELATING TO
    YOUR USE OF OR INABILITY TO USE THE SOFTWARE EVEN IF BROADCOM HAS BEEN
    ADVISED OF THE POSSIBILITY OF SUCH DAMAGES; OR (ii) ANY AMOUNT IN EXCESS
    OF THE AMOUNT ACTUALLY PAID FOR THE SOFTWARE ITSELF OR U.S. $1, WHICHEVER
    IS GREATER. THESE LIMITATIONS SHALL APPLY NOTWITHSTANDING ANY FAILURE OF
    ESSENTIAL PURPOSE OF ANY LIMITED REMEDY.
******************************************************************************/
#ifndef GPIO_H
#define GPIO_H

#define GPIO_ENABLE	0x1
#define GPIO_DISABLE	0x0

#define GPIO_DRV_EN	0x1
#define GPIO_DRV_DIS	0x0

#define GPIO_SET_1	0x1
#define GPIO_SET_0	0x0

typedef enum {
	GIO_GROUP_0,
	GIO_GROUP_1,
	GIO_GROUP_2,
} gio_group;

typedef enum {
	FLASH_CS_FUNC_CS,
	FLASH_CS_FUNC_GPIO,
} flash_cs_mux;

typedef enum {
	GPIO_PIN_0 = 0x1 << 0,
	GPIO_PIN_1 = 0x1 << 1,
	GPIO_PIN_2 = 0x1 << 2,
	GPIO_PIN_3 = 0x1 << 3,
} gpio_pin;

#define GPIO_PIN_ALL	(GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3)

typedef enum {
	STRAP_PIN_QSPI,
} strap_pin;


/* prototypes */
extern void gpio_config_output(gio_group grp, int pin);
extern void gpio_config_input(gio_group grp, int pin);
extern void gpio_set(gio_group grp, int pin, int val);
extern int gpio_get(gio_group grp, int pin);

extern void gpio_flash_cs_din_en(int enable);
extern void gpio_flash_cs_dout_en(int enable);
extern void gpio_flash_cs_oe_en(int enable);
extern void gpio_flash_mux_sel(flash_cs_mux mux);

#endif /* GPIO_H */
