Commit a6f7c5d0 authored by Guenter Roeck's avatar Guenter Roeck
Browse files

hwmon: (pmbus/max16601) Add support for MAX16600



From programming perspective, MAX16600 is identical to MAX16601 and
MAX16602. Add support for it.

Cc: Steve Foreman <foremans@google.com>
Cc: Holly Barrett <holly.barrett@analog.com>
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent b11f3d47
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -13,6 +13,14 @@ Supported chips:

    Datasheet: Not published

  * Maxim MAX16600

    Prefix: 'max16600'

    Addresses scanned: -

    Datasheet: Not published

  * Maxim MAX16601

    Prefix: 'max16601'
@@ -36,7 +44,8 @@ Description
-----------

This driver supports the MAX16508 VR13 Dual-Output Voltage Regulator
as well as the MAX16601 VR13.HC Dual-Output Voltage Regulator chipsets.
as well as the MAX16600, MAX16601, and MAX16602 VR13.HC Dual-Output
Voltage Regulator chipsets.

The driver is a client driver to the core PMBus driver.
Please see Documentation/hwmon/pmbus.rst for details on PMBus client drivers.
+2 −2
Original line number Diff line number Diff line
@@ -237,10 +237,10 @@ config SENSORS_MAX16064
	  be called max16064.

config SENSORS_MAX16601
	tristate "Maxim MAX16508, MAX16601, MAX16602"
	tristate "Maxim MAX16508, MAX16600, MAX16601, and MAX16602"
	help
	  If you say yes here you get hardware monitoring support for Maxim
	  MAX16508, MAX16601 and MAX16602.
	  MAX16508, MAX16600, MAX16601, and MAX16602.

	  This driver can also be built as a module. If so, the module will
	  be called max16601.
+9 −5
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0
/*
 * Hardware monitoring driver for Maxim MAX16508, MAX16601 and MAX16602.
 * Hardware monitoring driver for Maxim MAX16508, MAX16600, MAX16601,
 * and MAX16602.
 *
 * Implementation notes:
 *
@@ -31,7 +32,7 @@

#include "pmbus.h"

enum chips { max16508, max16601, max16602 };
enum chips { max16508, max16600, max16601, max16602 };

#define REG_DEFAULT_NUM_POP	0xc4
#define REG_SETPT_DVID		0xd1
@@ -202,7 +203,7 @@ static int max16601_identify(struct i2c_client *client,
	else
		info->vrm_version[0] = vr12;

	if (data->id != max16601 && data->id != max16602)
	if (data->id != max16600 && data->id != max16601 && data->id != max16602)
		return 0;

	reg = i2c_smbus_read_byte_data(client, REG_DEFAULT_NUM_POP);
@@ -263,6 +264,7 @@ static void max16601_remove(void *_data)

static const struct i2c_device_id max16601_id[] = {
	{"max16508", max16508},
	{"max16600", max16600},
	{"max16601", max16601},
	{"max16602", max16602},
	{}
@@ -281,11 +283,13 @@ static int max16601_get_id(struct i2c_client *client)
		return -ENODEV;

	/*
	 * PMBUS_IC_DEVICE_ID is expected to return "MAX16601y.xx" or
	 * MAX16602y.xx or "MAX16500y.xx".cdxxcccccccccc
	 * PMBUS_IC_DEVICE_ID is expected to return MAX1660[012]y.xx" or
	 * "MAX16500y.xx".cdxxcccccccccc
	 */
	if (!strncmp(buf, "MAX16500", 8)) {
		id = max16508;
	} else if (!strncmp(buf, "MAX16600", 8)) {
		id = max16600;
	} else if (!strncmp(buf, "MAX16601", 8)) {
		id = max16601;
	} else if (!strncmp(buf, "MAX16602", 8)) {