介绍

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

架构

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

../../rst_linux/9_bluetooth/figures/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

../../rst_linux/9_bluetooth/figures/bluetooth_build_configuration.png

蓝牙 OTP 读写驱动程序

选择 Device Drivers > Drivers for Realtek > OTP driver

../../rst_linux/9_bluetooth/figures/bluetooth_otp_rw_driver.png

蓝牙 HCI 驱动程序

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

    ../../rst_linux/9_bluetooth/figures/bluetooth_hci_driver_part1.jpeg
    ../../rst_linux/9_bluetooth/figures/bluetooth_hci_driver_part2.jpeg
    ../../rst_linux/9_bluetooth/figures/bluetooth_hci_driver_part3.jpeg
  2. 选择 Device Drivers > Drivers for Realtek > UART driver > General UART driver

    ../../rst_linux/9_bluetooth/figures/bluetooth_hci_driver_part4.jpeg