]> rtime.felk.cvut.cz Git - hercules2020/nv-tegra/linux-4.4.git/commitdiff
ARM: Tegra: Programming Palmas LongPress register
authorNaveen Kumar S <nkumars@nvidia.com>
Tue, 30 Apr 2013 18:12:40 +0000 (23:42 +0530)
committerDan Willemsen <dwillemsen@nvidia.com>
Wed, 18 Mar 2015 18:58:08 +0000 (11:58 -0700)
Programming the Palmas (TPS65913) LONG_PRESS_KEY
register (LPK) used for system hard shutdown.

Bug 1241832

Change-Id: Icb3fef877d3b9093572464725c672d2957566e4e
Signed-off-by: Naveen Kumar S <nkumars@nvidia.com>
Reviewed-on: http://git-master/r/222465
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
drivers/mfd/palmas.c
include/linux/mfd/palmas.h

index 15d801361167d667eb967847707ba8721e7f005b..38e48c871968f1f5ff3ac0e651257a11174db38a 100644 (file)
@@ -1096,6 +1096,24 @@ static int palmas_i2c_probe(struct i2c_client *i2c,
                        return ret;
        }
 
+       /*
+        * Programming the Long-Press shutdown delay register.
+        * Using "slave" from previous assignment as this register
+        * too belongs to PALMAS_PMU_CONTROL_BASE block.
+        */
+       if (pdata->long_press_delay != PALMAS_LONG_PRESS_KEY_TIME_DEFAULT) {
+               ret = palmas_update_bits(palmas, PALMAS_PMU_CONTROL_BASE,
+                                       PALMAS_LONG_PRESS_KEY,
+                                       PALMAS_LONG_PRESS_KEY_LPK_TIME_MASK,
+                                       pdata->long_press_delay <<
+                                       PALMAS_LONG_PRESS_KEY_LPK_TIME_SHIFT);
+               if (ret) {
+                       dev_err(palmas->dev,
+                               "Failed to update palmas long press delay"
+                               "(hard shutdown delay), err: %d\n", ret);
+                       goto err;
+               }
+       }
 
        palmas_init_ext_control(palmas);
 
index d70df891af8c339895dba7af147a53f0ffb6961c..9641cfab09f8be68f64bc3fd71a97e9ca13a2a61 100644 (file)
@@ -527,6 +527,9 @@ struct palmas_platform_data {
        struct bq2419x_platform_data *charger_pdata;
 
        int watchdog_timer_initial_period;
+
+       /* Long press delay for hard shutdown */
+       int long_press_delay;
 };
 
 struct palmas_gpadc_calibration {
@@ -1764,6 +1767,13 @@ enum usb_irq_events {
 #define PALMAS_LONG_PRESS_KEY_PWRON_DEBOUNCE_MASK              0x03
 #define PALMAS_LONG_PRESS_KEY_PWRON_DEBOUNCE_SHIFT             0
 
+/* Register bit values for various Long_Press_key durations */
+#define PALMAS_LONG_PRESS_KEY_TIME_DEFAULT     -1
+#define PALMAS_LONG_PRESS_KEY_TIME_6SECONDS    0
+#define PALMAS_LONG_PRESS_KEY_TIME_8SECONDS    1
+#define PALMAS_LONG_PRESS_KEY_TIME_10SECONDS   2
+#define PALMAS_LONG_PRESS_KEY_TIME_12SECONDS   3
+
 /* Bit definitions for OSC_THERM_CTRL */
 #define PALMAS_OSC_THERM_CTRL_VANA_ON_IN_SLEEP                 0x80
 #define PALMAS_OSC_THERM_CTRL_VANA_ON_IN_SLEEP_SHIFT           7