Commit 7599d32b1332546a3c0af17ce925ce7a8e89bfa1
Committed by
Guenter Roeck
1 parent
e200c14f60
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
hwmon: (lm70) Fix: do not use assignment in if condition
Fix checkpatch issue: ERROR: do not use assignment in if condition Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Showing 1 changed file with 6 additions and 4 deletions Inline Diff
drivers/hwmon/lm70.c
1 | /* | 1 | /* |
2 | * lm70.c | 2 | * lm70.c |
3 | * | 3 | * |
4 | * The LM70 is a temperature sensor chip from National Semiconductor (NS). | 4 | * The LM70 is a temperature sensor chip from National Semiconductor (NS). |
5 | * Copyright (C) 2006 Kaiwan N Billimoria <kaiwan@designergraphix.com> | 5 | * Copyright (C) 2006 Kaiwan N Billimoria <kaiwan@designergraphix.com> |
6 | * | 6 | * |
7 | * The LM70 communicates with a host processor via an SPI/Microwire Bus | 7 | * The LM70 communicates with a host processor via an SPI/Microwire Bus |
8 | * interface. The complete datasheet is available at National's website | 8 | * interface. The complete datasheet is available at National's website |
9 | * here: | 9 | * here: |
10 | * http://www.national.com/pf/LM/LM70.html | 10 | * http://www.national.com/pf/LM/LM70.html |
11 | * | 11 | * |
12 | * This program is free software; you can redistribute it and/or modify | 12 | * This program is free software; you can redistribute it and/or modify |
13 | * it under the terms of the GNU General Public License as published by | 13 | * it under the terms of the GNU General Public License as published by |
14 | * the Free Software Foundation; either version 2 of the License, or | 14 | * the Free Software Foundation; either version 2 of the License, or |
15 | * (at your option) any later version. | 15 | * (at your option) any later version. |
16 | * | 16 | * |
17 | * This program is distributed in the hope that it will be useful, | 17 | * This program is distributed in the hope that it will be useful, |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
20 | * GNU General Public License for more details. | 20 | * GNU General Public License for more details. |
21 | * | 21 | * |
22 | * You should have received a copy of the GNU General Public License | 22 | * You should have received a copy of the GNU General Public License |
23 | * along with this program; if not, write to the Free Software | 23 | * along with this program; if not, write to the Free Software |
24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | 24 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
25 | */ | 25 | */ |
26 | 26 | ||
27 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | 27 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt |
28 | 28 | ||
29 | #include <linux/init.h> | 29 | #include <linux/init.h> |
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
31 | #include <linux/kernel.h> | 31 | #include <linux/kernel.h> |
32 | #include <linux/device.h> | 32 | #include <linux/device.h> |
33 | #include <linux/err.h> | 33 | #include <linux/err.h> |
34 | #include <linux/sysfs.h> | 34 | #include <linux/sysfs.h> |
35 | #include <linux/hwmon.h> | 35 | #include <linux/hwmon.h> |
36 | #include <linux/mutex.h> | 36 | #include <linux/mutex.h> |
37 | #include <linux/mod_devicetable.h> | 37 | #include <linux/mod_devicetable.h> |
38 | #include <linux/spi/spi.h> | 38 | #include <linux/spi/spi.h> |
39 | #include <linux/slab.h> | 39 | #include <linux/slab.h> |
40 | 40 | ||
41 | 41 | ||
42 | #define DRVNAME "lm70" | 42 | #define DRVNAME "lm70" |
43 | 43 | ||
44 | #define LM70_CHIP_LM70 0 /* original NS LM70 */ | 44 | #define LM70_CHIP_LM70 0 /* original NS LM70 */ |
45 | #define LM70_CHIP_TMP121 1 /* TI TMP121/TMP123 */ | 45 | #define LM70_CHIP_TMP121 1 /* TI TMP121/TMP123 */ |
46 | 46 | ||
47 | struct lm70 { | 47 | struct lm70 { |
48 | struct device *hwmon_dev; | 48 | struct device *hwmon_dev; |
49 | struct mutex lock; | 49 | struct mutex lock; |
50 | unsigned int chip; | 50 | unsigned int chip; |
51 | }; | 51 | }; |
52 | 52 | ||
53 | /* sysfs hook function */ | 53 | /* sysfs hook function */ |
54 | static ssize_t lm70_sense_temp(struct device *dev, | 54 | static ssize_t lm70_sense_temp(struct device *dev, |
55 | struct device_attribute *attr, char *buf) | 55 | struct device_attribute *attr, char *buf) |
56 | { | 56 | { |
57 | struct spi_device *spi = to_spi_device(dev); | 57 | struct spi_device *spi = to_spi_device(dev); |
58 | int status, val = 0; | 58 | int status, val = 0; |
59 | u8 rxbuf[2]; | 59 | u8 rxbuf[2]; |
60 | s16 raw = 0; | 60 | s16 raw = 0; |
61 | struct lm70 *p_lm70 = spi_get_drvdata(spi); | 61 | struct lm70 *p_lm70 = spi_get_drvdata(spi); |
62 | 62 | ||
63 | if (mutex_lock_interruptible(&p_lm70->lock)) | 63 | if (mutex_lock_interruptible(&p_lm70->lock)) |
64 | return -ERESTARTSYS; | 64 | return -ERESTARTSYS; |
65 | 65 | ||
66 | /* | 66 | /* |
67 | * spi_read() requires a DMA-safe buffer; so we use | 67 | * spi_read() requires a DMA-safe buffer; so we use |
68 | * spi_write_then_read(), transmitting 0 bytes. | 68 | * spi_write_then_read(), transmitting 0 bytes. |
69 | */ | 69 | */ |
70 | status = spi_write_then_read(spi, NULL, 0, &rxbuf[0], 2); | 70 | status = spi_write_then_read(spi, NULL, 0, &rxbuf[0], 2); |
71 | if (status < 0) { | 71 | if (status < 0) { |
72 | pr_warn("spi_write_then_read failed with status %d\n", status); | 72 | pr_warn("spi_write_then_read failed with status %d\n", status); |
73 | goto out; | 73 | goto out; |
74 | } | 74 | } |
75 | raw = (rxbuf[0] << 8) + rxbuf[1]; | 75 | raw = (rxbuf[0] << 8) + rxbuf[1]; |
76 | dev_dbg(dev, "rxbuf[0] : 0x%02x rxbuf[1] : 0x%02x raw=0x%04x\n", | 76 | dev_dbg(dev, "rxbuf[0] : 0x%02x rxbuf[1] : 0x%02x raw=0x%04x\n", |
77 | rxbuf[0], rxbuf[1], raw); | 77 | rxbuf[0], rxbuf[1], raw); |
78 | 78 | ||
79 | /* | 79 | /* |
80 | * LM70: | 80 | * LM70: |
81 | * The "raw" temperature read into rxbuf[] is a 16-bit signed 2's | 81 | * The "raw" temperature read into rxbuf[] is a 16-bit signed 2's |
82 | * complement value. Only the MSB 11 bits (1 sign + 10 temperature | 82 | * complement value. Only the MSB 11 bits (1 sign + 10 temperature |
83 | * bits) are meaningful; the LSB 5 bits are to be discarded. | 83 | * bits) are meaningful; the LSB 5 bits are to be discarded. |
84 | * See the datasheet. | 84 | * See the datasheet. |
85 | * | 85 | * |
86 | * Further, each bit represents 0.25 degrees Celsius; so, multiply | 86 | * Further, each bit represents 0.25 degrees Celsius; so, multiply |
87 | * by 0.25. Also multiply by 1000 to represent in millidegrees | 87 | * by 0.25. Also multiply by 1000 to represent in millidegrees |
88 | * Celsius. | 88 | * Celsius. |
89 | * So it's equivalent to multiplying by 0.25 * 1000 = 250. | 89 | * So it's equivalent to multiplying by 0.25 * 1000 = 250. |
90 | * | 90 | * |
91 | * TMP121/TMP123: | 91 | * TMP121/TMP123: |
92 | * 13 bits of 2's complement data, discard LSB 3 bits, | 92 | * 13 bits of 2's complement data, discard LSB 3 bits, |
93 | * resolution 0.0625 degrees celsius. | 93 | * resolution 0.0625 degrees celsius. |
94 | */ | 94 | */ |
95 | switch (p_lm70->chip) { | 95 | switch (p_lm70->chip) { |
96 | case LM70_CHIP_LM70: | 96 | case LM70_CHIP_LM70: |
97 | val = ((int)raw / 32) * 250; | 97 | val = ((int)raw / 32) * 250; |
98 | break; | 98 | break; |
99 | 99 | ||
100 | case LM70_CHIP_TMP121: | 100 | case LM70_CHIP_TMP121: |
101 | val = ((int)raw / 8) * 625 / 10; | 101 | val = ((int)raw / 8) * 625 / 10; |
102 | break; | 102 | break; |
103 | } | 103 | } |
104 | 104 | ||
105 | status = sprintf(buf, "%d\n", val); /* millidegrees Celsius */ | 105 | status = sprintf(buf, "%d\n", val); /* millidegrees Celsius */ |
106 | out: | 106 | out: |
107 | mutex_unlock(&p_lm70->lock); | 107 | mutex_unlock(&p_lm70->lock); |
108 | return status; | 108 | return status; |
109 | } | 109 | } |
110 | 110 | ||
111 | static DEVICE_ATTR(temp1_input, S_IRUGO, lm70_sense_temp, NULL); | 111 | static DEVICE_ATTR(temp1_input, S_IRUGO, lm70_sense_temp, NULL); |
112 | 112 | ||
113 | static ssize_t lm70_show_name(struct device *dev, struct device_attribute | 113 | static ssize_t lm70_show_name(struct device *dev, struct device_attribute |
114 | *devattr, char *buf) | 114 | *devattr, char *buf) |
115 | { | 115 | { |
116 | struct lm70 *p_lm70 = dev_get_drvdata(dev); | 116 | struct lm70 *p_lm70 = dev_get_drvdata(dev); |
117 | int ret; | 117 | int ret; |
118 | 118 | ||
119 | switch (p_lm70->chip) { | 119 | switch (p_lm70->chip) { |
120 | case LM70_CHIP_LM70: | 120 | case LM70_CHIP_LM70: |
121 | ret = sprintf(buf, "lm70\n"); | 121 | ret = sprintf(buf, "lm70\n"); |
122 | break; | 122 | break; |
123 | case LM70_CHIP_TMP121: | 123 | case LM70_CHIP_TMP121: |
124 | ret = sprintf(buf, "tmp121\n"); | 124 | ret = sprintf(buf, "tmp121\n"); |
125 | break; | 125 | break; |
126 | default: | 126 | default: |
127 | ret = -EINVAL; | 127 | ret = -EINVAL; |
128 | } | 128 | } |
129 | return ret; | 129 | return ret; |
130 | } | 130 | } |
131 | 131 | ||
132 | static DEVICE_ATTR(name, S_IRUGO, lm70_show_name, NULL); | 132 | static DEVICE_ATTR(name, S_IRUGO, lm70_show_name, NULL); |
133 | 133 | ||
134 | /*----------------------------------------------------------------------*/ | 134 | /*----------------------------------------------------------------------*/ |
135 | 135 | ||
136 | static int __devinit lm70_probe(struct spi_device *spi) | 136 | static int __devinit lm70_probe(struct spi_device *spi) |
137 | { | 137 | { |
138 | int chip = spi_get_device_id(spi)->driver_data; | 138 | int chip = spi_get_device_id(spi)->driver_data; |
139 | struct lm70 *p_lm70; | 139 | struct lm70 *p_lm70; |
140 | int status; | 140 | int status; |
141 | 141 | ||
142 | /* signaling is SPI_MODE_0 for both LM70 and TMP121 */ | 142 | /* signaling is SPI_MODE_0 for both LM70 and TMP121 */ |
143 | if (spi->mode & (SPI_CPOL | SPI_CPHA)) | 143 | if (spi->mode & (SPI_CPOL | SPI_CPHA)) |
144 | return -EINVAL; | 144 | return -EINVAL; |
145 | 145 | ||
146 | /* 3-wire link (shared SI/SO) for LM70 */ | 146 | /* 3-wire link (shared SI/SO) for LM70 */ |
147 | if (chip == LM70_CHIP_LM70 && !(spi->mode & SPI_3WIRE)) | 147 | if (chip == LM70_CHIP_LM70 && !(spi->mode & SPI_3WIRE)) |
148 | return -EINVAL; | 148 | return -EINVAL; |
149 | 149 | ||
150 | /* NOTE: we assume 8-bit words, and convert to 16 bits manually */ | 150 | /* NOTE: we assume 8-bit words, and convert to 16 bits manually */ |
151 | 151 | ||
152 | p_lm70 = kzalloc(sizeof *p_lm70, GFP_KERNEL); | 152 | p_lm70 = kzalloc(sizeof *p_lm70, GFP_KERNEL); |
153 | if (!p_lm70) | 153 | if (!p_lm70) |
154 | return -ENOMEM; | 154 | return -ENOMEM; |
155 | 155 | ||
156 | mutex_init(&p_lm70->lock); | 156 | mutex_init(&p_lm70->lock); |
157 | p_lm70->chip = chip; | 157 | p_lm70->chip = chip; |
158 | 158 | ||
159 | spi_set_drvdata(spi, p_lm70); | 159 | spi_set_drvdata(spi, p_lm70); |
160 | 160 | ||
161 | if ((status = device_create_file(&spi->dev, &dev_attr_temp1_input)) | 161 | status = device_create_file(&spi->dev, &dev_attr_temp1_input); |
162 | || (status = device_create_file(&spi->dev, &dev_attr_name))) { | 162 | if (status) |
163 | dev_dbg(&spi->dev, "device_create_file failure.\n"); | 163 | goto out_dev_create_temp_file_failed; |
164 | status = device_create_file(&spi->dev, &dev_attr_name); | ||
165 | if (status) | ||
164 | goto out_dev_create_file_failed; | 166 | goto out_dev_create_file_failed; |
165 | } | ||
166 | 167 | ||
167 | /* sysfs hook */ | 168 | /* sysfs hook */ |
168 | p_lm70->hwmon_dev = hwmon_device_register(&spi->dev); | 169 | p_lm70->hwmon_dev = hwmon_device_register(&spi->dev); |
169 | if (IS_ERR(p_lm70->hwmon_dev)) { | 170 | if (IS_ERR(p_lm70->hwmon_dev)) { |
170 | dev_dbg(&spi->dev, "hwmon_device_register failed.\n"); | 171 | dev_dbg(&spi->dev, "hwmon_device_register failed.\n"); |
171 | status = PTR_ERR(p_lm70->hwmon_dev); | 172 | status = PTR_ERR(p_lm70->hwmon_dev); |
172 | goto out_dev_reg_failed; | 173 | goto out_dev_reg_failed; |
173 | } | 174 | } |
174 | 175 | ||
175 | return 0; | 176 | return 0; |
176 | 177 | ||
177 | out_dev_reg_failed: | 178 | out_dev_reg_failed: |
178 | device_remove_file(&spi->dev, &dev_attr_name); | 179 | device_remove_file(&spi->dev, &dev_attr_name); |
179 | out_dev_create_file_failed: | 180 | out_dev_create_file_failed: |
180 | device_remove_file(&spi->dev, &dev_attr_temp1_input); | 181 | device_remove_file(&spi->dev, &dev_attr_temp1_input); |
182 | out_dev_create_temp_file_failed: | ||
181 | spi_set_drvdata(spi, NULL); | 183 | spi_set_drvdata(spi, NULL); |
182 | kfree(p_lm70); | 184 | kfree(p_lm70); |
183 | return status; | 185 | return status; |
184 | } | 186 | } |
185 | 187 | ||
186 | static int __devexit lm70_remove(struct spi_device *spi) | 188 | static int __devexit lm70_remove(struct spi_device *spi) |
187 | { | 189 | { |
188 | struct lm70 *p_lm70 = spi_get_drvdata(spi); | 190 | struct lm70 *p_lm70 = spi_get_drvdata(spi); |
189 | 191 | ||
190 | hwmon_device_unregister(p_lm70->hwmon_dev); | 192 | hwmon_device_unregister(p_lm70->hwmon_dev); |
191 | device_remove_file(&spi->dev, &dev_attr_temp1_input); | 193 | device_remove_file(&spi->dev, &dev_attr_temp1_input); |
192 | device_remove_file(&spi->dev, &dev_attr_name); | 194 | device_remove_file(&spi->dev, &dev_attr_name); |
193 | spi_set_drvdata(spi, NULL); | 195 | spi_set_drvdata(spi, NULL); |
194 | kfree(p_lm70); | 196 | kfree(p_lm70); |
195 | 197 | ||
196 | return 0; | 198 | return 0; |
197 | } | 199 | } |
198 | 200 | ||
199 | 201 | ||
200 | static const struct spi_device_id lm70_ids[] = { | 202 | static const struct spi_device_id lm70_ids[] = { |
201 | { "lm70", LM70_CHIP_LM70 }, | 203 | { "lm70", LM70_CHIP_LM70 }, |
202 | { "tmp121", LM70_CHIP_TMP121 }, | 204 | { "tmp121", LM70_CHIP_TMP121 }, |
203 | { }, | 205 | { }, |
204 | }; | 206 | }; |
205 | MODULE_DEVICE_TABLE(spi, lm70_ids); | 207 | MODULE_DEVICE_TABLE(spi, lm70_ids); |
206 | 208 | ||
207 | static struct spi_driver lm70_driver = { | 209 | static struct spi_driver lm70_driver = { |
208 | .driver = { | 210 | .driver = { |
209 | .name = "lm70", | 211 | .name = "lm70", |
210 | .owner = THIS_MODULE, | 212 | .owner = THIS_MODULE, |
211 | }, | 213 | }, |
212 | .id_table = lm70_ids, | 214 | .id_table = lm70_ids, |
213 | .probe = lm70_probe, | 215 | .probe = lm70_probe, |
214 | .remove = __devexit_p(lm70_remove), | 216 | .remove = __devexit_p(lm70_remove), |
215 | }; | 217 | }; |
216 | 218 | ||
217 | module_spi_driver(lm70_driver); | 219 | module_spi_driver(lm70_driver); |
218 | 220 | ||
219 | MODULE_AUTHOR("Kaiwan N Billimoria"); | 221 | MODULE_AUTHOR("Kaiwan N Billimoria"); |
220 | MODULE_DESCRIPTION("NS LM70 / TI TMP121/TMP123 Linux driver"); | 222 | MODULE_DESCRIPTION("NS LM70 / TI TMP121/TMP123 Linux driver"); |
221 | MODULE_LICENSE("GPL"); | 223 | MODULE_LICENSE("GPL"); |