hci_bcm.c 18.7 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
/*
 *
 *  Bluetooth HCI UART driver for Broadcom devices
 *
 *  Copyright (C) 2015  Intel Corporation
 *
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#include <linux/kernel.h>
#include <linux/errno.h>
#include <linux/skbuff.h>
27
#include <linux/firmware.h>
28 29 30 31 32 33
#include <linux/module.h>
#include <linux/acpi.h>
#include <linux/platform_device.h>
#include <linux/clk.h>
#include <linux/gpio/consumer.h>
#include <linux/tty.h>
34
#include <linux/interrupt.h>
35
#include <linux/dmi.h>
36
#include <linux/pm_runtime.h>
37 38 39 40

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>

41
#include "btbcm.h"
42
#include "hci_uart.h"
43

44 45
#define BCM_AUTOSUSPEND_DELAY	5000 /* default autosleep delay */

46 47 48 49 50 51 52 53 54 55 56
struct bcm_device {
	struct list_head	list;

	struct platform_device	*pdev;

	const char		*name;
	struct gpio_desc	*device_wakeup;
	struct gpio_desc	*shutdown;

	struct clk		*clk;
	bool			clk_enabled;
57 58

	u32			init_speed;
59 60
	int			irq;
	u8			irq_polarity;
61

62
#ifdef CONFIG_PM
63 64 65
	struct hci_uart		*hu;
	bool			is_suspended; /* suspend/resume flag */
#endif
66 67
};

68
struct bcm_data {
69 70 71 72
	struct sk_buff		*rx_skb;
	struct sk_buff_head	txq;

	struct bcm_device	*dev;
73 74
};

75
/* List of BCM BT UART devices */
76
static DEFINE_MUTEX(bcm_device_lock);
77 78
static LIST_HEAD(bcm_device_list);

79 80 81 82 83 84 85 86 87 88 89
static int bcm_set_baudrate(struct hci_uart *hu, unsigned int speed)
{
	struct hci_dev *hdev = hu->hdev;
	struct sk_buff *skb;
	struct bcm_update_uart_baud_rate param;

	if (speed > 3000000) {
		struct bcm_write_uart_clock_setting clock;

		clock.type = BCM_UART_CLOCK_48MHZ;

90
		bt_dev_dbg(hdev, "Set Controller clock (%d)", clock.type);
91 92 93 94 95 96 97

		/* This Broadcom specific command changes the UART's controller
		 * clock for baud rate > 3000000.
		 */
		skb = __hci_cmd_sync(hdev, 0xfc45, 1, &clock, HCI_INIT_TIMEOUT);
		if (IS_ERR(skb)) {
			int err = PTR_ERR(skb);
98 99
			bt_dev_err(hdev, "BCM: failed to write clock (%d)",
				   err);
100 101 102 103 104 105
			return err;
		}

		kfree_skb(skb);
	}

106
	bt_dev_dbg(hdev, "Set Controller UART speed to %d bit/s", speed);
107 108 109 110 111 112 113 114 115 116 117

	param.zero = cpu_to_le16(0);
	param.baud_rate = cpu_to_le32(speed);

	/* This Broadcom specific command changes the UART's controller baud
	 * rate.
	 */
	skb = __hci_cmd_sync(hdev, 0xfc18, sizeof(param), &param,
			     HCI_INIT_TIMEOUT);
	if (IS_ERR(skb)) {
		int err = PTR_ERR(skb);
118 119
		bt_dev_err(hdev, "BCM: failed to write update baudrate (%d)",
			   err);
120 121 122 123 124 125 126 127
		return err;
	}

	kfree_skb(skb);

	return 0;
}

128
/* bcm_device_exists should be protected by bcm_device_lock */
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
static bool bcm_device_exists(struct bcm_device *device)
{
	struct list_head *p;

	list_for_each(p, &bcm_device_list) {
		struct bcm_device *dev = list_entry(p, struct bcm_device, list);

		if (device == dev)
			return true;
	}

	return false;
}

