mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
Bluetooth: hci_h5: Add ability to allocate memory for private data
[ Upstream commit7a6d793e9c
] In some cases uart-base drivers may need to use priv data. For example, to store information needed for devcoredump. Fixes:044014ce85
("Bluetooth: btrtl: Add Realtek devcoredump support") Signed-off-by: Andrey Skvortsov <andrej.skvortzov@gmail.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
4ff121be63
commit
49bb958fd8
@ -113,6 +113,7 @@ struct h5_vnd {
|
||||
int (*suspend)(struct h5 *h5);
|
||||
int (*resume)(struct h5 *h5);
|
||||
const struct acpi_gpio_mapping *acpi_gpio_map;
|
||||
int sizeof_priv;
|
||||
};
|
||||
|
||||
struct h5_device_data {
|
||||
@ -863,7 +864,8 @@ static int h5_serdev_probe(struct serdev_device *serdev)
|
||||
if (IS_ERR(h5->device_wake_gpio))
|
||||
return PTR_ERR(h5->device_wake_gpio);
|
||||
|
||||
return hci_uart_register_device(&h5->serdev_hu, &h5p);
|
||||
return hci_uart_register_device_priv(&h5->serdev_hu, &h5p,
|
||||
h5->vnd->sizeof_priv);
|
||||
}
|
||||
|
||||
static void h5_serdev_remove(struct serdev_device *serdev)
|
||||
|
@ -300,8 +300,9 @@ static const struct serdev_device_ops hci_serdev_client_ops = {
|
||||
.write_wakeup = hci_uart_write_wakeup,
|
||||
};
|
||||
|
||||
int hci_uart_register_device(struct hci_uart *hu,
|
||||
const struct hci_uart_proto *p)
|
||||
int hci_uart_register_device_priv(struct hci_uart *hu,
|
||||
const struct hci_uart_proto *p,
|
||||
int sizeof_priv)
|
||||
{
|
||||
int err;
|
||||
struct hci_dev *hdev;
|
||||
@ -325,7 +326,7 @@ int hci_uart_register_device(struct hci_uart *hu,
|
||||
set_bit(HCI_UART_PROTO_READY, &hu->flags);
|
||||
|
||||
/* Initialize and register HCI device */
|
||||
hdev = hci_alloc_dev();
|
||||
hdev = hci_alloc_dev_priv(sizeof_priv);
|
||||
if (!hdev) {
|
||||
BT_ERR("Can't allocate HCI device");
|
||||
err = -ENOMEM;
|
||||
@ -394,7 +395,7 @@ err_rwsem:
|
||||
percpu_free_rwsem(&hu->proto_lock);
|
||||
return err;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(hci_uart_register_device);
|
||||
EXPORT_SYMBOL_GPL(hci_uart_register_device_priv);
|
||||
|
||||
void hci_uart_unregister_device(struct hci_uart *hu)
|
||||
{
|
||||
|
@ -97,7 +97,17 @@ struct hci_uart {
|
||||
|
||||
int hci_uart_register_proto(const struct hci_uart_proto *p);
|
||||
int hci_uart_unregister_proto(const struct hci_uart_proto *p);
|
||||
int hci_uart_register_device(struct hci_uart *hu, const struct hci_uart_proto *p);
|
||||
|
||||
int hci_uart_register_device_priv(struct hci_uart *hu,
|
||||
const struct hci_uart_proto *p,
|
||||
int sizeof_priv);
|
||||
|
||||
static inline int hci_uart_register_device(struct hci_uart *hu,
|
||||
const struct hci_uart_proto *p)
|
||||
{
|
||||
return hci_uart_register_device_priv(hu, p, 0);
|
||||
}
|
||||
|
||||
void hci_uart_unregister_device(struct hci_uart *hu);
|
||||
|
||||
int hci_uart_tx_wakeup(struct hci_uart *hu);
|
||||
|
Loading…
Reference in New Issue
Block a user