xref: /openbmc/linux/drivers/bluetooth/btbcm.h (revision ff875960)
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