+ /* read Chip variant */
+ msb = i2c_smbus_read_byte_data(client, RK808_ID_MSB);
+ if (msb < 0) {
+ dev_err(&client->dev, "failed to read the chip id at 0x%x\n",
+ RK808_ID_MSB);
+ return msb;
+ }
+
+ lsb = i2c_smbus_read_byte_data(client, RK808_ID_LSB);
+ if (lsb < 0) {
+ dev_err(&client->dev, "failed to read the chip id at 0x%x\n",
+ RK808_ID_LSB);
+ return lsb;
+ }
+
+ rk808->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
+ dev_info(&client->dev, "Pmic Chip id: 0x%lx\n", rk808->variant);
+
+ /* set Chip platform init data*/
+ switch (rk808->variant) {
+ case RK818_ID:
+ cell = rk818s;
+ cell_num = ARRAY_SIZE(rk818s);
+ pre_init_reg = rk818_pre_init_reg;
+ reg_num = ARRAY_SIZE(rk818_pre_init_reg);
+ regmap_config = &rk818_regmap_config;
+ irq_chip = &rk818_irq_chip;
+ pm_shutdown_fn = rk818_shutdown;
+ on_source = RK818_ON_SOURCE_REG;
+ off_source = RK818_OFF_SOURCE_REG;
+ break;
+ case RK808_ID:
+ cell = rk808s;
+ cell_num = ARRAY_SIZE(rk808s);
+ pre_init_reg = rk808_pre_init_reg;
+ reg_num = ARRAY_SIZE(rk808_pre_init_reg);
+ regmap_config = &rk808_regmap_config;
+ irq_chip = &rk808_irq_chip;
+ pm_shutdown_fn = rk808_shutdown;
+ break;
+ case RK805_ID:
+ cell = rk805s;
+ cell_num = ARRAY_SIZE(rk805s);
+ pre_init_reg = rk805_pre_init_reg;
+ reg_num = ARRAY_SIZE(rk805_pre_init_reg);
+ regmap_config = &rk805_regmap_config;
+ irq_chip = &rk805_irq_chip;
+ pm_shutdown_prepare_fn = rk805_shutdown_prepare;
+ on_source = RK805_ON_SOURCE_REG;
+ off_source = RK805_OFF_SOURCE_REG;
+ break;
+ default:
+ dev_err(&client->dev, "unsupported RK8XX ID 0x%lx\n",
+ rk808->variant);
+ return -EINVAL;
+ }
+
+ rk808->regmap = devm_regmap_init_i2c(client, regmap_config);