power: pm8921-charger: Add feature to use charger LED
Add a mechanism to configure the power source of
the charger indicator LED anode on the PM8921.
The configuration is specified using platform data.
Change-Id: I9a436f634ddfd5d1822f1fc8beab4936fa8bb61d
Signed-off-by: Jay Chokshi <jchokshi@codeaurora.org>
diff --git a/drivers/power/pm8921-charger.c b/drivers/power/pm8921-charger.c
index f6e7e93..cdc6c50 100644
--- a/drivers/power/pm8921-charger.c
+++ b/drivers/power/pm8921-charger.c
@@ -263,6 +263,7 @@
enum pm8921_chg_cold_thr cold_thr;
enum pm8921_chg_hot_thr hot_thr;
int rconn_mohm;
+ enum pm8921_chg_led_src_config led_src_config;
};
/* user space parameter to limit usb current */
@@ -857,6 +858,26 @@
temp);
}
+#define PM8921_CHG_LED_SRC_CONFIG_SHIFT 4
+#define PM8921_CHG_LED_SRC_CONFIG_MASK 0x30
+static int pm_chg_led_src_config(struct pm8921_chg_chip *chip,
+ enum pm8921_chg_led_src_config led_src_config)
+{
+ u8 temp;
+
+ if (led_src_config < LED_SRC_GND ||
+ led_src_config > LED_SRC_BYPASS)
+ return -EINVAL;
+
+ if (led_src_config == LED_SRC_BYPASS)
+ return 0;
+
+ temp = led_src_config << PM8921_CHG_LED_SRC_CONFIG_SHIFT;
+
+ return pm_chg_masked_write(chip, CHG_CNTRL_3,
+ PM8921_CHG_LED_SRC_CONFIG_MASK, temp);
+}
+
static void disable_input_voltage_regulation(struct pm8921_chg_chip *chip)
{
u8 temp;
@@ -3330,6 +3351,12 @@
chip->hot_thr, rc);
}
+ rc = pm_chg_led_src_config(chip, chip->led_src_config);
+ if (rc) {
+ pr_err("Failed to set charger LED src config %d rc=%d\n",
+ chip->led_src_config, rc);
+ }
+
/* Workarounds for die 1.1 and 1.0 */
if (pm8xxx_get_revision(chip->dev->parent) < PM8XXX_REVISION_8921_2p0) {
pm8xxx_writeb(chip->dev->parent, CHG_BUCK_CTRL_TEST2, 0xF1);
@@ -3671,6 +3698,7 @@
chip->cold_thr = pdata->cold_thr;
chip->hot_thr = pdata->hot_thr;
chip->rconn_mohm = pdata->rconn_mohm;
+ chip->led_src_config = pdata->led_src_config;
rc = pm8921_chg_hw_init(chip);
if (rc) {
diff --git a/include/linux/mfd/pm8xxx/pm8921-charger.h b/include/linux/mfd/pm8xxx/pm8921-charger.h
index 8a3b999..2186903 100644
--- a/include/linux/mfd/pm8xxx/pm8921-charger.h
+++ b/include/linux/mfd/pm8xxx/pm8921-charger.h
@@ -48,6 +48,14 @@
PM_USB_DEBOUNCE_80P5MS,
};
+enum pm8921_chg_led_src_config {
+ LED_SRC_GND,
+ LED_SRC_VPH_PWR,
+ LED_SRC_5V,
+ LED_SRC_MIN_VPH_5V,
+ LED_SRC_BYPASS,
+};
+
/**
* struct pm8921_charger_platform_data -
* @safety_time: max charging time in minutes incl. fast and trkl
@@ -104,6 +112,7 @@
* with the battery terminals shorted. This indicates
* resistance of the pads, connectors, battery terminals
* and rsense.
+ * @led_src_config: Power source for anode of charger indicator LED.
*/
struct pm8921_charger_platform_data {
struct pm8xxx_charger_core_data charger_cdata;
@@ -136,6 +145,7 @@
enum pm8921_chg_cold_thr cold_thr;
enum pm8921_chg_hot_thr hot_thr;
int rconn_mohm;
+ enum pm8921_chg_led_src_config led_src_config;
};
enum pm8921_charger_source {