From: Peter Rosin <peda@axentia.se>
To: Wolfram Sang <wsa@the-dreams.de>
Cc: Adrian Fiergolski <adrian.fiergolski@cern.ch>,
linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/2] i2c: add i2c_get_device_id() to get the standard i2c device id
Date: Sun, 4 Mar 2018 22:47:59 +0100 [thread overview]
Message-ID: <29c55bcc-8d14-dcff-d407-33cfb402af8a@axentia.se> (raw)
In-Reply-To: <20180122113657.32094-2-peda@axentia.se>
Hi Wolfram,
Did you have an opinion on this patch?
In case you like it, do you which to take it (don't forget to add a
Tested-by-tag from Adrian in that case), or should I take it and you
then get it in a pull request?
Cheers,
Peter
On 2018-01-22 12:36, Peter Rosin wrote:
> Can be used during probe to double check that the probed device is
> what is expected.
>
> Loosely based on code from Adrian Fiergolski <adrian.fiergolski@cern.ch>.
>
> Signed-off-by: Peter Rosin <peda@axentia.se>
> ---
> drivers/i2c/i2c-core-base.c | 33 +++++++++++++++++++++++++++++++++
> include/linux/i2c.h | 30 ++++++++++++++++++++++++++++++
> 2 files changed, 63 insertions(+)
>
> diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
> index 5a00bf443d06..f496b917529d 100644
> --- a/drivers/i2c/i2c-core-base.c
> +++ b/drivers/i2c/i2c-core-base.c
> @@ -58,6 +58,8 @@
> #define I2C_ADDR_7BITS_MAX 0x77
> #define I2C_ADDR_7BITS_COUNT (I2C_ADDR_7BITS_MAX + 1)
>
> +#define I2C_ADDR_DEVICE_ID 0x7c
> +
> /*
> * core_lock protects i2c_adapter_idr, and guarantees that device detection,
> * deletion of detected devices, and attach_adapter calls are serialized
> @@ -1968,6 +1970,37 @@ int i2c_transfer_buffer_flags(const struct i2c_client *client, char *buf,
> }
> EXPORT_SYMBOL(i2c_transfer_buffer_flags);
>
> +/**
> + * i2c_get_device_id - get manufacturer, part id and die revision of a device
> + * @client: The device to query
> + * @id: The queried information
> + *
> + * Returns negative errno on error, zero on success.
> + */
> +int i2c_get_device_id(const struct i2c_client *client,
> + struct i2c_device_identity *id)
> +{
> + struct i2c_adapter *adap = client->adapter;
> + union i2c_smbus_data raw_id;
> + int ret;
> +
> + if (!i2c_check_functionality(adap, I2C_FUNC_SMBUS_READ_I2C_BLOCK))
> + return -EOPNOTSUPP;
> +
> + raw_id.block[0] = 3;
> + ret = i2c_smbus_xfer(adap, I2C_ADDR_DEVICE_ID, client->flags,
> + I2C_SMBUS_READ, client->addr << 1,
> + I2C_SMBUS_I2C_BLOCK_DATA, &raw_id);
> + if (ret)
> + return ret;
> +
> + id->manufacturer_id = (raw_id.block[1] << 4) | (raw_id.block[2] >> 4);
> + id->part_id = ((raw_id.block[2] & 0xf) << 5) | (raw_id.block[3] >> 3);
> + id->die_revision = raw_id.block[3] & 0x7;
> + return 0;
> +}
> +EXPORT_SYMBOL_GPL(i2c_get_device_id);
> +
> /* ----------------------------------------------------
> * the i2c address scanning function
> * Will not work for 10-bit addresses!
> diff --git a/include/linux/i2c.h b/include/linux/i2c.h
> index 419a38e7c315..44ad14e016b5 100644
> --- a/include/linux/i2c.h
> +++ b/include/linux/i2c.h
> @@ -47,6 +47,7 @@ struct i2c_algorithm;
> struct i2c_adapter;
> struct i2c_client;
> struct i2c_driver;
> +struct i2c_device_identity;
> union i2c_smbus_data;
> struct i2c_board_info;
> enum i2c_slave_event;
> @@ -186,8 +187,37 @@ extern s32 i2c_smbus_write_i2c_block_data(const struct i2c_client *client,
> extern s32
> i2c_smbus_read_i2c_block_data_or_emulated(const struct i2c_client *client,
> u8 command, u8 length, u8 *values);
> +int i2c_get_device_id(const struct i2c_client *client,
> + struct i2c_device_identity *id);
> #endif /* I2C */
>
> +/**
> + * struct i2c_device_identity - i2c client device identification
> + * @manufacturer_id: 0 - 4095, database maintained by NXP
> + * @part_id: 0 - 511, according to manufacturer
> + * @die_revision: 0 - 7, according to manufacturer
> + */
> +struct i2c_device_identity {
> + u16 manufacturer_id;
> +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS 0
> +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS_1 1
> +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS_2 2
> +#define I2C_DEVICE_ID_NXP_SEMICONDUCTORS_3 3
> +#define I2C_DEVICE_ID_RAMTRON_INTERNATIONAL 4
> +#define I2C_DEVICE_ID_ANALOG_DEVICES 5
> +#define I2C_DEVICE_ID_STMICROELECTRONICS 6
> +#define I2C_DEVICE_ID_ON_SEMICONDUCTOR 7
> +#define I2C_DEVICE_ID_SPRINTEK_CORPORATION 8
> +#define I2C_DEVICE_ID_ESPROS_PHOTONICS_AG 9
> +#define I2C_DEVICE_ID_FUJITSU_SEMICONDUCTOR 10
> +#define I2C_DEVICE_ID_FLIR 11
> +#define I2C_DEVICE_ID_O2MICRO 12
> +#define I2C_DEVICE_ID_ATMEL 13
> +#define I2C_DEVICE_ID_NONE 0xffff
> + u16 part_id;
> + u8 die_revision;
> +};
> +
> enum i2c_alert_protocol {
> I2C_PROTOCOL_SMBUS_ALERT,
> I2C_PROTOCOL_SMBUS_HOST_NOTIFY,
>
next prev parent reply other threads:[~2018-03-04 21:48 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-22 11:36 [RFC PATCH 0/2] check I2C device id for pca984x chips Peter Rosin
2018-01-22 11:36 ` [RFC PATCH 1/2] i2c: add i2c_get_device_id() to get the standard i2c device id Peter Rosin
2018-03-04 21:47 ` Peter Rosin [this message]
2018-03-05 15:51 ` Wolfram Sang
2018-03-05 16:06 ` Peter Rosin
2018-03-05 16:27 ` Wolfram Sang
2018-01-22 11:36 ` [RFC PATCH 2/2] i2c: mux: pca954x: verify the device id of the pca984x chips Peter Rosin
2018-03-05 15:53 ` Wolfram Sang
2018-03-05 15:55 ` Peter Rosin
2018-03-05 16:29 ` Wolfram Sang
2018-01-26 16:33 ` [RFC PATCH 0/2] check I2C device id for " Adrian Fiergolski
2018-01-27 8:37 ` Peter Rosin
2018-01-29 17:38 ` Adrian Fiergolski
2018-02-01 14:41 ` Peter Rosin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=29c55bcc-8d14-dcff-d407-33cfb402af8a@axentia.se \
--to=peda@axentia.se \
--cc=adrian.fiergolski@cern.ch \
--cc=linux-i2c@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=wsa@the-dreams.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®