rk3288:rk808:support rk808 power off
author张晴 <zhangqing@rock-chips.com>
Thu, 27 Mar 2014 03:28:44 +0000 (11:28 +0800)
committer张晴 <zhangqing@rock-chips.com>
Thu, 27 Mar 2014 03:28:44 +0000 (11:28 +0800)
arch/arm/boot/dts/rk3288-tb.dts
drivers/mfd/rk808.c
include/linux/mfd/rk808.h

index c65b0143f7e823e205c3365bb95b17064d5fef02..109e24170a404ccf4c03a968143a4151d2c4c51c 100755 (executable)
@@ -595,6 +595,7 @@ rockchip,power_type = <GPIO>;
 /include/ "rk808.dtsi"
 &rk808 {
        gpios =<&gpio0 GPIO_A4 GPIO_ACTIVE_HIGH>,<&gpio0 GPIO_B3 GPIO_ACTIVE_LOW>;
+       rk808,system-power-controller;
 
        regulators {
                
index 0ba09d08553fd0bac81a7e93f1a160ed5193e190..87691a6df99d27505c79e220227e2e9a8608fc7e 100755 (executable)
@@ -1053,6 +1053,8 @@ static struct rk808_board *rk808_parse_dt(struct rk808 *rk808)
                                printk("invalid gpio: %d\n",  pdata->pmic_sleep_gpio);
                }
        pdata->pmic_sleep = true;
+       
+       pdata->pm_off = of_property_read_bool(rk808_pmic_np,"rk808,system-power-controller");
                
        return pdata;
 }
@@ -1065,7 +1067,7 @@ static struct rk808_board *rk808_parse_dt(struct i2c_client *i2c)
 #endif
 
 
-int rk808_device_shutdown(void)
+static int rk808_device_shutdown(void)
 {
        int ret;
        int err = -1;
@@ -1372,6 +1374,9 @@ static int rk808_i2c_probe(struct i2c_client *i2c, const struct i2c_device_id *i
        /*********************************************/
        
        g_rk808 = rk808;
+       if (pdev->pm_off && !pm_power_off) {
+               pm_power_off = rk808_device_shutdown;
+       }
 
        #ifdef CONFIG_HAS_EARLYSUSPEND
        rk808->rk808_suspend.suspend = rk808_early_suspend,
index f69a64e05e77a6c7ab75eb02a47a802ce09c86eb..b79b7f5b22506aeb258a07a0146fe127b885982e 100755 (executable)
@@ -132,6 +132,7 @@ struct rk808_board {
        unsigned int dcdc_slp_voltage[3]; /* buckx_voltage in uV */
        bool pmic_sleep;
        unsigned int ldo_slp_voltage[7];
+       bool pm_off;
 };
 
 struct rk808_regulator_subdev {
@@ -185,7 +186,6 @@ int rk808_bulk_read(struct rk808 *rk808, u8 reg,
                     int count, u8 *buf);
 int rk808_bulk_write(struct rk808 *rk808, u8 reg,
                     int count, u8 *buf);
-int rk808_device_shutdown(void);
 
 #endif