/**
 * @file   gpio-mst.h
 * @brief  Contains common definitions for GPIO control 
 *
 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
 */

#ifndef __GPIO_MST_H__
#define __GPIO_MST_H__

#define MST_D_NEG	0
#define MST_D_POS	1

/* TZPC check value */
#define TZPC_SECURE	0x0

/* TZPC */
uint32_t set_gpio_mst_secure(uint32_t pin_conf);
void set_gpio_mst_default(uint32_t pin_conf);
void set_saved_gpio_mst_default(void);

/* suspend & resume & LPA*/
uint32_t save_mst_gpio_regs(uint32_t pin_conf);
uint32_t restore_mst_gpio_regs(uint32_t pin_conf);
uint32_t set_gpio_sleep_state(uint32_t pin_conf);
void set_gpio_lpa_mode(uint32_t pin_conf);

/* MST init&exit */
void gpio_set_mst_init(uint32_t pin_conf, uint8_t gpio_mst_md_pin, uint8_t gpio_mst_pd_pin, uint8_t gpio_mst_pwr_en_pin);
void gpio_set_mst_exit(uint32_t pin_conf, uint8_t gpio_mst_md_pin, uint8_t gpio_mst_pd_pin, uint8_t gpio_mst_pwr_en_pin);


/* MST solution */
inline int gpio_set_mst_data(uint32_t data, const int mst, uint8_t gpio_mst_pin);
inline int gpio_set_mst_data_positive(uint32_t data);
inline int gpio_set_mst_data_negative(uint32_t data);

/* time */
inline void udelay(uint32_t usec);

/* I2C recover */
void recover_gpio_mst(int gpio);

#endif /* __GPIO_MST_H__ */
