mfd: max77663: Add power off function
Jin Park [Mon, 26 Sep 2011 05:39:22 +0000 (14:39 +0900)]
Bug 849360

Signed-off-by: Jin Park <jinyoungp@nvidia.com>
Reviewed-on: http://git-master/r/54428
(cherry picked from commit 6c06d12f10bc221cde89f5a1738b9f003796dd45)
Reviewed-on: http://git-master/r/55148
(cherry picked from commit 45466efa9c551cd2e5ee05d217a30a1c4342a7cd)

Change-Id: Iad256cf4d6e21e963987df04bd30a1f563ae1d12
Reviewed-on: http://git-master/r/56355
Tested-by: Jinyoung Park <jinyoungp@nvidia.com>
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>

Rebase-Id: R2b513f87f2e21240821a0a2d05e9e1a861fcc7fb

drivers/mfd/max77663-core.c
include/linux/mfd/max77663-core.h

index b4f36a1..63efa39 100644 (file)
@@ -56,6 +56,7 @@
 #define MAX77663_REG_GPIO_PU           0x3E
 #define MAX77663_REG_GPIO_PD           0x3F
 #define MAX77663_REG_GPIO_ALT          0x40
+#define MAX77663_REG_ONOFF_CFG1                0x41
 
 #define IRQ_TOP_GLBL_MASK              (1 << 7)
 #define IRQ_TOP_GLBL_SHIFT             7
 #define GPIO_DBNC_16MS                 2
 #define GPIO_DBNC_32MS                 3
 
+#define ONOFF_SFT_RST_MASK             (1 << 7)
+
 enum {
        CACHE_IRQ_LBT,
        CACHE_IRQ_SD,
@@ -349,6 +352,16 @@ int max77663_set_bits(struct device *dev, u8 addr, u8 mask, u8 value,
 }
 EXPORT_SYMBOL(max77663_set_bits);
 
+int max77663_power_off(void)
+{
+       struct max77663_chip *chip = max77663_chip;
+
+       dev_info(chip->dev, "%s: Global shutdown\n", __func__);
+       return max77663_set_bits(chip->dev, MAX77663_REG_ONOFF_CFG1,
+                                ONOFF_SFT_RST_MASK, ONOFF_SFT_RST_MASK, 0);
+}
+EXPORT_SYMBOL(max77663_power_off);
+
 static inline int max77663_cache_write(struct device *dev, u8 addr, u8 mask,
                                       u8 val, u8 *cache)
 {
index 621df41..59f8dbe 100644 (file)
@@ -94,6 +94,7 @@ int max77663_write(struct device *dev, u8 addr, void *values, u32 len,
                   bool is_rtc);
 int max77663_set_bits(struct device *dev, u8 addr, u8 mask, u8 value,
                      bool is_rtc);
+int max77663_power_off(void);
 int max77663_gpio_set_alternate(int gpio, int alternate);
 
 #endif /* __LINUX_MFD_MAX77663_CORE_H__ */