mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +09:00
modify how to monitor whether charge is full
This commit is contained in:
@@ -1127,7 +1127,7 @@ struct platform_device rk2818_soc_camera_pdrv = {
|
||||
* battery devices
|
||||
* author: lw@rock-chips.com
|
||||
*****************************************************************************************/
|
||||
#define CHARGEOK_PIN SPI_GPIO_P6_06//RK2818_PIN_PB1
|
||||
#define CHARGEOK_PIN FPGA_PIO0_06
|
||||
struct rk2818_battery_platform_data rk2818_battery_platdata = {
|
||||
.charge_ok_pin = CHARGEOK_PIN,
|
||||
.charge_ok_level = 0,
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
#define SLOPE_SECOND_COUNTS 120 //ͳ<>Ƶ<EFBFBD>ѹб<D1B9>ʵ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>s
|
||||
#define TIME_UPDATE_STATUS 5000 //<2F><><EFBFBD>µ<EFBFBD><C2B5><EFBFBD>״̬<D7B4><CCAC>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ms
|
||||
#define BATT_MAX_VOL_VALUE 4180 //<2F><><EFBFBD><EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD><C4B5>ص<EFBFBD>ѹ FOR A7
|
||||
#define BATT_ZERO_VOL_VALUE 3400 //<2F>ػ<EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD><C4B5>ص<EFBFBD>ѹ
|
||||
#define BATT_ZERO_VOL_VALUE 3500 //<2F>ػ<EFBFBD>ʱ<EFBFBD>ĵ<EFBFBD><C4B5>ص<EFBFBD>ѹ
|
||||
#define BATT_NOMAL_VOL_VALUE 3800
|
||||
#define THRESHOLD_VOLTAGE_LEVEL0 4050
|
||||
#define THRESHOLD_VOLTAGE_LEVEL1 3950
|
||||
@@ -56,7 +56,7 @@
|
||||
#define BATT_LEVEL_EMPTY 0
|
||||
#define BATT_PRESENT_TRUE 1
|
||||
#define BATT_PRESENT_FALSE 0
|
||||
#define BAT_1V2_VALUE 1330
|
||||
#define BAT_1V2_VALUE 1270
|
||||
|
||||
#define BAT_LOADER_STATUS 0 //<2F>õ<EFBFBD>״̬
|
||||
#define BAT_CHANGE_STATUS 1 //<2F><><EFBFBD><EFBFBD>״̬
|
||||
@@ -74,6 +74,8 @@
|
||||
|
||||
#define NUM_VOLTAGE_SAMPLE ((1000*SLOPE_SECOND_COUNTS) / TIMER_MS_COUNTS) //<2F>洢<EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
static int gBatFullFlag = 0;
|
||||
|
||||
static int gBatLastStatus = 0;
|
||||
static int gBatStatus = POWER_SUPPLY_STATUS_UNKNOWN;
|
||||
static int gBatHealth = POWER_SUPPLY_HEALTH_GOOD;
|
||||
@@ -148,49 +150,52 @@ 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
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
else if((1 == dwc_vbus_status())&& (0 == get_msc_connect_flag()))
|
||||
{
|
||||
if(gVbuscharge !=1)
|
||||
{
|
||||
if(rdev== pChargeregulator )
|
||||
regulator_set_current_limit(rdev,0,1200000);
|
||||
}
|
||||
gVbuscharge = 1;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(gVbuscharge !=0 )
|
||||
{
|
||||
if(rdev== pChargeregulator )
|
||||
regulator_set_current_limit(rdev,0,475000);
|
||||
}
|
||||
gVbuscharge = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
/*if(gAdcValue[CHN_USB_ADC] > 250)
|
||||
{ //about 0.5V
|
||||
return 1;
|
||||
}
|
||||
else */
|
||||
if((1 == dwc_vbus_status())&& (0 == get_msc_connect_flag()))
|
||||
{
|
||||
DBG("CHARGE!\n");
|
||||
if(gVbuscharge !=1) {
|
||||
if(rdev== pChargeregulator )
|
||||
regulator_set_current_limit(rdev,0,1200000);
|
||||
}
|
||||
gVbuscharge = 1;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
DBG("NOT CHARGING!\n");
|
||||
if(gVbuscharge !=0 ) {
|
||||
if(rdev== pChargeregulator )
|
||||
regulator_set_current_limit(rdev,0,475000);
|
||||
}
|
||||
gVbuscharge = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void rk2818_get_bat_status(struct rk2818_battery_data *bat)
|
||||
{
|
||||
if(rk2818_get_charge_status() == 1)
|
||||
{
|
||||
/*
|
||||
if(gpio_get_value (bat->charge_ok_pin) == bat->charge_ok_level)
|
||||
{
|
||||
gBatStatus = POWER_SUPPLY_STATUS_FULL;
|
||||
DBG("Battery is Full!\n");
|
||||
}
|
||||
else
|
||||
*/
|
||||
gBatStatus = POWER_SUPPLY_STATUS_CHARGING;
|
||||
//local_irq_disable();
|
||||
if (gBatFullFlag == 0) {
|
||||
gBatStatus = POWER_SUPPLY_STATUS_CHARGING;
|
||||
} else {
|
||||
gBatStatus = POWER_SUPPLY_STATUS_FULL;
|
||||
}
|
||||
//local_irq_enable();
|
||||
DBG("Battery is Charging!\n");
|
||||
}
|
||||
else {
|
||||
gBatFullFlag = 0;
|
||||
gBatStatus = POWER_SUPPLY_STATUS_NOT_CHARGING;
|
||||
DBG("Battery is Not Charging!\n");
|
||||
}
|
||||
else
|
||||
gBatStatus = POWER_SUPPLY_STATUS_NOT_CHARGING;
|
||||
}
|
||||
|
||||
static void rk2818_get_bat_health(struct rk2818_battery_data *bat)
|
||||
@@ -555,12 +560,23 @@ static int rk2818_battery_resume(struct platform_device *dev)
|
||||
#define rk2818_battery_resume NULL
|
||||
#endif
|
||||
|
||||
static irqreturn_t rk2818_battery_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
if((1 == dwc_vbus_status())&& (0 == get_msc_connect_flag())) {//detech when charging
|
||||
gBatFullFlag = 1;
|
||||
}
|
||||
|
||||
DBG(KERN_INFO "-----battery is full-----\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rk2818_battery_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
struct rk2818_battery_data *data;
|
||||
struct rk2818_battery_platform_data *pdata = pdev->dev.platform_data;
|
||||
int irq_flag;
|
||||
|
||||
if (pdata && pdata->io_init) {
|
||||
ret = pdata->io_init();
|
||||
@@ -614,7 +630,14 @@ static int rk2818_battery_probe(struct platform_device *pdev)
|
||||
|
||||
data->charge_ok_pin = pdata->charge_ok_pin;
|
||||
data->charge_ok_level = pdata->charge_ok_level;
|
||||
|
||||
|
||||
irq_flag = (!pdata->charge_ok_level) ? IRQF_TRIGGER_RISING : IRQF_TRIGGER_FALLING;
|
||||
ret = request_irq(gpio_to_irq(pdata->charge_ok_pin), rk2818_battery_interrupt, irq_flag, "rk2818_battery", data);
|
||||
if (ret) {
|
||||
printk("failed to request irq\n");
|
||||
goto err_irq_failed;
|
||||
}
|
||||
|
||||
ret = power_supply_register(&pdev->dev, &data->ac);
|
||||
if (ret)
|
||||
{
|
||||
@@ -659,6 +682,8 @@ err_battery_failed:
|
||||
err_usb_failed:
|
||||
power_supply_unregister(&data->ac);
|
||||
err_ac_failed:
|
||||
free_irq(gpio_to_irq(pdata->charge_ok_pin), data);
|
||||
err_irq_failed:
|
||||
kfree(data);
|
||||
err_data_alloc_failed:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user