1. installation

vi /etc/modules-load.d/cid.conf
bluetooth
btbcm
hci_uart
source /bin/cid-functions
cid_del_line /etc/modprobe.d/blacklist.conf bluetooth
cid_del_line /etc/modprobe.d/blacklist.conf btbcm
cid_del_line /etc/modprobe.d/blacklist.conf hci_uart
modprobe bluetooth
modprobe btbcm
modprobe hci_uart
yum -y install bluez bluez-tools rfkill usbutils
systemctl start bluetooth.service

2. debug

hcitool dev
Devices:
        hci0    00:09:DD:50:88:BA
hciconfig
hci0:   Type: Primary  Bus: USB
        BD Address: 00:09:DD:50:88:BA  ACL MTU: 310:10  SCO MTU: 64:8
        UP RUNNING
        RX bytes:1094 acl:0 sco:0 events:54 errors:0
        TX bytes:1916 acl:0 sco:0 commands:52 errors:0
bluetoothctl
 [NEW] Controller 00:09:DD:50:88:BA srv030.d01.net [default]
[bluetooth]#
agent on
default-agent
power on
scan on
pair 88:C6:26:71:AB:A5
list
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:09:DD:50:88:BA Discovering: yes
[NEW] Device 88:C6:26:71:AB:A5 Logitech BT Adapter
[CHG] Device 88:C6:26:71:AB:A5 RSSI: -45
bt-adapter -d
Searching...
[88:C6:26:71:AB:A5]
  Name: Logitech BT Adapter
  Alias: Logitech BT Adapter
  Address: 88:C6:26:71:AB:A5
  Icon: audio-card
  Class: 0x240414
  LegacyPairing: 0
  Paired: 0
  RSSI: -32

3. working with raspbian

btuart
bcm43xx_init
Flash firmware /lib/firmware/brcm/BCM4345C0.hcd
Set Controller UART speed to 3000000 bit/s
Device setup complete
hcitool dev
Devices:
        hci0    DC:A6:32:2A:56:7D
bluetoothctl list
Controller DC:A6:32:2A:56:7D raspberrypi [default]

4. srv030 + external key

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode) <<<<<<<<<
Bus 001 Device 002: ID 2109:3431 VIA Labs, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

5. thinkpad t420 + onboard bluetooth

bluetoothctl
Agent registered
[CHG] Device F8:AD:CB:19:1F:93 RSSI: -64
[CHG] Device F8:AD:CB:19:1F:93 Connected: yes

6. scripts

wget -N -nv d01cid.ddns.net/sharel/lib/firmware/brcm/BCM4345C0.hcd -P /lib/firmware/brcm/
cd /etc/; ln -sv ../lib/firmware/ .; cd
cd /dev/; ln -sv ./ttyAMA0 serial1; cd
cd /dev/; ln -sv ./ttyS0 serial0; cd
ll /dev/serial*
lrwxrwxrwx 1 root root 5 Jun 16 20:26 /dev/serial0 -> ttyS0
lrwxrwxrwx 1 root root 7 Jun 16 20:26 /dev/serial1 -> ttyAMA0
btuart
 bcm43xx_init
Flash firmware /lib/firmware/brcm/BCM4345C0.hcd
Set Controller UART speed to 3000000 bit/s
Device setup complete
vi btuart
#!/bin/sh

HCIATTACH=/usr/bin/hciattach
if grep -q "Pi 4" /proc/device-tree/model; then
  BDADDR=
else
  SERIAL=`cat /proc/device-tree/serial-number | cut -c9-`
  B1=`echo $SERIAL | cut -c3-4`
  B2=`echo $SERIAL | cut -c5-6`
  B3=`echo $SERIAL | cut -c7-8`
  BDADDR=`printf b8:27:eb:%02x:%02x:%02x $((0x$B1 ^ 0xaa)) $((0x$B2 ^ 0xaa)) $((0x$B3 ^ 0xaa))`
fi

uart0="`cat /proc/device-tree/aliases/uart0`"
serial1="`cat /proc/device-tree/aliases/serial1`"

if [ "$uart0" = "$serial1" ] ; then
        uart0_pins="`wc -c /proc/device-tree/soc/gpio@7e200000/uart0_pins/brcm\,pins | cut -f 1 -d ' '`"
        if [ "$uart0_pins" = "16" ] ; then
                $HCIATTACH /dev/serial1 bcm43xx 3000000 flow - $BDADDR
        else
                $HCIATTACH /dev/serial1 bcm43xx 921600 noflow - $BDADDR
        fi
else
        $HCIATTACH /dev/serial1 bcm43xx 460800 noflow - $BDADDR
fi

7. blog

if i disable enable_uart=1 from /boot/config.txt i have no more /dev/ttyS0
To summarise the ports on a Raspberry Pi 3 / 4 and be crystal clear:
/dev/ttyAMA0 -> Bluetooth
/dev/ttyS0 -> GPIO serial port.

8. refereces