Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10f2ed31 authored by Matthew Garrett's avatar Matthew Garrett Committed by Jean Delvare
Browse files

hwmon: (lm63) Add basic support for LM64



The LM64 appears to be an LM63 with added GPIO lines. Add support for the
hwmon functionality - GPIO can be added at some later stage if someone
has a need for them.

Signed-off-by: default avatarMatthew Garrett <mjg@redhat.com>
Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
parent 70dd6bea
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -7,6 +7,11 @@ Supported chips:
    Addresses scanned: I2C 0x4c
    Datasheet: Publicly available at the National Semiconductor website
               http://www.national.com/pf/LM/LM63.html
  * National Semiconductor LM64
    Prefix: 'lm64'
    Addresses scanned: I2C 0x18 and 0x4e
    Datasheet: Publicly available at the National Semiconductor website
               http://www.national.com/pf/LM/LM64.html

Author: Jean Delvare <khali@linux-fr.org>

@@ -55,3 +60,5 @@ The lm63 driver will not update its values more frequently than every
second; reading them more often will do no harm, but will return 'old'
values.

The LM64 is effectively an LM63 with GPIO lines. The driver does not
support these GPIO lines at present.
+6 −5
Original line number Diff line number Diff line
@@ -447,13 +447,14 @@ config SENSORS_IT87
	  will be called it87.

config SENSORS_LM63
	tristate "National Semiconductor LM63"
	tristate "National Semiconductor LM63 and LM64"
	depends on I2C
	help
	  If you say yes here you get support for the National Semiconductor
	  LM63 remote diode digital temperature sensor with integrated fan
	  control.  Such chips are found on the Tyan S4882 (Thunder K8QS Pro)
	  motherboard, among others.
	  If you say yes here you get support for the National
	  Semiconductor LM63 and LM64 remote diode digital temperature
	  sensors with integrated fan control.  Such chips are found
	  on the Tyan S4882 (Thunder K8QS Pro) motherboard, among
	  others.

	  This driver can also be built as a module.  If so, the module
	  will be called lm63.
+12 −4
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@
 * Address is fully defined internally and cannot be changed.
 */

static const unsigned short normal_i2c[] = { 0x4c, I2C_CLIENT_END };
static const unsigned short normal_i2c[] = { 0x18, 0x4c, 0x4e, I2C_CLIENT_END };

/*
 * The LM63 registers
@@ -131,12 +131,15 @@ static struct lm63_data *lm63_update_device(struct device *dev);
static int lm63_detect(struct i2c_client *client, struct i2c_board_info *info);
static void lm63_init_client(struct i2c_client *client);

enum chips { lm63, lm64 };

/*
 * Driver data (common to all clients)
 */

static const struct i2c_device_id lm63_id[] = {
	{ "lm63", 0 },
	{ "lm63", lm63 },
	{ "lm64", lm64 },
	{ }
};
MODULE_DEVICE_TABLE(i2c, lm63_id);
@@ -422,6 +425,7 @@ static int lm63_detect(struct i2c_client *new_client,
	struct i2c_adapter *adapter = new_client->adapter;
	u8 man_id, chip_id, reg_config1, reg_config2;
	u8 reg_alert_status, reg_alert_mask;
	int address = new_client->addr;

	if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
		return -ENODEV;
@@ -439,7 +443,6 @@ static int lm63_detect(struct i2c_client *new_client,
			 LM63_REG_ALERT_MASK);

	if (man_id != 0x01 /* National Semiconductor */
	 || chip_id != 0x41 /* LM63 */
	 || (reg_config1 & 0x18) != 0x00
	 || (reg_config2 & 0xF8) != 0x00
	 || (reg_alert_status & 0x20) != 0x00
@@ -450,7 +453,12 @@ static int lm63_detect(struct i2c_client *new_client,
		return -ENODEV;
	}

	if (chip_id == 0x41 && address == 0x4c)
		strlcpy(info->type, "lm63", I2C_NAME_SIZE);
	else if (chip_id == 0x51 && (address == 0x18 || address == 0x4e))
		strlcpy(info->type, "lm64", I2C_NAME_SIZE);
	else
		return -ENODEV;

	return 0;
}