@ -25,8 +25,12 @@
# ifndef __ASSEMBLY__
# ifndef CONFIG_PINCTRL
# include <linux/compiler.h>
# include <linux/gpio.h>
# include <asm/blackfin.h>
# include <asm/portmux.h>
# include <asm/irq_handler.h>
/***********************************************************
*
@ -45,7 +49,6 @@
* MODIFICATION HISTORY :
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# if !BFIN_GPIO_PINT
void set_gpio_dir ( unsigned , unsigned short ) ;
void set_gpio_inen ( unsigned , unsigned short ) ;
void set_gpio_polar ( unsigned , unsigned short ) ;
@ -115,7 +118,6 @@ struct gpio_port_t {
unsigned short dummy16 ;
unsigned short inen ;
} ;
# endif
# ifdef BFIN_SPECIAL_GPIO_BANKS
void bfin_special_gpio_free ( unsigned gpio ) ;
@ -127,25 +129,21 @@ void bfin_special_gpio_pm_hibernate_suspend(void);
# endif
# ifdef CONFIG_PM
int bfin_pm_standby_ctrl ( unsigned ctrl ) ;
void bfin_gpio_pm_hibernate_restore ( void ) ;
void bfin_gpio_pm_hibernate_suspend ( void ) ;
int bfin_gpio_pm_wakeup_ctrl ( unsigned gpio , unsigned ctrl ) ;
int bfin_gpio_pm_standby_ctrl ( unsigned ctrl ) ;
static inline int bfin_pm_standby_setup ( void )
{
return bfin_pm_standby_ctrl ( 1 ) ;
return bfin_gpio_ pm_standby_ctrl ( 1 ) ;
}
static inline void bfin_pm_standby_restore ( void )
{
bfin_pm_standby_ctrl ( 0 ) ;
bfin_gpio_ pm_standby_ctrl ( 0 ) ;
}
void bfin_gpio_pm_hibernate_restore ( void ) ;
void bfin_gpio_pm_hibernate_suspend ( void ) ;
void bfin_pint_suspend ( void ) ;
void bfin_pint_resume ( void ) ;
# if !BFIN_GPIO_PINT
int gpio_pm_wakeup_ctrl ( unsigned gpio , unsigned ctrl ) ;
struct gpio_port_s {
unsigned short data ;
@ -161,7 +159,6 @@ struct gpio_port_s {
unsigned short reserved ;
unsigned short mux ;
} ;
# endif
# endif /*CONFIG_PM*/
/***********************************************************
@ -178,36 +175,29 @@ struct gpio_port_s {
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* MODIFICATION HISTORY :
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
int bfin_gpio_request ( unsigned gpio , const char * label ) ;
void bfin_gpio_free ( unsigned gpio ) ;
int bfin_gpio_irq_request ( unsigned gpio , const char * label ) ;
void bfin_gpio_irq_free ( unsigned gpio ) ;
int bfin_gpio_direction_input ( unsigned gpio ) ;
int bfin_gpio_direction_output ( unsigned gpio , int value ) ;
int bfin_gpio_get_value ( unsigned gpio ) ;
void bfin_gpio_set_value ( unsigned gpio , int value ) ;
void bfin_gpio_irq_prepare ( unsigned gpio ) ;
static inline int irq_to_gpio ( unsigned irq )
{
return irq - GPIO_IRQ_BASE ;
}
# endif /* CONFIG_PINCTRL */
# include <asm/irq.h>
# include <asm/errno.h>
# ifdef CONFIG_GPIOLIB
# include <asm-generic/gpio.h> /* cansleep wrappers */
static inline int gpio_get_value ( unsigned int gpio )
{
if ( gpio < MAX_BLACKFIN_GPIOS )
return bfin_gpio_get_value ( gpio ) ;
else
return __gpio_get_value ( gpio ) ;
return __gpio_get_value ( gpio ) ;
}
static inline void gpio_set_value ( unsigned int gpio , int value )
{
if ( gpio < MAX_BLACKFIN_GPIOS )
bfin_gpio_set_value ( gpio , value ) ;
else
__gpio_set_value ( gpio , value ) ;
__gpio_set_value ( gpio , value ) ;
}
static inline int gpio_cansleep ( unsigned int gpio )
@ -219,113 +209,6 @@ static inline int gpio_to_irq(unsigned gpio)
{
return __gpio_to_irq ( gpio ) ;
}
# else /* !CONFIG_GPIOLIB */
static inline int gpio_request ( unsigned gpio , const char * label )
{
return bfin_gpio_request ( gpio , label ) ;
}
static inline void gpio_free ( unsigned gpio )
{
return bfin_gpio_free ( gpio ) ;
}
static inline int gpio_direction_input ( unsigned gpio )
{
return bfin_gpio_direction_input ( gpio ) ;
}
static inline int gpio_direction_output ( unsigned gpio , int value )
{
return bfin_gpio_direction_output ( gpio , value ) ;
}
static inline int gpio_set_debounce ( unsigned gpio , unsigned debounce )
{
return - EINVAL ;
}
static inline int gpio_request_one ( unsigned gpio , unsigned long flags , const char * label )
{
int err ;
err = bfin_gpio_request ( gpio , label ) ;
if ( err )
return err ;
if ( flags & GPIOF_DIR_IN )
err = bfin_gpio_direction_input ( gpio ) ;
else
err = bfin_gpio_direction_output ( gpio ,
( flags & GPIOF_INIT_HIGH ) ? 1 : 0 ) ;
if ( err )
bfin_gpio_free ( gpio ) ;
return err ;
}
static inline int gpio_request_array ( const struct gpio * array , size_t num )
{
int i , err ;
for ( i = 0 ; i < num ; i + + , array + + ) {
err = gpio_request_one ( array - > gpio , array - > flags , array - > label ) ;
if ( err )
goto err_free ;
}
return 0 ;
err_free :
while ( i - - )
bfin_gpio_free ( ( - - array ) - > gpio ) ;
return err ;
}
static inline void gpio_free_array ( const struct gpio * array , size_t num )
{
while ( num - - )
bfin_gpio_free ( ( array + + ) - > gpio ) ;
}
static inline int __gpio_get_value ( unsigned gpio )
{
return bfin_gpio_get_value ( gpio ) ;
}
static inline void __gpio_set_value ( unsigned gpio , int value )
{
return bfin_gpio_set_value ( gpio , value ) ;
}
static inline int gpio_get_value ( unsigned gpio )
{
return __gpio_get_value ( gpio ) ;
}
static inline void gpio_set_value ( unsigned gpio , int value )
{
return __gpio_set_value ( gpio , value ) ;
}
static inline int gpio_to_irq ( unsigned gpio )
{
if ( likely ( gpio < MAX_BLACKFIN_GPIOS ) )
return gpio + GPIO_IRQ_BASE ;
return - EINVAL ;
}
# include <asm-generic/gpio.h> /* cansleep wrappers */
# endif /* !CONFIG_GPIOLIB */
static inline int irq_to_gpio ( unsigned irq )
{
return ( irq - GPIO_IRQ_BASE ) ;
}
# endif /* __ASSEMBLY__ */
# endif /* __ARCH_BLACKFIN_GPIO_H__ */