Merge "aboot: mdtp: Add missing display config support"
diff --git a/dev/pmic/pm8x41/include/pm_vadc_hc.h b/dev/pmic/pm8x41/include/pm_vadc_hc.h
index 53312cb..8e0dba4 100644
--- a/dev/pmic/pm8x41/include/pm_vadc_hc.h
+++ b/dev/pmic/pm8x41/include/pm_vadc_hc.h
@@ -48,12 +48,12 @@
 #define HC_DEC_RATIO_SHIFT				2
 
 #define HC_FAST_AVG_CTL					0x43
-#define HC_FAST_AVG_SAMPLES_MASK			0xfff
+#define HC_FAST_AVG_SAMPLES_MASK			0x7
 
 #define HC_ADC_CH_SEL_CTL				0x44
 
 #define HC_DELAY_CTL					0x45
-#define HC_DELAY_CTL_MASK				0xfff
+#define HC_DELAY_CTL_MASK				0xf
 
 #define HC_EN_CTL1					0x46
 #define HC_ADC_EN					BIT(7)
@@ -79,6 +79,15 @@
 	enum adc_type	adc_type;
 };
 
+enum adc_fast_avg_sample {
+	AVG_1_SAMPLE = 0,
+	AVG_2_SAMPLES,
+	AVG_4_SAMPLES,
+	AVG_8_SAMPLES,
+	AVG_16_SAMPLES,
+	AVG_SAMPLES_INVALID
+};
+
 enum adc_channel_prediv_type {
 	SCALE_DIV1 = 0,
 	SCALE_DIV3,
diff --git a/dev/pmic/pm8x41/pm_vadc_hc.c b/dev/pmic/pm8x41/pm_vadc_hc.c
index fdf26ab..7517a31 100644
--- a/dev/pmic/pm8x41/pm_vadc_hc.c
+++ b/dev/pmic/pm8x41/pm_vadc_hc.c
@@ -61,9 +61,11 @@
 	enum adc_hc_channel		channel;
 	/* Hardware settling delay for the channel */
 	enum adc_usr_delay_ctl		hw_settle;
+	/* Fast average sample value for the channel */
+	enum adc_fast_avg_sample	avg_sample;
 	/*
 	 * Pre scale ratio for the channel before ADC is measured.
-	 * This is used during scaling the code to physical units by
+	 * This is used while scaling the code to physical units by
 	 * applying the respective pre-scale value.
 	 */
 	struct adc_pre_scale_ratio	pre_scale;
@@ -107,6 +109,7 @@
 		HC_ABS_CAL,
 		HC_CALIB_VREF_1P25,
 		HC_HW_SETTLE_DELAY_0US,
+		AVG_1_SAMPLE,
 		{1, 1},
 		scale_default_voltage
 	},
@@ -115,6 +118,7 @@
 		HC_ABS_CAL,
 		HC_VPH_PWR,
 		HC_HW_SETTLE_DELAY_0US,
+		AVG_1_SAMPLE,
 		{1, 3},
 		scale_default_voltage
 	},
