Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/pcmcia/soc_common.h
26282 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
#include <pcmcia/ss.h>
3
4
struct module;
5
struct cpufreq_freqs;
6
7
struct soc_pcmcia_regulator {
8
struct regulator *reg;
9
bool on;
10
};
11
12
struct pcmcia_state {
13
unsigned detect: 1,
14
ready: 1,
15
bvd1: 1,
16
bvd2: 1,
17
wrprot: 1,
18
vs_3v: 1,
19
vs_Xv: 1;
20
};
21
22
/*
23
* This structure encapsulates per-socket state which we might need to
24
* use when responding to a Card Services query of some kind.
25
*/
26
struct soc_pcmcia_socket {
27
struct pcmcia_socket socket;
28
29
/*
30
* Info from low level handler
31
*/
32
unsigned int nr;
33
struct clk *clk;
34
35
/*
36
* Core PCMCIA state
37
*/
38
const struct pcmcia_low_level *ops;
39
40
unsigned int status;
41
socket_state_t cs_state;
42
43
unsigned short spd_io[MAX_IO_WIN];
44
unsigned short spd_mem[MAX_WIN];
45
unsigned short spd_attr[MAX_WIN];
46
47
struct resource res_skt;
48
struct resource res_io;
49
struct resource res_io_io;
50
struct resource res_mem;
51
struct resource res_attr;
52
53
struct {
54
int gpio;
55
struct gpio_desc *desc;
56
unsigned int irq;
57
const char *name;
58
} stat[6];
59
#define SOC_STAT_CD 0 /* Card detect */
60
#define SOC_STAT_BVD1 1 /* BATDEAD / IOSTSCHG */
61
#define SOC_STAT_BVD2 2 /* BATWARN / IOSPKR */
62
#define SOC_STAT_RDY 3 /* Ready / Interrupt */
63
#define SOC_STAT_VS1 4 /* Voltage sense 1 */
64
#define SOC_STAT_VS2 5 /* Voltage sense 2 */
65
66
struct gpio_desc *gpio_reset;
67
struct gpio_desc *gpio_bus_enable;
68
struct soc_pcmcia_regulator vcc;
69
struct soc_pcmcia_regulator vpp;
70
71
unsigned int irq_state;
72
73
#ifdef CONFIG_CPU_FREQ
74
struct notifier_block cpufreq_nb;
75
#endif
76
struct timer_list poll_timer;
77
struct list_head node;
78
void *driver_data;
79
};
80
81
82
struct pcmcia_low_level {
83
struct module *owner;
84
85
/* first socket in system */
86
int first;
87
/* nr of sockets */
88
int nr;
89
90
int (*hw_init)(struct soc_pcmcia_socket *);
91
void (*hw_shutdown)(struct soc_pcmcia_socket *);
92
93
void (*socket_state)(struct soc_pcmcia_socket *, struct pcmcia_state *);
94
int (*configure_socket)(struct soc_pcmcia_socket *, const socket_state_t *);
95
96
/*
97
* Enable card status IRQs on (re-)initialisation. This can
98
* be called at initialisation, power management event, or
99
* pcmcia event.
100
*/
101
void (*socket_init)(struct soc_pcmcia_socket *);
102
103
/*
104
* Disable card status IRQs and PCMCIA bus on suspend.
105
*/
106
void (*socket_suspend)(struct soc_pcmcia_socket *);
107
108
/*
109
* Hardware specific timing routines.
110
* If provided, the get_timing routine overrides the SOC default.
111
*/
112
unsigned int (*get_timing)(struct soc_pcmcia_socket *, unsigned int, unsigned int);
113
int (*set_timing)(struct soc_pcmcia_socket *);
114
int (*show_timing)(struct soc_pcmcia_socket *, char *);
115
116
#ifdef CONFIG_CPU_FREQ
117
/*
118
* CPUFREQ support.
119
*/
120
int (*frequency_change)(struct soc_pcmcia_socket *, unsigned long, struct cpufreq_freqs *);
121
#endif
122
};
123
124
125
126
127