lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <202109122253.VsFmZxWu-lkp@intel.com>
Date:   Sun, 12 Sep 2021 22:50:34 +0800
From:   kernel test robot <lkp@...el.com>
To:     Denis Pauk <pauk.denis@...il.com>
Cc:     kbuild-all@...ts.01.org, pauk.denis@...il.com,
        Bernhard Seibold <mail@...nhard-seibold.de>,
        Andy Shevchenko <andriy.shevchenko@...el.com>,
        Guenter Roeck <linux@...ck-us.net>,
        Jean Delvare <jdelvare@...e.com>, linux-hwmon@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 1/2] hwmon: (nct6775) Use sio_data in superio_*().

Hi Denis,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on hwmon/hwmon-next]
[also build test ERROR on v5.14 next-20210910]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Denis-Pauk/hwmon-nct6775-Support-access-via-Asus-WMI/20210912-190749
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
config: arm-randconfig-s032-20210912 (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 11.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/0day-ci/linux/commit/f11f2179ea7eb747b68a65ac03fce15ff4319004
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Denis-Pauk/hwmon-nct6775-Support-access-via-Asus-WMI/20210912-190749
        git checkout f11f2179ea7eb747b68a65ac03fce15ff4319004
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm SHELL=/bin/bash drivers/hwmon/

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>

All error/warnings (new ones prefixed by >>):

   drivers/hwmon/nct6775.c: In function 'clear_caseopen':
>> drivers/hwmon/nct6775.c:3452:70: error: macro "inb" passed 2 arguments, but takes just 1
    3452 |         reg = sio_data->inb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr]);
         |                                                                      ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
>> drivers/hwmon/nct6775.c:3452:13: warning: assignment to 'u8' {aka 'unsigned char'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3452 |         reg = sio_data->inb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr]);
         |             ^
