]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - bms-linux/bms-kernel-3-18.git/commitdiff
optimize to improve PD contact establish
authorFalong Li <falong-li@ti.com>
Mon, 4 Dec 2017 02:12:54 +0000 (10:12 +0800)
committerFalong Li <falong-li@ti.com>
Mon, 4 Dec 2017 02:12:54 +0000 (10:12 +0800)
enable tusb422_work run with real time prority
reduce runing time of PD manager

drivers/power/bq2597x_charger.c
drivers/power/tusb422_linux_v1.00/tusb422_linux.c
drivers/power/tusb422_linux_v1.00/usb_pd_policy_engine.c
drivers/power/tusb422_linux_v1.00/usb_pd_policy_manager.c

index dfdd95ead71a4ddf40e0eaa859a55dbce063b9ec..e0bf6e2bd139220d2137bfa19e5b4166116efa61 100644 (file)
@@ -1656,7 +1656,8 @@ static enum power_supply_property bq2597x_charger_props[] = {
 
 };
 
-static void bq2597x_update_status(struct bq2597x *bq);
+static void bq2597x_check_alarm_status(struct bq2597x *bq);
+static void bq2597x_check_fault_status(struct bq2597x *bq);
 
 static int bq2597x_charger_get_property(struct power_supply *psy,
                                enum power_supply_property psp,
@@ -1733,11 +1734,8 @@ static int bq2597x_charger_get_property(struct power_supply *psy,
                val->intval = bq->die_temp;
                break;
        case POWER_SUPPLY_PROP_TI_ALARM_STATUS:
-               /* call bq2597x_update_status to get recent status/flag
-                * alarm/fault clear would not trigger interrupt, so to
-                * to read to again to reflect current status.
-                * */
-               bq2597x_update_status(bq);
+
+//             bq2597x_check_alarm_status(bq);
 
                val->intval = ((bq->bat_ovp_alarm << BAT_OVP_ALARM_SHIFT)
                        | (bq->bat_ocp_alarm << BAT_OCP_ALARM_SHIFT)
@@ -1750,7 +1748,8 @@ static int bq2597x_charger_get_property(struct power_supply *psy,
                break;
 
        case POWER_SUPPLY_PROP_TI_FAULT_STATUS:
-               bq2597x_update_status(bq);
+//             bq2597x_check_fault_status(bq);
+
                val->intval = ((bq->bat_ovp_fault << BAT_OVP_FAULT_SHIFT)
                        | (bq->bat_ocp_fault << BAT_OCP_FAULT_SHIFT)
                        | (bq->bus_ovp_fault << BUS_OVP_FAULT_SHIFT)
@@ -1854,10 +1853,9 @@ static void bq2597x_dump_reg(struct bq2597x *bq)
 
 }
 EXPORT_SYMBOL_GPL(bq2597x_dump_reg);
-/*
- * update alarm or fault status, PD policy manager will process the events
- */
-static void bq2597x_update_status(struct bq2597x *bq)
+
+
+static void bq2597x_check_alarm_status(struct bq2597x *bq)
 {
        int ret;
        u8 flag = 0;
@@ -1865,8 +1863,6 @@ static void bq2597x_update_status(struct bq2597x *bq)
        bool changed = false;
 
        mutex_lock(&bq->data_lock);
-
-       
        ret = bq2597x_read_byte(bq, BQ2597X_REG_08, &flag);
        if (!ret && (flag & BQ2597X_IBUS_UCP_FALL_FLAG_MASK))
                pr_debug("UCP_FLAG =0x%02X\n", !!(flag & BQ2597X_IBUS_UCP_FALL_FLAG_MASK));
@@ -1903,6 +1899,22 @@ static void bq2597x_update_status(struct bq2597x *bq)
        if (!ret && (stat & 0x02))
                pr_err("Reg[0A]CONV_OCP = 0x%02X\n", stat);
                
+       mutex_unlock(&bq->data_lock);
+       
+       if (changed)
+               power_supply_changed(&bq->fc2_psy);
+
+}
+
+static void bq2597x_check_fault_status(struct bq2597x *bq)
+{
+       int ret;
+       u8 flag = 0;
+       u8 stat = 0;
+       bool changed = false;
+
+       mutex_lock(&bq->data_lock);
+       
        ret = bq2597x_read_byte(bq, BQ2597X_REG_10, &stat);
        if (!ret && stat)
                pr_err("FAULT_STAT = 0x%02X\n", stat);
@@ -1930,8 +1942,8 @@ static void bq2597x_update_status(struct bq2597x *bq)
        if (changed)
                power_supply_changed(&bq->fc2_psy);
 
-}
 
+}
 
 
 static irqreturn_t bq2597x_charger_interrupt(int irq, void *dev_id)
@@ -1953,7 +1965,9 @@ static irqreturn_t bq2597x_charger_interrupt(int irq, void *dev_id)
        bq->irq_waiting = false;
 
        /* TODO */
-       bq2597x_update_status(bq);
+       bq2597x_check_alarm_status(bq);
+       bq2597x_check_fault_status(bq);
+
 #if 0
        bq2597x_dump_reg(bq);
 #endif
index 7cfb554589a892601f6c696da18a15a28552573b..9ef855b29d6e82e2fa545a326b0de0e1eff006fc 100644 (file)
@@ -57,7 +57,7 @@
 
 /* Uncomment the following line to use real-time priority kernel thread
  * instead of high-priority workqueue for processing */
-//#define TUSB422_KTHREAD
+#define TUSB422_KTHREAD
 
 /* Uncomment the following line to delay the start of IRQ processing to allow 
  * other drivers to load first. Delay time is defined as START_WORK_DELAY. 
@@ -67,7 +67,7 @@
 
 /* Uncomment the following line to enable CPU idle polling for a fixed period 
  * after an interrupt is serviced to reduce latency due to CPU wakeup */
-//#define TUSB422_CPU_POLL_CTRL
+#define TUSB422_CPU_POLL_CTRL
 #define CPU_POLL_CTRL_TIMEOUT  msecs_to_jiffies(50)
 
 /* Remove the following line to disable sysfs debug */
index c43bd4cf45f99e7e4fa57c1e29acea9392c69f95..da0cfbbe92f9e2b139ffd7374e045b2dd3c8f430 100644 (file)
@@ -36,6 +36,7 @@
  *
  */
 
+#define pr_fmt(fmt)    "[PD-PE]: %s: " fmt, __func__
 #include "usb_pd_policy_engine.h"
 #include "tcpm.h"
 #include "tusb422.h"
@@ -3252,6 +3253,7 @@ static void pe_src_ready_entry(usb_pd_port_t *dev)
 
 static void pe_src_hard_reset_received_entry(usb_pd_port_t *dev)
 {
+       pr_err("Hardreset Received\n");
        timer_start(&dev->timer, T_PS_HARD_RESET_MS, timeout_ps_hard_reset);
        return;
 }
@@ -3897,6 +3899,8 @@ static void pe_snk_ready_entry(usb_pd_port_t *dev)
 static void pe_snk_hard_reset_entry(usb_pd_port_t *dev)
 {
        dev->hard_reset_cnt++;
+       pr_err("snk tx hardreset,hard_reset_cnt=%d\n", dev->hard_reset_cnt);
+
        tcpm_transmit(dev->port, NULL, TCPC_TX_HARD_RESET);
 
        return;
index 54899d8de41c76791d0fa563be7abea5ea4e9f9f..2ad54bb71b473cfecd0636d2f7dd1782bf3a5226 100644 (file)
@@ -222,7 +222,7 @@ static void usb_pd_pm_update_fc_status(void)
        ret = pm_state.fc_psy->get_property(pm_state.fc_psy, POWER_SUPPLY_PROP_CHARGE_ENABLED, &val);
        if (!ret)
                pm_state.bq2597x.charge_enabled = val.intval;
-       
+
        ret = pm_state.fc_psy->get_property(pm_state.fc_psy, POWER_SUPPLY_PROP_TI_ALARM_STATUS, &val);
        if (!ret) {
                pm_state.bq2597x.bat_ovp_alarm = !!(val.intval & BAT_OVP_ALARM_MASK); 
@@ -566,10 +566,10 @@ static int usb_pd_pm_flash2_charge(unsigned int port)
            
 
     steps = min(sw_ctrl_steps, hw_ctrl_steps);
-
+#if 0
     pr_debug("step_vbat=%d, step_ibat=%d, step_ibus = %d, hw_ctrl_steps=%d, step_bat_reg = %d, adjust step= %d\n", 
                step_vbat, step_ibat, step_ibus,hw_ctrl_steps, step_bat_reg, steps);
-
+#endif
     pm_state.request_volt = pm_state.request_volt + steps * 20;
 
     if (pm_state.request_volt > dev->apdo_max_volt)
@@ -1090,13 +1090,15 @@ void build_rdo(unsigned int port)
 static void usb_pd_pm_workfunc(struct work_struct *work)
 {
 
-       schedule_delayed_work(&pm_state.pm_work, msecs_to_jiffies(50));
-
-       usb_pd_pm_update_sw_status();
-       usb_pd_pm_update_fc_status();
+       if (pm_state.state !=  PD_PM_STATE_FLASH2_GET_PPS_STATUS) {
+               usb_pd_pm_update_sw_status();
+               usb_pd_pm_update_fc_status();
+       }
 
        usb_pd_pm_statemachine(0);
 
+       schedule_delayed_work(&pm_state.pm_work, msecs_to_jiffies(60));
+
 }
 
 void usb_pd_print_version(void)