The Sona IF573 Bluetooth core implements a secure firmware download protocol that requires the radio core to be placed into a special ‘autobaud’ mode. Bluetooth firmware download is only supported in autobaud mode. Autobaud mode is entered when the CTS input on the radio is in the asserted (low) state when BT_REG_ON is asserted (W_DISABLE2# de-asserted), bringing the Bluetooth core out of reset. This requires that there is host GPIO control over the BT_REG_ON/W_DISABLE2# signal. This is complicated by the fact that the H4 protocol implemented on the Bluetooth UART requires hardware handshaking for reliable communications.

The hciattach/btattach user mode daemons that have traditionally been used to manage Bluetooth serial interfaces can not be used with the Sona IF573. These utilities do not have the capability to sequence the BT_REG_ON/WL_DISABLE2# and CTS signals to place the radio into the autobaud mode to perform firmware download. Instead, the Bluetooth serial interface on the Sona IF573 should be managed using the serial device bus (serdev) interface available in kernel 4.12 and later. The host GPIO used to control BT_REG_ON/WL_DISABLE2# is specified in the serdev bluetooth binding along with other properties.

Here is a sample device tree binding that configures the Sona IF573 Bluetooth interface for an iMX8MP-EVK board that uses a GPIO pin on an I2C expander to control BT_REG_ON/WL_DISABLE2#.

&uart1 {
  bluetooth {
      compatible = "infineon,cyw55572-bt";
      brcm,requires-autobaud-mode;
      max-speed = <921600>;
      # shutdown-gpios defines the pin that controls BT_REG_ON
      # A logical 1 is used to power on the radio
      shutdown-gpios = <&pca6416 7 GPIO_ACTIVE_HIGH>;
    };
};

Note the following essential elements:

  • a ‘bluetooth’ subnode is created in the uart node.
    • This causes the UART to be managed as a bluetooth serdev client instead of tty device
  • The ‘compatible’ property is set to “infineon,cyw55572-bt”
  • The ‘brcm,requires-autobaud-mode’ property is defined
  • ‘shutdown-gpios’ specifies the GPIO pin used to control BT_REG_ON/WL_DISABLE2#
    • GPIO name is misleading - a logical ‘1’ is used to power on the radio and must result in the gpio going high