[msm8x60]: Add PM8058 battery alarm support
Adding PM8058 battery alarm APIs to help charging.
Change-Id: If296017927497b0b1c5575ae846bc99d6053f791
diff --git a/platform/msm8x60/include/platform/pmic_batt_alarm.h b/platform/msm8x60/include/platform/pmic_batt_alarm.h
new file mode 100644
index 0000000..56f232a
--- /dev/null
+++ b/platform/msm8x60/include/platform/pmic_batt_alarm.h
@@ -0,0 +1,142 @@
+/*
+ * * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Code Aurora Forum, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __PMIC_BATT_ALARM_H
+#define __PMIC_BATT_ALARM_H
+
+#define BIT(x) (1 << (x))
+
+/* PM8058 Battery alarm control registers */
+#define PM8058_REG_THRESHOLD 0x023
+#define PM8058_REG_CTRL1 0x024
+#define PM8058_REG_CTRL2 0x0AA
+#define PM8058_REG_PWM_CTRL 0x0A3
+
+/* Available voltage threshold values */
+#define THRESHOLD_MIN_MV 2500
+#define THRESHOLD_MAX_MV 5675
+#define THRESHOLD_STEP_MV 25
+
+/* Register bit definitions */
+
+/* Threshold register */
+#define THRESHOLD_UPPER_MASK 0xF0
+#define THRESHOLD_LOWER_MASK 0x0F
+#define THRESHOLD_UPPER_SHIFT 4
+#define THRESHOLD_LOWER_SHIFT 0
+
+/* CTRL 1 register */
+#define CTRL1_BATT_ALARM_EN_MASK 0x80
+#define CTRL1_HOLD_TIME_MASK 0x70
+#define CTRL1_STATUS_UPPER_MASK 0x02
+#define CTRL1_STATUS_LOWER_MASK 0x01
+#define CTRL1_HOLD_TIME_SHIFT 4
+#define CTRL1_HOLD_TIME_MIN 0
+#define CTRL1_HOLD_TIME_MAX 7
+
+/* CTRL 2 register */
+#define CTRL2_COMP_UPPER_DISABLE_MASK 0x80
+#define CTRL2_COMP_LOWER_DISABLE_MASK 0x40
+#define CTRL2_FINE_STEP_UPPER_MASK 0x30
+#define CTRL2_RANGE_EXT_UPPER_MASK 0x08
+#define CTRL2_FINE_STEP_LOWER_MASK 0x06
+#define CTRL2_RANGE_EXT_LOWER_MASK 0x01
+#define CTRL2_FINE_STEP_UPPER_SHIFT 4
+#define CTRL2_FINE_STEP_LOWER_SHIFT 1
+
+/* PWM control register */
+#define PWM_CTRL_ALARM_EN_MASK 0xC0
+#define PWM_CTRL_ALARM_EN_NEVER 0x00
+#define PWM_CTRL_ALARM_EN_TCXO 0x40
+#define PWM_CTRL_ALARM_EN_PWM 0x80
+#define PWM_CTRL_ALARM_EN_ALWAYS 0xC0
+#define PWM_CTRL_PRE_MASK 0x38
+#define PWM_CTRL_DIV_MASK 0x07
+#define PWM_CTRL_PRE_SHIFT 3
+#define PWM_CTRL_DIV_SHIFT 0
+#define PWM_CTRL_PRE_MIN 0
+#define PWM_CTRL_PRE_MAX 7
+#define PWM_CTRL_DIV_MIN 1
+#define PWM_CTRL_DIV_MAX 7
+
+/* PWM control input range */
+#define PWM_CTRL_PRE_INPUT_MIN 2
+#define PWM_CTRL_PRE_INPUT_MAX 9
+#define PWM_CTRL_DIV_INPUT_MIN 2
+#define PWM_CTRL_DIV_INPUT_MAX 8
+
+/* Available voltage threshold values */
+#define THRESHOLD_BASIC_MIN_MV 2800
+#define THRESHOLD_EXT_MIN_MV 4400
+
+#define DEFAULT_THRESHOLD_LOWER 3200
+#define DEFAULT_THRESHOLD_UPPER 4300
+#define DEFAULT_HOLD_TIME HOLD_TIME_16_MS
+#define DISABLE_USE_PWM 0
+#define ENABLE_USE_PWM 1
+#define DEFAULT_PWM_SCALER 9
+#define DEFAULT_PWM_DIVIDER 8
+#define LOWER_COMP_DISABLE 0
+#define UPPER_COMP_DISABLE 0
+#define LOWER_COMP_ENABLE 1
+#define UPPER_COMP_ENABLE 1
+
+#define PM_BATT_ALARM_STATUS_BELOW_LOWER BIT(0)
+#define PM_BATT_ALARM_STATUS_ABOVE_UPPER BIT(1)
+
+typedef enum {
+ HOLD_TIME_0p125_MS = 0,
+ HOLD_TIME_0p25_MS,
+ HOLD_TIME_0p5_MS,
+ HOLD_TIME_1_MS,
+ HOLD_TIME_2_MS,
+ HOLD_TIME_4_MS,
+ HOLD_TIME_8_MS,
+ HOLD_TIME_16_MS,
+}pm_batt_alarm_hold_time;
+
+typedef enum {
+ ALARM_EN_NEVER = 0,
+ ALARM_EN_PWM,
+ ALARM_EN_ALWAYS,
+}pm_batt_alarm_pwm_ctrl;
+
+struct pm_batt_alarm_device {
+ uint8_t reg_threshold;
+ uint8_t reg_ctrl1;
+ uint8_t reg_ctrl2;
+ uint8_t reg_pwm_ctrl;
+};
+
+extern int pm8058_mwrite(uint16_t addr, uint8_t val, uint8_t mask,
+ uint8_t *reg_save);
+extern int pm8058_read(uint16_t addr, uint8_t *data, uint16_t length);
+extern void mdelay(uint32_t ms);
+
+#endif