static int bcm_gpio_set_power(struct bcm_device *dev, bool powered)
{
	if (powered && !IS_ERR(dev->clk) && !dev->clk_enabled)
		clk_enable(dev->clk);

148 149
	gpiod_set_value(dev->shutdown, powered);
	gpiod_set_value(dev->device_wakeup, powered);
150 151 152 153 154 155 156 157 158

	if (!powered && !IS_ERR(dev->clk) && dev->clk_enabled)
		clk_disable(dev->clk);

	dev->clk_enabled = powered;

	return 0;
}

159
#ifdef CONFIG_PM
160 161 162 163 164 165
static irqreturn_t bcm_host_wake(int irq, void *data)
{
	struct bcm_device *bdev = data;

	bt_dev_dbg(bdev, "Host wake IRQ");

166 167 168 169
	pm_runtime_get(&bdev->pdev->dev);
	pm_runtime_mark_last_busy(&bdev->pdev->dev);
	pm_runtime_put_autosuspend(&bdev->pdev->dev);

170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
	return IRQ_HANDLED;
}

static int bcm_request_irq(struct bcm_data *bcm)
{
	struct bcm_device *bdev = bcm->dev;
	int err = 0;

	/* If this is not a platform device, do not enable PM functionalities */
	mutex_lock(&bcm_device_lock);
	if (!bcm_device_exists(bdev)) {
		err = -ENODEV;
		goto unlock;
	}

	if (bdev->irq > 0) {
		err = devm_request_irq(&bdev->pdev->dev, bdev->irq,
				       bcm_host_wake, IRQF_TRIGGER_RISING,
				       "host_wake", bdev);
		if (err)
			goto unlock;

		device_init_wakeup(&bdev->pdev->dev, true);
193 194 195 196 197 198

		pm_runtime_set_autosuspend_delay(&bdev->pdev->dev,
						 BCM_AUTOSUSPEND_DELAY);
		pm_runtime_use_autosuspend(&bdev->pdev->dev);
		pm_runtime_set_active(&bdev->pdev->dev);
		pm_runtime_enable(&bdev->pdev->dev);
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
	}

unlock:
	mutex_unlock(&bcm_device_lock);

	return err;
}

static const struct bcm_set_sleep_mode default_sleep_params = {
	.sleep_mode = 1,	/* 0=Disabled, 1=UART, 2=Reserved, 3=USB */
	.idle_host = 2,		/* idle threshold HOST, in 300ms */
	.idle_dev = 2,		/* idle threshold device, in 300ms */
	.bt_wake_active = 1,	/* BT_WAKE active mode: 1 = high, 0 = low */
	.host_wake_active = 0,	/* HOST_WAKE active mode: 1 = high, 0 = low */
	.allow_host_sleep = 1,	/* Allow host sleep in SCO flag */
214
	.combine_modes = 1,	/* Combine sleep and LPM flag */
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
	.tristate_control = 0,	/* Allow tri-state control of UART tx flag */
	/* Irrelevant USB flags */
	.usb_auto_sleep = 0,
	.usb_resume_timeout = 0,
	.pulsed_host_wake = 0,
	.break_to_host = 0
};

static int bcm_setup_sleep(struct hci_uart *hu)
{
	struct bcm_data *bcm = hu->priv;
	struct sk_buff *skb;
	struct bcm_set_sleep_mode sleep_params = default_sleep_params;

	sleep_params.host_wake_active = !bcm->dev->irq_polarity;

	skb = __hci_cmd_sync(hu->hdev, 0xfc27, sizeof(sleep_params),
			     &sleep_params, HCI_INIT_TIMEOUT);
	if (IS_ERR(skb)) {
		int err = PTR_ERR(skb);
		bt_dev_err(hu->hdev, "Sleep VSC failed (%d)", err);
		return err;
	}
	kfree_skb(skb);

	bt_dev_dbg(hu->hdev, "Set Sleep Parameters VSC succeeded");

	return 0;
}
#else
static inline int bcm_request_irq(struct bcm_data *bcm) { return 0; }
static inline int bcm_setup_sleep(struct hci_uart *hu) { return 0; }
#endif

