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 ---