45
45
#define RS9_REG_DID 0x6
46
46
#define RS9_REG_BCP 0x7
47
47
48
+ #define RS9_REG_VID_IDT 0x01
49
+
50
+ #define RS9_REG_DID_TYPE_FGV (0x0 << RS9_REG_DID_TYPE_SHIFT)
51
+ #define RS9_REG_DID_TYPE_DBV (0x1 << RS9_REG_DID_TYPE_SHIFT)
52
+ #define RS9_REG_DID_TYPE_DMV (0x2 << RS9_REG_DID_TYPE_SHIFT)
53
+ #define RS9_REG_DID_TYPE_SHIFT 0x6
54
+
48
55
/* Supported Renesas 9-series models. */
49
56
enum rs9_model {
50
57
RENESAS_9FGV0241 ,
@@ -54,6 +61,7 @@ enum rs9_model {
54
61
struct rs9_chip_info {
55
62
const enum rs9_model model ;
56
63
unsigned int num_clks ;
64
+ u8 did ;
57
65
};
58
66
59
67
struct rs9_driver_data {
@@ -269,6 +277,7 @@ static int rs9_probe(struct i2c_client *client)
269
277
{
270
278
unsigned char name [5 ] = "DIF0" ;
271
279
struct rs9_driver_data * rs9 ;
280
+ unsigned int vid , did ;
272
281
struct clk_hw * hw ;
273
282
int i , ret ;
274
283
@@ -305,6 +314,20 @@ static int rs9_probe(struct i2c_client *client)
305
314
if (ret < 0 )
306
315
return ret ;
307
316
317
+ ret = regmap_read (rs9 -> regmap , RS9_REG_VID , & vid );
318
+ if (ret < 0 )
319
+ return ret ;
320
+
321
+ ret = regmap_read (rs9 -> regmap , RS9_REG_DID , & did );
322
+ if (ret < 0 )
323
+ return ret ;
324
+
325
+ if (vid != RS9_REG_VID_IDT || did != rs9 -> chip_info -> did )
326
+ return dev_err_probe (& client -> dev , - ENODEV ,
327
+ "Incorrect VID/DID: %#02x, %#02x. Expected %#02x, %#02x\n" ,
328
+ vid , did , RS9_REG_VID_IDT ,
329
+ rs9 -> chip_info -> did );
330
+
308
331
/* Register clock */
309
332
for (i = 0 ; i < rs9 -> chip_info -> num_clks ; i ++ ) {
310
333
snprintf (name , 5 , "DIF%d" , i );
@@ -348,6 +371,7 @@ static int __maybe_unused rs9_resume(struct device *dev)
348
371
static const struct rs9_chip_info renesas_9fgv0241_info = {
349
372
.model = RENESAS_9FGV0241 ,
350
373
.num_clks = 2 ,
374
+ .did = RS9_REG_DID_TYPE_FGV | 0x02 ,
351
375
};
352
376
353
377
static const struct i2c_device_id rs9_id [] = {
0 commit comments