249 250 251
static int bcm_open(struct hci_uart *hu)
{
	struct bcm_data *bcm;
252
	struct list_head *p;
253

254
	bt_dev_dbg(hu->hdev, "hu %p", hu);
255 256 257 258 259 260 261 262

	bcm = kzalloc(sizeof(*bcm), GFP_KERNEL);
	if (!bcm)
		return -ENOMEM;

	skb_queue_head_init(&bcm->txq);

	hu->priv = bcm;
263

264
	mutex_lock(&bcm_device_lock);
265 266 267 268 269 270 271 272 273
	list_for_each(p, &bcm_device_list) {
		struct bcm_device *dev = list_entry(p, struct bcm_device, list);

		/* Retrieve saved bcm_device based on parent of the
		 * platform device (saved during device probe) and
		 * parent of tty device used by hci_uart
		 */
		if (hu->tty->dev->parent == dev->pdev->dev.parent) {
			bcm->dev = dev;
274
			hu->init_speed = dev->init_speed;
275
#ifdef CONFIG_PM
276 277
			dev->hu = hu;
#endif
278
			bcm_gpio_set_power(bcm->dev, true);
279 280 281 282
			break;
		}
	}

283
	mutex_unlock(&bcm_device_lock);
284

285 286 287 288 289 290
	return 0;
}

static int bcm_close(struct hci_uart *hu)
{
	struct bcm_data *bcm = hu->priv;
291
	struct bcm_device *bdev = bcm->dev;
292

293
	bt_dev_dbg(hu->hdev, "hu %p", hu);
294

295
	/* Protect bcm->dev against removal of the device or driver */
296
	mutex_lock(&bcm_device_lock);
297 298
	if (bcm_device_exists(bdev)) {
		bcm_gpio_set_power(bdev, false);
299
#ifdef CONFIG_PM
300 301 302
		pm_runtime_disable(&bdev->pdev->dev);
		pm_runtime_set_suspended(&bdev->pdev->dev);

303 304 305 306 307 308
		if (device_can_wakeup(&bdev->pdev->dev)) {
			devm_free_irq(&bdev->pdev->dev, bdev->irq, bdev);
			device_init_wakeup(&bdev->pdev->dev, false);
		}

		bdev->hu = NULL;
309 310
#endif
	}
311
	mutex_unlock(&bcm_device_lock);
312

313 314 315 316 317 318 319 320 321 322 323 324
	skb_queue_purge(&bcm->txq);
	kfree_skb(bcm->rx_skb);
	kfree(bcm);

	hu->priv = NULL;
	return 0;
}

static int bcm_flush(struct hci_uart *hu)
{
	struct bcm_data *bcm = hu->priv;

325
	bt_dev_dbg(hu->hdev, "hu %p", hu);
326 327 328 329 330 331 332 333

	skb_queue_purge(&bcm->txq);

	return 0;
}

static int bcm_setup(struct hci_uart *hu)
{
334
	struct bcm_data *bcm = hu->priv;
335 336
	char fw_name[64];
	const struct firmware *fw;
337
	unsigned int speed;
338 339
	int err;

340
	bt_dev_dbg(hu->hdev, "hu %p", hu);
341 342 343

	hu->hdev->set_bdaddr = btbcm_set_bdaddr;

344 345 346 347 348 349
	err = btbcm_initialize(hu->hdev, fw_name, sizeof(fw_name));
	if (err)
		return err;

	err = request_firmware(&fw, fw_name, &hu->hdev->dev);
	if (err < 0) {
350
		bt_dev_info(hu->hdev, "BCM: Patch %s not found", fw_name);
351 352 353 354 355
		return 0;
	}

	err = btbcm_patchram(hu->hdev, fw);
	if (err) {
356
		bt_dev_info(hu->hdev, "BCM: Patch failed (%d)", err);
357 358 359
		goto finalize;
	}

360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380
	/* Init speed if any */
	if (hu->init_speed)
		speed = hu->init_speed;
	else if (hu->proto->init_speed)
		speed = hu->proto->init_speed;
	else
		speed = 0;

	if (speed)
		hci_uart_set_baudrate(hu, speed);

	/* Operational speed if any */
	if (hu->oper_speed)
		speed = hu->oper_speed;
	else if (hu->proto->oper_speed)
		speed = hu->proto->oper_speed;
	else
		speed = 0;

	if (speed) {
		err = bcm_set_baudrate(hu, speed);
381
		if (!err)
382
			hci_uart_set_baudrate(hu, speed);
383 384
	}

385 386 387 388
finalize:
	release_firmware(fw);

	err = btbcm_finalize(hu->hdev);
389 390 391 392 393 394
	if (err)
		return err;

	err = bcm_request_irq(bcm);
	if (!err)
		err = bcm_setup_sleep(hu);
395 396

	return err;
397 398
}

