Commit | Line | Data |
---|---|---|
17723111 SG |
1 | /* |
2 | * Copyright 2012 Freescale Semiconductor, Inc. | |
3 | * | |
4 | * The code contained herein is licensed under the GNU General Public | |
5 | * License. You may obtain a copy of the GNU General Public License | |
6 | * Version 2 or later at the following locations: | |
7 | * | |
8 | * http://www.opensource.org/licenses/gpl-license.html | |
9 | * http://www.gnu.org/copyleft/gpl.html | |
10 | */ | |
11 | ||
12 | #ifndef __PINCTRL_MXS_H | |
13 | #define __PINCTRL_MXS_H | |
14 | ||
15 | #include <linux/platform_device.h> | |
16 | #include <linux/pinctrl/pinctrl.h> | |
17 | ||
18 | #define SET 0x4 | |
19 | #define CLR 0x8 | |
20 | #define TOG 0xc | |
21 | ||
22 | #define MXS_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin) | |
23 | #define PINID(bank, pin) ((bank) * 32 + (pin)) | |
24 | ||
25 | /* | |
26 | * pinmux-id bit field definitions | |
27 | * | |
28 | * bank: 15..12 (4) | |
29 | * pin: 11..4 (8) | |
30 | * muxsel: 3..0 (4) | |
31 | */ | |
32 | #define MUXID_TO_PINID(m) PINID((m) >> 12 & 0xf, (m) >> 4 & 0xff) | |
33 | #define MUXID_TO_MUXSEL(m) ((m) & 0xf) | |
34 | ||
35 | #define PINID_TO_BANK(p) ((p) >> 5) | |
36 | #define PINID_TO_PIN(p) ((p) % 32) | |
37 | ||
38 | /* | |
39 | * pin config bit field definitions | |
40 | * | |
41 | * pull-up: 6..5 (2) | |
42 | * voltage: 4..3 (2) | |
43 | * mA: 2..0 (3) | |
44 | * | |
45 | * MSB of each field is presence bit for the config. | |
46 | */ | |
47 | #define PULL_PRESENT (1 << 6) | |
48 | #define PULL_SHIFT 5 | |
49 | #define VOL_PRESENT (1 << 4) | |
50 | #define VOL_SHIFT 3 | |
51 | #define MA_PRESENT (1 << 2) | |
52 | #define MA_SHIFT 0 | |
53 | #define CONFIG_TO_PULL(c) ((c) >> PULL_SHIFT & 0x1) | |
54 | #define CONFIG_TO_VOL(c) ((c) >> VOL_SHIFT & 0x1) | |
55 | #define CONFIG_TO_MA(c) ((c) >> MA_SHIFT & 0x3) | |
56 | ||
57 | struct mxs_function { | |
58 | const char *name; | |
59 | const char **groups; | |
60 | unsigned ngroups; | |
61 | }; | |
62 | ||
63 | struct mxs_group { | |
64 | const char *name; | |
65 | unsigned int *pins; | |
66 | unsigned npins; | |
67 | u8 *muxsel; | |
68 | u8 config; | |
69 | }; | |
70 | ||
71 | struct mxs_regs { | |
72 | u16 muxsel; | |
73 | u16 drive; | |
74 | u16 pull; | |
75 | }; | |
76 | ||
77 | struct mxs_pinctrl_soc_data { | |
78 | const struct mxs_regs *regs; | |
79 | const struct pinctrl_pin_desc *pins; | |
80 | unsigned npins; | |
81 | struct mxs_function *functions; | |
82 | unsigned nfunctions; | |
83 | struct mxs_group *groups; | |
84 | unsigned ngroups; | |
85 | }; | |
86 | ||
87 | int mxs_pinctrl_probe(struct platform_device *pdev, | |
88 | struct mxs_pinctrl_soc_data *soc); | |
89 | int mxs_pinctrl_remove(struct platform_device *pdev); | |
90 | ||
91 | #endif /* __PINCTRL_MXS_H */ |