4 #include <linux/version.h>
6 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16)
7 #error This driver is for kernel versions 2.6.16 and later
10 #if !defined (CONFIG_HWMON_VID) && !defined(CONFIG_HWMON_VID_MODULE)
11 int vid_from_reg(int val, u8 vrm)
16 u8 vid_which_vrm(void)
22 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0)
23 static int sysfs_create_groups(struct kobject *kobj,
24 const struct attribute_group **groups)
32 for (i = 0; groups[i]; i++) {
33 error = sysfs_create_group(kobj, groups[i]);
36 sysfs_remove_group(kobj, groups[i]);
43 static void sysfs_remove_groups(struct kobject *kobj,
44 const struct attribute_group **groups)
50 for (i = 0; groups[i]; i++)
51 sysfs_remove_group(kobj, groups[i]);
54 static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr)
66 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 21)
67 #if !(defined RHEL_MAJOR && RHEL_MAJOR == 5 && RHEL_MINOR >= 6)
68 /* Simplified version for compatibility */
69 struct i2c_board_info {
70 char type[I2C_NAME_SIZE];
77 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 25)
78 /* Some older kernels have a different, useless struct i2c_device_id */
79 #define i2c_device_id i2c_device_id_compat
80 struct i2c_device_id {
81 char name[I2C_NAME_SIZE];
82 kernel_ulong_t driver_data /* Data private to the driver */
83 __attribute__((aligned(sizeof(kernel_ulong_t))));
87 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 32)
88 static unsigned short empty_i2c[] = { I2C_CLIENT_END };
89 static struct i2c_client_address_data addr_data = {
90 .normal_i2c = normal_i2c,
96 #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0)
98 i2c_smbus_read_word_swapped(const struct i2c_client *client, u8 command)
100 s32 value = i2c_smbus_read_word_data(client, command);
102 return (value < 0) ? value : swab16(value);
106 i2c_smbus_write_word_swapped(const struct i2c_client *client,
107 u8 command, u16 value)
109 return i2c_smbus_write_word_data(client, command, swab16(value));
113 /* Red Hat EL5 includes backports of these functions, so we can't redefine
115 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 24)
116 #if !(defined RHEL_MAJOR && RHEL_MAJOR == 5 && RHEL_MINOR >= 5)
117 static inline int strict_strtoul(const char *cp, unsigned int base,
120 *res = simple_strtoul(cp, NULL, base);
124 static inline int strict_strtol(const char *cp, unsigned int base, long *res)
126 *res = simple_strtol(cp, NULL, base);
132 #endif /* __NEED_I2C__ */
134 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 28)
136 * Divide positive or negative dividend by positive divisor and round
137 * to closest integer. Result is undefined for negative divisors and
138 * for negative dividends if the divisor variable type is unsigned.
140 #define DIV_ROUND_CLOSEST(x, divisor)( \
143 typeof(divisor) __d = divisor; \
144 (((typeof(x))-1) > 0 || \
145 ((typeof(divisor))-1) > 0 || (__x) > 0) ? \
146 (((__x) + ((__d) / 2)) / (__d)) : \
147 (((__x) - ((__d) / 2)) / (__d)); \
152 #ifndef module_driver
154 * module_driver() - Helper macro for drivers that don't do anything
155 * special in module init/exit. This eliminates a lot of boilerplate.
156 * Each module may only use this macro once, and calling it replaces
157 * module_init() and module_exit().
159 * @__driver: driver name
160 * @__register: register function for this driver type
161 * @__unregister: unregister function for this driver type
162 * @...: Additional arguments to be passed to __register and __unregister.
164 * Use this macro to construct bus specific macros for registering
165 * drivers, and do not use it on its own.
167 #define module_driver(__driver, __register, __unregister, ...) \
168 static int __init __driver##_init(void) \
170 return __register(&(__driver) , ##__VA_ARGS__); \
172 module_init(__driver##_init); \
173 static void __exit __driver##_exit(void) \
175 __unregister(&(__driver) , ##__VA_ARGS__); \
177 module_exit(__driver##_exit);
182 #ifndef module_i2c_driver
184 * module_i2c_driver() - Helper macro for registering a I2C driver
185 * @__i2c_driver: i2c_driver struct
187 * Helper macro for I2C drivers which do not do anything special in module
188 * init/exit. This eliminates a lot of boilerplate. Each module may only
189 * use this macro once, and calling it replaces module_init() and module_exit()
191 #define module_i2c_driver(__i2c_driver) \
192 module_driver(__i2c_driver, i2c_add_driver, \
196 #endif /* __NEED_I2C__ */
199 #define clamp_val SENSORS_LIMIT
203 #define kstrtol strict_strtol
206 #define kstrtoul strict_strtoul
209 #ifndef request_muxed_region
210 #define request_muxed_region(a, b, c) (true)
212 #ifndef release_region
213 #define release_region(a, b)
216 #endif /* __COMPAT_H */