Blame view

drivers/pinctrl/sirf/pinctrl-sirf.h 3.04 KB
3370dc916   Barry Song   pinctrl:sirf:re-a...
1
2
3
4
5
6
7
8
9
10
  /*
   * pinmux driver shared headfile for CSR SiRFsoc
   *
   * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
   *
   * Licensed under GPLv2 or later.
   */
  
  #ifndef __PINMUX_SIRF_H__
  #define __PINMUX_SIRF_H__
6a08a92ec   Rong Wang   pinctrl: sirf: ad...
11
12
13
  #define SIRFSOC_NUM_PADS		622
  #define SIRFSOC_RSC_USB_UART_SHARE	0
  #define SIRFSOC_RSC_PIN_MUX		0x4
3370dc916   Barry Song   pinctrl:sirf:re-a...
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
  
  #define SIRFSOC_GPIO_PAD_EN(g)		((g)*0x100 + 0x84)
  #define SIRFSOC_GPIO_PAD_EN_CLR(g)	((g)*0x100 + 0x90)
  #define SIRFSOC_GPIO_CTRL(g, i)			((g)*0x100 + (i)*4)
  #define SIRFSOC_GPIO_DSP_EN0			(0x80)
  #define SIRFSOC_GPIO_INT_STATUS(g)		((g)*0x100 + 0x8C)
  
  #define SIRFSOC_GPIO_CTL_INTR_LOW_MASK		0x1
  #define SIRFSOC_GPIO_CTL_INTR_HIGH_MASK		0x2
  #define SIRFSOC_GPIO_CTL_INTR_TYPE_MASK		0x4
  #define SIRFSOC_GPIO_CTL_INTR_EN_MASK		0x8
  #define SIRFSOC_GPIO_CTL_INTR_STS_MASK		0x10
  #define SIRFSOC_GPIO_CTL_OUT_EN_MASK		0x20
  #define SIRFSOC_GPIO_CTL_DATAOUT_MASK		0x40
  #define SIRFSOC_GPIO_CTL_DATAIN_MASK		0x80
  #define SIRFSOC_GPIO_CTL_PULL_MASK		0x100
  #define SIRFSOC_GPIO_CTL_PULL_HIGH		0x200
  #define SIRFSOC_GPIO_CTL_DSP_INT		0x400
  
  #define SIRFSOC_GPIO_NO_OF_BANKS        5
  #define SIRFSOC_GPIO_BANK_SIZE          32
  #define SIRFSOC_GPIO_NUM(bank, index)	(((bank)*(32)) + (index))
  
  /**
   * @dev: a pointer back to containing device
   * @virtbase: the offset to the controller in virtual memory
   */
  struct sirfsoc_pmx {
  	struct device *dev;
  	struct pinctrl_dev *pmx;
  	void __iomem *gpio_virtbase;
  	void __iomem *rsc_virtbase;
  	u32 gpio_regs[SIRFSOC_GPIO_NO_OF_BANKS][SIRFSOC_GPIO_BANK_SIZE];
  	u32 ints_regs[SIRFSOC_GPIO_NO_OF_BANKS];
  	u32 paden_regs[SIRFSOC_GPIO_NO_OF_BANKS];
  	u32 dspen_regs;
  	u32 rsc_regs[3];
  	bool is_marco;
  };
  
  /* SIRFSOC_GPIO_PAD_EN set */
  struct sirfsoc_muxmask {
  	unsigned long group;
  	unsigned long mask;
  };
  
  struct sirfsoc_padmux {
  	unsigned long muxmask_counts;
  	const struct sirfsoc_muxmask *muxmask;
  	/* RSC_PIN_MUX set */
6a08a92ec   Rong Wang   pinctrl: sirf: ad...
64
  	unsigned long ctrlreg;
3370dc916   Barry Song   pinctrl:sirf:re-a...
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
  	unsigned long funcmask;
  	unsigned long funcval;
  };
  
   /**
   * struct sirfsoc_pin_group - describes a SiRFprimaII pin group
   * @name: the name of this specific pin group
   * @pins: an array of discrete physical pins used in this group, taken
   *	from the driver-local pin enumeration space
   * @num_pins: the number of pins in this group array, i.e. the number of
   *	elements in .pins so we can iterate over that array
   */
  struct sirfsoc_pin_group {
  	const char *name;
  	const unsigned int *pins;
  	const unsigned num_pins;
  };
  
  #define SIRFSOC_PIN_GROUP(n, p)  \
  	{			\
  		.name = n,	\
  		.pins = p,	\
  		.num_pins = ARRAY_SIZE(p),	\
  	}
  
  struct sirfsoc_pmx_func {
  	const char *name;
  	const char * const *groups;
  	const unsigned num_groups;
  	const struct sirfsoc_padmux *padmux;
  };
  
  #define SIRFSOC_PMX_FUNCTION(n, g, m)		\
  	{					\
  		.name = n,			\
  		.groups = g,			\
  		.num_groups = ARRAY_SIZE(g),	\
  		.padmux = &m,			\
  	}
  
  struct sirfsoc_pinctrl_data {
  	struct pinctrl_pin_desc *pads;
  	int pads_cnt;
  	struct sirfsoc_pin_group *grps;
  	int grps_cnt;
  	struct sirfsoc_pmx_func *funcs;
  	int funcs_cnt;
  };
  
  extern struct sirfsoc_pinctrl_data prima2_pinctrl_data;
  extern struct sirfsoc_pinctrl_data atlas6_pinctrl_data;
  
  #endif