zram: use __bio_add_page for adding single page to bio
[linux-block.git] / include / pcmcia / soc_common.h
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