Re: [PATCH 1/2] hwmon: (pmbus/max16601) Determine and use number of populated phases

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Nit: Would it be better to specify what P and N mean upfront in the doc?

- Alex Qiu

On Mon, Jan 25, 2021 at 10:53 AM Guenter Roeck <linux@xxxxxxxxxxxx> wrote:
>
> The MAX16601 can report the number of populated phases. Use this
> information to only create sysfs attributes for populated phases.
>
> Cc: Alex Qiu <xqiu@xxxxxxxxxx>
> Cc: Ugur Usug <Ugur.Usug@xxxxxxxxxxxxxxxxxxx>
> Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx>
Reviewed-by: Alex Qiu <xqiu@xxxxxxxxxx>
> ---
>  Documentation/hwmon/max16601.rst | 98 ++++++++++----------------------
>  drivers/hwmon/pmbus/max16601.c   | 17 +++++-
>  2 files changed, 45 insertions(+), 70 deletions(-)
>
> diff --git a/Documentation/hwmon/max16601.rst b/Documentation/hwmon/max16601.rst
> index 346e74674c51..93d25dfa028e 100644
> --- a/Documentation/hwmon/max16601.rst
> +++ b/Documentation/hwmon/max16601.rst
> @@ -60,75 +60,35 @@ curr1_input         VCORE input current, derived from duty cycle and output
>  curr1_max              Maximum input current.
>  curr1_max_alarm                Current high alarm.
>
> -curr2_label            "iin1.0"
> -curr2_input            VCORE phase 0 input current.
> -
> -curr3_label            "iin1.1"
> -curr3_input            VCORE phase 1 input current.
> -
> -curr4_label            "iin1.2"
> -curr4_input            VCORE phase 2 input current.
> -
> -curr5_label            "iin1.3"
> -curr5_input            VCORE phase 3 input current.
> -
> -curr6_label            "iin1.4"
> -curr6_input            VCORE phase 4 input current.
> -
> -curr7_label            "iin1.5"
> -curr7_input            VCORE phase 5 input current.
> -
> -curr8_label            "iin1.6"
> -curr8_input            VCORE phase 6 input current.
> -
> -curr9_label            "iin1.7"
> -curr9_input            VCORE phase 7 input current.
> -
> -curr10_label           "iin2"
> -curr10_input           VCORE input current, derived from sensor element.
> -
> -curr11_label           "iin3"
> -curr11_input           VSA input current.
> -
> -curr12_label           "iout1"
> -curr12_input           VCORE output current.
> -curr12_crit            Critical output current.
> -curr12_crit_alarm      Output current critical alarm.
> -curr12_max             Maximum output current.
> -curr12_max_alarm       Output current high alarm.
> -
> -curr13_label           "iout1.0"
> -curr13_input           VCORE phase 0 output current.
> -
> -curr14_label           "iout1.1"
> -curr14_input           VCORE phase 1 output current.
> -
> -curr15_label           "iout1.2"
> -curr15_input           VCORE phase 2 output current.
> -
> -curr16_label           "iout1.3"
> -curr16_input           VCORE phase 3 output current.
> -
> -curr17_label           "iout1.4"
> -curr17_input           VCORE phase 4 output current.
> -
> -curr18_label           "iout1.5"
> -curr18_input           VCORE phase 5 output current.
> -
> -curr19_label           "iout1.6"
> -curr19_input           VCORE phase 6 output current.
> -
> -curr20_label           "iout1.7"
> -curr20_input           VCORE phase 7 output current.
> -
> -curr21_label           "iout3"
> -curr21_input           VSA output current.
> -curr21_highest         Historical maximum VSA output current.
> -curr21_reset_history   Write any value to reset curr21_highest.
> -curr21_crit            Critical output current.
> -curr21_crit_alarm      Output current critical alarm.
> -curr21_max             Maximum output current.
> -curr21_max_alarm       Output current high alarm.
> +curr[P+2]_label                "iin1.P"
> +curr[P+2]_input                VCORE phase P input current.
> +
> +curr[N+2]_label                "iin2"
> +curr[N+2]_input                VCORE input current, derived from sensor element.
> +                       'N' is the number of enabled/populated phases.
> +
> +curr[N+3]_label                "iin3"
> +curr[N+3]_input                VSA input current.
> +
> +curr[N+4]_label                "iout1"
> +curr[N+4]_input                VCORE output current.
> +curr[N+4]_crit         Critical output current.
> +curr[N+4]_crit_alarm   Output current critical alarm.
> +curr[N+4]_max          Maximum output current.
> +curr[N+4]_max_alarm    Output current high alarm.
> +
> +curr[N+P+5]_label      "iout1.P"
> +curr[N+P+5]_input      VCORE phase P output current.
> +
> +curr[2*N+5]_label      "iout3"
> +curr[2*N+5]_input      VSA output current.
> +curr[2*N+5]_highest    Historical maximum VSA output current.
> +curr[2*N+5]_reset_history
> +                       Write any value to reset curr21_highest.
> +curr[2*N+5]_crit       Critical output current.
> +curr[2*N+5]_crit_alarm Output current critical alarm.
> +curr[2*N+5]_max                Maximum output current.
> +curr[2*N+5]_max_alarm  Output current high alarm.
>
>  power1_label           "pin1"
>  power1_input           Input power, derived from duty cycle and output current.
> diff --git a/drivers/hwmon/pmbus/max16601.c b/drivers/hwmon/pmbus/max16601.c
> index a960b86e72d2..efe6da3bc8d0 100644
> --- a/drivers/hwmon/pmbus/max16601.c
> +++ b/drivers/hwmon/pmbus/max16601.c
> @@ -31,6 +31,7 @@
>
>  #include "pmbus.h"
>
> +#define REG_DEFAULT_NUM_POP    0xc4
>  #define REG_SETPT_DVID         0xd1
>  #define  DAC_10MV_MODE         BIT(4)
>  #define REG_IOUT_AVG_PK                0xee
> @@ -40,6 +41,8 @@
>  #define  CORE_RAIL_INDICATOR   BIT(7)
>  #define REG_PHASE_REPORTING    0xf4
>
> +#define MAX16601_NUM_PHASES    8
> +
>  struct max16601_data {
>         struct pmbus_driver_info info;
>         struct i2c_client *vsa;
> @@ -195,6 +198,18 @@ static int max16601_identify(struct i2c_client *client,
>         else
>                 info->vrm_version[0] = vr12;
>
> +       reg = i2c_smbus_read_byte_data(client, REG_DEFAULT_NUM_POP);
> +       if (reg < 0)
> +               return reg;
> +
> +       /*
> +        * If REG_DEFAULT_NUM_POP returns 0, we don't know how many phases
> +        * are populated. Stick with the default in that case.
> +        */
> +       reg &= 0x0f;
> +       if (reg && reg <= MAX16601_NUM_PHASES)
> +               info->phases[0] = reg;
> +
>         return 0;
>  }
>
> @@ -216,7 +231,7 @@ static struct pmbus_driver_info max16601_info = {
>         .func[2] = PMBUS_HAVE_IIN | PMBUS_HAVE_STATUS_INPUT |
>                 PMBUS_HAVE_IOUT | PMBUS_HAVE_STATUS_IOUT |
>                 PMBUS_HAVE_TEMP | PMBUS_HAVE_STATUS_TEMP | PMBUS_PAGE_VIRTUAL,
> -       .phases[0] = 8,
> +       .phases[0] = MAX16601_NUM_PHASES,
>         .pfunc[0] = PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_TEMP,
>         .pfunc[1] = PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT,
>         .pfunc[2] = PMBUS_HAVE_IIN | PMBUS_HAVE_IOUT | PMBUS_HAVE_TEMP,
> --
> 2.17.1
>



[Index of Archives]     [LM Sensors]     [Linux Sound]     [ALSA Users]     [ALSA Devel]     [Linux Audio Users]     [Linux Media]     [Kernel]     [Gimp]     [Yosemite News]     [Linux Media]

  Powered by Linux