modify change charge current
authorhxy <hxy@rock-chips.com>
Sat, 4 Sep 2010 14:38:09 +0000 (22:38 +0800)
committerhxy <hxy@rock-chips.com>
Sat, 4 Sep 2010 14:39:49 +0000 (22:39 +0800)
arch/arm/configs/rk2818_raho_defconfig [changed mode: 0755->0644]
drivers/power/rk2818_battery.c
drivers/regulator/charge-regulator.c

old mode 100755 (executable)
new mode 100644 (file)
index 9cddd78..a85969b
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
 # Linux kernel version: 2.6.32.9
-# Fri Sep  3 20:53:52 2010
+# Sat Sep  4 20:01:16 2010
 #
 CONFIG_ARM=y
 CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -936,6 +936,7 @@ CONFIG_REGULATOR_DEBUG=y
 # CONFIG_REGULATOR_LP3971 is not set
 # CONFIG_REGULATOR_TPS65023 is not set
 # CONFIG_REGULATOR_TPS6507X is not set
+CONFIG_RK2818_REGULATOR_CHARGE=y
 CONFIG_RK2818_REGULATOR_LP8725=y
 CONFIG_MEDIA_SUPPORT=y
 
index 8f01bee09760590f33d48631ccbaa165eb1e21e5..f8af0c0450c8f1455e9a1d3c38f32fe2f7a0fdf1 100644 (file)
@@ -100,6 +100,7 @@ int gBatVoltageLevel = VOLTAGE_MID_LEVEL;
 int gBatUseStatus = BAT_LOADER_STATUS; 
 
 static struct regulator *pChargeregulator;
+int gVbuscharge = 0;
 
 extern int dwc_vbus_status(void);
 extern int get_msc_connect_flag(void);
@@ -145,6 +146,7 @@ typedef enum {
 
 static int rk2818_get_charge_status(void)
 {
+ struct regulator * rdev = pChargeregulator;
        //DBG("gAdcValue[CHN_USB_ADC]=%d\n",gAdcValue[CHN_USB_ADC]);
        if(gAdcValue[CHN_USB_ADC] > 250)        //about 0.5V
                {
@@ -152,12 +154,23 @@ static int rk2818_get_charge_status(void)
                }
        else if((1 == dwc_vbus_status())&& (0 == get_msc_connect_flag()))
                {
-                 regulator_set_current_limit(pChargeregulator,0,1200000);
+                 if(gVbuscharge !=1)
+{
+     if(rdev== pChargeregulator )
+                       regulator_set_current_limit(rdev,0,1200000);
+}
+                  gVbuscharge = 1;
                return 1;
                }
        else
                {
-               regulator_set_current_limit(pChargeregulator,0,475000);
+               if(gVbuscharge !=0 )
+{
+     if(rdev== pChargeregulator )
+                       regulator_set_current_limit(rdev,0,475000);             
+}
+                gVbuscharge = 0;
+               
                return 0;
                }
 }
index e5448627722f5349644a83812a30a99a336023a1..d3c11dd9d23ab9d86b34212e1bd233982fc1bf6f 100644 (file)
@@ -74,11 +74,10 @@ static int charge_get_current(struct regulator_dev *dev)
 static int charge_set_current(struct regulator_dev *dev,\r
                                  int min_uA, int max_uA)\r
 {\r
-       printk("enter charge_set_current , max_uA = %d\n",max_uA);\r
+       DBG("enter charge_set_current , max_uA = %d\n",max_uA);\r
        struct charge_platform_data *pdata = rdev_get_drvdata(dev);\r
        const int *current_map = charge_current_map;\r
        int max_mA = max_uA / 1000;\r
-       printk("charge_set_current:pdata->gpio_charge=%d\n",pdata->gpio_charge);\r
        if ( max_mA == current_map[0] )\r
             gpio_direction_output(pdata->gpio_charge, GPIO_HIGH);\r
        else \r
@@ -110,14 +109,9 @@ static int __devinit charge_regulator_probe(struct platform_device *pdev)
        struct charge_platform_data *pdata = pdev->dev.platform_data;\r
        struct regulator_dev *rdev;\r
        int ret ;\r
-printk(KERN_INFO "enter charge regulator\n");\r
-#if 0\r
-       rdev = regulator_register(&chargeregulator, &pdev->dev,\r
-                               pdev->dev.platform_data, pdata);\r
-#else\r
+
        rdev = regulator_register(&chargeregulator, &pdev->dev,\r
                                pdata->init_data, pdata);\r
-#endif\r
        if (IS_ERR(rdev)) {\r
                dev_dbg(&pdev->dev, "couldn't register regulator\n");
                return PTR_ERR(rdev);\r