OSDN Git Service

hwmon: (nct6683) Support NCT6687D.
authorDavid Bartley <andareed@gmail.com>
Wed, 2 Dec 2020 02:50:57 +0000 (18:50 -0800)
committerGuenter Roeck <linux@roeck-us.net>
Thu, 3 Dec 2020 01:42:24 +0000 (17:42 -0800)
This is found on many MSI motherboards.

Signed-off-by: David Bartley <andareed@gmail.com>
Link: https://lore.kernel.org/r/20201202025057.5492-1-andareed@gmail.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Documentation/hwmon/nct6683.rst
drivers/hwmon/nct6683.c

index efbf7e9..8646ad5 100644 (file)
@@ -3,7 +3,7 @@ Kernel driver nct6683
 
 Supported chips:
 
-  * Nuvoton NCT6683D
+  * Nuvoton NCT6683D/NCT6687D
 
     Prefix: 'nct6683'
 
@@ -61,4 +61,5 @@ Board         Firmware version
 Intel DH87RL   NCT6683D EC firmware version 1.0 build 04/03/13
 Intel DH87MC   NCT6683D EC firmware version 1.0 build 04/03/13
 Intel DB85FL   NCT6683D EC firmware version 1.0 build 04/03/13
+MSI B550       NCT6687D EC firmware version 1.0 build 05/07/20
 =============== ===============================================
index 2d29914..7f7e30f 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 /*
  * nct6683 - Driver for the hardware monitoring functionality of
- *          Nuvoton NCT6683D eSIO
+ *          Nuvoton NCT6683D/NCT6687D eSIO
  *
  * Copyright (C) 2013  Guenter Roeck <linux@roeck-us.net>
  *
@@ -12,6 +12,7 @@
  *
  * Chip        #vin    #fan    #pwm    #temp  chip ID
  * nct6683d     21(1)   16      8       32(1) 0xc730
+ * nct6687d     21(1)   16      8       32(1) 0xd590
  *
  * Notes:
  *     (1) Total number of vin and temp inputs is 32.
@@ -32,7 +33,7 @@
 #include <linux/platform_device.h>
 #include <linux/slab.h>
 
-enum kinds { nct6683 };
+enum kinds { nct6683, nct6687 };
 
 static bool force;
 module_param(force, bool, 0);
@@ -40,10 +41,12 @@ MODULE_PARM_DESC(force, "Set to one to enable support for unknown vendors");
 
 static const char * const nct6683_device_names[] = {
        "nct6683",
+       "nct6687",
 };
 
 static const char * const nct6683_chip_names[] = {
        "NCT6683D",
+       "NCT6687D",
 };
 
 #define DRVNAME "nct6683"
@@ -63,6 +66,7 @@ static const char * const nct6683_chip_names[] = {
 
 #define SIO_NCT6681_ID         0xb270  /* for later */
 #define SIO_NCT6683_ID         0xc730
+#define SIO_NCT6687_ID         0xd590
 #define SIO_ID_MASK            0xFFF0
 
 static inline void
@@ -164,6 +168,7 @@ superio_exit(int ioreg)
 #define NCT6683_REG_CUSTOMER_ID                0x602
 #define NCT6683_CUSTOMER_ID_INTEL      0x805
 #define NCT6683_CUSTOMER_ID_MITAC      0xa0e
+#define NCT6683_CUSTOMER_ID_MSI                0x201
 
 #define NCT6683_REG_BUILD_YEAR         0x604
 #define NCT6683_REG_BUILD_MONTH                0x605
@@ -1218,6 +1223,8 @@ static int nct6683_probe(struct platform_device *pdev)
                break;
        case NCT6683_CUSTOMER_ID_MITAC:
                break;
+       case NCT6683_CUSTOMER_ID_MSI:
+               break;
        default:
                if (!force)
                        return -ENODEV;
@@ -1352,6 +1359,9 @@ static int __init nct6683_find(int sioaddr, struct nct6683_sio_data *sio_data)
        case SIO_NCT6683_ID:
                sio_data->kind = nct6683;
                break;
+       case SIO_NCT6687_ID:
+               sio_data->kind = nct6687;
+               break;
        default:
                if (val != 0xffff)
                        pr_debug("unsupported chip ID: 0x%04x\n", val);