2012-04-27 16:26:16 +04:00
/*
* IMX pinmux core definitions
*
* Copyright ( C ) 2012 Freescale Semiconductor , Inc .
* Copyright ( C ) 2012 Linaro Ltd .
*
* Author : Dong Aisheng < dong . aisheng @ linaro . org >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*/
# ifndef __DRIVERS_PINCTRL_IMX_H
# define __DRIVERS_PINCTRL_IMX_H
2017-05-19 10:05:42 +03:00
# include <linux/pinctrl/pinconf-generic.h>
2012-04-27 16:26:16 +04:00
struct platform_device ;
2013-07-28 18:29:22 +04:00
/**
2017-01-02 21:20:21 +03:00
* struct imx_pin - describes a single i . MX pin
2013-07-28 18:29:22 +04:00
* @ pin : the pin_id of this pin
* @ mux_mode : the mux mode for this pin .
* @ input_reg : the select input register offset for this pin if any
* 0 if no select input setting needed .
* @ input_val : the select input value for this pin .
* @ configs : the config for this pin .
*/
struct imx_pin {
unsigned int pin ;
unsigned int mux_mode ;
u16 input_reg ;
unsigned int input_val ;
unsigned long config ;
} ;
2012-04-27 16:26:16 +04:00
/**
* struct imx_pin_reg - describe a pin reg map
* @ mux_reg : mux register offset
* @ conf_reg : config register offset
*/
struct imx_pin_reg {
2014-09-06 20:25:04 +04:00
s16 mux_reg ;
s16 conf_reg ;
2012-04-27 16:26:16 +04:00
} ;
2017-05-19 10:05:42 +03:00
/* decode a generic config into raw register value */
struct imx_cfg_params_decode {
enum pin_config_param param ;
u32 mask ;
u8 shift ;
bool invert ;
} ;
2012-04-27 16:26:16 +04:00
struct imx_pinctrl_soc_info {
struct device * dev ;
const struct pinctrl_pin_desc * pins ;
unsigned int npins ;
2013-02-20 06:32:52 +04:00
struct imx_pin_reg * pin_regs ;
2015-09-24 23:53:57 +03:00
unsigned int group_index ;
2013-05-28 13:32:07 +04:00
unsigned int flags ;
2016-02-25 20:23:07 +03:00
const char * gpr_compatible ;
2016-12-02 19:35:19 +03:00
struct mutex mutex ;
2017-05-19 10:05:42 +03:00
2017-05-19 10:05:43 +03:00
/* MUX_MODE shift and mask in case SHARE_MUX_CONF_REG */
unsigned int mux_mask ;
u8 mux_shift ;
2017-05-19 10:05:42 +03:00
/* generic pinconf */
bool generic_pinconf ;
const struct pinconf_generic_params * custom_params ;
unsigned int num_custom_params ;
struct imx_cfg_params_decode * decodes ;
unsigned int num_decodes ;
void ( * fixup ) ( unsigned long * configs , unsigned int num_configs ,
u32 * raw_config ) ;
2012-04-27 16:26:16 +04:00
} ;
2017-05-19 10:05:42 +03:00
# define IMX_CFG_PARAMS_DECODE(p, m, o) \
{ . param = p , . mask = m , . shift = o , . invert = false , }
# define IMX_CFG_PARAMS_DECODE_INVERT(p, m, o) \
{ . param = p , . mask = m , . shift = o , . invert = true , }
2014-09-06 20:25:04 +04:00
# define SHARE_MUX_CONF_REG 0x1
2015-09-26 00:05:59 +03:00
# define ZERO_OFFSET_VALID 0x2
2013-05-28 13:32:07 +04:00
2012-04-27 16:26:16 +04:00
# define NO_MUX 0x0
# define NO_PAD 0x0
# define IMX_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
# define PAD_CTL_MASK(len) ((1 << len) - 1)
# define IMX_MUX_MASK 0x7
# define IOMUXC_CONFIG_SION (0x1 << 4)
int imx_pinctrl_probe ( struct platform_device * pdev ,
struct imx_pinctrl_soc_info * info ) ;
# endif /* __DRIVERS_PINCTRL_IMX_H */