18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci *  Bluetooth support for Broadcom devices
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci *  Copyright (C) 2015  Intel Corporation
78c2ecf20Sopenharmony_ci */
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#define BCM_UART_CLOCK_48MHZ	0x01
108c2ecf20Sopenharmony_ci#define BCM_UART_CLOCK_24MHZ	0x02
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistruct bcm_update_uart_baud_rate {
138c2ecf20Sopenharmony_ci	__le16 zero;
148c2ecf20Sopenharmony_ci	__le32 baud_rate;
158c2ecf20Sopenharmony_ci} __packed;
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistruct bcm_write_uart_clock_setting {
188c2ecf20Sopenharmony_ci	__u8 type;
198c2ecf20Sopenharmony_ci} __packed;
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_cistruct bcm_set_sleep_mode {
228c2ecf20Sopenharmony_ci	__u8 sleep_mode;
238c2ecf20Sopenharmony_ci	__u8 idle_host;
248c2ecf20Sopenharmony_ci	__u8 idle_dev;
258c2ecf20Sopenharmony_ci	__u8 bt_wake_active;
268c2ecf20Sopenharmony_ci	__u8 host_wake_active;
278c2ecf20Sopenharmony_ci	__u8 allow_host_sleep;
288c2ecf20Sopenharmony_ci	__u8 combine_modes;
298c2ecf20Sopenharmony_ci	__u8 tristate_control;
308c2ecf20Sopenharmony_ci	__u8 usb_auto_sleep;
318c2ecf20Sopenharmony_ci	__u8 usb_resume_timeout;
328c2ecf20Sopenharmony_ci	__u8 break_to_host;
338c2ecf20Sopenharmony_ci	__u8 pulsed_host_wake;
348c2ecf20Sopenharmony_ci} __packed;
358c2ecf20Sopenharmony_ci
368c2ecf20Sopenharmony_cistruct bcm_set_pcm_int_params {
378c2ecf20Sopenharmony_ci	__u8 routing;
388c2ecf20Sopenharmony_ci	__u8 rate;
398c2ecf20Sopenharmony_ci	__u8 frame_sync;
408c2ecf20Sopenharmony_ci	__u8 sync_mode;
418c2ecf20Sopenharmony_ci	__u8 clock_mode;
428c2ecf20Sopenharmony_ci} __packed;
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_cistruct bcm_set_pcm_format_params {
458c2ecf20Sopenharmony_ci	__u8 lsb_first;
468c2ecf20Sopenharmony_ci	__u8 fill_value;
478c2ecf20Sopenharmony_ci	__u8 fill_method;
488c2ecf20Sopenharmony_ci	__u8 fill_num;
498c2ecf20Sopenharmony_ci	__u8 right_justify;
508c2ecf20Sopenharmony_ci} __packed;
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_BT_BCM)
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ciint btbcm_check_bdaddr(struct hci_dev *hdev);
558c2ecf20Sopenharmony_ciint btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
568c2ecf20Sopenharmony_ciint btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw);
578c2ecf20Sopenharmony_ciint btbcm_read_pcm_int_params(struct hci_dev *hdev,
588c2ecf20Sopenharmony_ci			      struct bcm_set_pcm_int_params *params);
598c2ecf20Sopenharmony_ciint btbcm_write_pcm_int_params(struct hci_dev *hdev,
608c2ecf20Sopenharmony_ci			       const struct bcm_set_pcm_int_params *params);
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ciint btbcm_setup_patchram(struct hci_dev *hdev);
638c2ecf20Sopenharmony_ciint btbcm_setup_apple(struct hci_dev *hdev);
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ciint btbcm_initialize(struct hci_dev *hdev, bool *fw_load_done);
668c2ecf20Sopenharmony_ciint btbcm_finalize(struct hci_dev *hdev, bool *fw_load_done);
678c2ecf20Sopenharmony_ci
688c2ecf20Sopenharmony_ci#else
698c2ecf20Sopenharmony_ci
708c2ecf20Sopenharmony_cistatic inline int btbcm_check_bdaddr(struct hci_dev *hdev)
718c2ecf20Sopenharmony_ci{
728c2ecf20Sopenharmony_ci	return -EOPNOTSUPP;
738c2ecf20Sopenharmony_ci}
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_cistatic inline int btbcm_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
768c2ecf20Sopenharmony_ci{
778c2ecf20Sopenharmony_ci	return -EOPNOTSUPP;
788c2ecf20Sopenharmony_ci}
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_cistatic inline int btbcm_read_pcm_int_params(struct hci_dev *hdev,
818c2ecf20Sopenharmony_ci			      struct bcm_set_pcm_int_params *params)
828c2ecf20Sopenharmony_ci{
838c2ecf20Sopenharmony_ci	return -EOPNOTSUPP;
848c2ecf20Sopenharmony_ci}
858c2ecf20Sopenharmony_ci
868c2ecf20Sopenharmony_cistatic inline int btbcm_write_pcm_int_params(struct hci_dev *hdev,
878c2ecf20Sopenharmony_ci			       const struct bcm_set_pcm_int_params *params)
888c2ecf20Sopenharmony_ci{
898c2ecf20Sopenharmony_ci	return -EOPNOTSUPP;
908c2ecf20Sopenharmony_ci}
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_cistatic inline int btbcm_patchram(struct hci_dev *hdev, const struct firmware *fw)
938c2ecf20Sopenharmony_ci{
948c2ecf20Sopenharmony_ci	return -EOPNOTSUPP;
958c2ecf20Sopenharmony_ci}
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_cistatic inline int btbcm_setup_patchram(struct hci_dev *hdev)
988c2ecf20Sopenharmony_ci{
998c2ecf20Sopenharmony_ci	return 0;
1008c2ecf20Sopenharmony_ci}
1018c2ecf20Sopenharmony_ci
1028c2ecf20Sopenharmony_cistatic inline int btbcm_setup_apple(struct hci_dev *hdev)
1038c2ecf20Sopenharmony_ci{
1048c2ecf20Sopenharmony_ci	return 0;
1058c2ecf20Sopenharmony_ci}
1068c2ecf20Sopenharmony_ci
1078c2ecf20Sopenharmony_cistatic inline int btbcm_initialize(struct hci_dev *hdev, bool *fw_load_done)
1088c2ecf20Sopenharmony_ci{
1098c2ecf20Sopenharmony_ci	return 0;
1108c2ecf20Sopenharmony_ci}
1118c2ecf20Sopenharmony_ci
1128c2ecf20Sopenharmony_cistatic inline int btbcm_finalize(struct hci_dev *hdev, bool *fw_load_done)
1138c2ecf20Sopenharmony_ci{
1148c2ecf20Sopenharmony_ci	return 0;
1158c2ecf20Sopenharmony_ci}
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ci#endif
118