hwmon: lm70: convert to device table matching
authorAnton Vorontsov <avorontsov@ru.mvista.com>
Tue, 22 Sep 2009 23:46:07 +0000 (16:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 23 Sep 2009 14:39:43 +0000 (07:39 -0700)
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>
drivers/hwmon/lm70.c

index ae6204f33214d4ffa80a61417fe2e4ed669099a5..ab8a5d3c769048a1a15635c09648740bad64e9ef 100644 (file)
@@ -32,6 +32,7 @@
 #include <linux/sysfs.h>
 #include <linux/hwmon.h>
 #include <linux/mutex.h>
+#include <linux/mod_devicetable.h>
 #include <linux/spi/spi.h>
 
 
@@ -130,11 +131,20 @@ static DEVICE_ATTR(name, S_IRUGO, lm70_show_name, NULL);
 
 /*----------------------------------------------------------------------*/
 
-static int __devinit common_probe(struct spi_device *spi, int chip)
+static int __devinit lm70_probe(struct spi_device *spi)
 {
+       int chip = spi_get_device_id(spi)->driver_data;
        struct lm70 *p_lm70;
        int status;
 
+       /* signaling is SPI_MODE_0 for both LM70 and TMP121 */
+       if (spi->mode & (SPI_CPOL | SPI_CPHA))
+               return -EINVAL;
+
+       /* 3-wire link (shared SI/SO) for LM70 */
+       if (chip == LM70_CHIP_LM70 && !(spi->mode & SPI_3WIRE))
+               return -EINVAL;
+
        /* NOTE:  we assume 8-bit words, and convert to 16 bits manually */
 
        p_lm70 = kzalloc(sizeof *p_lm70, GFP_KERNEL);
@@ -170,24 +180,6 @@ out_dev_reg_failed:
        return status;
 }
 
-static int __devinit lm70_probe(struct spi_device *spi)
-{
-       /* signaling is SPI_MODE_0 on a 3-wire link (shared SI/SO) */
-       if ((spi->mode & (SPI_CPOL | SPI_CPHA)) || !(spi->mode & SPI_3WIRE))
-               return -EINVAL;
-
-       return common_probe(spi, LM70_CHIP_LM70);
-}
-
-static int __devinit tmp121_probe(struct spi_device *spi)
-{
-       /* signaling is SPI_MODE_0 with only MISO connected */
-       if (spi->mode & (SPI_CPOL | SPI_CPHA))
-               return -EINVAL;
-
-       return common_probe(spi, LM70_CHIP_TMP121);
-}
-
 static int __devexit lm70_remove(struct spi_device *spi)
 {
        struct lm70 *p_lm70 = dev_get_drvdata(&spi->dev);
@@ -201,41 +193,32 @@ static int __devexit lm70_remove(struct spi_device *spi)
        return 0;
 }
 
-static struct spi_driver tmp121_driver = {
-       .driver = {
-               .name   = "tmp121",
-               .owner  = THIS_MODULE,
-       },
-       .probe  = tmp121_probe,
-       .remove = __devexit_p(lm70_remove),
+
+static const struct spi_device_id lm70_ids[] = {
+       { "lm70",   LM70_CHIP_LM70 },
+       { "tmp121", LM70_CHIP_TMP121 },
+       { },
 };
+MODULE_DEVICE_TABLE(spi, lm70_ids);
 
 static struct spi_driver lm70_driver = {
        .driver = {
                .name   = "lm70",
                .owner  = THIS_MODULE,
        },
+       .id_table = lm70_ids,
        .probe  = lm70_probe,
        .remove = __devexit_p(lm70_remove),
 };
 
 static int __init init_lm70(void)
 {
-       int ret = spi_register_driver(&lm70_driver);
-       if (ret)
-               return ret;
-
-       ret = spi_register_driver(&tmp121_driver);
-       if (ret)
-               spi_unregister_driver(&lm70_driver);
-
-       return ret;
+       return spi_register_driver(&lm70_driver);
 }
 
 static void __exit cleanup_lm70(void)
 {
        spi_unregister_driver(&lm70_driver);
-       spi_unregister_driver(&tmp121_driver);
 }
 
 module_init(init_lm70);