126 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#include <pcmcia/ss.h>3 4struct module;5struct cpufreq_freqs;6 7struct soc_pcmcia_regulator {8 struct regulator *reg;9 bool on;10};11 12struct 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 to24 * use when responding to a Card Services query of some kind.25 */26struct soc_pcmcia_socket {27 struct pcmcia_socket socket;28 29 /*30 * Info from low level handler31 */32 unsigned int nr;33 struct clk *clk;34 35 /*36 * Core PCMCIA state37 */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_FREQ74 struct notifier_block cpufreq_nb;75#endif76 struct timer_list poll_timer;77 struct list_head node;78 void *driver_data;79};80 81 82struct 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 can98 * be called at initialisation, power management event, or99 * 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_FREQ117 /*118 * CPUFREQ support.119 */120 int (*frequency_change)(struct soc_pcmcia_socket *, unsigned long, struct cpufreq_freqs *);121#endif122};123 124 125 126