2012-12-15 23:50:44 +01:00
/*
* SuperH Pin Function Controller support .
*
* Copyright ( C ) 2012 Renesas Solutions Corp .
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*/
# ifndef __SH_PFC_CORE_H__
# define __SH_PFC_CORE_H__
# include <linux/compiler.h>
2013-04-09 14:06:01 +00:00
# include <linux/spinlock.h>
2012-12-15 23:50:44 +01:00
# include <linux/types.h>
2012-12-15 23:51:55 +01:00
# include "sh_pfc.h"
2012-12-15 23:50:53 +01:00
struct sh_pfc_window {
2012-12-15 23:50:44 +01:00
phys_addr_t phys ;
void __iomem * virt ;
unsigned long size ;
} ;
2012-12-15 23:50:46 +01:00
struct sh_pfc_chip ;
2012-12-15 23:50:47 +01:00
struct sh_pfc_pinctrl ;
2012-12-15 23:50:46 +01:00
2013-07-15 18:38:30 +02:00
struct sh_pfc_pin_range {
u16 start ;
u16 end ;
} ;
2012-12-15 23:50:44 +01:00
struct sh_pfc {
2012-12-15 23:50:47 +01:00
struct device * dev ;
2013-02-16 18:47:05 +01:00
const struct sh_pfc_soc_info * info ;
2012-12-15 23:50:44 +01:00
spinlock_t lock ;
2012-12-15 23:50:55 +01:00
unsigned int num_windows ;
2013-12-11 04:26:25 +01:00
struct sh_pfc_window * windows ;
2013-12-11 04:26:26 +01:00
unsigned int num_irqs ;
unsigned int * irqs ;
2012-12-15 23:50:55 +01:00
2013-07-15 18:38:30 +02:00
struct sh_pfc_pin_range * ranges ;
unsigned int nr_ranges ;
2013-07-15 13:48:56 +02:00
unsigned int nr_gpio_pins ;
2013-02-15 01:33:38 +01:00
2012-12-15 23:50:46 +01:00
struct sh_pfc_chip * gpio ;
2012-12-06 14:49:25 +01:00
struct sh_pfc_chip * func ;
2012-12-15 23:50:47 +01:00
struct sh_pfc_pinctrl * pinctrl ;
2012-12-15 23:50:44 +01:00
} ;
int sh_pfc_register_gpiochip ( struct sh_pfc * pfc ) ;
2012-12-15 23:50:46 +01:00
int sh_pfc_unregister_gpiochip ( struct sh_pfc * pfc ) ;
2012-12-15 23:50:44 +01:00
int sh_pfc_register_pinctrl ( struct sh_pfc * pfc ) ;
2012-12-15 23:50:47 +01:00
int sh_pfc_unregister_pinctrl ( struct sh_pfc * pfc ) ;
2012-12-15 23:50:44 +01:00
2013-02-15 02:04:55 +01:00
unsigned long sh_pfc_read_raw_reg ( void __iomem * mapped_reg ,
unsigned long reg_width ) ;
void sh_pfc_write_raw_reg ( void __iomem * mapped_reg , unsigned long reg_width ,
unsigned long data ) ;
2013-03-08 17:43:54 +01:00
int sh_pfc_get_pin_index ( struct sh_pfc * pfc , unsigned int pin ) ;
2013-03-10 15:29:14 +01:00
int sh_pfc_config_mux ( struct sh_pfc * pfc , unsigned mark , int pinmux_type ) ;
2012-12-15 23:50:44 +01:00
2013-03-26 22:49:49 +09:00
extern const struct sh_pfc_soc_info r8a73a4_pinmux_info ;
2013-02-16 18:47:05 +01:00
extern const struct sh_pfc_soc_info r8a7740_pinmux_info ;
2013-04-12 05:37:20 +00:00
extern const struct sh_pfc_soc_info r8a7778_pinmux_info ;
2013-02-16 18:47:05 +01:00
extern const struct sh_pfc_soc_info r8a7779_pinmux_info ;
2013-04-08 11:08:53 +09:00
extern const struct sh_pfc_soc_info r8a7790_pinmux_info ;
2013-10-17 06:46:05 +09:00
extern const struct sh_pfc_soc_info r8a7791_pinmux_info ;
2013-02-16 18:47:05 +01:00
extern const struct sh_pfc_soc_info sh7203_pinmux_info ;
extern const struct sh_pfc_soc_info sh7264_pinmux_info ;
extern const struct sh_pfc_soc_info sh7269_pinmux_info ;
extern const struct sh_pfc_soc_info sh7372_pinmux_info ;
extern const struct sh_pfc_soc_info sh73a0_pinmux_info ;
extern const struct sh_pfc_soc_info sh7720_pinmux_info ;
extern const struct sh_pfc_soc_info sh7722_pinmux_info ;
extern const struct sh_pfc_soc_info sh7723_pinmux_info ;
extern const struct sh_pfc_soc_info sh7724_pinmux_info ;
extern const struct sh_pfc_soc_info sh7734_pinmux_info ;
extern const struct sh_pfc_soc_info sh7757_pinmux_info ;
extern const struct sh_pfc_soc_info sh7785_pinmux_info ;
extern const struct sh_pfc_soc_info sh7786_pinmux_info ;
extern const struct sh_pfc_soc_info shx3_pinmux_info ;
2012-12-15 23:51:21 +01:00
2012-12-15 23:50:44 +01:00
# endif /* __SH_PFC_CORE_H__ */