首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 21520|回復(fù): 2
上一主題 下一主題
[分享]

轉(zhuǎn)個藍牙修改帖--Android BCM4330 藍牙BT驅(qū)動調(diào)試記錄

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2014-2-25 16:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 | 來自浙江
網(wǎng)上關(guān)于BT的驅(qū)動很少,所以我在開發(fā)過程中把其中的步驟記錄下來。供大家相互學(xué)習(xí)討論。

一、關(guān)于BT driver的移植:

1. Enablebluetootch in BoadConfig.mk
       BOARD_HAVE_BLUETOOTH := true

2.實現(xiàn)BT電源管理rfkill驅(qū)動。
Kernel/driver/bluetooth/bluetooth-power.c    高通的這個文件基本上不用動。
在kernel\arch\arm\mach_msm7x27.c: static int bluetooth_power(int on)中
實現(xiàn):上電:把bt_reset pin 和bt_reg_on pin 拉低
                mdelay(10);
              把bt_resetpin 和bt_reg_on pin 拉高
              mdelay(150)
      下電:把bt_reset pin 和bt_reg_on pin 拉低      

3. RebuildAndroid image and reboot
命令行測試:
echo 0 >/sys/class/rfkill/rfkill0/state   //BT下電
echo 1 >/sys/class/rfkill/rfkill0/state   //BT上電
brcm_patchram_plus-d --patchram /etc/firmware/BCM4329B1_002.002.023.0061.0062.hcd/dev/ttyHS0
hciattach -s115200 /dev/ttyHS0 any
沒任何錯誤提示是可以用以下測試
hciconfig hci0up
hcitool scan

4.實現(xiàn)BT睡眠喚醒機制
Kernel\drivers\bluetooth\bluesleep.c一般來說這個文件改動比較少,但可能邏輯上會有些問題。需要小的改動。
在kernel\arch\arm\mach_xxx/board_xxx.c:bluesleep_resources中定義gpio_host_wake(BT喚醒host腳)、gpio_ext_wake(host喚醒BT腳)、host_wake(BT喚醒host的中斷號)。
注:各個平臺的board_xxx.c文件名字不同,請客戶確認

5.系統(tǒng)集成
1)在init.qcom.rc中確認有下面的內(nèi)容:
service hciattach/system/bin/sh /system/etc/init.qcom.bt.sh
    user bluetooth
    group qcom_oncrpc bluetooth net_bt_admin
    disabled
    oneshot

2)修改init.qcom.bt.sh
確認有:
BLUETOOTH_SLEEP_PATH=/proc/bluetooth/sleep/proto
echo 1 >$BLUETOOTH_SLEEP_PATH
/system/bin/hciattach-n /dev/ttyHS0 any 3000000 flow & 改為:
./brcm_patchram_plus--enable_lpm –enable_hci --patchram /system/etc/wifi/BCM4329BT.hcd --baudrate3000000 /dev/ttyHS0 &
注掉:高通下載firmware的命令。

6.重新編譯system。此時BT應(yīng)該能運行了。

二、BT的休眠喚醒配置

BT的休眠在driver/bluetooth/bluesleep.c中,首先驅(qū)動的名字叫“bluesleep”與arch/arm/mach-msm/board-msm7x30.c相匹配就執(zhí)行platform_driver_probe(&bluesleep_driver, bluesleep_probe)然后調(diào)用static int __init bluesleep_probe(struct platform_device *pdev),這里會配置兩個引腳HOST_WAKE_BT & BT_WAKE_HOST
bsi = kzalloc(sizeof(struct bluesleep_info), GFP_KERNEL);
        if (!bsi)
                return -ENOMEM;

        res = platform_get_resource_byname(pdev, IORESOURCE_IO,
                                "gpio_host_wake");
        if (!res) {
                BT_ERR("couldn't find host_wake gpio\n");
                ret = -ENODEV;
                goto free_bsi;
        }
        bsi->host_wake = res->start;
        //[SIMT-zhangmin-111230] change the configuration of BT sleep gpio from bt_power to here {
        gpio_tlmm_config(GPIO_CFG(bsi->host_wake, 0, GPIO_CFG_INPUT, GPIO_CFG_NO_PULL, GPIO_CFG_2MA),GPIO_CFG_ENABLE);
        //[SIMT-zhangmin-111230] }
        ret = gpio_request(bsi->host_wake, "bt_host_wake");
        if (ret)
                goto free_bsi;
        ret = gpio_direction_input(bsi->host_wake);
bsi->host_wake_irq = platform_get_irq_byname(pdev, "host_wake");
如上代碼所示,主要將HOST_WAKE_BT設(shè)置為輸出腳,BT_WAKE_HOST 設(shè)置為輸入腳并也設(shè)置為中斷腳,等待BT芯片的喚醒。
然后再bluesleep_init函數(shù)中建立BT目錄/proc/bluetooth/sleep/讀btwake中HOST_WAKE_BT的狀態(tài)。讀出的狀態(tài)值為0或1。
或在BT目錄/proc/bluetooth/sleep/寫btwake中HOST_WAKE_BT的狀態(tài)。寫出狀態(tài)值為0或1。


上一篇:喵王為華為秘盒供電測試,秘盒果然很省電!
下一篇:終于完成用秘盒做成家庭的文件電影中心了
沙發(fā)
發(fā)表于 2014-3-16 11:30 | 只看該作者 | 來自福建
雖不明,但覺厲!
回復(fù) 支持 反對

使用道具 舉報

板凳
發(fā)表于 2014-3-20 08:09 | 只看該作者 | 來自湖北
雖不明,但覺厲!
回復(fù) 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-9-22 17:25 , Processed in 0.060325 second(s), 14 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表