From patchwork Wed Feb 21 21:09:37 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 10234041 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id EBF54602A7 for ; Wed, 21 Feb 2018 21:10:16 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id DB5B82851E for ; Wed, 21 Feb 2018 21:10:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D028428524; Wed, 21 Feb 2018 21:10:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 63AF72851E for ; Wed, 21 Feb 2018 21:10:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751940AbeBUVJ6 (ORCPT ); Wed, 21 Feb 2018 16:09:58 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:39126 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751526AbeBUVJq (ORCPT ); Wed, 21 Feb 2018 16:09:46 -0500 Received: by mail-pl0-f66.google.com with SMTP id s13so1627200plq.6 for ; Wed, 21 Feb 2018 13:09:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=6RMZIZjcdy2WP4iHosiPDUO5yGr/CgZRTKfsFj2NieE=; b=m/i+zJZpe+Xl9UPp2N2NopmAO7VJa8foZe36Dv+0UpiXFRD1i7Xs5A7ERVrUwSxpbq BCfs5AB/P0r6ZelCFgG0kcrcq8CFB2j9sMYHZUMhiDLe/dr86neBaeZ+SdIvEMG1a6F1 IEOFCssaAt/JoSNLg+PhUcduqBEUfFgQzSbl7D3ZYOQBHDWmpkNg9T+Wzybsv+Ijrovu uwC8ONpmuHQf+scbyGdHsqPYb+hPP6cpJ7UXRGI6stPMDW3sSboRNgJYkvaE2bwcSx2o oU7gE+skq+qqUSRT0BWW6Y+S/p8Dt5+df6iQvHum+6Lrfl49J3kcKeoHMqvmlzziMXQK 3xqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=6RMZIZjcdy2WP4iHosiPDUO5yGr/CgZRTKfsFj2NieE=; b=BL3E9699eyIxoMoouTt1jK09CyguwF0IH1U0nvBaUlzfbaxsN3I7hPJIYtscCv1uL6 NwaB7EOr/lIV0QAyHpqAKDxD5avz2ng8s8c+Qq81MloFs5fyjd5v+YThIKxFdf1OPlfn cJolJPTiXNlM+v28l+gRbEWumWqNIetDMdG3miBwQkebeY5aUkTS4ey3qX6CsLNu2VR7 3inPpHiF3ulvbtPB7z4Vo7dHG+Wnf3nG5zGqwtHsTT4BxG5hw9XiGKJA/m1SqndEkEuc HhdMJLYFquOhZQo8YbkCm3Juf1nrQcxom4bCl7gdC+sZJgOy8ZyhVpwhxq8Gc2xe/+L/ RLtQ== X-Gm-Message-State: APf1xPAK0RzQmVfvaSw3MrzjFqxmvfMxvL6E+HJmPkfgRuevPhDon9x+ bhIqTu4/gfSO0U6wjCIjrhw0fA== X-Google-Smtp-Source: AH8x227rxkaciTUV8uwWohNqsN34iOxzOIuHsbcYG5YC2bw0XkMw1tDt6grKh2ZBGrYFNlvFGbgd4A== X-Received: by 2002:a17:902:b7c2:: with SMTP id v2-v6mr12172plz.351.1519247384990; Wed, 21 Feb 2018 13:09:44 -0800 (PST) Received: from localhost (108-223-40-66.lightspeed.sntcca.sbcglobal.net. [108.223.40.66]) by smtp.gmail.com with ESMTPSA id t69sm6397888pfa.124.2018.02.21.13.09.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Feb 2018 13:09:44 -0800 (PST) From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 2/4] hwmon: (nct6775) Improve fan6/pwm6 support Date: Wed, 21 Feb 2018 13:09:37 -0800 Message-Id: <1519247379-29443-2-git-send-email-linux@roeck-us.net> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519247379-29443-1-git-send-email-linux@roeck-us.net> References: <1519247379-29443-1-git-send-email-linux@roeck-us.net> Sender: linux-hwmon-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Improve fan6/pwm6 detection on NCT6795D. Add support for fan pulses for fans 4..6 and fan min limits for fan6. Signed-off-by: Guenter Roeck --- drivers/hwmon/nct6775.c | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/drivers/hwmon/nct6775.c b/drivers/hwmon/nct6775.c index 01d0225cd92b..cebd716ddc91 100644 --- a/drivers/hwmon/nct6775.c +++ b/drivers/hwmon/nct6775.c @@ -419,8 +419,10 @@ static const u16 NCT6776_REG_TOLERANCE_H[] = { static const u8 NCT6776_REG_PWM_MODE[] = { 0x04, 0, 0, 0, 0, 0 }; static const u8 NCT6776_PWM_MODE_MASK[] = { 0x01, 0, 0, 0, 0, 0 }; -static const u16 NCT6776_REG_FAN_MIN[] = { 0x63a, 0x63c, 0x63e, 0x640, 0x642 }; -static const u16 NCT6776_REG_FAN_PULSES[] = { 0x644, 0x645, 0x646, 0, 0 }; +static const u16 NCT6776_REG_FAN_MIN[] = { + 0x63a, 0x63c, 0x63e, 0x640, 0x642, 0x64a }; +static const u16 NCT6776_REG_FAN_PULSES[] = { + 0x644, 0x645, 0x646, 0x647, 0x648, 0x649 }; static const u16 NCT6776_REG_WEIGHT_DUTY_BASE[] = { 0x13e, 0x23e, 0x33e, 0x83e, 0x93e, 0xa3e }; @@ -1235,7 +1237,7 @@ static bool is_word_sized(struct nct6775_data *data, u16 reg) ((reg & 0xfff0) == 0x4b0 && (reg & 0x000f) < 0x0b) || reg == 0x402 || reg == 0x63a || reg == 0x63c || reg == 0x63e || - reg == 0x640 || reg == 0x642 || + reg == 0x640 || reg == 0x642 || reg == 0x64a || reg == 0x73 || reg == 0x75 || reg == 0x77 || reg == 0x79 || reg == 0x7b || reg == 0x7d; } @@ -3439,7 +3441,8 @@ nct6775_check_fan_inputs(struct nct6775_data *data) pwm5pin = false; pwm6pin = false; } else { /* NCT6779D, NCT6791D, NCT6792D, NCT6793D, or NCT6795D */ - int regval_1b, regval_2a, regval_eb; + int regval_1b, regval_2a, regval_2f, regval_eb; + bool dsw_en; regval = superio_inb(sioreg, 0x1c); @@ -3462,14 +3465,22 @@ nct6775_check_fan_inputs(struct nct6775_data *data) case nct6795: regval_1b = superio_inb(sioreg, 0x1b); regval_2a = superio_inb(sioreg, 0x2a); + regval_2f = superio_inb(sioreg, 0x2f); + dsw_en = regval_2f & BIT(3); if (!pwm5pin) pwm5pin = regval & BIT(7); - fan6pin = regval & BIT(1); - pwm6pin = regval & BIT(0); + if (!fan5pin) fan5pin = regval_1b & BIT(5); + fan6pin = false; + pwm6pin = false; + if (!dsw_en) { + fan6pin = regval & BIT(1); + pwm6pin = regval & BIT(0); + } + superio_select(sioreg, NCT6775_LD_12); regval_eb = superio_inb(sioreg, 0xeb); if (!fan5pin) @@ -3481,6 +3492,18 @@ nct6775_check_fan_inputs(struct nct6775_data *data) fan6pin = regval_eb & BIT(3); if (!pwm6pin) pwm6pin = regval_eb & BIT(2); + + if (data->kind == nct6795) { + int regval_ed = superio_inb(sioreg, 0xed); + + if (!fan6pin) + fan6pin = (regval_2a & BIT(4)) && + (!dsw_en || + (dsw_en && (regval_ed & BIT(4)))); + if (!pwm6pin) + pwm6pin = (regval_2a & BIT(3)) && + (regval_ed & BIT(2)); + } break; default: /* NCT6779D */ fan6pin = false; @@ -3495,7 +3518,7 @@ nct6775_check_fan_inputs(struct nct6775_data *data) data->has_fan = 0x03 | (fan3pin << 2) | (fan4pin << 3) | (fan5pin << 4) | (fan6pin << 5); data->has_fan_min = 0x03 | (fan3pin << 2) | (fan4min << 3) | - (fan5pin << 4); + (fan5pin << 4) | (fan6pin << 5); data->has_pwm = 0x03 | (pwm3pin << 2) | (pwm4pin << 3) | (pwm5pin << 4) | (pwm6pin << 5); }