14fba30f0SMarcel Holtmann /* 24fba30f0SMarcel Holtmann * 34fba30f0SMarcel Holtmann * Bluetooth support for Broadcom devices 44fba30f0SMarcel Holtmann * 54fba30f0SMarcel Holtmann * Copyright (C) 2015 Intel Corporation 64fba30f0SMarcel Holtmann * 74fba30f0SMarcel Holtmann * 84fba30f0SMarcel Holtmann * This program is free software; you can redistribute it and/or modify 94fba30f0SMarcel Holtmann * it under the terms of the GNU General Public License as published by 104fba30f0SMarcel Holtmann * the Free Software Foundation; either version 2 of the License, or 114fba30f0SMarcel Holtmann * (at your option) any later version. 124fba30f0SMarcel Holtmann * 134fba30f0SMarcel Holtmann * This program is distributed in the hope that it will be useful, 144fba30f0SMarcel Holtmann * but WITHOUT ANY WARRANTY; without even the implied warranty of 154fba30f0SMarcel Holtmann * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 164fba30f0SMarcel Holtmann * GNU General Public License for more details. 174fba30f0SMarcel Holtmann * 184fba30f0SMarcel Holtmann * You should have received a copy of the GNU General Public License 194fba30f0SMarcel Holtmann * along with this program; if not, write to the Free Software 204fba30f0SMarcel Holtmann * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 214fba30f0SMarcel Holtmann * 224fba30f0SMarcel Holtmann */ 234fba30f0SMarcel Holtmann 2461b2fc2bSFrederic Danis #define BCM_UART_CLOCK_48MHZ 0x01 2561b2fc2bSFrederic Danis #define BCM_UART_CLOCK_24MHZ 0x02 2661b2fc2bSFrederic Danis 2761b2fc2bSFrederic Danis struct bcm_update_uart_baud_rate { 2861b2fc2bSFrederic Danis __le16 zero; 2961b2fc2bSFrederic Danis __le32 baud_rate; 3061b2fc2bSFrederic Danis } __packed; 3161b2fc2bSFrederic Danis 3261b2fc2bSFrederic Danis struct bcm_write_uart_clock_setting { 3361b2fc2bSFrederic Danis __u8 type; 3461b2fc2bSFrederic Danis } __packed; 3561b2fc2bSFrederic Danis 3640db5f0eSIlya Faenson struct bcm_set_sleep_mode { 3740db5f0eSIlya Faenson __u8 sleep_mode; 3840db5f0eSIlya Faenson __u8 idle_host; 3940db5f0eSIlya Faenson __u8 idle_dev; 4040db5f0eSIlya Faenson __u8 bt_wake_active; 4140db5f0eSIlya Faenson __u8 host_wake_active; 4240db5f0eSIlya Faenson __u8 allow_host_sleep; 4340db5f0eSIlya Faenson __u8 combine_modes; 4440db5f0eSIlya Faenson __u8 tristate_control; 4540db5f0eSIlya Faenson __u8 usb_auto_sleep; 4640db5f0eSIlya Faenson __u8 usb_resume_timeout; 4740db5f0eSIlya Faenson __u8 break_to_host; 48ff875960SLukas Wunner __u8 pulsed_host_wake; 4940db5f0eSIlya Faenson } __packed; 5040db5f0eSIlya Faenson 5140db5f0eSIlya Faenson struct bcm_set_pcm_int_params { 5240db5f0eSIlya Faenson __u8 routing; 5340db5f0eSIlya Faenson __u8 rate; 5440db5f0eSIlya Faenson __u8 frame_sync; 5540db5f0eSIlya Faenson __u8 sync_mode; 5640db5f0eSIlya Faenson __u8 clock_mode; 5740db5f0eSIlya Faenson } __packed; 5840db5f0eSIlya Faenson 5940db5f0eSIlya Faenson struct bcm_set_pcm_format_params { 6040db5f0eSIlya Faenson __u8 lsb_first; 6140db5f0eSIlya Faenson __u8 fill_value; 6240db5f0eSIlya Faenson __u8 fill_method; 6340db5f0eSIlya Faenson __u8 fill_num; 6440db5f0eSIlya Faenson __u8 right_justify; 6540db5f0eSIlya Faenson } __packed; 6640db5f0eSIlya Faenson 674fba30f0SMarcel Holtmann #if IS_ENABLED(CONFIG_BT_BCM) 684fba30f0SMarcel Holtmann 694fba30f0SMarcel Holtmann int btbcm_check_bdaddr(struct hci_dev *hdev); 704fba30f0SMarcel Holtmann int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); 7118aeb444SFrederic Danis int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw); 724fba30f0SMarcel Holtmann 731c8ba6d0SMarcel Holtmann int btbcm_setup_patchram(struct hci_dev *hdev); 741c8ba6d0SMarcel Holtmann int btbcm_setup_apple(struct hci_dev *hdev); 751c8ba6d0SMarcel Holtmann 7675e167e6SFrederic Danis int btbcm_initialize(struct hci_dev *hdev, char *fw_name, size_t len); 7775e167e6SFrederic Danis int btbcm_finalize(struct hci_dev *hdev); 7875e167e6SFrederic Danis 794fba30f0SMarcel Holtmann #else 804fba30f0SMarcel Holtmann 814fba30f0SMarcel Holtmann static inline int btbcm_check_bdaddr(struct hci_dev *hdev) 824fba30f0SMarcel Holtmann { 834fba30f0SMarcel Holtmann return -EOPNOTSUPP; 844fba30f0SMarcel Holtmann } 854fba30f0SMarcel Holtmann 864fba30f0SMarcel Holtmann static inline int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) 874fba30f0SMarcel Holtmann { 884fba30f0SMarcel Holtmann return -EOPNOTSUPP; 894fba30f0SMarcel Holtmann } 904fba30f0SMarcel Holtmann 9118aeb444SFrederic Danis static inline int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw) 9250862ee5SMarcel Holtmann { 9350862ee5SMarcel Holtmann return -EOPNOTSUPP; 9450862ee5SMarcel Holtmann } 9550862ee5SMarcel Holtmann 961c8ba6d0SMarcel Holtmann static inline int btbcm_setup_patchram(struct hci_dev *hdev) 971c8ba6d0SMarcel Holtmann { 981c8ba6d0SMarcel Holtmann return 0; 991c8ba6d0SMarcel Holtmann } 1001c8ba6d0SMarcel Holtmann 1011c8ba6d0SMarcel Holtmann static inline int btbcm_setup_apple(struct hci_dev *hdev) 1021c8ba6d0SMarcel Holtmann { 1031c8ba6d0SMarcel Holtmann return 0; 1041c8ba6d0SMarcel Holtmann } 1051c8ba6d0SMarcel Holtmann 10675e167e6SFrederic Danis static inline int btbcm_initialize(struct hci_dev *hdev, char *fw_name, 10775e167e6SFrederic Danis size_t len) 10875e167e6SFrederic Danis { 10975e167e6SFrederic Danis return 0; 11075e167e6SFrederic Danis } 11175e167e6SFrederic Danis 11275e167e6SFrederic Danis static inline int btbcm_finalize(struct hci_dev *hdev) 11375e167e6SFrederic Danis { 11475e167e6SFrederic Danis return 0; 11575e167e6SFrederic Danis } 11675e167e6SFrederic Danis 1174fba30f0SMarcel Holtmann #endif 118