diff options
author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2009-09-22 19:46:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-09-23 10:39:43 -0400 |
commit | 8cec03eee4a771f949c70cff07775c9bb21d4642 (patch) | |
tree | 663493a95ca5cea6a3a4ca3a016ba02f00f42046 | |
parent | d2a5c10f806b089a6e6f10deefd01dc4ce67940d (diff) |
hwmon: lm70: convert to device table matching
Make the code a little bit nicer, and shorter.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Cc: Kaiwan N Billimoria <kaiwan@designergraphix.com>
Cc: David Brownell <dbrownell@users.sourceforge.net>
Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Grant Likely <grant.likely@secretlab.ca>
Cc: Jean Delvare <khali@linux-fr.org>
Cc: Ben Dooks <ben-linux@fluff.org>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/hwmon/lm70.c | 55 |
1 files changed, 19 insertions, 36 deletions
diff --git a/drivers/hwmon/lm70.c b/drivers/hwmon/lm70.c index ae6204f3321..ab8a5d3c769 100644 --- a/drivers/hwmon/lm70.c +++ b/drivers/hwmon/lm70.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/sysfs.h> | 32 | #include <linux/sysfs.h> |
33 | #include <linux/hwmon.h> | 33 | #include <linux/hwmon.h> |
34 | #include <linux/mutex.h> | 34 | #include <linux/mutex.h> |
35 | #include <linux/mod_devicetable.h> | ||
35 | #include <linux/spi/spi.h> | 36 | #include <linux/spi/spi.h> |
36 | 37 | ||
37 | 38 | ||
@@ -130,11 +131,20 @@ static DEVICE_ATTR(name, S_IRUGO, lm70_show_name, NULL); | |||
130 | 131 | ||
131 | /*----------------------------------------------------------------------*/ | 132 | /*----------------------------------------------------------------------*/ |
132 | 133 | ||
133 | static int __devinit common_probe(struct spi_device *spi, int chip) | 134 | static int __devinit lm70_probe(struct spi_device *spi) |
134 | { | 135 | { |
136 | int chip = spi_get_device_id(spi)->driver_data; | ||
135 | struct lm70 *p_lm70; | 137 | struct lm70 *p_lm70; |
136 | int status; | 138 | int status; |
137 | 139 | ||
140 | /* signaling is SPI_MODE_0 for both LM70 and TMP121 */ | ||
141 | if (spi->mode & (SPI_CPOL | SPI_CPHA)) | ||
142 | return -EINVAL; | ||
143 | |||
144 | /* 3-wire link (shared SI/SO) for LM70 */ | ||
145 | if (chip == LM70_CHIP_LM70 && !(spi->mode & SPI_3WIRE)) | ||
146 | return -EINVAL; | ||
147 | |||
138 | /* NOTE: we assume 8-bit words, and convert to 16 bits manually */ | 148 | /* NOTE: we assume 8-bit words, and convert to 16 bits manually */ |
139 | 149 | ||
140 | p_lm70 = kzalloc(sizeof *p_lm70, GFP_KERNEL); | 150 | p_lm70 = kzalloc(sizeof *p_lm70, GFP_KERNEL); |
@@ -170,24 +180,6 @@ out_dev_reg_failed: | |||
170 | return status; | 180 | return status; |
171 | } | 181 | } |
172 | 182 | ||
173 | static int __devinit lm70_probe(struct spi_device *spi) | ||
174 | { | ||
175 | /* signaling is SPI_MODE_0 on a 3-wire link (shared SI/SO) */ | ||
176 | if ((spi->mode & (SPI_CPOL | SPI_CPHA)) || !(spi->mode & SPI_3WIRE)) | ||
177 | return -EINVAL; | ||
178 | |||
179 | return common_probe(spi, LM70_CHIP_LM70); | ||
180 | } | ||
181 | |||
182 | static int __devinit tmp121_probe(struct spi_device *spi) | ||
183 | { | ||
184 | /* signaling is SPI_MODE_0 with only MISO connected */ | ||
185 | if (spi->mode & (SPI_CPOL | SPI_CPHA)) | ||
186 | return -EINVAL; | ||
187 | |||
188 | return common_probe(spi, LM70_CHIP_TMP121); | ||
189 | } | ||
190 | |||
191 | static int __devexit lm70_remove(struct spi_device *spi) | 183 | static int __devexit lm70_remove(struct spi_device *spi) |
192 | { | 184 | { |
193 | struct lm70 *p_lm70 = dev_get_drvdata(&spi->dev); | 185 | struct lm70 *p_lm70 = dev_get_drvdata(&spi->dev); |
@@ -201,41 +193,32 @@ static int __devexit lm70_remove(struct spi_device *spi) | |||
201 | return 0; | 193 | return 0; |
202 | } | 194 | } |
203 | 195 | ||
204 | static struct spi_driver tmp121_driver = { | 196 | |
205 | .driver = { | 197 | static const struct spi_device_id lm70_ids[] = { |
206 | .name = "tmp121", | 198 | { "lm70", LM70_CHIP_LM70 }, |
207 | .owner = THIS_MODULE, | 199 | { "tmp121", LM70_CHIP_TMP121 }, |
208 | }, | 200 | { }, |
209 | .probe = tmp121_probe, | ||
210 | .remove = __devexit_p(lm70_remove), | ||
211 | }; | 201 | }; |
202 | MODULE_DEVICE_TABLE(spi, lm70_ids); | ||
212 | 203 | ||
213 | static struct spi_driver lm70_driver = { | 204 | static struct spi_driver lm70_driver = { |
214 | .driver = { | 205 | .driver = { |
215 | .name = "lm70", | 206 | .name = "lm70", |
216 | .owner = THIS_MODULE, | 207 | .owner = THIS_MODULE, |
217 | }, | 208 | }, |
209 | .id_table = lm70_ids, | ||
218 | .probe = lm70_probe, | 210 | .probe = lm70_probe, |
219 | .remove = __devexit_p(lm70_remove), | 211 | .remove = __devexit_p(lm70_remove), |
220 | }; | 212 | }; |
221 | 213 | ||
222 | static int __init init_lm70(void) | 214 | static int __init init_lm70(void) |
223 | { | 215 | { |
224 | int ret = spi_register_driver(&lm70_driver); | 216 | return spi_register_driver(&lm70_driver); |
225 | if (ret) | ||
226 | return ret; | ||
227 | |||
228 | ret = spi_register_driver(&tmp121_driver); | ||
229 | if (ret) | ||
230 | spi_unregister_driver(&lm70_driver); | ||
231 | |||
232 | return ret; | ||
233 | } | 217 | } |
234 | 218 | ||
235 | static void __exit cleanup_lm70(void) | 219 | static void __exit cleanup_lm70(void) |
236 | { | 220 | { |
237 | spi_unregister_driver(&lm70_driver); | 221 | spi_unregister_driver(&lm70_driver); |
238 | spi_unregister_driver(&tmp121_driver); | ||
239 | } | 222 | } |
240 | 223 | ||
241 | module_init(init_lm70); | 224 | module_init(init_lm70); |