399 400 401 402 403 404
static const struct h4_recv_pkt bcm_recv_pkts[] = {
	{ H4_RECV_ACL,   .recv = hci_recv_frame },
	{ H4_RECV_SCO,   .recv = hci_recv_frame },
	{ H4_RECV_EVENT, .recv = hci_recv_frame },
};

405 406 407 408 409 410 411
static int bcm_recv(struct hci_uart *hu, const void *data, int count)
{
	struct bcm_data *bcm = hu->priv;

	if (!test_bit(HCI_UART_REGISTERED, &hu->flags))
		return -EUNATCH;

412 413
	bcm->rx_skb = h4_recv_buf(hu->hdev, bcm->rx_skb, data, count,
				  bcm_recv_pkts, ARRAY_SIZE(bcm_recv_pkts));
414 415
	if (IS_ERR(bcm->rx_skb)) {
		int err = PTR_ERR(bcm->rx_skb);
416
		bt_dev_err(hu->hdev, "Frame reassembly failed (%d)", err);
417
		bcm->rx_skb = NULL;
418
		return err;
419 420 421 422 423 424 425 426 427
	} else if (!bcm->rx_skb) {
		/* Delay auto-suspend when receiving completed packet */
		mutex_lock(&bcm_device_lock);
		if (bcm->dev && bcm_device_exists(bcm->dev)) {
			pm_runtime_get(&bcm->dev->pdev->dev);
			pm_runtime_mark_last_busy(&bcm->dev->pdev->dev);
			pm_runtime_put_autosuspend(&bcm->dev->pdev->dev);
		}
		mutex_unlock(&bcm_device_lock);
428 429 430 431 432 433 434 435 436
	}

	return count;
}

static int bcm_enqueue(struct hci_uart *hu, struct sk_buff *skb)
{
	struct bcm_data *bcm = hu->priv;

437
	bt_dev_dbg(hu->hdev, "hu %p skb %p", hu, skb);
438 439 440 441 442 443 444 445 446 447 448

	/* Prepend skb with frame type */
	memcpy(skb_push(skb, 1), &bt_cb(skb)->pkt_type, 1);
	skb_queue_tail(&bcm->txq, skb);

	return 0;
}

static struct sk_buff *bcm_dequeue(struct hci_uart *hu)
{
	struct bcm_data *bcm = hu->priv;
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465
	struct sk_buff *skb = NULL;
	struct bcm_device *bdev = NULL;

	mutex_lock(&bcm_device_lock);

	if (bcm_device_exists(bcm->dev)) {
		bdev = bcm->dev;
		pm_runtime_get_sync(&bdev->pdev->dev);
		/* Shall be resumed here */
	}

	skb = skb_dequeue(&bcm->txq);

	if (bdev) {
		pm_runtime_mark_last_busy(&bdev->pdev->dev);
		pm_runtime_put_autosuspend(&bdev->pdev->dev);
	}
466

467 468 469
	mutex_unlock(&bcm_device_lock);

	return skb;
470 471
}

