1 /* 2 * 3 * Bluetooth support for Broadcom devices 4 * 5 * Copyright (C) 2015 Intel Corporation 6 * 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 */ 23 24 #define BCM_UART_CLOCK_48MHZ 0x01 25 #define BCM_UART_CLOCK_24MHZ 0x02 26 27 struct bcm_update_uart_baud_rate { 28 __le16 zero; 29 __le32 baud_rate; 30 } __packed; 31 32 struct bcm_write_uart_clock_setting { 33 __u8 type; 34 } __packed; 35 36 struct bcm_set_sleep_mode { 37 __u8 sleep_mode; 38 __u8 idle_host; 39 __u8 idle_dev; 40 __u8 bt_wake_active; 41 __u8 host_wake_active; 42 __u8 allow_host_sleep; 43 __u8 combine_modes; 44 __u8 tristate_control; 45 __u8 usb_auto_sleep; 46 __u8 usb_resume_timeout; 47 __u8 break_to_host; 48 __u8 pulsed_host_wake; 49 } __packed; 50 51 struct bcm_set_pcm_int_params { 52 __u8 routing; 53 __u8 rate; 54 __u8 frame_sync; 55 __u8 sync_mode; 56 __u8 clock_mode; 57 } __packed; 58 59 struct bcm_set_pcm_format_params { 60 __u8 lsb_first; 61 __u8 fill_value; 62 __u8 fill_method; 63 __u8 fill_num; 64 __u8 right_justify; 65 } __packed; 66 67 #if IS_ENABLED(CONFIG_BT_BCM) 68 69 int btbcm_check_bdaddr(struct hci_dev *hdev); 70 int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); 71 int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw); 72 73 int btbcm_setup_patchram(struct hci_dev *hdev); 74 int btbcm_setup_apple(struct hci_dev *hdev); 75 76 int btbcm_initialize(struct hci_dev *hdev, char *fw_name, size_t len, 77 bool reinit); 78 int btbcm_finalize(struct hci_dev *hdev); 79 80 #else 81 82 static inline int btbcm_check_bdaddr(struct hci_dev *hdev) 83 { 84 return -EOPNOTSUPP; 85 } 86 87 static inline int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) 88 { 89 return -EOPNOTSUPP; 90 } 91 92 static inline int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw) 93 { 94 return -EOPNOTSUPP; 95 } 96 97 static inline int btbcm_setup_patchram(struct hci_dev *hdev) 98 { 99 return 0; 100 } 101 102 static inline int btbcm_setup_apple(struct hci_dev *hdev) 103 { 104 return 0; 105 } 106 107 static inline int btbcm_initialize(struct hci_dev *hdev, char *fw_name, 108 size_t len, bool reinit) 109 { 110 return 0; 111 } 112 113 static inline int btbcm_finalize(struct hci_dev *hdev) 114 { 115 return 0; 116 } 117 118 #endif 119