@@ -201,7 +205,7 @@
 static void vadc_hc_configure(struct vadc_hc_periph_cfg *adc_cfg,
 				struct vadc_hc_channel_cfg *ch_cfg)
 {
-	uint8_t cal = 0;
+	uint8_t cal = 0, avg_samples = 0;
 
 	/* Configure calibration select */
 	vadc_hc_reg_read(adc_cfg, HC_ADC_DIG_PARAM, &cal);
@@ -215,6 +219,12 @@
 	/* HW settle delay */
 	vadc_hc_reg_write(adc_cfg, HC_DELAY_CTL, ch_cfg->hw_settle);
 
+	/* Fast avg sample value */
+	vadc_hc_reg_read(adc_cfg, HC_FAST_AVG_CTL, &avg_samples);
+	avg_samples &= ~HC_FAST_AVG_SAMPLES_MASK;
+	avg_samples |= ch_cfg->avg_sample;
+	vadc_hc_reg_write(adc_cfg, HC_FAST_AVG_CTL, avg_samples);
+
 	/* Enable ADC */
 	vadc_hc_reg_write(adc_cfg, HC_EN_CTL1, HC_ADC_EN);
 
diff --git a/dev/qpnp_wled/include/qpnp_wled.h b/dev/qpnp_wled/include/qpnp_wled.h
index d90ca0b..4ca2379 100644
--- a/dev/qpnp_wled/include/qpnp_wled.h
+++ b/dev/qpnp_wled/include/qpnp_wled.h
@@ -167,6 +167,11 @@
 #define QPNP_WLED_LAB_FAST_PC_MASK             0xFB
 #define QPNP_WLED_LAB_START_DLY_US             8
 #define QPNP_WLED_LAB_FAST_PC_SHIFT            2
+#define QPNP_WLED_PRECHARGE_MASK               0xFC
+#define QPNP_WLED_PRECHARGE_US200              0x00
+#define QPNP_WLED_PRECHARGE_US300              0x01
+#define QPNP_WLED_PRECHARGE_US400              0x02
+#define QPNP_WLED_PRECHARGE_US500              0x03
 
 #define QPNP_WLED_SEC_ACCESS_REG(b)            (b + 0xD0)
 #define QPNP_WLED_SEC_UNLOCK                   0xA5
@@ -282,6 +287,7 @@
 	bool disp_type_amoled;
 	bool ibb_bias_active;
 	bool lab_fast_precharge;
+	uint8_t  lab_max_precharge_time;
 	uint32_t lab_min_volt;
 	uint32_t lab_max_volt;
 	uint32_t ibb_min_volt;
diff --git a/dev/qpnp_wled/qpnp_wled.c b/dev/qpnp_wled/qpnp_wled.c
index ad2f5d5..9282a7b 100644
--- a/dev/qpnp_wled/qpnp_wled.c
+++ b/dev/qpnp_wled/qpnp_wled.c
@@ -475,6 +475,9 @@
 			QPNP_WLED_LAB_FAST_PC_REG(wled->lab_base));
 	reg &= QPNP_WLED_LAB_FAST_PC_MASK;
 	reg |= (wled->lab_fast_precharge << QPNP_WLED_LAB_FAST_PC_SHIFT);
+	/* LAB max precharge  time */
+	reg &= QPNP_WLED_PRECHARGE_MASK;
+	reg |= (wled->lab_max_precharge_time);
 	pm8x41_wled_reg_write(QPNP_WLED_LAB_FAST_PC_REG(wled->lab_base), reg);
 
 	/* Configure lab display type */
@@ -573,6 +576,7 @@
 
 	wled->ibb_bias_active = false;
 	wled->lab_fast_precharge = false;
+	wled->lab_max_precharge_time = QPNP_WLED_PRECHARGE_US500;
 	wled->ibb_pwrup_dly_ms = config->pwr_up_delay;
 	wled->ibb_pwrdn_dly_ms = config->pwr_down_delay;
 	wled->ibb_discharge_en = config->ibb_discharge_en;
diff --git a/platform/msm_shared/rpmb/rpmb_emmc.c b/platform/msm_shared/rpmb/rpmb_emmc.c
index dbf7664..c9c7bba 100644
--- a/platform/msm_shared/rpmb/rpmb_emmc.c
+++ b/platform/msm_shared/rpmb/rpmb_emmc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2015,2016 The Linux Foundation. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -29,6 +29,7 @@
 #include <rpmb.h>
 #include <mmc_sdhci.h>
 #include <debug.h>
+#include <string.h>
 
 static const char *str_err[] =
 {
@@ -51,9 +52,11 @@
 {
 	uint32_t i, num_trans = 0;
 	int ret = 0;
-	struct mmc_command cmd[3] = {{0},{0},{0}};
+	struct mmc_command cmd[3];
 	struct rpmb_frame *result = (struct rpmb_frame *)resp_buf;
 
+	memset(cmd, 0, (size_t) sizeof(cmd));
+
 	dprintf(INFO, "rpmb write command called with blk_cnt and rel_wr_count: 0x%x 0x%x\n", blk_cnt, rel_wr_count);
 	if (rel_wr_count == 0x2)
 	{
@@ -150,9 +153,10 @@
 
 int rpmb_read_emmc(struct mmc_device *dev, uint32_t *req_buf, uint32_t blk_cnt, uint32_t *resp_buf, uint32_t *resp_len)
 {
-	struct mmc_command cmd[3] = {{0},{0},{0}};
+	struct mmc_command cmd[3] ;
 	int ret = 0;
 	struct rpmb_frame *result = (struct rpmb_frame *)resp_buf;
+	memset(cmd, 0, (size_t) sizeof(cmd));
 
 #if DEBUG_RPMB
 	dump_rpmb_frame((uint8_t *)req_buf, "request");