X-Git-Url: https://git.sur5r.net/?p=groeck-nct6775;a=blobdiff_plain;f=compat.h;h=de03ccbc560c4a434d5927c174f1d80e1b302207;hp=0a46c0d8d998807c020be5e626dca72497b3c908;hb=HEAD;hpb=e7641b37f042e8476d1825a0043cc4dd9d665712 diff --git a/compat.h b/compat.h index 0a46c0d..de03ccb 100644 --- a/compat.h +++ b/compat.h @@ -3,11 +3,25 @@ #include -#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 16) -#error This driver is for kernel versions 2.6.16 and later +#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 32) +#error This driver is for kernel versions 2.6.32 and later +#endif + +#if !defined (CONFIG_HWMON_VID) && !defined(CONFIG_HWMON_VID_MODULE) +int vid_from_reg(int val, u8 vrm) +{ + return 0; +} + +u8 vid_which_vrm(void) +{ + return 0; +} #endif #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) +#if !(defined RHEL_MAJOR && RHEL_MAJOR == 7) +#if !(defined RHEL_MAJOR && RHEL_MAJOR == 6 && RHEL_MINOR >= 7) static int sysfs_create_groups(struct kobject *kobj, const struct attribute_group **groups) { @@ -27,6 +41,7 @@ static int sysfs_create_groups(struct kobject *kobj, } return error; } +#endif static void sysfs_remove_groups(struct kobject *kobj, const struct attribute_group **groups) @@ -38,7 +53,10 @@ static void sysfs_remove_groups(struct kobject *kobj, for (i = 0; groups[i]; i++) sysfs_remove_group(kobj, groups[i]); } +#endif +#if !(defined RHEL_MAJOR && RHEL_MAJOR == 7) +#if !(defined RHEL_MAJOR && RHEL_MAJOR == 6 && RHEL_MINOR >= 7) static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) { if (IS_ERR(ptr)) @@ -46,8 +64,11 @@ static inline int __must_check PTR_ERR_OR_ZERO(__force const void *ptr) else return 0; } - #endif +#endif +#endif + +#ifdef __NEED_I2C__ #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 21) #if !(defined RHEL_MAJOR && RHEL_MAJOR == 5 && RHEL_MINOR >= 6) @@ -79,6 +100,23 @@ static struct i2c_client_address_data addr_data = { }; #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) +static inline s32 +i2c_smbus_read_word_swapped(const struct i2c_client *client, u8 command) +{ + s32 value = i2c_smbus_read_word_data(client, command); + + return (value < 0) ? value : swab16(value); +} + +static inline s32 +i2c_smbus_write_word_swapped(const struct i2c_client *client, + u8 command, u16 value) +{ + return i2c_smbus_write_word_data(client, command, swab16(value)); +} +#endif + /* Red Hat EL5 includes backports of these functions, so we can't redefine * our own. */ #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 24) @@ -98,6 +136,8 @@ static inline int strict_strtol(const char *cp, unsigned int base, long *res) #endif #endif +#endif /* __NEED_I2C__ */ + #if LINUX_VERSION_CODE <= KERNEL_VERSION(2, 6, 28) /* * Divide positive or negative dividend by positive divisor and round @@ -116,23 +156,6 @@ static inline int strict_strtol(const char *cp, unsigned int base, long *res) ) #endif -#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 2, 0) -static inline s32 -i2c_smbus_read_word_swapped(const struct i2c_client *client, u8 command) -{ - s32 value = i2c_smbus_read_word_data(client, command); - - return (value < 0) ? value : swab16(value); -} - -static inline s32 -i2c_smbus_write_word_swapped(const struct i2c_client *client, - u8 command, u16 value) -{ - return i2c_smbus_write_word_data(client, command, swab16(value)); -} -#endif - #ifndef module_driver /** * module_driver() - Helper macro for drivers that don't do anything @@ -161,6 +184,8 @@ static void __exit __driver##_exit(void) \ module_exit(__driver##_exit); #endif +#ifdef __NEED_I2C__ + #ifndef module_i2c_driver /** * module_i2c_driver() - Helper macro for registering a I2C driver @@ -175,20 +200,50 @@ module_exit(__driver##_exit); i2c_del_driver) #endif +#endif /* __NEED_I2C__ */ + #ifndef clamp_val #define clamp_val SENSORS_LIMIT #endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 12, 0) #ifndef kstrtol #define kstrtol strict_strtol #endif #ifndef kstrtoul #define kstrtoul strict_strtoul #endif +#endif #ifndef request_muxed_region #define request_muxed_region(a, b, c) (true) +#endif +#ifndef release_region #define release_region(a, b) #endif +#ifndef pr_warn +/* pr_warn macro not introduced until 2.6.35 */ +#define pr_warn pr_warning +#endif +#ifndef pr_warn_ratelimited +#define pr_warn_ratelimited pr_warning_ratelimited +#endif + +#ifndef sysfs_attr_init +#define sysfs_attr_init(attr) do {} while (0) +#endif + +#ifndef __ATTR_RO +#define __ATTR_RO(_name) { \ + .attr = { .name = __stringify(_name), .mode = 0444 }, \ + .show = _name##_show, \ +} +#endif + +#ifndef DEVICE_ATTR_RO +#define DEVICE_ATTR_RO(_name) \ + struct device_attribute dev_attr_##_name = __ATTR_RO(_name) +#endif + #endif /* __COMPAT_H */