hwmon: (mcp3021) Add MCP3221 support

This Patch adds support for mcp3221 chip to the
mcp3021 driver.

Signed-off-by: Sven Schuchmann <schuchmann@schleissheimer.de>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Sven Schuchmann 2012-09-21 13:04:22 +02:00 committed by Guenter Roeck
parent 8b662f38e0
commit 592758b12f
3 changed files with 37 additions and 14 deletions

View File

@ -5,18 +5,25 @@ Supported chips:
* Microchip Technology MCP3021 * Microchip Technology MCP3021
Prefix: 'mcp3021' Prefix: 'mcp3021'
Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/21805a.pdf Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/21805a.pdf
* Microchip Technology MCP3221
Prefix: 'mcp3221'
Datasheet: http://ww1.microchip.com/downloads/en/DeviceDoc/21732c.pdf
Author: Mingkai Hu Authors:
Mingkai Hu
Sven Schuchmann <schuchmann@schleissheimer.de>
Description Description
----------- -----------
This driver implements support for the Microchip Technology MCP3021 chip. This driver implements support for the Microchip Technology MCP3021 and
MCP3221 chip.
The Microchip Technology Inc. MCP3021 is a successive approximation A/D The Microchip Technology Inc. MCP3021 is a successive approximation A/D
converter (ADC) with 10-bit resolution. converter (ADC) with 10-bit resolution. The MCP3221 has 12-bit resolution.
This device provides one single-ended input with very low power consumption.
Communication to the MCP3021 is performed using a 2-wire I2C compatible These devices provide one single-ended input with very low power consumption.
interface. Standard (100 kHz) and Fast (400 kHz) I2C modes are available. Communication to the MCP3021/MCP3221 is performed using a 2-wire I2C
The default I2C device address is 0x4d (contact the Microchip factory for compatible interface. Standard (100 kHz) and Fast (400 kHz) I2C modes are
additional address options). available. The default I2C device address is 0x4d (contact the Microchip
factory for additional address options).

View File

@ -855,11 +855,12 @@ config SENSORS_MAX6650
will be called max6650. will be called max6650.
config SENSORS_MCP3021 config SENSORS_MCP3021
tristate "Microchip MCP3021" tristate "Microchip MCP3021 and compatibles"
depends on I2C depends on I2C
help help
If you say yes here you get support for the MCP3021 chip If you say yes here you get support for MCP3021 and MCP3221.
that is a A/D converter (ADC) with 10-bit resolution. The MCP3021 is a A/D converter (ADC) with 10-bit and the MCP3221
with 12-bit resolution.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called mcp3021. will be called mcp3021.

View File

@ -1,5 +1,5 @@
/* /*
* mcp3021.c - driver for the Microchip MCP3021 chip * mcp3021.c - driver for Microchip MCP3021 and MCP3221
* *
* Copyright (C) 2008-2009, 2012 Freescale Semiconductor, Inc. * Copyright (C) 2008-2009, 2012 Freescale Semiconductor, Inc.
* Author: Mingkai Hu <Mingkai.hu@freescale.com> * Author: Mingkai Hu <Mingkai.hu@freescale.com>
@ -35,9 +35,16 @@
#define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */ #define MCP3021_OUTPUT_RES 10 /* 10-bit resolution */
#define MCP3021_OUTPUT_SCALE 4 #define MCP3021_OUTPUT_SCALE 4
#define MCP3221_SAR_SHIFT 0
#define MCP3221_SAR_MASK 0xfff
#define MCP3221_OUTPUT_RES 12 /* 12-bit resolution */
#define MCP3221_OUTPUT_SCALE 1
enum chips { enum chips {
mcp3021 mcp3021,
mcp3221
}; };
/* /*
* Client data (each client gets its own) * Client data (each client gets its own)
*/ */
@ -127,6 +134,13 @@ static int mcp3021_probe(struct i2c_client *client,
data->output_res = MCP3021_OUTPUT_RES; data->output_res = MCP3021_OUTPUT_RES;
data->output_scale = MCP3021_OUTPUT_SCALE; data->output_scale = MCP3021_OUTPUT_SCALE;
break; break;
case mcp3221:
data->sar_shift = MCP3221_SAR_SHIFT;
data->sar_mask = MCP3221_SAR_MASK;
data->output_res = MCP3221_OUTPUT_RES;
data->output_scale = MCP3221_OUTPUT_SCALE;
break;
} }
if (client->dev.platform_data) { if (client->dev.platform_data) {
@ -165,6 +179,7 @@ static int mcp3021_remove(struct i2c_client *client)
static const struct i2c_device_id mcp3021_id[] = { static const struct i2c_device_id mcp3021_id[] = {
{ "mcp3021", mcp3021 }, { "mcp3021", mcp3021 },
{ "mcp3221", mcp3221 },
{ } { }
}; };
MODULE_DEVICE_TABLE(i2c, mcp3021_id); MODULE_DEVICE_TABLE(i2c, mcp3021_id);
@ -181,5 +196,5 @@ static struct i2c_driver mcp3021_driver = {
module_i2c_driver(mcp3021_driver); module_i2c_driver(mcp3021_driver);
MODULE_AUTHOR("Mingkai Hu <Mingkai.hu@freescale.com>"); MODULE_AUTHOR("Mingkai Hu <Mingkai.hu@freescale.com>");
MODULE_DESCRIPTION("Microchip MCP3021 driver"); MODULE_DESCRIPTION("Microchip MCP3021/MCP3221 driver");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");