1/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright 2012 Freescale Semiconductor, Inc.
4 */
5
6#ifndef __PINCTRL_MXS_H
7#define __PINCTRL_MXS_H
8
9#include <linux/platform_device.h>
10#include <linux/pinctrl/pinctrl.h>
11
12#define SET 0x4
13#define CLR 0x8
14#define TOG 0xc
15
16#define MXS_PINCTRL_PIN(pin) PINCTRL_PIN(pin, #pin)
17#define PINID(bank, pin) ((bank) * 32 + (pin))
18
19/*
20 * pinmux-id bit field definitions
21 *
22 * bank: 15..12 (4)
23 * pin: 11..4 (8)
24 * muxsel: 3..0 (4)
25 */
26#define MUXID_TO_PINID(m) PINID((m) >> 12 & 0xf, (m) >> 4 & 0xff)
27#define MUXID_TO_MUXSEL(m) ((m) & 0xf)
28
29#define PINID_TO_BANK(p) ((p) >> 5)
30#define PINID_TO_PIN(p) ((p) % 32)
31
32/*
33 * pin config bit field definitions
34 *
35 * pull-up: 6..5 (2)
36 * voltage: 4..3 (2)
37 * mA: 2..0 (3)
38 *
39 * MSB of each field is presence bit for the config.
40 */
41#define PULL_PRESENT (1 << 6)
42#define PULL_SHIFT 5
43#define VOL_PRESENT (1 << 4)
44#define VOL_SHIFT 3
45#define MA_PRESENT (1 << 2)
46#define MA_SHIFT 0
47#define PIN_CONFIG_TO_PULL(c) ((c) >> PULL_SHIFT & 0x1)
48#define PIN_CONFIG_TO_VOL(c) ((c) >> VOL_SHIFT & 0x1)
49#define PIN_CONFIG_TO_MA(c) ((c) >> MA_SHIFT & 0x3)
50
51struct mxs_function {
52 const char *name;
53 const char **groups;
54 unsigned ngroups;
55};
56
57struct mxs_group {
58 const char *name;
59 unsigned int *pins;
60 unsigned npins;
61 u8 *muxsel;
62 u8 config;
63};
64
65struct mxs_regs {
66 u16 muxsel;
67 u16 drive;
68 u16 pull;
69};
70
71struct mxs_pinctrl_soc_data {
72 const struct mxs_regs *regs;
73 const struct pinctrl_pin_desc *pins;
74 unsigned npins;
75 struct mxs_function *functions;
76 unsigned nfunctions;
77 struct mxs_group *groups;
78 unsigned ngroups;
79};
80
81int mxs_pinctrl_probe(struct platform_device *pdev,
82 struct mxs_pinctrl_soc_data *soc);
83
84#endif /* __PINCTRL_MXS_H */
85

source code of linux/drivers/pinctrl/freescale/pinctrl-mxs.h