otg-功能實(shí)現(xiàn)

  • 命運(yùn)以痛吻我季俩,我報(bào)之以歌

背景介紹:
我們mt8167項(xiàng)目用到了2顆充電ic窃肠,分別是 HL 7026 和 ETA 6095 ,

HL 7026 :可以用mtk公版BQ 24296 的代碼稠肘,而且是i2c通訊方式,而ETA 6095沒有i2c台谍,只是硬件去控制 I/O镐依;

ETA 6095:通過硬件去控制I/O匹涮,沒有i2c。

figure TCS1320a

上圖的 USB_ID腳 是檢測(cè)插入是 otg 還是 USB 充電槐壳,CC_COUT1 腳是檢測(cè)充電電流的大腥坏汀(500,2000,3000 ma)务唐。

首先在 defconfig 中去配置 :

CONFIG_MTK_SWCHR_SUPPORT雳攘,

CONFIG_MTK_SWCHR_SUPPORT

CONFIG_MTK_BQ24296_SUPPORT

然后修改 \kernel-4.4\drivers\power\mediatek 下的Makefile 打開switch_charging.c
打開開關(guān)充電才能進(jìn)行電流控制( cc cv階段大小電流充電)

ifeq ($(CONFIG_MTK_SWCHR_SUPPORT),y)
        obj-$(CONFIG_MTK_SWCHR_SUPPORT) += switch_charging.o

接下來就是一些功能的現(xiàn)實(shí):

最初的需求是:

不用 BQ 的 OTG 功能枫笛,所以我們要去屏蔽 BQ 的 otg吨灭,我們?cè)?/p>

kernel-4.4\drivers\misc\mediatek\usb20\mt8167\usb20_host.c文件中把 OTG_BOOST_BY_SWITCH_CHARGER 相關(guān)的宏定義全部取反定義(比如 #ifndef 改為 #ifdefine ),_

為什么要取反呢刑巧?如 下面的usb20.h 如果定義CONFIG_MTK_BQ24296_SUPPORT 的話喧兄,那么就會(huì)定義 OTG_BOOST_BY_SWITCH_CHARGER 的,接著往下看


#if (defined(CONFIG_MTK_FAN5405_SUPPORT) \
    || defined(CONFIG_MTK_BQ24158_SUPPORT) \
    || defined(CONFIG_MTK_NCP1851_SUPPORT) \
    || defined(CONFIG_MTK_BQ24196_SUPPORT) \
    || defined(CONFIG_MTK_NCP1854_SUPPORT) \
    || defined(CONFIG_MTK_BQ24297_SUPPORT) \
    || defined(CONFIG_MTK_BQ24296_SUPPORT)) \
    && !defined(CONFIG_MTK_DUAL_INPUT_CHARGER_SUPPORT)
#define OTG_BOOST_BY_SWITCH_CHARGER 1
#endif
  • 1 下面進(jìn)入 void mt_usb_set_vbus(struct musb *musb, int is_on) 函數(shù)中看下
void mt_usb_set_vbus(struct musb *musb, int is_on)
{
    DBG(0, "mt65xx_usb20_vbus++,is_on=%d\r\n", is_on);
#ifndef FPGA_PLATFORM
    if (is_on) {
         /*插入 USB 時(shí) is_on 是 1 */
        /* power on VBUS, implement later... */
#if defined OTG_BOOST_BY_SWITCH_CHARGER  /*如上解釋這個(gè)宏有定義的話海诲,就要打開才能跑下面的函數(shù)*/
      
        tbl_charger_otg_vbus((work_busy(&musb->id_pin_work.work) << 8) | 1);
      /*  進(jìn)入tbl_helper_func.c去寫成otg模式【 bq24296_set_otg_config(0x1); 】*/
        pinctrl_select_state(pinctrl, pinctrl_drvvbus_high);
      /* 拉高 vbus 的 i/o腳*/
        
#else
#ifdef CONFIG_OF
#if defined(CONFIG_MTK_LEGACY)
        mt_set_gpio_mode(drvvbus_pin, drvvbus_pin_mode);
        mt_set_gpio_out(drvvbus_pin, GPIO_OUT_ONE);
#else
        DBG(0, "****%s:%d Drive VBUS ON!!!!!\n", __func__, __LINE__);
        pinctrl_select_state(pinctrl, pinctrl_drvvbus_high);
#endif
#else
        mt_set_gpio_mode(GPIO_OTG_DRVVBUS_PIN, GPIO_OTG_DRVVBUS_PIN_M_GPIO);
        mt_set_gpio_out(GPIO_OTG_DRVVBUS_PIN, GPIO_OUT_ONE);
#endif
#endif
    } else {
         /*拔出 USB 時(shí) is_on 是 0 */
        /* power off VBUS, implement later... */
#if defined OTG_BOOST_BY_SWITCH_CHARGER

        tbl_charger_otg_vbus((work_busy(&musb->id_pin_work.work) << 8) | 0);
        pinctrl_select_state(pinctrl, pinctrl_drvvbus_low);//zy add
        printk("[otg2]-OTG_BOOST_BY_SWITCH_CHARGER");
#else
#ifdef CONFIG_OF
#if defined(CONFIG_MTK_LEGACY)
        mt_set_gpio_mode(drvvbus_pin, drvvbus_pin_mode);
        mt_set_gpio_out(drvvbus_pin, GPIO_OUT_ZERO);
#else
        DBG(0, "****%s:%d Drive VBUS OFF!!!!!\n", __func__, __LINE__);
        pinctrl_select_state(pinctrl, pinctrl_drvvbus_low);
#endif
#else
        mt_set_gpio_mode(GPIO_OTG_DRVVBUS_PIN, GPIO_OTG_DRVVBUS_PIN_M_GPIO);
        mt_set_gpio_out(GPIO_OTG_DRVVBUS_PIN, GPIO_OUT_ZERO);
#endif
#endif
    }
#endif
}
  • 2 跟著tbl_charger_otg_vbus((work_busy(&musb->id_pin_work.work) << 8) | 1);函數(shù)進(jìn)入tbl_helper_func.c這個(gè)文件看下怎么設(shè)置BQ的寄存器
