};
  
  struct abx500_bm_data ab8500_bm_data = {
-       .temp_under             = 3,
-       .temp_low               = 8,
-       .temp_high              = 43,
-       .temp_over              = 48,
-       .main_safety_tmr_h      = 4,
-       .temp_interval_chg      = 20,
-       .temp_interval_nochg    = 120,
-       .usb_safety_tmr_h       = 4,
-       .bkup_bat_v             = BUP_VCH_SEL_2P6V,
-       .bkup_bat_i             = BUP_ICH_SEL_150UA,
-       .no_maintenance         = false,
-       .adc_therm              = ABx500_ADC_THERM_BATCTRL,
-       .chg_unknown_bat        = false,
-       .enable_overshoot       = false,
-       .fg_res                 = 100,
-       .cap_levels             = &cap_levels,
-       .bat_type               = bat_type_thermistor,
-       .n_btypes               = 3,
-       .batt_id                = 0,
-       .interval_charging      = 5,
-       .interval_not_charging  = 120,
-       .temp_hysteresis        = 3,
-       .gnd_lift_resistance    = 34,
-       .maxi                   = &maxi_params,
-       .chg_params             = &chg,
-       .fg_params              = &fg,
+       .temp_under             = 3,
+       .temp_low               = 8,
+       .temp_high              = 43,
+       .temp_over              = 48,
+       .main_safety_tmr_h      = 4,
+       .temp_interval_chg      = 20,
+       .temp_interval_nochg    = 120,
+       .usb_safety_tmr_h       = 4,
+       .bkup_bat_v             = BUP_VCH_SEL_2P6V,
+       .bkup_bat_i             = BUP_ICH_SEL_150UA,
+       .no_maintenance         = false,
+       .capacity_scaling       = false,
+       .adc_therm              = ABx500_ADC_THERM_BATCTRL,
+       .chg_unknown_bat        = false,
+       .enable_overshoot       = false,
+       .fg_res                 = 100,
+       .cap_levels             = &cap_levels,
+       .bat_type               = bat_type_thermistor,
+       .n_btypes               = 3,
+       .batt_id                = 0,
+       .interval_charging      = 5,
+       .interval_not_charging  = 120,
+       .temp_hysteresis        = 3,
+       .gnd_lift_resistance    = 34,
+       .maxi                   = &maxi_params,
+       .chg_params             = &chg,
+       .fg_params              = &fg,
  };
  
- int bmdevs_of_probe(struct device *dev, struct device_node *np,
-                   struct abx500_bm_data **battery)
 -int __devinit ab8500_bm_of_probe(struct device *dev,
 -                               struct device_node *np,
 -                               struct abx500_bm_data *bm)
++int ab8500_bm_of_probe(struct device *dev,
++                     struct device_node *np,
++                     struct abx500_bm_data *bm)
  {
-       struct  abx500_battery_type *btype;
-       struct  device_node *np_bat_supply;
-       struct  abx500_bm_data *bat;
+       struct batres_vs_temp *tmp_batres_tbl;
+       struct device_node *battery_node;
        const char *btech;
-       char bat_tech[8];
-       int i, thermistor;
- 
-       *battery = &ab8500_bm_data;
+       int i;
  
        /* get phandle to 'battery-info' node */
-       np_bat_supply = of_parse_phandle(np, "battery", 0);
-       if (!np_bat_supply) {
-               dev_err(dev, "missing property battery\n");
+       battery_node = of_parse_phandle(np, "battery", 0);
+       if (!battery_node) {
+               dev_err(dev, "battery node or reference missing\n");
                return -EINVAL;
        }
-       if (of_property_read_bool(np_bat_supply,
-                       "thermistor-on-batctrl"))
-               thermistor = NTC_INTERNAL;
-       else
-               thermistor = NTC_EXTERNAL;
  
-       bat = *battery;
-       if (thermistor == NTC_EXTERNAL) {
-               bat->n_btypes  = 4;
-               bat->bat_type  = bat_type_ext_thermistor;
-               bat->adc_therm = ABx500_ADC_THERM_BATTEMP;
-       }
-       btech = of_get_property(np_bat_supply,
-               "stericsson,battery-type", NULL);
+       btech = of_get_property(battery_node, "stericsson,battery-type", NULL);
        if (!btech) {
                dev_warn(dev, "missing property battery-name/type\n");
-               strcpy(bat_tech, "UNKNOWN");
-       } else {
-               strcpy(bat_tech, btech);
+               return -EINVAL;
        }
  
-       if (strncmp(bat_tech, "LION", 4) == 0) {
-               bat->no_maintenance  = true;
-               bat->chg_unknown_bat = true;
-               bat->bat_type[BATTERY_UNKNOWN].charge_full_design = 2600;
-               bat->bat_type[BATTERY_UNKNOWN].termination_vol    = 4150;
-               bat->bat_type[BATTERY_UNKNOWN].recharge_vol       = 4130;
-               bat->bat_type[BATTERY_UNKNOWN].normal_cur_lvl     = 520;
-               bat->bat_type[BATTERY_UNKNOWN].normal_vol_lvl     = 4200;
+       if (strncmp(btech, "LION", 4) == 0) {
+               bm->no_maintenance  = true;
+               bm->chg_unknown_bat = true;
+               bm->bat_type[BATTERY_UNKNOWN].charge_full_design = 2600;
+               bm->bat_type[BATTERY_UNKNOWN].termination_vol    = 4150;
+               bm->bat_type[BATTERY_UNKNOWN].recharge_cap       = 95;
+               bm->bat_type[BATTERY_UNKNOWN].normal_cur_lvl     = 520;
+               bm->bat_type[BATTERY_UNKNOWN].normal_vol_lvl     = 4200;
        }
-       /* select the battery resolution table */
-       for (i = 0; i < bat->n_btypes; ++i) {
-               btype = (bat->bat_type + i);
-               if (thermistor == NTC_EXTERNAL) {
-                       btype->batres_tbl =
-                               temp_to_batres_tbl_ext_thermistor;
-               } else if (strncmp(bat_tech, "LION", 4) == 0) {
-                       btype->batres_tbl =
-                               temp_to_batres_tbl_9100;
-               } else {
-                       btype->batres_tbl =
-                               temp_to_batres_tbl_thermistor;
-               }
+ 
+       if (of_property_read_bool(battery_node, "thermistor-on-batctrl")) {
+               if (strncmp(btech, "LION", 4) == 0)
+                       tmp_batres_tbl = temp_to_batres_tbl_9100;
+               else
+                       tmp_batres_tbl = temp_to_batres_tbl_thermistor;
+       } else {
+               bm->n_btypes   = 4;
+               bm->bat_type   = bat_type_ext_thermistor;
+               bm->adc_therm  = ABx500_ADC_THERM_BATTEMP;
+               tmp_batres_tbl = temp_to_batres_tbl_ext_thermistor;
        }
-       of_node_put(np_bat_supply);
+ 
+       /* select the battery resolution table */
+       for (i = 0; i < bm->n_btypes; ++i)
+               bm->bat_type[i].batres_tbl = tmp_batres_tbl;
+ 
+       of_node_put(battery_node);
+ 
        return 0;
  }