472 473
#ifdef CONFIG_PM
static int bcm_suspend_device(struct device *dev)
474 475 476
{
	struct bcm_device *bdev = platform_get_drvdata(to_platform_device(dev));

477
	bt_dev_dbg(bdev, "");
478

479
	if (!bdev->is_suspended && bdev->hu) {
480 481
		hci_uart_set_flow_control(bdev->hu, true);

482
		/* Once this returns, driver suspends BT via GPIO */
483 484 485 486 487 488
		bdev->is_suspended = true;
	}

	/* Suspend the device */
	if (bdev->device_wakeup) {
		gpiod_set_value(bdev->device_wakeup, false);
489
		bt_dev_dbg(bdev, "suspend, delaying 15 ms");
490 491 492
		mdelay(15);
	}

493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536
	return 0;
}

static int bcm_resume_device(struct device *dev)
{
	struct bcm_device *bdev = platform_get_drvdata(to_platform_device(dev));

	bt_dev_dbg(bdev, "");

	if (bdev->device_wakeup) {
		gpiod_set_value(bdev->device_wakeup, true);
		bt_dev_dbg(bdev, "resume, delaying 15 ms");
		mdelay(15);
	}

	/* When this executes, the device has woken up already */
	if (bdev->is_suspended && bdev->hu) {
		bdev->is_suspended = false;

		hci_uart_set_flow_control(bdev->hu, false);
	}

	return 0;
}
#endif

#ifdef CONFIG_PM_SLEEP
/* Platform suspend callback */
static int bcm_suspend(struct device *dev)
{
	struct bcm_device *bdev = platform_get_drvdata(to_platform_device(dev));
	int error;

	bt_dev_dbg(bdev, "suspend: is_suspended %d", bdev->is_suspended);

	/* bcm_suspend can be called at any time as long as platform device is
	 * bound, so it should use bcm_device_lock to protect access to hci_uart
	 * and device_wake-up GPIO.
	 */
	mutex_lock(&bcm_device_lock);

	if (!bdev->hu)
		goto unlock;

537 538
	if (pm_runtime_active(dev))
		bcm_suspend_device(dev);
539

540 541 542 543 544 545
	if (device_may_wakeup(&bdev->pdev->dev)) {
		error = enable_irq_wake(bdev->irq);
		if (!error)
			bt_dev_dbg(bdev, "BCM irq: enabled");
	}

546
unlock:
547
	mutex_unlock(&bcm_device_lock);
548

549 550 551 552 553 554 555 556
	return 0;
}

/* Platform resume callback */
static int bcm_resume(struct device *dev)
{
	struct bcm_device *bdev = platform_get_drvdata(to_platform_device(dev));

557
	bt_dev_dbg(bdev, "resume: is_suspended %d", bdev->is_suspended);
558

559 560 561 562
	/* bcm_resume can be called at any time as long as platform device is
	 * bound, so it should use bcm_device_lock to protect access to hci_uart
	 * and device_wake-up GPIO.
	 */
563
	mutex_lock(&bcm_device_lock);
564 565 566 567

	if (!bdev->hu)
		goto unlock;

568 569 570 571 572
	if (device_may_wakeup(&bdev->pdev->dev)) {
		disable_irq_wake(bdev->irq);
		bt_dev_dbg(bdev, "BCM irq: disabled");
	}

573
	bcm_resume_device(dev);
574

575
unlock:
576
	mutex_unlock(&bcm_device_lock);
577

578 579 580 581
	pm_runtime_disable(dev);
	pm_runtime_set_active(dev);
	pm_runtime_enable(dev);

582 583 584 585
	return 0;
}
#endif

586 587
static const struct acpi_gpio_params device_wakeup_gpios = { 0, 0, false };
static const struct acpi_gpio_params shutdown_gpios = { 1, 0, false };
588
static const struct acpi_gpio_params host_wakeup_gpios = { 2, 0, false };
589 590 591 592

static const struct acpi_gpio_mapping acpi_bcm_default_gpios[] = {
	{ "device-wakeup-gpios", &device_wakeup_gpios, 1 },
	{ "shutdown-gpios", &shutdown_gpios, 1 },
593
	{ "host-wakeup-gpios", &host_wakeup_gpios, 1 },
594 595 596
	{ },
};

