return 0;
 }
 
+static void get_scl_sda_value(uint8_t line, uint8_t *scl, uint8_t* sda)
+{
+       switch(line){
+       case Vega10_I2CLineID_DDC1:
+               *scl = Vega10_I2C_DDC1CLK;
+               *sda = Vega10_I2C_DDC1DATA;
+               break;
+       case Vega10_I2CLineID_DDC2:
+               *scl = Vega10_I2C_DDC2CLK;
+               *sda = Vega10_I2C_DDC2DATA;
+               break;
+       case Vega10_I2CLineID_DDC3:
+               *scl = Vega10_I2C_DDC3CLK;
+               *sda = Vega10_I2C_DDC3DATA;
+               break;
+       case Vega10_I2CLineID_DDC4:
+               *scl = Vega10_I2C_DDC4CLK;
+               *sda = Vega10_I2C_DDC4DATA;
+               break;
+       case Vega10_I2CLineID_DDC5:
+               *scl = Vega10_I2C_DDC5CLK;
+               *sda = Vega10_I2C_DDC5DATA;
+               break;
+       case Vega10_I2CLineID_DDC6:
+               *scl = Vega10_I2C_DDC6CLK;
+               *sda = Vega10_I2C_DDC6DATA;
+               break;
+       case Vega10_I2CLineID_SCLSDA:
+               *scl = Vega10_I2C_SCL;
+               *sda = Vega10_I2C_SDA;
+               break;
+       case Vega10_I2CLineID_DDCVGA:
+               *scl = Vega10_I2C_DDCVGACLK;
+               *sda = Vega10_I2C_DDCVGADATA;
+               break;
+       default:
+               *scl = 0;
+               *sda = 0;
+               break;
+       }
+}
+
 static int get_tdp_table(
                struct pp_hwmgr *hwmgr,
                struct phm_tdp_table **info_tdp_table,
 {
        uint32_t table_size;
        struct phm_tdp_table *tdp_table;
-
-       const ATOM_Vega10_PowerTune_Table *power_tune_table =
-                       (ATOM_Vega10_PowerTune_Table *)table;
-
-       table_size = sizeof(uint32_t) + sizeof(struct phm_cac_tdp_table);
-       hwmgr->dyn_state.cac_dtp_table = (struct phm_cac_tdp_table *)
-                       kzalloc(table_size, GFP_KERNEL);
-
-       if (!hwmgr->dyn_state.cac_dtp_table)
-               return -ENOMEM;
+       uint8_t scl;
+       uint8_t sda;
+       const ATOM_Vega10_PowerTune_Table *power_tune_table;
+       const ATOM_Vega10_PowerTune_Table_V2 *power_tune_table_v2;
 
        table_size = sizeof(uint32_t) + sizeof(struct phm_tdp_table);
+
        tdp_table = kzalloc(table_size, GFP_KERNEL);
 
-       if (!tdp_table) {
-               kfree(hwmgr->dyn_state.cac_dtp_table);
-               hwmgr->dyn_state.cac_dtp_table = NULL;
+       if (!tdp_table)
                return -ENOMEM;
-       }
 
-       tdp_table->usMaximumPowerDeliveryLimit = le16_to_cpu(power_tune_table->usSocketPowerLimit);
-       tdp_table->usTDC = le16_to_cpu(power_tune_table->usTdcLimit);
-       tdp_table->usEDCLimit = le16_to_cpu(power_tune_table->usEdcLimit);
-       tdp_table->usSoftwareShutdownTemp =
-                       le16_to_cpu(power_tune_table->usSoftwareShutdownTemp);
-       tdp_table->usTemperatureLimitTedge =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitTedge);
-       tdp_table->usTemperatureLimitHotspot =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitHotSpot);
-       tdp_table->usTemperatureLimitLiquid1 =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitLiquid1);
-       tdp_table->usTemperatureLimitLiquid2 =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitLiquid2);
-       tdp_table->usTemperatureLimitHBM =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitHBM);
-       tdp_table->usTemperatureLimitVrVddc =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitVrSoc);
-       tdp_table->usTemperatureLimitVrMvdd =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitVrMem);
-       tdp_table->usTemperatureLimitPlx =
-                       le16_to_cpu(power_tune_table->usTemperatureLimitPlx);
-       tdp_table->ucLiquid1_I2C_address = power_tune_table->ucLiquid1_I2C_address;
-       tdp_table->ucLiquid2_I2C_address = power_tune_table->ucLiquid2_I2C_address;
-       tdp_table->ucLiquid_I2C_Line = power_tune_table->ucLiquid_I2C_LineSCL;
-       tdp_table->ucLiquid_I2C_LineSDA = power_tune_table->ucLiquid_I2C_LineSDA;
-       tdp_table->ucVr_I2C_address = power_tune_table->ucVr_I2C_address;
-       tdp_table->ucVr_I2C_Line = power_tune_table->ucVr_I2C_LineSCL;
-       tdp_table->ucVr_I2C_LineSDA = power_tune_table->ucVr_I2C_LineSDA;
-       tdp_table->ucPlx_I2C_address = power_tune_table->ucPlx_I2C_address;
-       tdp_table->ucPlx_I2C_Line = power_tune_table->ucPlx_I2C_LineSCL;
-       tdp_table->ucPlx_I2C_LineSDA = power_tune_table->ucPlx_I2C_LineSDA;
-
-       hwmgr->platform_descriptor.LoadLineSlope = power_tune_table->usLoadLineResistance;
+       if (table->ucRevId == 5) {
+               power_tune_table = (ATOM_Vega10_PowerTune_Table *)table;
+               tdp_table->usMaximumPowerDeliveryLimit = le16_to_cpu(power_tune_table->usSocketPowerLimit);
+               tdp_table->usTDC = le16_to_cpu(power_tune_table->usTdcLimit);
+               tdp_table->usEDCLimit = le16_to_cpu(power_tune_table->usEdcLimit);
+               tdp_table->usSoftwareShutdownTemp =
+                               le16_to_cpu(power_tune_table->usSoftwareShutdownTemp);
+               tdp_table->usTemperatureLimitTedge =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitTedge);
+               tdp_table->usTemperatureLimitHotspot =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitHotSpot);
+               tdp_table->usTemperatureLimitLiquid1 =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitLiquid1);
+               tdp_table->usTemperatureLimitLiquid2 =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitLiquid2);
+               tdp_table->usTemperatureLimitHBM =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitHBM);
+               tdp_table->usTemperatureLimitVrVddc =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitVrSoc);
+               tdp_table->usTemperatureLimitVrMvdd =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitVrMem);
+               tdp_table->usTemperatureLimitPlx =
+                               le16_to_cpu(power_tune_table->usTemperatureLimitPlx);
+               tdp_table->ucLiquid1_I2C_address = power_tune_table->ucLiquid1_I2C_address;
+               tdp_table->ucLiquid2_I2C_address = power_tune_table->ucLiquid2_I2C_address;
+               tdp_table->ucLiquid_I2C_Line = power_tune_table->ucLiquid_I2C_LineSCL;
+               tdp_table->ucLiquid_I2C_LineSDA = power_tune_table->ucLiquid_I2C_LineSDA;
+               tdp_table->ucVr_I2C_address = power_tune_table->ucVr_I2C_address;
+               tdp_table->ucVr_I2C_Line = power_tune_table->ucVr_I2C_LineSCL;
+               tdp_table->ucVr_I2C_LineSDA = power_tune_table->ucVr_I2C_LineSDA;
+               tdp_table->ucPlx_I2C_address = power_tune_table->ucPlx_I2C_address;
+               tdp_table->ucPlx_I2C_Line = power_tune_table->ucPlx_I2C_LineSCL;
+               tdp_table->ucPlx_I2C_LineSDA = power_tune_table->ucPlx_I2C_LineSDA;
+               hwmgr->platform_descriptor.LoadLineSlope = power_tune_table->usLoadLineResistance;
+       } else {
+               power_tune_table_v2 = (ATOM_Vega10_PowerTune_Table_V2 *)table;
+               tdp_table->usMaximumPowerDeliveryLimit = le16_to_cpu(power_tune_table_v2->usSocketPowerLimit);
+               tdp_table->usTDC = le16_to_cpu(power_tune_table_v2->usTdcLimit);
+               tdp_table->usEDCLimit = le16_to_cpu(power_tune_table_v2->usEdcLimit);
+               tdp_table->usSoftwareShutdownTemp =
+                               le16_to_cpu(power_tune_table_v2->usSoftwareShutdownTemp);
+               tdp_table->usTemperatureLimitTedge =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitTedge);
+               tdp_table->usTemperatureLimitHotspot =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitHotSpot);
+               tdp_table->usTemperatureLimitLiquid1 =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitLiquid1);
+               tdp_table->usTemperatureLimitLiquid2 =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitLiquid2);
+               tdp_table->usTemperatureLimitHBM =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitHBM);
+               tdp_table->usTemperatureLimitVrVddc =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitVrSoc);
+               tdp_table->usTemperatureLimitVrMvdd =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitVrMem);
+               tdp_table->usTemperatureLimitPlx =
+                               le16_to_cpu(power_tune_table_v2->usTemperatureLimitPlx);
+               tdp_table->ucLiquid1_I2C_address = power_tune_table_v2->ucLiquid1_I2C_address;
+               tdp_table->ucLiquid2_I2C_address = power_tune_table_v2->ucLiquid2_I2C_address;
+
+               get_scl_sda_value(power_tune_table_v2->ucLiquid_I2C_Line, &scl, &sda);
+
+               tdp_table->ucLiquid_I2C_Line = scl;
+               tdp_table->ucLiquid_I2C_LineSDA = sda;
+
+               tdp_table->ucVr_I2C_address = power_tune_table_v2->ucVr_I2C_address;
+
+               get_scl_sda_value(power_tune_table_v2->ucVr_I2C_Line, &scl, &sda);
+
+               tdp_table->ucVr_I2C_Line = scl;
+               tdp_table->ucVr_I2C_LineSDA = sda;
+               tdp_table->ucPlx_I2C_address = power_tune_table_v2->ucPlx_I2C_address;
+
+               get_scl_sda_value(power_tune_table_v2->ucPlx_I2C_Line, &scl, &sda);
+
+               tdp_table->ucPlx_I2C_Line = scl;
+               tdp_table->ucPlx_I2C_LineSDA = sda;
+
+               hwmgr->platform_descriptor.LoadLineSlope =
+                                       power_tune_table_v2->usLoadLineResistance;
+       }
 
        *info_tdp_table = tdp_table;
 
                                (((unsigned long)powerplay_table) +
                                le16_to_cpu(powerplay_table->usVddcLookupTableOffset));
                result = get_vddc_lookup_table(hwmgr,
-                               &pp_table_info->vddc_lookup_table, vddc_table, 16);
+                               &pp_table_info->vddc_lookup_table, vddc_table, 8);
        }
 
        if (powerplay_table->usVddmemLookupTableOffset) {
                                (((unsigned long)powerplay_table) +
                                le16_to_cpu(powerplay_table->usVddmemLookupTableOffset));
                result = get_vddc_lookup_table(hwmgr,
-                               &pp_table_info->vddmem_lookup_table, vdd_mem_table, 16);
+                               &pp_table_info->vddmem_lookup_table, vdd_mem_table, 4);
        }
 
        if (powerplay_table->usVddciLookupTableOffset) {
                                (((unsigned long)powerplay_table) +
                                le16_to_cpu(powerplay_table->usVddciLookupTableOffset));
                result = get_vddc_lookup_table(hwmgr,
-                               &pp_table_info->vddci_lookup_table, vddci_table, 16);
+                               &pp_table_info->vddci_lookup_table, vddci_table, 4);
        }
 
        return result;