0001
0002 #ifndef __PMAC_PFUNC_H__
0003 #define __PMAC_PFUNC_H__
0004
0005 #include <linux/types.h>
0006 #include <linux/list.h>
0007
0008
0009 #define PMF_FLAGS_ON_INIT 0x80000000u
0010 #define PMF_FLGAS_ON_TERM 0x40000000u
0011 #define PMF_FLAGS_ON_SLEEP 0x20000000u
0012 #define PMF_FLAGS_ON_WAKE 0x10000000u
0013 #define PMF_FLAGS_ON_DEMAND 0x08000000u
0014 #define PMF_FLAGS_INT_GEN 0x04000000u
0015 #define PMF_FLAGS_HIGH_SPEED 0x02000000u
0016 #define PMF_FLAGS_LOW_SPEED 0x01000000u
0017 #define PMF_FLAGS_SIDE_EFFECTS 0x00800000u
0018
0019
0020
0021
0022
0023
0024 struct pmf_args {
0025 union {
0026 u32 v;
0027 u32 *p;
0028 } u[4];
0029 unsigned int count;
0030 };
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052 #define PMF_STD_ARGS struct pmf_function *func, void *instdata, \
0053 struct pmf_args *args
0054
0055 struct pmf_function;
0056
0057 struct pmf_handlers {
0058 void * (*begin)(struct pmf_function *func, struct pmf_args *args);
0059 void (*end)(struct pmf_function *func, void *instdata);
0060
0061 int (*irq_enable)(struct pmf_function *func);
0062 int (*irq_disable)(struct pmf_function *func);
0063
0064 int (*write_gpio)(PMF_STD_ARGS, u8 value, u8 mask);
0065 int (*read_gpio)(PMF_STD_ARGS, u8 mask, int rshift, u8 xor);
0066
0067 int (*write_reg32)(PMF_STD_ARGS, u32 offset, u32 value, u32 mask);
0068 int (*read_reg32)(PMF_STD_ARGS, u32 offset);
0069 int (*write_reg16)(PMF_STD_ARGS, u32 offset, u16 value, u16 mask);
0070 int (*read_reg16)(PMF_STD_ARGS, u32 offset);
0071 int (*write_reg8)(PMF_STD_ARGS, u32 offset, u8 value, u8 mask);
0072 int (*read_reg8)(PMF_STD_ARGS, u32 offset);
0073
0074 int (*delay)(PMF_STD_ARGS, u32 duration);
0075
0076 int (*wait_reg32)(PMF_STD_ARGS, u32 offset, u32 value, u32 mask);
0077 int (*wait_reg16)(PMF_STD_ARGS, u32 offset, u16 value, u16 mask);
0078 int (*wait_reg8)(PMF_STD_ARGS, u32 offset, u8 value, u8 mask);
0079
0080 int (*read_i2c)(PMF_STD_ARGS, u32 len);
0081 int (*write_i2c)(PMF_STD_ARGS, u32 len, const u8 *data);
0082 int (*rmw_i2c)(PMF_STD_ARGS, u32 masklen, u32 valuelen, u32 totallen,
0083 const u8 *maskdata, const u8 *valuedata);
0084
0085 int (*read_cfg)(PMF_STD_ARGS, u32 offset, u32 len);
0086 int (*write_cfg)(PMF_STD_ARGS, u32 offset, u32 len, const u8 *data);
0087 int (*rmw_cfg)(PMF_STD_ARGS, u32 offset, u32 masklen, u32 valuelen,
0088 u32 totallen, const u8 *maskdata, const u8 *valuedata);
0089
0090 int (*read_i2c_sub)(PMF_STD_ARGS, u8 subaddr, u32 len);
0091 int (*write_i2c_sub)(PMF_STD_ARGS, u8 subaddr, u32 len, const u8 *data);
0092 int (*set_i2c_mode)(PMF_STD_ARGS, int mode);
0093 int (*rmw_i2c_sub)(PMF_STD_ARGS, u8 subaddr, u32 masklen, u32 valuelen,
0094 u32 totallen, const u8 *maskdata,
0095 const u8 *valuedata);
0096
0097 int (*read_reg32_msrx)(PMF_STD_ARGS, u32 offset, u32 mask, u32 shift,
0098 u32 xor);
0099 int (*read_reg16_msrx)(PMF_STD_ARGS, u32 offset, u32 mask, u32 shift,
0100 u32 xor);
0101 int (*read_reg8_msrx)(PMF_STD_ARGS, u32 offset, u32 mask, u32 shift,
0102 u32 xor);
0103
0104 int (*write_reg32_slm)(PMF_STD_ARGS, u32 offset, u32 shift, u32 mask);
0105 int (*write_reg16_slm)(PMF_STD_ARGS, u32 offset, u32 shift, u32 mask);
0106 int (*write_reg8_slm)(PMF_STD_ARGS, u32 offset, u32 shift, u32 mask);
0107
0108 int (*mask_and_compare)(PMF_STD_ARGS, u32 len, const u8 *maskdata,
0109 const u8 *valuedata);
0110
0111 struct module *owner;
0112 };
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122 struct pmf_device;
0123
0124 struct pmf_function {
0125
0126 struct list_head link;
0127
0128
0129 struct device_node *node;
0130 void *driver_data;
0131
0132
0133 struct pmf_device *dev;
0134
0135
0136
0137
0138
0139
0140 const char *name;
0141 u32 phandle;
0142
0143
0144
0145
0146 u32 flags;
0147
0148
0149 const void *data;
0150 unsigned int length;
0151
0152
0153 struct list_head irq_clients;
0154
0155
0156 struct kref ref;
0157 };
0158
0159
0160
0161
0162
0163
0164
0165
0166 struct pmf_irq_client {
0167 void (*handler)(void *data);
0168 void *data;
0169 struct module *owner;
0170 struct list_head link;
0171 struct pmf_function *func;
0172 };
0173
0174
0175
0176
0177
0178 extern int pmf_register_driver(struct device_node *np,
0179 struct pmf_handlers *handlers,
0180 void *driverdata);
0181
0182 extern void pmf_unregister_driver(struct device_node *np);
0183
0184
0185
0186
0187
0188 extern int pmf_register_irq_client(struct device_node *np,
0189 const char *name,
0190 struct pmf_irq_client *client);
0191
0192 extern void pmf_unregister_irq_client(struct pmf_irq_client *client);
0193
0194
0195
0196
0197 extern void pmf_do_irq(struct pmf_function *func);
0198
0199
0200
0201
0202
0203
0204
0205
0206
0207
0208
0209
0210
0211
0212
0213
0214
0215
0216
0217 extern int pmf_do_functions(struct device_node *np, const char *name,
0218 u32 phandle, u32 flags, struct pmf_args *args);
0219
0220
0221
0222
0223
0224
0225
0226
0227
0228
0229
0230
0231 extern int pmf_call_function(struct device_node *target, const char *name,
0232 struct pmf_args *args);
0233
0234
0235
0236
0237
0238
0239
0240 extern struct pmf_function *pmf_find_function(struct device_node *target,
0241 const char *name);
0242
0243 extern struct pmf_function * pmf_get_function(struct pmf_function *func);
0244 extern void pmf_put_function(struct pmf_function *func);
0245
0246 extern int pmf_call_one(struct pmf_function *func, struct pmf_args *args);
0247
0248 int pmac_pfunc_base_install(void);
0249
0250
0251 extern void pmac_pfunc_base_suspend(void);
0252 extern void pmac_pfunc_base_resume(void);
0253
0254 #endif