0001
0002
0003
0004
0005
0006 #ifndef __LINUX_W1_H
0007 #define __LINUX_W1_H
0008
0009 #include <linux/device.h>
0010
0011
0012
0013
0014
0015
0016
0017
0018 struct w1_reg_num {
0019 #if defined(__LITTLE_ENDIAN_BITFIELD)
0020 __u64 family:8,
0021 id:48,
0022 crc:8;
0023 #elif defined(__BIG_ENDIAN_BITFIELD)
0024 __u64 crc:8,
0025 id:48,
0026 family:8;
0027 #else
0028 #error "Please fix <asm/byteorder.h>"
0029 #endif
0030 };
0031
0032 #ifdef __KERNEL__
0033
0034 #define W1_MAXNAMELEN 32
0035
0036 #define W1_SEARCH 0xF0
0037 #define W1_ALARM_SEARCH 0xEC
0038 #define W1_CONVERT_TEMP 0x44
0039 #define W1_SKIP_ROM 0xCC
0040 #define W1_COPY_SCRATCHPAD 0x48
0041 #define W1_WRITE_SCRATCHPAD 0x4E
0042 #define W1_READ_SCRATCHPAD 0xBE
0043 #define W1_READ_ROM 0x33
0044 #define W1_READ_PSUPPLY 0xB4
0045 #define W1_MATCH_ROM 0x55
0046 #define W1_RESUME_CMD 0xA5
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065 struct w1_slave {
0066 struct module *owner;
0067 unsigned char name[W1_MAXNAMELEN];
0068 struct list_head w1_slave_entry;
0069 struct w1_reg_num reg_num;
0070 atomic_t refcnt;
0071 int ttl;
0072 unsigned long flags;
0073
0074 struct w1_master *master;
0075 struct w1_family *family;
0076 void *family_data;
0077 struct device dev;
0078 struct device *hwmon;
0079 };
0080
0081 typedef void (*w1_slave_found_callback)(struct w1_master *, u64);
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131 struct w1_bus_master {
0132 void *data;
0133
0134 u8 (*read_bit)(void *);
0135
0136 void (*write_bit)(void *, u8);
0137
0138 u8 (*touch_bit)(void *, u8);
0139
0140 u8 (*read_byte)(void *);
0141
0142 void (*write_byte)(void *, u8);
0143
0144 u8 (*read_block)(void *, u8 *, int);
0145
0146 void (*write_block)(void *, const u8 *, int);
0147
0148 u8 (*triplet)(void *, u8);
0149
0150 u8 (*reset_bus)(void *);
0151
0152 u8 (*set_pullup)(void *, int);
0153
0154 void (*search)(void *, struct w1_master *,
0155 u8, w1_slave_found_callback);
0156
0157 char *dev_id;
0158 };
0159
0160
0161
0162
0163
0164
0165 enum w1_master_flags {
0166 W1_ABORT_SEARCH = 0,
0167 W1_WARN_MAX_COUNT = 1,
0168 };
0169
0170
0171
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191
0192
0193
0194
0195
0196
0197
0198
0199 struct w1_master {
0200 struct list_head w1_master_entry;
0201 struct module *owner;
0202 unsigned char name[W1_MAXNAMELEN];
0203
0204
0205
0206
0207
0208 struct mutex list_mutex;
0209 struct list_head slist;
0210 struct list_head async_list;
0211 int max_slave_count, slave_count;
0212 unsigned long attempts;
0213 int slave_ttl;
0214 int initialized;
0215 u32 id;
0216 int search_count;
0217
0218 u64 search_id;
0219
0220 atomic_t refcnt;
0221
0222 void *priv;
0223
0224
0225 int enable_pullup;
0226
0227 int pullup_duration;
0228
0229 long flags;
0230
0231 struct task_struct *thread;
0232 struct mutex mutex;
0233 struct mutex bus_mutex;
0234
0235 struct device_driver *driver;
0236 struct device dev;
0237
0238 struct w1_bus_master *bus_master;
0239
0240 u32 seq;
0241 };
0242
0243 int w1_add_master_device(struct w1_bus_master *master);
0244 void w1_remove_master_device(struct w1_bus_master *master);
0245
0246
0247
0248
0249
0250
0251
0252
0253 struct w1_family_ops {
0254 int (*add_slave)(struct w1_slave *sl);
0255 void (*remove_slave)(struct w1_slave *sl);
0256 const struct attribute_group **groups;
0257 const struct hwmon_chip_info *chip_info;
0258 };
0259
0260
0261
0262
0263
0264
0265
0266
0267
0268 struct w1_family {
0269 struct list_head family_entry;
0270 u8 fid;
0271
0272 const struct w1_family_ops *fops;
0273
0274 const struct of_device_id *of_match_table;
0275
0276 atomic_t refcnt;
0277 };
0278
0279 int w1_register_family(struct w1_family *family);
0280 void w1_unregister_family(struct w1_family *family);
0281
0282
0283
0284
0285
0286
0287
0288
0289
0290 #define module_w1_family(__w1_family) \
0291 module_driver(__w1_family, w1_register_family, \
0292 w1_unregister_family)
0293
0294 u8 w1_triplet(struct w1_master *dev, int bdir);
0295 u8 w1_touch_bit(struct w1_master *dev, int bit);
0296 void w1_write_8(struct w1_master *, u8);
0297 u8 w1_read_8(struct w1_master *);
0298 int w1_reset_bus(struct w1_master *);
0299 u8 w1_calc_crc8(u8 *, int);
0300 void w1_write_block(struct w1_master *, const u8 *, int);
0301 void w1_touch_block(struct w1_master *, u8 *, int);
0302 u8 w1_read_block(struct w1_master *, u8 *, int);
0303 int w1_reset_select_slave(struct w1_slave *sl);
0304 int w1_reset_resume_command(struct w1_master *);
0305 void w1_next_pullup(struct w1_master *, int);
0306
0307 static inline struct w1_slave* dev_to_w1_slave(struct device *dev)
0308 {
0309 return container_of(dev, struct w1_slave, dev);
0310 }
0311
0312 static inline struct w1_slave* kobj_to_w1_slave(struct kobject *kobj)
0313 {
0314 return dev_to_w1_slave(container_of(kobj, struct device, kobj));
0315 }
0316
0317 static inline struct w1_master* dev_to_w1_master(struct device *dev)
0318 {
0319 return container_of(dev, struct w1_master, dev);
0320 }
0321
0322 #endif
0323
0324 #endif