mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
clk: rs9: Check for vendor/device ID
This is in preparation to support additional devices which have different IDs as well as a slightly different register layout. Signed-off-by: Alexander Stein <alexander.stein@ew.tq-group.com> Reviewed-by: Marek Vasut <marex@denx.de> Link: https://lore.kernel.org/r/20230310075535.3476580-1-alexander.stein@ew.tq-group.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
This commit is contained in:
parent
e724167028
commit
da751726ff
@ -45,6 +45,13 @@
|
||||
#define RS9_REG_DID 0x6
|
||||
#define RS9_REG_BCP 0x7
|
||||
|
||||
#define RS9_REG_VID_IDT 0x01
|
||||
|
||||
#define RS9_REG_DID_TYPE_FGV (0x0 << RS9_REG_DID_TYPE_SHIFT)
|
||||
#define RS9_REG_DID_TYPE_DBV (0x1 << RS9_REG_DID_TYPE_SHIFT)
|
||||
#define RS9_REG_DID_TYPE_DMV (0x2 << RS9_REG_DID_TYPE_SHIFT)
|
||||
#define RS9_REG_DID_TYPE_SHIFT 0x6
|
||||
|
||||
/* Supported Renesas 9-series models. */
|
||||
enum rs9_model {
|
||||
RENESAS_9FGV0241,
|
||||
@ -54,6 +61,7 @@ enum rs9_model {
|
||||
struct rs9_chip_info {
|
||||
const enum rs9_model model;
|
||||
unsigned int num_clks;
|
||||
u8 did;
|
||||
};
|
||||
|
||||
struct rs9_driver_data {
|
||||
@ -269,6 +277,7 @@ static int rs9_probe(struct i2c_client *client)
|
||||
{
|
||||
unsigned char name[5] = "DIF0";
|
||||
struct rs9_driver_data *rs9;
|
||||
unsigned int vid, did;
|
||||
struct clk_hw *hw;
|
||||
int i, ret;
|
||||
|
||||
@ -305,6 +314,20 @@ static int rs9_probe(struct i2c_client *client)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = regmap_read(rs9->regmap, RS9_REG_VID, &vid);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = regmap_read(rs9->regmap, RS9_REG_DID, &did);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (vid != RS9_REG_VID_IDT || did != rs9->chip_info->did)
|
||||
return dev_err_probe(&client->dev, -ENODEV,
|
||||
"Incorrect VID/DID: %#02x, %#02x. Expected %#02x, %#02x\n",
|
||||
vid, did, RS9_REG_VID_IDT,
|
||||
rs9->chip_info->did);
|
||||
|
||||
/* Register clock */
|
||||
for (i = 0; i < rs9->chip_info->num_clks; i++) {
|
||||
snprintf(name, 5, "DIF%d", i);
|
||||
@ -348,6 +371,7 @@ static int __maybe_unused rs9_resume(struct device *dev)
|
||||
static const struct rs9_chip_info renesas_9fgv0241_info = {
|
||||
.model = RENESAS_9FGV0241,
|
||||
.num_clks = 2,
|
||||
.did = RS9_REG_DID_TYPE_FGV | 0x02,
|
||||
};
|
||||
|
||||
static const struct i2c_device_id rs9_id[] = {
|
||||
|
Loading…
Reference in New Issue
Block a user