597
#ifdef CONFIG_ACPI
598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613
static u8 acpi_active_low = ACPI_ACTIVE_LOW;

/* IRQ polarity of some chipsets are not defined correctly in ACPI table. */
static const struct dmi_system_id bcm_wrong_irq_dmi_table[] = {
	{
		.ident = "Asus T100TA",
		.matches = {
			DMI_EXACT_MATCH(DMI_SYS_VENDOR,
					"ASUSTeK COMPUTER INC."),
			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T100TA"),
		},
		.driver_data = &acpi_active_low,
	},
	{ }
};

614 615 616
static int bcm_resource(struct acpi_resource *ares, void *data)
{
	struct bcm_device *dev = data;
617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633
	struct acpi_resource_extended_irq *irq;
	struct acpi_resource_gpio *gpio;
	struct acpi_resource_uart_serialbus *sb;

	switch (ares->type) {
	case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
		irq = &ares->data.extended_irq;
		dev->irq_polarity = irq->polarity;
		break;

	case ACPI_RESOURCE_TYPE_GPIO:
		gpio = &ares->data.gpio;
		if (gpio->connection_type == ACPI_RESOURCE_GPIO_TYPE_INT)
			dev->irq_polarity = gpio->polarity;
		break;

	case ACPI_RESOURCE_TYPE_SERIAL_BUS:
634 635 636
		sb = &ares->data.uart_serial_bus;
		if (sb->type == ACPI_RESOURCE_SERIAL_TYPE_UART)
			dev->init_speed = sb->default_baud_rate;
637 638 639 640
		break;

	default:
		break;
641 642 643 644 645 646
	}

	/* Always tell the ACPI core to skip this resource */
	return 1;
}

647 648 649
static int bcm_acpi_probe(struct bcm_device *dev)
{
	struct platform_device *pdev = dev->pdev;
650 651
	struct acpi_device *adev;
	LIST_HEAD(resources);
652
	const struct dmi_system_id *dmi_id;
653 654 655 656 657 658 659 660 661 662 663
	int ret;

	/* Retrieve GPIO data */
	dev->name = dev_name(&pdev->dev);
	ret = acpi_dev_add_driver_gpios(ACPI_COMPANION(&pdev->dev),
					acpi_bcm_default_gpios);
	if (ret)
		return ret;

	dev->clk = devm_clk_get(&pdev->dev, NULL);

664 665 666 667 668
	dev->device_wakeup = devm_gpiod_get_optional(&pdev->dev,
						     "device-wakeup",
						     GPIOD_OUT_LOW);
	if (IS_ERR(dev->device_wakeup))
		return PTR_ERR(dev->device_wakeup);
669

670 671 672 673
	dev->shutdown = devm_gpiod_get_optional(&pdev->dev, "shutdown",
						GPIOD_OUT_LOW);
	if (IS_ERR(dev->shutdown))
		return PTR_ERR(dev->shutdown);
674

675 676 677 678 679 680 681 682 683 684 685 686 687 688 689
	/* IRQ can be declared in ACPI table as Interrupt or GpioInt */
	dev->irq = platform_get_irq(pdev, 0);
	if (dev->irq <= 0) {
		struct gpio_desc *gpio;

		gpio = devm_gpiod_get_optional(&pdev->dev, "host-wakeup",
					       GPIOD_IN);
		if (IS_ERR(gpio))
			return PTR_ERR(gpio);

		dev->irq = gpiod_to_irq(gpio);
	}

	dev_info(&pdev->dev, "BCM irq: %d\n", dev->irq);

690 691 692 693 694 695 696 697
	/* Make sure at-least one of the GPIO is defined and that
	 * a name is specified for this instance
	 */
	if ((!dev->device_wakeup && !dev->shutdown) || !dev->name) {
		dev_err(&pdev->dev, "invalid platform data\n");
		return -EINVAL;
	}

698 699 700 701 702
	/* Retrieve UART ACPI info */
	adev = ACPI_COMPANION(&dev->pdev->dev);
	if (!adev)
		return 0;

703 704 705
	ret = acpi_dev_get_resources(adev, &resources, bcm_resource, dev);
	if (ret < 0)
		return ret;
706
	acpi_dev_free_resource_list(&resources);
707

708 709 710 711 712 713 714
	dmi_id = dmi_first_match(bcm_wrong_irq_dmi_table);
	if (dmi_id) {
		bt_dev_warn(dev, "%s: Overwriting IRQ polarity to active low",
			    dmi_id->ident);
		dev->irq_polarity = *(u8 *)dmi_id->driver_data;
	}

715 716
	return 0;
}
717 718 719 720 721 722
#else
static int bcm_acpi_probe(struct bcm_device *dev)
{
	return -EINVAL;
}
#endif /* CONFIG_ACPI */
723 724 725 726 727 728 729 730 731 732 733 734

