da9052-hwmon.c (688d794c4c3f8b08c814381ee2edd3ede5856056) | da9052-hwmon.c (088ce2ac9ebac5c74faf4d39083627875fa6f0f0) |
---|---|
1/* 2 * HWMON Driver for Dialog DA9052 3 * 4 * Copyright(c) 2012 Dialog Semiconductor Ltd. 5 * 6 * Author: David Dajun Chen <dchen@diasemi.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 29 unchanged lines hidden (view full) --- 38 [DA9052_ADC_IN4] = "ADC IN4", 39 [DA9052_ADC_IN5] = "ADC IN5", 40 [DA9052_ADC_IN6] = "ADC IN6", 41 [DA9052_ADC_TJUNC] = "BATTERY JUNCTION TEMP", 42 [DA9052_ADC_VBBAT] = "BACK-UP BATTERY VOLTAGE", 43}; 44 45/* Conversion function for VDDOUT and VBAT */ | 1/* 2 * HWMON Driver for Dialog DA9052 3 * 4 * Copyright(c) 2012 Dialog Semiconductor Ltd. 5 * 6 * Author: David Dajun Chen <dchen@diasemi.com> 7 * 8 * This program is free software; you can redistribute it and/or modify it --- 29 unchanged lines hidden (view full) --- 38 [DA9052_ADC_IN4] = "ADC IN4", 39 [DA9052_ADC_IN5] = "ADC IN5", 40 [DA9052_ADC_IN6] = "ADC IN6", 41 [DA9052_ADC_TJUNC] = "BATTERY JUNCTION TEMP", 42 [DA9052_ADC_VBBAT] = "BACK-UP BATTERY VOLTAGE", 43}; 44 45/* Conversion function for VDDOUT and VBAT */ |
46static inline int volt_reg_to_mV(int value) | 46static inline int volt_reg_to_mv(int value) |
47{ 48 return DIV_ROUND_CLOSEST(value * 1000, 512) + 2500; 49} 50 51/* Conversion function for ADC channels 4, 5 and 6 */ | 47{ 48 return DIV_ROUND_CLOSEST(value * 1000, 512) + 2500; 49} 50 51/* Conversion function for ADC channels 4, 5 and 6 */ |
52static inline int input_reg_to_mV(int value) | 52static inline int input_reg_to_mv(int value) |
53{ 54 return DIV_ROUND_CLOSEST(value * 2500, 1023); 55} 56 57/* Conversion function for VBBAT */ | 53{ 54 return DIV_ROUND_CLOSEST(value * 2500, 1023); 55} 56 57/* Conversion function for VBBAT */ |
58static inline int vbbat_reg_to_mV(int value) | 58static inline int vbbat_reg_to_mv(int value) |
59{ 60 return DIV_ROUND_CLOSEST(value * 2500, 512); 61} 62 63static inline int da9052_enable_vddout_channel(struct da9052 *da9052) 64{ 65 return da9052_reg_update(da9052, DA9052_ADC_CONT_REG, 66 DA9052_ADCCONT_AUTOVDDEN, --- 24 unchanged lines hidden (view full) --- 91 goto hwmon_err_release; 92 } 93 94 ret = da9052_disable_vddout_channel(hwmon->da9052); 95 if (ret < 0) 96 goto hwmon_err; 97 98 mutex_unlock(&hwmon->hwmon_lock); | 59{ 60 return DIV_ROUND_CLOSEST(value * 2500, 512); 61} 62 63static inline int da9052_enable_vddout_channel(struct da9052 *da9052) 64{ 65 return da9052_reg_update(da9052, DA9052_ADC_CONT_REG, 66 DA9052_ADCCONT_AUTOVDDEN, --- 24 unchanged lines hidden (view full) --- 91 goto hwmon_err_release; 92 } 93 94 ret = da9052_disable_vddout_channel(hwmon->da9052); 95 if (ret < 0) 96 goto hwmon_err; 97 98 mutex_unlock(&hwmon->hwmon_lock); |
99 return sprintf(buf, "%d\n", volt_reg_to_mV(vdd)); | 99 return sprintf(buf, "%d\n", volt_reg_to_mv(vdd)); |
100 101hwmon_err_release: 102 da9052_disable_vddout_channel(hwmon->da9052); 103hwmon_err: 104 mutex_unlock(&hwmon->hwmon_lock); 105 return ret; 106} 107 --- 24 unchanged lines hidden (view full) --- 132{ 133 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 134 int ret; 135 136 ret = da9052_adc_manual_read(hwmon->da9052, DA9052_ADC_VBAT); 137 if (ret < 0) 138 return ret; 139 | 100 101hwmon_err_release: 102 da9052_disable_vddout_channel(hwmon->da9052); 103hwmon_err: 104 mutex_unlock(&hwmon->hwmon_lock); 105 return ret; 106} 107 --- 24 unchanged lines hidden (view full) --- 132{ 133 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 134 int ret; 135 136 ret = da9052_adc_manual_read(hwmon->da9052, DA9052_ADC_VBAT); 137 if (ret < 0) 138 return ret; 139 |
140 return sprintf(buf, "%d\n", volt_reg_to_mV(ret)); | 140 return sprintf(buf, "%d\n", volt_reg_to_mv(ret)); |
141} 142 143static ssize_t da9052_read_misc_channel(struct device *dev, 144 struct device_attribute *devattr, 145 char *buf) 146{ 147 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 148 int channel = to_sensor_dev_attr(devattr)->index; 149 int ret; 150 151 ret = da9052_adc_manual_read(hwmon->da9052, channel); 152 if (ret < 0) 153 return ret; 154 | 141} 142 143static ssize_t da9052_read_misc_channel(struct device *dev, 144 struct device_attribute *devattr, 145 char *buf) 146{ 147 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 148 int channel = to_sensor_dev_attr(devattr)->index; 149 int ret; 150 151 ret = da9052_adc_manual_read(hwmon->da9052, channel); 152 if (ret < 0) 153 return ret; 154 |
155 return sprintf(buf, "%d\n", input_reg_to_mV(ret)); | 155 return sprintf(buf, "%d\n", input_reg_to_mv(ret)); |
156} 157 158static ssize_t da9052_read_tjunc(struct device *dev, 159 struct device_attribute *devattr, char *buf) 160{ 161 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 162 int tjunc; 163 int toffset; --- 18 unchanged lines hidden (view full) --- 182{ 183 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 184 int ret; 185 186 ret = da9052_adc_manual_read(hwmon->da9052, DA9052_ADC_VBBAT); 187 if (ret < 0) 188 return ret; 189 | 156} 157 158static ssize_t da9052_read_tjunc(struct device *dev, 159 struct device_attribute *devattr, char *buf) 160{ 161 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 162 int tjunc; 163 int toffset; --- 18 unchanged lines hidden (view full) --- 182{ 183 struct da9052_hwmon *hwmon = dev_get_drvdata(dev); 184 int ret; 185 186 ret = da9052_adc_manual_read(hwmon->da9052, DA9052_ADC_VBBAT); 187 if (ret < 0) 188 return ret; 189 |
190 return sprintf(buf, "%d\n", vbbat_reg_to_mV(ret)); | 190 return sprintf(buf, "%d\n", vbbat_reg_to_mv(ret)); |
191} 192 193static ssize_t da9052_hwmon_show_name(struct device *dev, 194 struct device_attribute *devattr, 195 char *buf) 196{ 197 return sprintf(buf, "da9052-hwmon\n"); 198} --- 132 unchanged lines hidden --- | 191} 192 193static ssize_t da9052_hwmon_show_name(struct device *dev, 194 struct device_attribute *devattr, 195 char *buf) 196{ 197 return sprintf(buf, "da9052-hwmon\n"); 198} --- 132 unchanged lines hidden --- |