Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Alexander Stein and committed by
Stephen Boyd
da751726 e7241670

+24
+24
drivers/clk/clk-renesas-pcie.c
··· 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, ··· 61 54 struct rs9_chip_info { 62 55 const enum rs9_model model; 63 56 unsigned int num_clks; 57 + u8 did; 64 58 }; 65 59 66 60 struct rs9_driver_data { ··· 277 269 { 278 270 unsigned char name[5] = "DIF0"; 279 271 struct rs9_driver_data *rs9; 272 + unsigned int vid, did; 280 273 struct clk_hw *hw; 281 274 int i, ret; 282 275 ··· 313 304 ret = regmap_write(rs9->regmap, RS9_REG_BCP, 1); 314 305 if (ret < 0) 315 306 return ret; 307 + 308 + ret = regmap_read(rs9->regmap, RS9_REG_VID, &vid); 309 + if (ret < 0) 310 + return ret; 311 + 312 + ret = regmap_read(rs9->regmap, RS9_REG_DID, &did); 313 + if (ret < 0) 314 + return ret; 315 + 316 + if (vid != RS9_REG_VID_IDT || did != rs9->chip_info->did) 317 + return dev_err_probe(&client->dev, -ENODEV, 318 + "Incorrect VID/DID: %#02x, %#02x. Expected %#02x, %#02x\n", 319 + vid, did, RS9_REG_VID_IDT, 320 + rs9->chip_info->did); 316 321 317 322 /* Register clock */ 318 323 for (i = 0; i < rs9->chip_info->num_clks; i++) { ··· 371 348 static const struct rs9_chip_info renesas_9fgv0241_info = { 372 349 .model = RENESAS_9FGV0241, 373 350 .num_clks = 2, 351 + .did = RS9_REG_DID_TYPE_FGV | 0x02, 374 352 }; 375 353 376 354 static const struct i2c_device_id rs9_id[] = {