介绍

蓝牙控制器上电驱动程序和蓝牙 HCI 驱动程序被设计用来支持蓝牙模块。

架构

蓝牙 HCI 驱动程序架构在下图中进行了总结。

../../_images/bluetooth_hci_driver_arch.svg

实现

蓝牙控制器上电驱动程序

Realtek 的蓝牙控制器上电驱动程序是在以下文件中实现的:

驱动程序位置

介绍

<linux>/drivers/rtkdrivers/bluetooth/realtek-bt.c

包含 Realtek 的蓝牙控制器上电功能

static int rtk_bt_cdev_set_power(struct rtk_bt_power_info *info)

蓝牙 HCI 驱动程序

Linux 蓝牙子系统支持原生蓝牙网络。

蓝牙 HCI UART 驱动程序在以下文件中实现:

驱动程序位置

介绍

<linux>/drivers/bluetooth/Kconfig

蓝牙 HCI 驱动程序 Kconfig

<linux>/drivers/bluetooth/Makefile

蓝牙 HCI 驱动程序 Makefile

<linux>/drivers/bluetooth/hci_h4.c

HCI UART 协议相关函数

<linux>/drivers/bluetooth/hci_ldisc.c

HCI UART TTY 行规函数

<linux>/drivers/bluetooth/rtk_coex.c

HCI UART 共存处理函数

配置

设备树配置

蓝牙 HCI 驱动程序

UART3 是专用于蓝牙的 UART。设备树节点在 <dts>/rtl8730e-ocp.dtsi 中定义。

uart3: serial@41007000 {
   compatible = "realtek,ameba-uart";
   reg = <0x41007000 0x100>;
   clocks = <&rcc RTK_CKE_UART3>;
   interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
};

其中:

compatible:

用于匹配驱动程序和设备的 ID,不可配置。

reg:

寄存器资源,不可配置。

clocks:

UART 时钟节点,不可配置。

interrupts:

SPI 中断,不可配置。

编译配置

蓝牙控制器上电驱动程序

选择 Device Drivers > Drivers for Realtek > Realtek bluetooth ioctl driver

Drivers for Realtek
------------------------------
...
<M> Watchdog driver
< > DW3000 driver
<*> Realtek bluetooth ioctl driver

蓝牙 OTP 读写驱动程序

选择 Device Drivers > Drivers for Realtek > OTP driver

Drivers for Realtek
------------------------------
...
<*> OTP driver
    <*> OTP for userspace

蓝牙 HCI 驱动程序

  1. 选择 Networking support > Bluetooth subsystem support > Bluetooth device drivers > HCI UART driver

    --- Networking support
          Networking options --->
    [ ] Amateur Radio support ----
    < > CAN bus subsystem support ----
    <*> Bluetooth subsystem support ---->
          ...
          Bluetooth device drivers ---->
             < > HCI USB driver
             <*> HCI UART driver
             ...
    
  2. 选择 Device Drivers > Drivers for Realtek > UART driver > General UART driver

    Drivers for Realtek
    ------------------------------
    ...
    <*> UART driver
        [*] Console on AMEBA serial port
        [*] General UART driver