From de11a1a0ad06f7c76b53e749fd5698ee2167e572 Mon Sep 17 00:00:00 2001 From: cl Date: Thu, 16 Oct 2014 10:47:26 +0800 Subject: [PATCH] rockchip: add gpio_poweroff driver Signed-off-by: cl --- arch/arm/boot/dts/rk3126-86v.dts | 7 ++-- arch/arm/configs/rockchip_defconfig | 2 ++ drivers/power/rk30_factory_adc_battery.c | 43 ------------------------ kernel/sys.c | 6 ++++ 4 files changed, 13 insertions(+), 45 deletions(-) diff --git a/arch/arm/boot/dts/rk3126-86v.dts b/arch/arm/boot/dts/rk3126-86v.dts index a136b978b7c6..e4d46fe0b7bf 100644 --- a/arch/arm/boot/dts/rk3126-86v.dts +++ b/arch/arm/boot/dts/rk3126-86v.dts @@ -12,6 +12,10 @@ enable-gpios = <&gpio3 GPIO_C1 GPIO_ACTIVE_HIGH>; }; + gpio_poweroff { + compatible = "gpio-poweroff"; + gpios = <&gpio1 GPIO_A2 GPIO_ACTIVE_LOW>; + }; usb_control { compatible = "rockchip,rk3126-usb-control"; @@ -246,7 +250,6 @@ compatible = "rk30-adc-battery"; io-channels = <&adc 0>; dc_det_gpio = <&gpio2 GPIO_B1 GPIO_ACTIVE_LOW>; - pwr_hold = <&gpio1 GPIO_A2 GPIO_ACTIVE_LOW>; //bat_low_gpio = <&gpio0 GPIO_A7 GPIO_ACTIVE_LOW>; //chg_ok_gpio = <&gpio0 GPIO_B1 GPIO_ACTIVE_HIGH>; bat_table = <0 0 0 0 100 100 @@ -346,7 +349,7 @@ &dwc_control_usb { usb_uart { - status = "disabled"; + status = "ok"; }; }; diff --git a/arch/arm/configs/rockchip_defconfig b/arch/arm/configs/rockchip_defconfig index 7c8d4aa439ab..4c4ebf47c789 100644 --- a/arch/arm/configs/rockchip_defconfig +++ b/arch/arm/configs/rockchip_defconfig @@ -354,6 +354,8 @@ CONFIG_BATTERY_BQ24296=y CONFIG_BATTERY_BQ27320=y CONFIG_BATTERY_RK30_ADC_FAC=y CONFIG_CW2015_BATTERY=y +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_GPIO=y CONFIG_SENSORS_ROCKCHIP_TSADC=y CONFIG_THERMAL=y CONFIG_MFD_RT5025=y diff --git a/drivers/power/rk30_factory_adc_battery.c b/drivers/power/rk30_factory_adc_battery.c index b07d98f37393..5b4d36cdb984 100755 --- a/drivers/power/rk30_factory_adc_battery.c +++ b/drivers/power/rk30_factory_adc_battery.c @@ -44,7 +44,6 @@ #include #include -#include #ifdef CONFIG_EARLYSUSPEND /* kernel/power/earlysuspend.c */ extern suspend_state_t get_suspend_state(void); @@ -105,8 +104,6 @@ int gDoubleVoltageCnt = 6800; unsigned long gSecondsCnt = 0; char gDischargeFlag[4] = {"on "}; -int pwr_hold; - #if 1 #define BATT_MAX_VOL_VALUE 4250/*Full charge volatge*/ #define BATT_ZERO_VOL_VALUE 3500/*power down voltage*/ @@ -246,37 +243,6 @@ static bool batt_gpio_is_valid(int number) { return number > 0 && number < 256; } - -static void v86_pm_power_off(void) -{ - - bool isCharging = false; - if (batt_gpio_is_valid(gBatteryData->pdata->dc_det_pin)){ - if (gpio_get_value (gBatteryData->pdata->dc_det_pin) == gBatteryData->pdata->dc_det_level){ - isCharging = 1; - }else{ - isCharging = 0; - } - } - //gpio_direction_output(pwr_hold, GPIO_LOW); - printk("xhh ========= v86_pm_power_off \n"); - gpio_request(pwr_hold, NULL); - //mdelay(500); - if(isCharging) - { - printk("xhh ========= isCharging \n"); - arm_pm_restart('h', "charge"); - } - else - { - printk("xhh ========= power off \n"); - gpio_direction_output(pwr_hold, RK30_GPIO_LOW); - gpio_set_value(pwr_hold,RK30_GPIO_LOW); - } - while(1); - -} - #ifdef BATTERY_APK //#define BAT_ADC_TABLE_LEN 11 static ssize_t bat_param_read(struct device *dev,struct device_attribute *attr, char *buf) @@ -2210,10 +2176,6 @@ rk30_adc_battery_platform_data *data) if (batt_gpio_is_valid(data->charge_ok_pin)) data->charge_ok_level = (flags & OF_GPIO_ACTIVE_LOW) ? RK30_GPIO_LOW : RK30_GPIO_HIGH; - pwr_hold = of_get_named_gpio_flags(node, "pwr_hold", 0, - &flags); - if (pwr_hold == -EPROBE_DEFER) - printk("%s pwr_hold error\n",__func__); ret = of_property_read_u32(node, "is_dc_charge", &value); if (ret < 0) { @@ -2325,12 +2287,7 @@ static int rk30_adc_battery_probe(struct platform_device *pdev) memset(data->adc_samples, 0, sizeof(int)*(NUM_VOLTAGE_SAMPLE + 2)); //register adc for battery sample - - if (!pm_power_off) { - pm_power_off = v86_pm_power_off; - } data->wq = create_singlethread_workqueue("adc_battd"); - //variable init /*data->client = client;*/ data->adc_val = rk_adc_battery_iio_read(data->pdata); diff --git a/kernel/sys.c b/kernel/sys.c index ab7fda5fbe18..6af60700eede 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -64,6 +64,9 @@ #include #include #include +#ifdef CONFIG_ARCH_ROCKCHIP +#include +#endif #ifndef SET_UNALIGN_CTL # define SET_UNALIGN_CTL(a,b) (-EINVAL) @@ -450,6 +453,9 @@ void kernel_power_off(void) printk(KERN_EMERG "Power down.\n"); kmsg_dump(KMSG_DUMP_POWEROFF); machine_power_off(); +#ifdef CONFIG_ARCH_ROCKCHIP + arm_pm_restart('h', "charge"); +#endif } EXPORT_SYMBOL_GPL(kernel_power_off); -- 2.34.1