2 * linux/drivers/pinctrl/pinctrl-pxa3xx.h
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * publishhed by the Free Software Foundation.
8 * Copyright (C) 2011, Marvell Technology Group Ltd.
10 * Author: Haojian Zhuang <haojian.zhuang@marvell.com>
14 #ifndef __PINCTRL_PXA3XX_H
16 #include <linux/pinctrl/pinctrl.h>
17 #include <linux/pinctrl/pinmux.h>
19 #define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
21 #define PXA3xx_MUX_GPIO 0
23 #define PXA3xx_MAX_MUX 8
24 #define MFPR_FUNC_MASK 0x7
39 struct pxa3xx_mfp_pin {
41 const unsigned int pin;
42 const unsigned int mfpr; /* register offset */
43 const unsigned short func[8];
46 struct pxa3xx_pin_group {
53 struct pxa3xx_pmx_func {
55 const char * const * groups;
56 const unsigned num_groups;
59 struct pxa3xx_pinmux_info {
61 struct pinctrl_dev *pctrl;
62 enum pxa_cpu_type cputype;
63 unsigned int phy_base;
64 unsigned int phy_size;
65 void __iomem *virt_base;
67 struct pxa3xx_mfp_pin *mfp;
69 struct pxa3xx_pin_group *grps;
70 unsigned int num_grps;
71 struct pxa3xx_pmx_func *funcs;
72 unsigned int num_funcs;
73 unsigned int num_gpio;
74 struct pinctrl_desc *desc;
75 struct pinctrl_pin_desc *pads;
76 unsigned int num_pads;
78 unsigned ds_mask; /* drive strength mask */
79 unsigned ds_shift; /* drive strength shift */
80 unsigned slp_mask; /* sleep mask */
81 unsigned slp_input_low;
82 unsigned slp_input_high;
83 unsigned slp_output_low;
84 unsigned slp_output_high;
88 enum pxa3xx_pin_list {
261 extern int pxa3xx_pinctrl_register(struct platform_device *pdev,
262 struct pxa3xx_pinmux_info *info);
263 extern int pxa3xx_pinctrl_unregister(struct platform_device *pdev);
264 #endif /* __PINCTRL_PXA3XX_H */