#define CAL_SEL_MASK   7
 #define CAL_SEL_SHIFT  0
 
-static void compute_intercept_slope_8976(struct tsens_priv *priv,
-                             u32 *p1, u32 *p2, u32 mode)
-{
-       int i;
-
-       priv->sensor[0].slope = 3313;
-       priv->sensor[1].slope = 3275;
-       priv->sensor[2].slope = 3320;
-       priv->sensor[3].slope = 3246;
-       priv->sensor[4].slope = 3279;
-       priv->sensor[5].slope = 3257;
-       priv->sensor[6].slope = 3234;
-       priv->sensor[7].slope = 3269;
-       priv->sensor[8].slope = 3255;
-       priv->sensor[9].slope = 3239;
-       priv->sensor[10].slope = 3286;
-
-       for (i = 0; i < priv->num_sensors; i++) {
-               priv->sensor[i].offset = (p1[i] * SLOPE_FACTOR) -
-                               (CAL_DEGC_PT1 *
-                               priv->sensor[i].slope);
-       }
-}
-
 static int calibrate_v1(struct tsens_priv *priv)
 {
        u32 base0 = 0, base1 = 0;
                break;
        }
 
-       compute_intercept_slope_8976(priv, p1, p2, mode);
+       compute_intercept_slope(priv, p1, p2, mode);
        kfree(qfprom_cdata);
 
        return 0;
        [TRDY] = REG_FIELD(TM_TRDY_OFF, 0, 0),
 };
 
+static int __init init_8956(struct tsens_priv *priv) {
+       priv->sensor[0].slope = 3313;
+       priv->sensor[1].slope = 3275;
+       priv->sensor[2].slope = 3320;
+       priv->sensor[3].slope = 3246;
+       priv->sensor[4].slope = 3279;
+       priv->sensor[5].slope = 3257;
+       priv->sensor[6].slope = 3234;
+       priv->sensor[7].slope = 3269;
+       priv->sensor[8].slope = 3255;
+       priv->sensor[9].slope = 3239;
+       priv->sensor[10].slope = 3286;
+
+       return init_common(priv);
+}
+
 static const struct tsens_ops ops_generic_v1 = {
        .init           = init_common,
        .calibrate      = calibrate_v1,
        .fields = tsens_v1_regfields,
 };
 
+static const struct tsens_ops ops_8956 = {
+       .init           = init_8956,
+       .calibrate      = calibrate_8976,
+       .get_temp       = get_temp_tsens_valid,
+};
+
+struct tsens_plat_data data_8956 = {
+       .num_sensors    = 11,
+       .ops            = &ops_8956,
+       .feat           = &tsens_v1_feat,
+       .fields         = tsens_v1_regfields,
+};
+
 static const struct tsens_ops ops_8976 = {
        .init           = init_common,
        .calibrate      = calibrate_8976,
        .get_temp       = get_temp_tsens_valid,
 };
 
-/* Valid for both MSM8956 and MSM8976. */
 struct tsens_plat_data data_8976 = {
        .num_sensors    = 11,
        .ops            = &ops_8976,