static int bcm_probe(struct platform_device *pdev)
{
	struct bcm_device *dev;
	int ret;

	dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
	if (!dev)
		return -ENOMEM;

	dev->pdev = pdev;

735 736 737
	ret = bcm_acpi_probe(dev);
	if (ret)
		return ret;
738 739 740 741 742 743

	platform_set_drvdata(pdev, dev);

	dev_info(&pdev->dev, "%s device registered.\n", dev->name);

	/* Place this instance on the device list */
744
	mutex_lock(&bcm_device_lock);
745
	list_add_tail(&dev->list, &bcm_device_list);
746
	mutex_unlock(&bcm_device_lock);
747 748 749 750 751 752 753 754 755 756

	bcm_gpio_set_power(dev, false);

	return 0;
}

static int bcm_remove(struct platform_device *pdev)
{
	struct bcm_device *dev = platform_get_drvdata(pdev);

757
	mutex_lock(&bcm_device_lock);
758
	list_del(&dev->list);
759
	mutex_unlock(&bcm_device_lock);
760 761 762 763 764 765 766 767

	acpi_dev_remove_driver_gpios(ACPI_COMPANION(&pdev->dev));

	dev_info(&pdev->dev, "%s device unregistered.\n", dev->name);

	return 0;
}

768 769 770
static const struct hci_uart_proto bcm_proto = {
	.id		= HCI_UART_BCM,
	.name		= "BCM",
771 772
	.init_speed	= 115200,
	.oper_speed	= 4000000,
773 774 775 776
	.open		= bcm_open,
	.close		= bcm_close,
	.flush		= bcm_flush,
	.setup		= bcm_setup,
777
	.set_baudrate	= bcm_set_baudrate,
778 779 780 781 782
	.recv		= bcm_recv,
	.enqueue	= bcm_enqueue,
	.dequeue	= bcm_dequeue,
};

783 784 785 786 787 788 789 790 791
#ifdef CONFIG_ACPI
static const struct acpi_device_id bcm_acpi_match[] = {
	{ "BCM2E39", 0 },
	{ "BCM2E67", 0 },
	{ },
};
MODULE_DEVICE_TABLE(acpi, bcm_acpi_match);
#endif

792
/* Platform suspend and resume callbacks */
793 794 795 796
static const struct dev_pm_ops bcm_pm_ops = {
	SET_SYSTEM_SLEEP_PM_OPS(bcm_suspend, bcm_resume)
	SET_RUNTIME_PM_OPS(bcm_suspend_device, bcm_resume_device, NULL)
};
797

798 799 800 801 802 803
static struct platform_driver bcm_driver = {
	.probe = bcm_probe,
	.remove = bcm_remove,
	.driver = {
		.name = "hci_bcm",
		.acpi_match_table = ACPI_PTR(bcm_acpi_match),
804
		.pm = &bcm_pm_ops,
805 806 807
	},
};

808 809
int __init bcm_init(void)
{
810 811
	platform_driver_register(&bcm_driver);

812 813 814 815 816
	return hci_uart_register_proto(&bcm_proto);
}

int __exit bcm_deinit(void)
{
817 818
	platform_driver_unregister(&bcm_driver);

819 820
	return hci_uart_unregister_proto(&bcm_proto);
}