hc
2025-02-14 bbb9540dc49f70f6b703d1c8d1b85fa5f602d86e
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
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
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * pinmux driver shared headfile for CSR SiRFsoc
 *
 * Copyright (c) 2011 Cambridge Silicon Radio Limited, a CSR plc group company.
 */
 
#ifndef __PINMUX_SIRF_H__
#define __PINMUX_SIRF_H__
 
#define SIRFSOC_NUM_PADS        622
#define SIRFSOC_RSC_USB_UART_SHARE    0
#define SIRFSOC_RSC_PIN_MUX        0x4
 
#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];
};
 
/* 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 */
   unsigned long ctrlreg;
   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