0001
0002 #include <pcmcia/ss.h>
0003
0004 struct module;
0005 struct cpufreq_freqs;
0006
0007 struct soc_pcmcia_regulator {
0008 struct regulator *reg;
0009 bool on;
0010 };
0011
0012 struct pcmcia_state {
0013 unsigned detect: 1,
0014 ready: 1,
0015 bvd1: 1,
0016 bvd2: 1,
0017 wrprot: 1,
0018 vs_3v: 1,
0019 vs_Xv: 1;
0020 };
0021
0022
0023
0024
0025
0026 struct soc_pcmcia_socket {
0027 struct pcmcia_socket socket;
0028
0029
0030
0031
0032 unsigned int nr;
0033 struct clk *clk;
0034
0035
0036
0037
0038 const struct pcmcia_low_level *ops;
0039
0040 unsigned int status;
0041 socket_state_t cs_state;
0042
0043 unsigned short spd_io[MAX_IO_WIN];
0044 unsigned short spd_mem[MAX_WIN];
0045 unsigned short spd_attr[MAX_WIN];
0046
0047 struct resource res_skt;
0048 struct resource res_io;
0049 struct resource res_io_io;
0050 struct resource res_mem;
0051 struct resource res_attr;
0052
0053 struct {
0054 int gpio;
0055 struct gpio_desc *desc;
0056 unsigned int irq;
0057 const char *name;
0058 } stat[6];
0059 #define SOC_STAT_CD 0
0060 #define SOC_STAT_BVD1 1
0061 #define SOC_STAT_BVD2 2
0062 #define SOC_STAT_RDY 3
0063 #define SOC_STAT_VS1 4
0064 #define SOC_STAT_VS2 5
0065
0066 struct gpio_desc *gpio_reset;
0067 struct gpio_desc *gpio_bus_enable;
0068 struct soc_pcmcia_regulator vcc;
0069 struct soc_pcmcia_regulator vpp;
0070
0071 unsigned int irq_state;
0072
0073 #ifdef CONFIG_CPU_FREQ
0074 struct notifier_block cpufreq_nb;
0075 #endif
0076 struct timer_list poll_timer;
0077 struct list_head node;
0078 void *driver_data;
0079 };
0080
0081
0082 struct pcmcia_low_level {
0083 struct module *owner;
0084
0085
0086 int first;
0087
0088 int nr;
0089
0090 int (*hw_init)(struct soc_pcmcia_socket *);
0091 void (*hw_shutdown)(struct soc_pcmcia_socket *);
0092
0093 void (*socket_state)(struct soc_pcmcia_socket *, struct pcmcia_state *);
0094 int (*configure_socket)(struct soc_pcmcia_socket *, const socket_state_t *);
0095
0096
0097
0098
0099
0100
0101 void (*socket_init)(struct soc_pcmcia_socket *);
0102
0103
0104
0105
0106 void (*socket_suspend)(struct soc_pcmcia_socket *);
0107
0108
0109
0110
0111
0112 unsigned int (*get_timing)(struct soc_pcmcia_socket *, unsigned int, unsigned int);
0113 int (*set_timing)(struct soc_pcmcia_socket *);
0114 int (*show_timing)(struct soc_pcmcia_socket *, char *);
0115
0116 #ifdef CONFIG_CPU_FREQ
0117
0118
0119
0120 int (*frequency_change)(struct soc_pcmcia_socket *, unsigned long, struct cpufreq_freqs *);
0121 #endif
0122 };
0123
0124
0125