Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  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 to
 24 * 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 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
 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 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