>> drivers/hwmon/nct6775.c:3454:70: error: macro "outb" passed 3 arguments, but takes just 2
    3454 |         sio_data->outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg);
         |                                                                      ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:3454:17: warning: statement with no effect [-Wunused-value]
    3454 |         sio_data->outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg);
         |         ~~~~~~~~^~~~~~
   drivers/hwmon/nct6775.c:3456:70: error: macro "outb" passed 3 arguments, but takes just 2
    3456 |         sio_data->outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg);
         |                                                                      ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:3456:17: warning: statement with no effect [-Wunused-value]
    3456 |         sio_data->outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg);
         |         ~~~~~~~~^~~~~~
   drivers/hwmon/nct6775.c: In function 'nct6775_check_fan_inputs':
   drivers/hwmon/nct6775.c:3572:70: error: macro "inb" passed 2 arguments, but takes just 1
    3572 |         data->sio_reg_enable = sio_data->inb(sio_data, SIO_REG_ENABLE);
         |                                                                      ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3572:30: warning: assignment to 'u8' {aka 'unsigned char'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3572 |         data->sio_reg_enable = sio_data->inb(sio_data, SIO_REG_ENABLE);
         |                              ^
   drivers/hwmon/nct6775.c:3576:56: error: macro "inb" passed 2 arguments, but takes just 1
    3576 |                 int cr2c = sio_data->inb(sio_data, 0x2c);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
>> drivers/hwmon/nct6775.c:3576:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3576 |                 int cr2c = sio_data->inb(sio_data, 0x2c);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3582:57: error: macro "inb" passed 2 arguments, but takes just 1
    3582 |                 fan4pin = !(sio_data->inb(sio_data, 0x2A) & 0x80);
         |                                                         ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
>> drivers/hwmon/nct6775.c:3582:59: error: invalid operands to binary & (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    3582 |                 fan4pin = !(sio_data->inb(sio_data, 0x2A) & 0x80);
         |                             ~~~~~~~~~~~~~                 ^
         |                                     |
         |                                     int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:3584:57: error: macro "inb" passed 2 arguments, but takes just 1
    3584 |                 bool gpok = sio_data->inb(sio_data, 0x27) & 0x80;
         |                                                         ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3584:59: error: invalid operands to binary & (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    3584 |                 bool gpok = sio_data->inb(sio_data, 0x27) & 0x80;
         |                             ~~~~~~~~~~~~~                 ^
         |                                     |
         |                                     int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:3601:74: error: macro "outb" passed 3 arguments, but takes just 2
    3601 |                                                      data->sio_reg_enable);
         |                                                                          ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:3600:49: warning: statement with no effect [-Wunused-value]
    3600 |                                         sio_data->outb(sio_data, SIO_REG_ENABLE,
         |                                         ~~~~~~~~^~~~~~
   drivers/hwmon/nct6775.c:3609:65: error: macro "inb" passed 2 arguments, but takes just 1
    3609 |                         fan3pin = !(sio_data->inb(sio_data, 0x24) & 0x40);
         |                                                                 ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3609:67: error: invalid operands to binary & (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    3609 |                         fan3pin = !(sio_data->inb(sio_data, 0x24) & 0x40);
         |                                     ~~~~~~~~~~~~~                 ^
         |                                             |
         |                                             int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:3614:63: error: macro "inb" passed 2 arguments, but takes just 1
    3614 |                         fan4pin = sio_data->inb(sio_data, 0x1C) & 0x01;
         |                                                               ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3614:65: error: invalid operands to binary & (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    3614 |                         fan4pin = sio_data->inb(sio_data, 0x1C) & 0x01;
         |                                   ~~~~~~~~~~~~~                 ^
         |                                           |
         |                                           int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:3619:63: error: macro "inb" passed 2 arguments, but takes just 1
    3619 |                         fan5pin = sio_data->inb(sio_data, 0x1C) & 0x02;
         |                                                               ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3619:65: error: invalid operands to binary & (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    3619 |                         fan5pin = sio_data->inb(sio_data, 0x1C) & 0x02;
         |                                   ~~~~~~~~~~~~~                 ^
         |                                           |
         |                                           int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:3624:56: error: macro "inb" passed 2 arguments, but takes just 1
    3624 |                 int cr24 = sio_data->inb(sio_data, 0x24);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3624:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3624 |                 int cr24 = sio_data->inb(sio_data, 0x24);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3629:56: error: macro "inb" passed 2 arguments, but takes just 1
    3629 |                 int cr1a = sio_data->inb(sio_data, 0x1a);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3629:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3629 |                 int cr1a = sio_data->inb(sio_data, 0x1a);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3630:56: error: macro "inb" passed 2 arguments, but takes just 1
    3630 |                 int cr1b = sio_data->inb(sio_data, 0x1b);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3630:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3630 |                 int cr1b = sio_data->inb(sio_data, 0x1b);
         |                            ^~~~~~~~
--
         | 
   drivers/hwmon/nct6775.c:3634:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3634 |                 int cr2f = sio_data->inb(sio_data, 0x2f);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3650:56: error: macro "inb" passed 2 arguments, but takes just 1
    3650 |                 int cr1a = sio_data->inb(sio_data, 0x1a);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3650:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3650 |                 int cr1a = sio_data->inb(sio_data, 0x1a);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3651:56: error: macro "inb" passed 2 arguments, but takes just 1
    3651 |                 int cr1b = sio_data->inb(sio_data, 0x1b);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3651:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3651 |                 int cr1b = sio_data->inb(sio_data, 0x1b);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3652:56: error: macro "inb" passed 2 arguments, but takes just 1
    3652 |                 int cr1c = sio_data->inb(sio_data, 0x1c);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3652:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3652 |                 int cr1c = sio_data->inb(sio_data, 0x1c);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3653:56: error: macro "inb" passed 2 arguments, but takes just 1
    3653 |                 int cr1d = sio_data->inb(sio_data, 0x1d);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3653:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3653 |                 int cr1d = sio_data->inb(sio_data, 0x1d);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3654:56: error: macro "inb" passed 2 arguments, but takes just 1
    3654 |                 int cr2a = sio_data->inb(sio_data, 0x2a);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3654:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3654 |                 int cr2a = sio_data->inb(sio_data, 0x2a);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3655:56: error: macro "inb" passed 2 arguments, but takes just 1
    3655 |                 int cr2b = sio_data->inb(sio_data, 0x2b);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3655:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3655 |                 int cr2b = sio_data->inb(sio_data, 0x2b);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3656:56: error: macro "inb" passed 2 arguments, but takes just 1
    3656 |                 int cr2d = sio_data->inb(sio_data, 0x2d);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3656:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3656 |                 int cr2d = sio_data->inb(sio_data, 0x2d);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3657:56: error: macro "inb" passed 2 arguments, but takes just 1
    3657 |                 int cr2f = sio_data->inb(sio_data, 0x2f);
         |                                                        ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3657:28: warning: initialization of 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3657 |                 int cr2f = sio_data->inb(sio_data, 0x2f);
         |                            ^~~~~~~~
   drivers/hwmon/nct6775.c:3665:52: error: macro "inb" passed 2 arguments, but takes just 1
    3665 |                 cre0 = sio_data->inb(sio_data, 0xe0);
         |                                                    ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
>> drivers/hwmon/nct6775.c:3665:22: warning: assignment to 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3665 |                 cre0 = sio_data->inb(sio_data, 0xe0);
         |                      ^
   drivers/hwmon/nct6775.c:3666:52: error: macro "inb" passed 2 arguments, but takes just 1
    3666 |                 creb = sio_data->inb(sio_data, 0xeb);
         |                                                    ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3666:22: warning: assignment to 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3666 |                 creb = sio_data->inb(sio_data, 0xeb);
         |                      ^
   drivers/hwmon/nct6775.c:3667:52: error: macro "inb" passed 2 arguments, but takes just 1
    3667 |                 cred = sio_data->inb(sio_data, 0xed);
         |                                                    ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:3667:22: warning: assignment to 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    3667 |                 cred = sio_data->inb(sio_data, 0xed);
         |                      ^
   drivers/hwmon/nct6775.c: In function 'nct6775_probe':
   drivers/hwmon/nct6775.c:4531:44: error: macro "inb" passed 2 arguments, but takes just 1
    4531 |         cr2a = sio_data->inb(sio_data, 0x2a);
         |                                            ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4531:14: warning: assignment to 'u8' {aka 'unsigned char'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    4531 |         cr2a = sio_data->inb(sio_data, 0x2a);
         |              ^
   drivers/hwmon/nct6775.c:4558:57: error: macro "inb" passed 2 arguments, but takes just 1
    4558 |                 data->vid = sio_data->inb(sio_data, 0xe3);
         |                                                         ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4558:27: warning: assignment to 'u8' {aka 'unsigned char'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    4558 |                 data->vid = sio_data->inb(sio_data, 0xe3);
         |                           ^
   drivers/hwmon/nct6775.c:4567:64: error: macro "inb" passed 2 arguments, but takes just 1
    4567 |                                     NCT6775_REG_CR_FAN_DEBOUNCE);
         |                                                                ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4566:21: warning: assignment to 'u8' {aka 'unsigned char'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    4566 |                 tmp = sio_data->inb(sio_data,
         |                     ^
   drivers/hwmon/nct6775.c:4591:33: error: macro "outb" passed 3 arguments, but takes just 2
    4591 |                              tmp);
         |                                 ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:4590:25: warning: statement with no effect [-Wunused-value]
    4590 |                 sio_data->outb(sio_data, NCT6775_REG_CR_FAN_DEBOUNCE,
         |                 ~~~~~~~~^~~~~~
   drivers/hwmon/nct6775.c: In function 'nct6791_enable_io_mapping':
   drivers/hwmon/nct6775.c:4642:74: error: macro "inb" passed 2 arguments, but takes just 1
    4642 |         val = sio_data->inb(sio_data, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE);
         |                                                                          ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4642:13: warning: assignment to 'int' from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    4642 |         val = sio_data->inb(sio_data, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE);
         |             ^
   drivers/hwmon/nct6775.c:4646:43: error: macro "outb" passed 3 arguments, but takes just 2
    4646 |                                val & ~0x10);
         |                                           ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:4645:25: warning: statement with no effect [-Wunused-value]
    4645 |                 sio_data->outb(sio_data, NCT6791_REG_HM_IO_SPACE_LOCK_ENABLE,
         |                 ~~~~~~~~^~~~~~
   drivers/hwmon/nct6775.c: In function 'nct6775_resume':
   drivers/hwmon/nct6775.c:4680:53: error: macro "inb" passed 2 arguments, but takes just 1
    4680 |         reg = sio_data->inb(sio_data, SIO_REG_ENABLE);
         |                                                     ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4680:13: warning: assignment to 'u8' {aka 'unsigned char'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    4680 |         reg = sio_data->inb(sio_data, SIO_REG_ENABLE);
         |             ^
   drivers/hwmon/nct6775.c:4682:78: error: macro "outb" passed 3 arguments, but takes just 2
    4682 |                 sio_data->outb(sio_data, SIO_REG_ENABLE, data->sio_reg_enable);
         |                                                                              ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:4682:25: warning: statement with no effect [-Wunused-value]
    4682 |                 sio_data->outb(sio_data, SIO_REG_ENABLE, data->sio_reg_enable);
         |                 ~~~~~~~~^~~~~~
   drivers/hwmon/nct6775.c: In function 'nct6775_find':
   drivers/hwmon/nct6775.c:4759:53: error: macro "inb" passed 2 arguments, but takes just 1
    4759 |         val = (sio_data->inb(sio_data, SIO_REG_DEVID) << 8) |
         |                                                     ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4759:55: error: invalid operands to binary << (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    4759 |         val = (sio_data->inb(sio_data, SIO_REG_DEVID) << 8) |
         |                ~~~~~~~~~~~~~                          ^~
         |                        |
         |                        int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:4760:58: error: macro "inb" passed 2 arguments, but takes just 1
    4760 |                 sio_data->inb(sio_data, SIO_REG_DEVID + 1);
         |                                                          ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4810:52: error: macro "inb" passed 2 arguments, but takes just 1
    4810 |         val = (sio_data->inb(sio_data, SIO_REG_ADDR) << 8)
         |                                                    ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4810:54: error: invalid operands to binary << (have 'int (*)(struct nct6775_sio_data *, int)' and 'int')
    4810 |         val = (sio_data->inb(sio_data, SIO_REG_ADDR) << 8)
         |                ~~~~~~~~~~~~~                         ^~
         |                        |
         |                        int (*)(struct nct6775_sio_data *, int)
   drivers/hwmon/nct6775.c:4811:55: error: macro "inb" passed 2 arguments, but takes just 1
    4811 |             | sio_data->inb(sio_data, SIO_REG_ADDR + 1);
         |                                                       ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
   drivers/hwmon/nct6775.c:4820:53: error: macro "inb" passed 2 arguments, but takes just 1
    4820 |         val = sio_data->inb(sio_data, SIO_REG_ENABLE);
         |                                                     ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:258: note: macro "inb" defined here
     258 | #define inb(p)  ({ __u8 __v = __raw_readb(__io(p)); __iormb(); __v; })
         | 
>> drivers/hwmon/nct6775.c:4820:13: warning: assignment to 'u16' {aka 'short unsigned int'} from 'int (*)(struct nct6775_sio_data *, int)' makes integer from pointer without a cast [-Wint-conversion]
    4820 |         val = sio_data->inb(sio_data, SIO_REG_ENABLE);
         |             ^
   drivers/hwmon/nct6775.c:4823:68: error: macro "outb" passed 3 arguments, but takes just 2
    4823 |                 sio_data->outb(sio_data, SIO_REG_ENABLE, val | 0x01);
         |                                                                    ^
   In file included from include/linux/io.h:13,
                    from drivers/hwmon/nct6775.c:56:
   arch/arm/include/asm/io.h:252: note: macro "outb" defined here
     252 | #define outb(v,p)       ({ __iowmb(); __raw_writeb(v,__io(p)); })
         | 
   drivers/hwmon/nct6775.c:4823:25: warning: statement with no effect [-Wunused-value]
    4823 |                 sio_data->outb(sio_data, SIO_REG_ENABLE, val | 0x01);
         |                 ~~~~~~~~^~~~~~
   At top level:
   drivers/hwmon/nct6775.c:284:17: warning: 'NCT6775_REG_CR_CASEOPEN_CLR' defined but not used [-Wunused-const-variable=]
     284 | static const u8 NCT6775_REG_CR_CASEOPEN_CLR[] = { 0xe6, 0xee };
         |                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~


vim +/inb +3452 drivers/hwmon/nct6775.c

  3423	
  3424	static ssize_t
  3425	clear_caseopen(struct device *dev, struct device_attribute *attr,
  3426		       const char *buf, size_t count)
  3427	{
  3428		struct nct6775_data *data = dev_get_drvdata(dev);
  3429		struct nct6775_sio_data *sio_data = dev_get_platdata(dev);
  3430		int nr = to_sensor_dev_attr(attr)->index - INTRUSION_ALARM_BASE;
  3431		unsigned long val;
  3432		u8 reg;
  3433		int ret;
  3434	
  3435		if (kstrtoul(buf, 10, &val) || val != 0)
  3436			return -EINVAL;
  3437	
  3438		mutex_lock(&data->update_lock);
  3439	
  3440		/*
  3441		 * Use CR registers to clear caseopen status.
  3442		 * The CR registers are the same for all chips, and not all chips
  3443		 * support clearing the caseopen status through "regular" registers.
  3444		 */
  3445		ret = sio_data->enter(sio_data);
  3446		if (ret) {
  3447			count = ret;
  3448			goto error;
  3449		}
  3450	
  3451		sio_data->select(sio_data, NCT6775_LD_ACPI);
> 3452		reg = sio_data->inb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr]);
  3453		reg |= NCT6775_CR_CASEOPEN_CLR_MASK[nr];
> 3454		sio_data->outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg);
  3455		reg &= ~NCT6775_CR_CASEOPEN_CLR_MASK[nr];
  3456		sio_data->outb(sio_data, NCT6775_REG_CR_CASEOPEN_CLR[nr], reg);
  3457		sio_data->exit(sio_data);
  3458	
  3459		data->valid = false;	/* Force cache refresh */
  3460	error:
  3461		mutex_unlock(&data->update_lock);
  3462		return count;
  3463	}
  3464	
  3465	static SENSOR_DEVICE_ATTR(intrusion0_alarm, S_IWUSR | S_IRUGO, show_alarm,
  3466				  clear_caseopen, INTRUSION_ALARM_BASE);
  3467	static SENSOR_DEVICE_ATTR(intrusion1_alarm, S_IWUSR | S_IRUGO, show_alarm,
  3468				  clear_caseopen, INTRUSION_ALARM_BASE + 1);
  3469	static SENSOR_DEVICE_ATTR(intrusion0_beep, S_IWUSR | S_IRUGO, show_beep,
  3470				  store_beep, INTRUSION_ALARM_BASE);
  3471	static SENSOR_DEVICE_ATTR(intrusion1_beep, S_IWUSR | S_IRUGO, show_beep,
  3472				  store_beep, INTRUSION_ALARM_BASE + 1);
  3473	static SENSOR_DEVICE_ATTR(beep_enable, S_IWUSR | S_IRUGO, show_beep,
  3474				  store_beep, BEEP_ENABLE_BASE);
  3475	
  3476	static umode_t nct6775_other_is_visible(struct kobject *kobj,
  3477						struct attribute *attr, int index)
  3478	{
  3479		struct device *dev = kobj_to_dev(kobj);
  3480		struct nct6775_data *data = dev_get_drvdata(dev);
  3481	
  3482		if (index == 0 && !data->have_vid)
  3483			return 0;
  3484	
  3485		if (index == 1 || index == 2) {
  3486			if (data->ALARM_BITS[INTRUSION_ALARM_BASE + index - 1] < 0)
  3487				return 0;
  3488		}
  3489	
  3490		if (index == 3 || index == 4) {
  3491			if (data->BEEP_BITS[INTRUSION_ALARM_BASE + index - 3] < 0)
  3492				return 0;
  3493		}
  3494	
  3495		return attr->mode;
  3496	}
  3497	
  3498	/*
  3499	 * nct6775_other_is_visible uses the index into the following array
  3500	 * to determine if attributes should be created or not.
  3501	 * Any change in order or content must be matched.
  3502	 */
  3503	static struct attribute *nct6775_attributes_other[] = {
  3504		&dev_attr_cpu0_vid.attr,				/* 0 */
  3505		&sensor_dev_attr_intrusion0_alarm.dev_attr.attr,	/* 1 */
  3506		&sensor_dev_attr_intrusion1_alarm.dev_attr.attr,	/* 2 */
  3507		&sensor_dev_attr_intrusion0_beep.dev_attr.attr,		/* 3 */
  3508		&sensor_dev_attr_intrusion1_beep.dev_attr.attr,		/* 4 */
  3509		&sensor_dev_attr_beep_enable.dev_attr.attr,		/* 5 */
  3510	
  3511		NULL
  3512	};
  3513	
  3514	static const struct attribute_group nct6775_group_other = {
  3515		.attrs = nct6775_attributes_other,
  3516		.is_visible = nct6775_other_is_visible,
  3517	};
  3518	
  3519	static inline void nct6775_init_device(struct nct6775_data *data)
  3520	{
  3521		int i;
  3522		u8 tmp, diode;
  3523	
  3524		/* Start monitoring if needed */
  3525		if (data->REG_CONFIG) {
  3526			tmp = data->read_value(data, data->REG_CONFIG);
  3527			if (!(tmp & 0x01))
  3528				data->write_value(data, data->REG_CONFIG, tmp | 0x01);
  3529		}
  3530	
  3531		/* Enable temperature sensors if needed */
  3532		for (i = 0; i < NUM_TEMP; i++) {
  3533			if (!(data->have_temp & BIT(i)))
  3534				continue;
  3535			if (!data->reg_temp_config[i])
  3536				continue;
  3537			tmp = data->read_value(data, data->reg_temp_config[i]);
  3538			if (tmp & 0x01)
  3539				data->write_value(data, data->reg_temp_config[i],
  3540						    tmp & 0xfe);
  3541		}
  3542	
  3543		/* Enable VBAT monitoring if needed */
  3544		tmp = data->read_value(data, data->REG_VBAT);
  3545		if (!(tmp & 0x01))
  3546			data->write_value(data, data->REG_VBAT, tmp | 0x01);
  3547	
  3548		diode = data->read_value(data, data->REG_DIODE);
  3549	
  3550		for (i = 0; i < data->temp_fixed_num; i++) {
  3551			if (!(data->have_temp_fixed & BIT(i)))
  3552				continue;
  3553			if ((tmp & (data->DIODE_MASK << i)))	/* diode */
  3554				data->temp_type[i]
  3555				  = 3 - ((diode >> i) & data->DIODE_MASK);
  3556			else				/* thermistor */
  3557				data->temp_type[i] = 4;
  3558		}
  3559	}
  3560	
  3561	static void
  3562	nct6775_check_fan_inputs(struct nct6775_data *data,
  3563			struct nct6775_sio_data *sio_data)
  3564	{
  3565		bool fan3pin = false, fan4pin = false, fan4min = false;
  3566		bool fan5pin = false, fan6pin = false, fan7pin = false;
  3567		bool pwm3pin = false, pwm4pin = false, pwm5pin = false;
  3568		bool pwm6pin = false, pwm7pin = false;
  3569	
  3570		/* Store SIO_REG_ENABLE for use during resume */
  3571		sio_data->select(sio_data, NCT6775_LD_HWM);
  3572		data->sio_reg_enable = sio_data->inb(sio_data, SIO_REG_ENABLE);
  3573	
  3574		/* fan4 and fan5 share some pins with the GPIO and serial flash */
  3575		if (data->kind == nct6775) {
> 3576			int cr2c = sio_data->inb(sio_data, 0x2c);
  3577	
  3578			fan3pin = cr2c & BIT(6);
  3579			pwm3pin = cr2c & BIT(7);
  3580	
  3581			/* On NCT6775, fan4 shares pins with the fdc interface */
> 3582			fan4pin = !(sio_data->inb(sio_data, 0x2A) & 0x80);
  3583		} else if (data->kind == nct6776) {
  3584			bool gpok = sio_data->inb(sio_data, 0x27) & 0x80;
  3585			const char *board_vendor, *board_name;
  3586	
  3587			board_vendor = dmi_get_system_info(DMI_BOARD_VENDOR);
  3588			board_name = dmi_get_system_info(DMI_BOARD_NAME);
  3589	
  3590			if (board_name && board_vendor &&
  3591			    !strcmp(board_vendor, "ASRock")) {
  3592				/*
  3593				 * Auxiliary fan monitoring is not enabled on ASRock
  3594				 * Z77 Pro4-M if booted in UEFI Ultra-FastBoot mode.
  3595				 * Observed with BIOS version 2.00.
  3596				 */
  3597				if (!strcmp(board_name, "Z77 Pro4-M")) {
  3598					if ((data->sio_reg_enable & 0xe0) != 0xe0) {
  3599						data->sio_reg_enable |= 0xe0;
  3600						sio_data->outb(sio_data, SIO_REG_ENABLE,
  3601							     data->sio_reg_enable);
  3602					}
  3603				}
  3604			}
  3605	
  3606			if (data->sio_reg_enable & 0x80)
  3607				fan3pin = gpok;
  3608			else
  3609				fan3pin = !(sio_data->inb(sio_data, 0x24) & 0x40);
  3610	
  3611			if (data->sio_reg_enable & 0x40)
  3612				fan4pin = gpok;
  3613			else
  3614				fan4pin = sio_data->inb(sio_data, 0x1C) & 0x01;
  3615	
  3616			if (data->sio_reg_enable & 0x20)
  3617				fan5pin = gpok;
  3618			else
  3619				fan5pin = sio_data->inb(sio_data, 0x1C) & 0x02;
  3620	
  3621			fan4min = fan4pin;
  3622			pwm3pin = fan3pin;
  3623		} else if (data->kind == nct6106) {
  3624			int cr24 = sio_data->inb(sio_data, 0x24);
  3625	
  3626			fan3pin = !(cr24 & 0x80);
  3627			pwm3pin = cr24 & 0x08;
  3628		} else if (data->kind == nct6116) {
  3629			int cr1a = sio_data->inb(sio_data, 0x1a);
  3630			int cr1b = sio_data->inb(sio_data, 0x1b);
  3631			int cr24 = sio_data->inb(sio_data, 0x24);
  3632			int cr2a = sio_data->inb(sio_data, 0x2a);
  3633			int cr2b = sio_data->inb(sio_data, 0x2b);
  3634			int cr2f = sio_data->inb(sio_data, 0x2f);
  3635	
  3636			fan3pin = !(cr2b & 0x10);
  3637			fan4pin = (cr2b & 0x80) ||			// pin 1(2)
  3638				(!(cr2f & 0x10) && (cr1a & 0x04));	// pin 65(66)
  3639			fan5pin = (cr2b & 0x80) ||			// pin 126(127)
  3640				(!(cr1b & 0x03) && (cr2a & 0x02));	// pin 94(96)
  3641	
  3642			pwm3pin = fan3pin && (cr24 & 0x08);
  3643			pwm4pin = fan4pin;
  3644			pwm5pin = fan5pin;
  3645		} else {
  3646			/*
  3647			 * NCT6779D, NCT6791D, NCT6792D, NCT6793D, NCT6795D, NCT6796D,
  3648			 * NCT6797D, NCT6798D
  3649			 */
  3650			int cr1a = sio_data->inb(sio_data, 0x1a);
  3651			int cr1b = sio_data->inb(sio_data, 0x1b);
  3652			int cr1c = sio_data->inb(sio_data, 0x1c);
  3653			int cr1d = sio_data->inb(sio_data, 0x1d);
  3654			int cr2a = sio_data->inb(sio_data, 0x2a);
  3655			int cr2b = sio_data->inb(sio_data, 0x2b);
  3656			int cr2d = sio_data->inb(sio_data, 0x2d);
  3657			int cr2f = sio_data->inb(sio_data, 0x2f);
  3658			bool dsw_en = cr2f & BIT(3);
  3659			bool ddr4_en = cr2f & BIT(4);
  3660			int cre0;
  3661			int creb;
  3662			int cred;
  3663	
  3664			sio_data->select(sio_data, NCT6775_LD_12);
  3665			cre0 = sio_data->inb(sio_data, 0xe0);
  3666			creb = sio_data->inb(sio_data, 0xeb);
  3667			cred = sio_data->inb(sio_data, 0xed);
  3668	
  3669			fan3pin = !(cr1c & BIT(5));
  3670			fan4pin = !(cr1c & BIT(6));
  3671			fan5pin = !(cr1c & BIT(7));
  3672	
  3673			pwm3pin = !(cr1c & BIT(0));
  3674			pwm4pin = !(cr1c & BIT(1));
  3675			pwm5pin = !(cr1c & BIT(2));
  3676	
  3677			switch (data->kind) {
  3678			case nct6791:
  3679				fan6pin = cr2d & BIT(1);
  3680				pwm6pin = cr2d & BIT(0);
  3681				break;
  3682			case nct6792:
  3683				fan6pin = !dsw_en && (cr2d & BIT(1));
  3684				pwm6pin = !dsw_en && (cr2d & BIT(0));
  3685				break;
  3686			case nct6793:
  3687				fan5pin |= cr1b & BIT(5);
  3688				fan5pin |= creb & BIT(5);
  3689	
  3690				fan6pin = !dsw_en && (cr2d & BIT(1));
  3691				fan6pin |= creb & BIT(3);
  3692	
  3693				pwm5pin |= cr2d & BIT(7);
  3694				pwm5pin |= (creb & BIT(4)) && !(cr2a & BIT(0));
  3695	
  3696				pwm6pin = !dsw_en && (cr2d & BIT(0));
  3697				pwm6pin |= creb & BIT(2);
  3698				break;
  3699			case nct6795:
  3700				fan5pin |= cr1b & BIT(5);
  3701				fan5pin |= creb & BIT(5);
  3702	
  3703				fan6pin = (cr2a & BIT(4)) &&
  3704						(!dsw_en || (cred & BIT(4)));
  3705				fan6pin |= creb & BIT(3);
  3706	
  3707				pwm5pin |= cr2d & BIT(7);
  3708				pwm5pin |= (creb & BIT(4)) && !(cr2a & BIT(0));
  3709	
  3710				pwm6pin = (cr2a & BIT(3)) && (cred & BIT(2));
  3711				pwm6pin |= creb & BIT(2);
  3712				break;
  3713			case nct6796:
  3714				fan5pin |= cr1b & BIT(5);
  3715				fan5pin |= (cre0 & BIT(3)) && !(cr1b & BIT(0));
  3716				fan5pin |= creb & BIT(5);
  3717	
  3718				fan6pin = (cr2a & BIT(4)) &&
  3719						(!dsw_en || (cred & BIT(4)));
  3720				fan6pin |= creb & BIT(3);
  3721	
  3722				fan7pin = !(cr2b & BIT(2));
  3723	
  3724				pwm5pin |= cr2d & BIT(7);
  3725				pwm5pin |= (cre0 & BIT(4)) && !(cr1b & BIT(0));
  3726				pwm5pin |= (creb & BIT(4)) && !(cr2a & BIT(0));
  3727	
  3728				pwm6pin = (cr2a & BIT(3)) && (cred & BIT(2));
  3729				pwm6pin |= creb & BIT(2);
  3730	
  3731				pwm7pin = !(cr1d & (BIT(2) | BIT(3)));
  3732				break;
  3733			case nct6797:
  3734				fan5pin |= !ddr4_en && (cr1b & BIT(5));
  3735				fan5pin |= creb & BIT(5);
  3736	
  3737				fan6pin = cr2a & BIT(4);
  3738				fan6pin |= creb & BIT(3);
  3739	
  3740				fan7pin = cr1a & BIT(1);
  3741	
  3742				pwm5pin |= (creb & BIT(4)) && !(cr2a & BIT(0));
  3743				pwm5pin |= !ddr4_en && (cr2d & BIT(7));
  3744	
  3745				pwm6pin = creb & BIT(2);
  3746				pwm6pin |= cred & BIT(2);
  3747	
  3748				pwm7pin = cr1d & BIT(4);
  3749				break;
  3750			case nct6798:
  3751				fan6pin = !(cr1b & BIT(0)) && (cre0 & BIT(3));
  3752				fan6pin |= cr2a & BIT(4);
  3753				fan6pin |= creb & BIT(5);
  3754	
  3755				fan7pin = cr1b & BIT(5);
  3756				fan7pin |= !(cr2b & BIT(2));
  3757				fan7pin |= creb & BIT(3);
  3758	
  3759				pwm6pin = !(cr1b & BIT(0)) && (cre0 & BIT(4));
  3760				pwm6pin |= !(cred & BIT(2)) && (cr2a & BIT(3));
  3761				pwm6pin |= (creb & BIT(4)) && !(cr2a & BIT(0));
  3762	
  3763				pwm7pin = !(cr1d & (BIT(2) | BIT(3)));
  3764				pwm7pin |= cr2d & BIT(7);
  3765				pwm7pin |= creb & BIT(2);
  3766				break;
  3767			default:	/* NCT6779D */
  3768				break;
  3769			}
  3770	
  3771			fan4min = fan4pin;
  3772		}
  3773	
  3774		/* fan 1 and 2 (0x03) are always present */
  3775		data->has_fan = 0x03 | (fan3pin << 2) | (fan4pin << 3) |
  3776			(fan5pin << 4) | (fan6pin << 5) | (fan7pin << 6);
  3777		data->has_fan_min = 0x03 | (fan3pin << 2) | (fan4min << 3) |
  3778			(fan5pin << 4) | (fan6pin << 5) | (fan7pin << 6);
  3779		data->has_pwm = 0x03 | (pwm3pin << 2) | (pwm4pin << 3) |
  3780			(pwm5pin << 4) | (pwm6pin << 5) | (pwm7pin << 6);
  3781	}
  3782	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Download attachment ".config.gz" of type "application/gzip" (35738 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