void tbl_charger_otg_vbus(int mode)
{
#ifdef CONFIG_MTK_BQ24296_SUPPORT
        bq24296_set_chg_config(0x0); /*disable charge*/
        //bq24296_set_otg_config(0x1); /*disable OTG func*/  
        bq24296_set_boostv(0x7); /*boost voltage 4.998V*/
        bq24296_set_boost_lim(0x1); /*1.5A on VBUS*/
        bq24296_set_en_hiz(0x0);
        #endif
        ...
        }

該函數(shù)里面會(huì)去寫 BQ 的01寄存器去使能otg模式繁莹,再進(jìn)入該函數(shù)把

//bq24296_set_otg_config(0x1);

這個(gè)屏蔽即可。

第二個(gè)需求是:又要用 BQ 的 OTG 功能特幔,繼續(xù)改代碼,我們只需要把dts里面的

drvvbus_gpio

改成BQ otg_en腳對(duì)應(yīng)的I/O闸昨,然后把

bq24296_set_otg_config(0x1);

這個(gè)打開就行了蚯斯。

后面還要把typec的識(shí)別功能(TCS1320a IC 來完成)改成用pmic(mt6392 )來完成,待續(xù)6稀拍嵌!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市循诉,隨后出現(xiàn)的幾起案子横辆,更是在濱河造成了極大的恐慌,老刑警劉巖茄猫,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狈蚤,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡划纽,警方通過查閱死者的電腦和手機(jī)脆侮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來勇劣,“玉大人靖避,你說我怎么就攤上這事潭枣。” “怎么了幻捏?”我有些...
    開封第一講書人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵盆犁,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我篡九,道長(zhǎng)谐岁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任瓮下,我火速辦了婚禮翰铡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讽坏。我一直安慰自己锭魔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開白布路呜。 她就那樣靜靜地躺著迷捧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胀葱。 梳的紋絲不亂的頭發(fā)上漠秋,一...
    開封第一講書人閱讀 52,156評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音抵屿,去河邊找鬼庆锦。 笑死,一個(gè)胖子當(dāng)著我的面吹牛轧葛,可吹牛的內(nèi)容都是我干的搂抒。 我是一名探鬼主播,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼尿扯,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼求晶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起衷笋,我...
    開封第一講書人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤芳杏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后辟宗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體爵赵,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年慢蜓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了亚再。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晨抡,死狀恐怖氛悬,靈堂內(nèi)的尸體忽然破棺而出则剃,到底是詐尸還是另有隱情,我是刑警寧澤如捅,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布棍现,位于F島的核電站,受9級(jí)特大地震影響镜遣,放射性物質(zhì)發(fā)生泄漏己肮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一悲关、第九天 我趴在偏房一處隱蔽的房頂上張望谎僻。 院中可真熱鬧,春花似錦寓辱、人聲如沸艘绍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诱鞠。三九已至,卻和暖如春这敬,著一層夾襖步出監(jiān)牢的瞬間航夺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來泰國打工崔涂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阳掐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓冷蚂,卻偏偏與公主長(zhǎng)得像锚烦,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帝雇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)蛉拙,斷路器尸闸,智...
    卡卡羅2017閱讀 134,693評(píng)論 18 139
  • 歷時(shí)三周左右的時(shí)間,完成了一架四旋翼無人機(jī)F450的組裝孕锄,今天成功試飛定高吮廉、定點(diǎn)、自動(dòng)返航畸肆、自動(dòng)降落等飛行...
    85后程序員閱讀 24,314評(píng)論 11 48
  • 感恩涼爽的天氣宦芦,白天工作很舒服,晚上睡覺也很舒服轴脐,睡眠質(zhì)量超好调卑,一覺睡到天亮抡砂。 感恩自己超棒的身體,小有感...
    喜悅的霞光閱讀 192評(píng)論 0 0
  • 我打碎了窗子 住著牽盘窠В花的家 我用淚水澆灌 灼燒它嬌嫩的葉 以為它懂得我的愛 卻只是我以為而已 我打碎了自己 撕裂...
    三聞魚r閱讀 265評(píng)論 4 2
  • 每天都要畫畫攝影打卡注益。時(shí)間簡(jiǎn)直不夠。
    Lyiata閱讀 114評(píng)論 0 0