Blame view

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